• User Attivo

    Problema script php e upload immagini

    Ciao a tutti sono tronato ho nuovamente un problema questa volta con il file upload.php, che fà correttamente l'upload del file crea la cartella desiderata ma l'immagine non viene inserita nella cartella creata:

    Codice db.php
    [php]<?php
    // Connessione al DB
    $host =
    $user =
    $pass =
    $data =
    $cn = @mysql_connect($host,$user,$pass) or die (mysql_error());
    $sl = @mysql_select_db($data) or die (mysql_error());

    // Cartella fisica in cui andremo ad inserire le immagini.
    // Va creata nella stessa posizione dove si trovano i file .php

    $path_img = mkdir("upload",0700); // creo la cartella upload e regolo i permessi
    ?>[/php]

    Ora il codice di upload.php

    [php]
    <?php
    if(isset($_POST['Submit'])){
    // faccio un po' di inclusioni...
    @include 'funzioni/miniature.php';

    @require 'funzioni/db.php';

    // Creo una array con i formati accettati
    $tipi_consentiti = array("image/gif","image/jpeg","image/png");

    // verifico che il formato del file sia tra quelli accettati
    if (@in_array($_FILES['imagefile']['type'], $tipi_consentiti)){
    // copio il file nella cartella delle immagini
    @copy ($_FILES['imagefile']['tmp_name'], $path_img . $_FILES['imagefile']['name']);

    // recupero i dati dal form
    $titolo = @addslashes($_POST['titolo']);
    $descrizione = @addslashes($_POST['descrizione']);
    $nome = @addslashes($_FILES['imagefile']['name']);
    $path = $path_img . stripslashes($nome);
    $tipo = @addslashes($_FILES['imagefile']['type']);
    
    // creo la miniatura
    @makeThumb($path_img,$path,$nome,$tipo);
    
    // aggiorno il database
    $query = "INSERT INTO images (Titolo,Descrizione,Nome,Tipo) VALUES('$titolo','$descrizione','$nome','$tipo')";
    $res = @mysql_query($query) or die (mysql_error());
    @mysql_close($cn);
    
    // Stampo a video un po' di informazioni
    echo "Nome: ".$_FILES['imagefile']['name']."<br />"; 
    echo "Dimensione: ".$_FILES['imagefile']."<br />"; 
    echo "Tipo: ".$_FILES['imagefile']['type']."<br />"; 
    echo "Copia eseguita con successo."; 
    

    }else{
    // stampo un messaggio di errore nel caso in cui il file sia di un formato non consentito
    echo "Impossibile eseguire l'upload.";
    }
    }
    ?>
    [/php]


  • ModSenior

    Ciao gabriele1986,

    intanto nella funzione mkdir dovresti impostare i permessi della cartella a 777.
    Dopo verifica che i permessi siano realmente impostati a 777, in quanto a seconda della configurazione del server impostare i permessi delle cartelle con questa procedura potrebbe non essere possibile.
    In seguito utilizzi la variabile che non contiene il percorso di upload bensi il valore restituito dalla funzione mkdir, quindi tenti di copiare nella cartella sbagliata.

    Ti sconsiglio l'utilizzo delle @ che ti nascondono gli errori e ovviamente non riesci a capire dove sono, ultimamente usarle sta diventando una moda, niente di più sbagliato...


  • User Attivo

    Soto tornato ho provato sostituendo

    
    $path_img = mkdir("upload",0700);
    
    $path_img = "c://programmi/EASYPHP35/sito_personale/portfolio/upload"
    
    
    

    Ma nemmeno così le immagini sono visibili


  • ModSenior

    Devi fare:
    [php]
    $path_img = mkdir("upload",0777);

    [/php]


  • User Attivo

    Ho riprovato come hai detto tu ma non mi visualzza le immagini l'upload avviene correttamente ma anzichè caricare l'immagine nella cartella creata viene caricata nella cartella principale del sito web.


  • ModSenior

    Devi modificare il percorso di destinazione della funzione copy.


  • User Attivo

    Grazie ora funziona in parte ma non crea le miniature.


  • ModSenior

    Stai passando il percorso corretto dell'immagine alla funzione makeThumb?


  • User Attivo

    Ecco il codice della funzione per le migniature

    
    <?php
    function makeThumb($path_img,$pic,$n,$t){
      @list($width, $height, $type, $attr) = @getimagesize($pic);
      $max_w = 100;
      $max_h = 200;
      $ratio = @min($max_w/$width,$max_h/$height);
    
      // Verifico che l'immagine originale sia più grande delle dimensioni massime 100*100pxl
      if ($ratio < 1){
        // Individuo le nuove dimensioni da assegnare all'immagine
        $w = @floor($ratio*$width);
        $h = @floor($ratio*$height);
    
        // creo una nuova immagine con le dimensioni appena calcolate
        $thumb = @imagecreatetruecolor($w,$h);
        if ($t == 'image/jpeg'){$temp = @imagecreatefromjpeg($pic);}
        elseif ($t == 'image/gif'){$temp = @imagecreatefromgif($pic);}
        elseif ($t == 'image/png'){$temp = @imagecreatefrompng($pic);}
    
        // ridimensiono l'originale e salvo nella cartella di destinazione
        @imagecopyresized($thumb,$temp,0,0,0,0,$w,$h,$width,$height);
        if ($t == 'image/jpeg'){@imagejpeg($thumb,"$path_img/tb_".$n, 75);}
        elseif ($t == 'image/gif'){@imagegif($thumb,"$path_img/tb_".$n, 75);}
        elseif ($t == 'image/png'){@imagepng($thumb,"$path_img/tb_".$n, 75);}
      }
    }
    ?>
    
    
    

  • ModSenior

    Nella variabile $pic hai controllato che ti arrivi il percorso corretto? Che con il file che richiama la funzione, secondo me, hai fatto un pò di confusione.


  • User Attivo

    Si arriva il percorso corretto lo script funzionava poi da un momento all'altro a smesso di visualizarmi le miniature.


  • ModSenior

    Magari togli tutte le @ che nascondono gli errori, cosi vediamo che errori genera e facciamo prima. 🙂


  • User Attivo

    Tolte tutte le @ non genere nessun errore ma non mostra le miniature che non sia colpa di easyphp?