Visualizzazione dei risultati da 1 a 7 su 7

Discussione: UPLOAD in PhP

  1. #1

    UPLOAD in PhP

    Carissimi amici, volevo chiedervi se avete presente perchè non mi funziona questo script per effettuare l'upload di un file.

    Codice PHP:
    function inserisciFile($file_,$id_prog,$id_cat,$descr) {          
    if(empty(
    $file_)) return false;     
    if(empty(
    $file_["name"]) ) return false;     
    if(empty(
    $file_["size"]) || $file_["tmp_name"]=="none")  return false;
    if(!isset(
    $_SERVER)) {
        
    $_SERVER $HTTP_SERVER_VARS;
    }

    $new_name "";
    $file_name "";

    $upload_dir $_SERVER["DOCUMENT_ROOT"] . "/upload/";

    if (
    $new_name==""){
        
    $new_name=$file_["name"];
    }else{
        
    $file_name=$new_name;
    }

    if(
    trim($file_["name"]) == "") {
        die(
    "Devi indicare il file che desideri caricare");

    echo 
    $upload_dir $new_name;

    if(@
    is_uploaded_file($file_["tmp_name"])) {
        @
    move_uploaded_file($file["tmp_name"], $upload_dir $new_name);
        
    chmod($new_name0755)
        
        or die(
    "Non riesco a spostare il file, controlla che siano stati assegnati i permessi 777 alla cartella di destinazione dei file uploadati");
    } else {
    die(
    "C'è stato un problema con l'upload, prova di nuovo o contatta il webmaster " $file_["name"]);
    }

    echo 
    "L'upload del file " $file_["name"] . " è stato eseguito con successo";

    $file_name $file_['name'];
        
    $file_tipo $file_['type'];
        
    $file_size $file_['size'];
        
    $file_tmp  addslashes$file_['tmp_name']);
        
    $file_path "$upload_dir/$file_name";

        
    $fp      fopen($file_tmp'r');
        
    $content fread($fpfilesize($file_tmp));
        
    $content addslashes($content);
        
    fclose($fp);

        if(!
    get_magic_quotes_gpc()) $file_name addslashes($file_name);


            
    $rismysql_query("INSERT 
                           INTO `file` (
                                        `id`,
                                        `name`, 

    etc etc.... 

    Quando seleziono determinati file mi funziona, andando a storare le informazioni del file sul DB, ma senza spostare fisicamente il file nella cartella di destinazione.

    Altre volte invece non mi memorizza neanche le info nel DB, stampando a video le seguenti righe:

    Warning: chmod(): No such file or directory in c:\programmi\easyphp1-8\www\progetto.it\htdocs\include\functions.inc.php on line 715
    Non riesco a spostare il file, controlla che siano stati assegnati i permessi 777 alla cartella di destinazione dei file uploadati.

    Sareste così gentili da aiutarmi?
    Grazie in anticipo
    moscacieca

  2. #2
    UP!
    moscacieca

  3. #3
    La prima cosa che mi viene da dirti, così guardando al volo questo script, è che non potrà mai funzionarti.
    function inserisciFile($file_,$id_prog,$id_cat,$descr) {
    if(empty($file_)) return false;
    if(empty($file_["name"]) ) return false;
    if(empty($file_["size"]) || $file_["tmp_name"]=="none") return false;
    if(!isset($_SERVER)) {
    $_SERVER = $HTTP_SERVER_VARS;
    }
    $file_ non esiste!
    Devi scrivere $_FILES['xxx']: tutto maiuscolo e con l'underscore tra il segno del dollaro e la scritta FILES.

    Il controllo per capire se il file sia stato caricato o meno, poi, è più accurato farlo su $_FILES['xxx']['error'], piuttosto che sul valore vuoto del peso in KB del file stesso.

    Altra osservazione.
    chmod($new_name, 0755)
    Se ragioni un attimo capisci da solo dove sta l'errore.
    Qualche riga prima dici a PHP di spostare il file in una cartella.
    Se poi gli imponi di cambiare i permessi sul file che non è più dove te pensi che sia, allora PHP restituirà sempre un errore.
    Prova con:
    Codice PHP:
    chmod($upload_dir.$new_name0755); 
    Ti consiglio poi di leggere attentamente la Guida alla Sicurezza in PHP, perché se pensi di rendere sicuro uno script con un semplice ADDSLASHES ti sbagli alla grande!

    Mi stupisco comunque che qualche volta questo script ti abbia funzionato!
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  4. #4
    Ciao Alcio74.
    Ti ringrazio per la tua immediata disponibilità. Come puoi ben capire sono un neofita del PhP.
    Per aiutarti ad aiutarmi devo premetterti che in un altro file ho provveduto già a passare il file in una variabile con:

    Codice PHP:
    $file=$HTTP_POST_FILES['file']; 
    e successivamente richiamo la funzione:

    Codice PHP:
    inserisciFile($file$result1[id], $result2[id], $descr); 
    definita in function.php nel modo che ho postato precedentemente. Ecco quindi spiegato perchè a volte mi funziona; difatti il file lo carica e lo dimostrano gli echo che vengono eseguiti durante l'esecuzione che posso assicurarti stampano i valori corretti, che a loro volta vengono storati sul DB.

    Ora quello che non mi torna è sicuramente dovuto alla non corretta gestione del file come tu giustamente sottolineavi.
    Per quanto concerne il chmod, ho seguito il tuo consiglio e l'ho modificato con:

    Codice PHP:
    if(@is_uploaded_file($file_["tmp_name"])) {
        @
    move_uploaded_file($file["tmp_name"], $upload_dir $new_name);
        
    chmod($upload_dir/$new_name0755
    A seguito del caricamento del file, successivamente quando lo script funziona (in parte evidentemente) mi vengono visualizzati i seguenti messaggi:


    Notice: Undefined offset: 0 in c:\programmi\easyphp1-8\www\progetto.it\htdocs\include\template.inc.php on line 513

    Notice: Array to string conversion in c:\programmi\easyphp1-8\www\progetto.it\htdocs\add_doc.php on line 109

    Notice: Use of undefined constant id - assumed 'id' in c:\programmi\easyphp1-8\www\progetto.it\htdocs\add_doc.php on line 134

    Notice: Use of undefined constant id - assumed 'id' in c:\programmi\easyphp1-8\www\progetto.it\htdocs\add_doc.php on line 134
    c:/programmi/easyphp1-8/www/upload/vincpa.jpgC:/Programmi/EasyPHP1-8\tmp\php33B.tmp
    Warning: Division by zero in c:\programmi\easyphp1-8\www\progetto.it\htdocs\include\functions.inc.php on line 716

    L'upload del file vincpa.jpg è stato eseguito con successo

    Warning: fopen(C:/Programmi/EasyPHP1-8\\tmp\\php33B.tmp): failed to open stream: No such file or directory in c:\programmi\easyphp1-8\www\progetto.it\htdocs\include\functions.inc.php on line 745

    Warning: filesize(): Stat failed for C:/Programmi/EasyPHP1-8\\tmp\\php33B.tmp (errno=2 - No such file or directory) in c:\programmi\easyphp1-8\www\progetto.it\htdocs\include\functions.inc.php on line 746

    Warning: fread(): supplied argument is not a valid stream resource in c:\programmi\easyphp1-8\www\progetto.it\htdocs\include\functions.inc.php on line 746

    Warning: fclose(): supplied argument is not a valid stream resource in c:\programmi\easyphp1-8\www\progetto.it\htdocs\include\functions.inc.php on line 748

    Notice: Array to string conversion in c:\programmi\easyphp1-8\www\progetto.it\htdocs\add_doc.php on line 136

    Warning: unlink(Array): No such file or directory in c:\programmi\easyphp1-8\www\progetto.it\htdocs\add_doc.php on line 136



    Credo ci sia qualche Warning di troppo e se badi bene nel Warning successivo al messaggio di avvenuto Upload c'è qualche SLASH di troppo...
    Cosa ne pensi?
    Dimenticavo di dirti che quando lo script pseudofunzionante memorizza i dati nel DB, ciò che invece non avviene è lo spostamento fisico del file nella cartella di destinazione.

    Grazie mille Alcio.
    moscacieca

  5. #5
    Up!
    moscacieca

  6. #6
    Un pezzo per volta.
    Notice: Undefined offset: 0 in c:\programmi\easyphp1-8\www\progetto.it\htdocs\include\template.inc.php on line 513
    Notice: Array to string conversion in c:\programmi\easyphp1-8\www\progetto.it\htdocs\add_doc.php on line 136
    Non so cosa ci sia in quelle righe, ma tratti un array come fosse una stringa, per cui ti restituisce un errore.

    Warning: fopen(C:/Programmi/EasyPHP1-8\\tmp\\php33B.tmp): failed to open stream: No such file or directory in c:\programmi\easyphp1-8\www\progetto.it\htdocs\include\functions.inc.php on line 745 Warning: filesize(): Stat failed for C:/Programmi/EasyPHP1-8\\tmp\\php33B.tmp (errno=2 - No such file or directory) in c:\programmi\easyphp1-8\www\progetto.it\htdocs\include\functions.inc.php on line 746 Warning: fread(): supplied argument is not a valid stream resource in c:\programmi\easyphp1-8\www\progetto.it\htdocs\include\functions.inc.php on line 746 Warning: fclose(): supplied argument is not a valid stream resource in c:\programmi\easyphp1-8\www\progetto.it\htdocs\include\functions.inc.php on line 748
    L'argomento che passi a FOPEN() non esiste, o è sbagliato l'indirizzo, per cui ti restituisce quella sequela di errori.
    Saltando l'apertura del file, ti saltano le successive funzioni correlate.

    Warning: unlink(Array): No such file or directory in c:\programmi\easyphp1-8\www\progetto.it\htdocs\add_doc.php on line 136
    Stesso discorso di prima.
    Passi alla funzione UNLINK() un array e non il percorso di un file, per cui ti restituisce errore.

    Passiamo allo script con cui hai aperto il topic.
    $file=$HTTP_POST_FILES['file'];
    È una dicitura molto vecchia e desueta.
    Usa invece:
    Codice PHP:
    $file $_FILES['file']; 
    Come ti dicevo prima, però, se fai un controllo su cosa contenuto in $_FILES come lo fai tu, sbagli in partenza.
    Ammettiamo che l'utente non abbia caricato il file o che l'upload non vada a buon fine per un qualsiasi motivo, fare il controllo con ISSET() ti restituirà sempre qualcosa.
    Questo perché nell'array $_FILES trovi anche $_FILES['file']['error'] è SEMPRE valorizzato (lo 0 indica che l'upload non presenta errori, 4 se il file non è stato caricato alcun file, ecc).

    Per il problema che hai te circa il mancato spostamento del file nella cartella di destinazione, la causa potrebbe essere di un errato percorso, o del fatto che nella cartella non ci siano le giuste credenziali di accesso (il chmod per intenderci).
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  7. #7
    Ah... un consiglio (poi fai come ti pare).
    Prima di impostare una funzione, prova a creare lo script in procedurale... così quantomeno vedi se funziona!

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.