Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Discussione: problema upload

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    13

    problema upload

    Salve a tutti,

    problema: non mi funziona l'upload.

    benché in risposta ricevo una conferma dell'avvenuto upload il file non viene copiato.

    Ho provato con tutti gli script che ho trovato su google ma niente. Non mi copia il file.

    Aiuto!


    ecco il codice:

    FORM

    codice:
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <form action="file-upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="upfile">
    <input type="hidden" name="MAX_FILE_SIZE" value="10000">
    <input type="submit" value="Invia il file">
    </form>
    </body>
    </html>
    UPLOAD_FILE.PHP


    codice:
    <?php
    
    
    // QUESTE RIGHE RENDONO LO SCRIPT COMPATIBILE CON LE VERSIONI
    // DI PHP PRECEDENTI ALLA 4.1.0
    if(!isset($_FILES)) $_FILES = $HTTP_POST_FILES;
    if(!isset($_SERVER)) $_SERVER = $HTTP_SERVER_VARS;
    
    /********************* VARIABILI DA SETTARE ********************/
    // Directory dove salvare i files Uploadati ( chmod 777, percorso assoluto)
    $upload_dir = $_SERVER["DOCUMENT_ROOT"] . "/upload";
    
    echo $_SERVER["DOCUMENT_ROOT"] . "
    ";
    
    // Eventuale nuovo nome da dare al file uploadato
    $new_name = "";
    
    // Se $new_name è vuota, il nome sarà lo stesso del file uploadato
    $file_name = ($new_name) ? $new_name : $_FILES["upfile"]["name"];
    
    if(trim($_FILES["upfile"]["name"]) == "") {
    
    die("Non hai indicato il file da uploadare !");
    
    }
    
    if(@is_uploaded_file($_FILES["upfile"]["tmp_name"])) {
    	
    	@move_uploaded_file($_FILES["upfile"]["tmp_name"], "$upload_dir/$file_name"); 
    	echo "L'upload del file " . basename($_FILES["upfile"]["name"]) . " &egrave; avvenuto correttamente";
    
    } else {
    
    	echo "Impossibile spostare il file, controlla l'esistenza o i permessi della directory dove fare l'upload.
    ";
    	echo "Problemi nell'upload del file " . $_FILES["upfile"]["name"];
    	echo "
    ";
    
    }?>

  2. #2
    Se nel tuo script (copiato spudoratamente in una guida molto datata metti qualche controllo in più puoi conoscere l'errore e verificarli...
    lo script l'ho modificato alla buona ma così puoi controllare meglio ciò che succede...
    se dovessi fare una previsione scommetterei che la cartella 'upload' non esiste
    Codice PHP:
    <?php


    // QUESTE RIGHE RENDONO LO SCRIPT COMPATIBILE CON LE VERSIONI
    // DI PHP PRECEDENTI ALLA 4.1.0
    if(!isset($_FILES)) $_FILES $HTTP_POST_FILES;
    if(!isset(
    $_SERVER)) $_SERVER $HTTP_SERVER_VARS;

    /********************* VARIABILI DA SETTARE ********************/
    // Directory dove salvare i files Uploadati ( chmod 777, percorso assoluto)
    $upload_dir $_SERVER["DOCUMENT_ROOT"] . "/upload";
    if(!
    is_dir($upload_dir))
       {
       die(
    'ecco perchè non funzione la cartella '.$upload_dir.' non esiste mio caro...');
       }
    echo 
    $_SERVER["DOCUMENT_ROOT"] . "
    "
    ;

    // Eventuale nuovo nome da dare al file uploadato
    $new_name "";

    // Se $new_name è vuota, il nome sarà lo stesso del file uploadato
    $file_name = ($new_name) ? $new_name $_FILES["upfile"]["name"];

    if(
    trim($_FILES["upfile"]["name"]) == "") {

    die(
    "Non hai indicato il file da uploadare !");

    }

    if(@
    is_uploaded_file($_FILES["upfile"]["tmp_name"])) {
        
        
    $result = @move_uploaded_file($_FILES["upfile"]["tmp_name"], "$upload_dir/$file_name"); 
    if(!
    $result){ die ('si è verificato errore numero '.$_FILES["upfile"]["error"]); }
        echo 
    "L'upload del file " basename($_FILES["upfile"]["name"]) . " è avvenuto correttamente";

    } else {

        echo 
    "Impossibile spostare il file, controlla l'esistenza o i permessi della directory dove fare l'upload.
    "
    ;
        echo 
    "Problemi nell'upload del file " $_FILES["upfile"]["name"];
        echo 
    "
    "
    ;

    }
    ?>

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    13
    Il problema è che non mi da nessun errore.

    In realtà ho provato ogni tipo di script, questo è uno dei tanti. Ho fatto tutti i possibili controlli ma in risposta mi da sempre un successo.

    Il file però non lo vuole proprio copiare.

    Ho pensato che magari non è colpa dello script, così ho provato ad usare altri browser (Safari, Firefox, Chrome), ma ancora niente.

    Allora ho pensato che era il mio computer (MacBook Pro), ho fatto un deploy su un server ma ancora niente.

    Non so più cosa fare.

    Help me!
    Please!

  4. #4
    Stai provando il tutto in locale o in remoto?

    Sicuro che la cartella di destinazione dei file abbia impostato i permessi per caricarci su i file?

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    13
    Ho provato sia in locale che in remoto. I permessi sono sempre settati a 777.

  6. #6
    Intanto mi sono accorto di una cosa

    Nel form tu hai messo

    Codice PHP:
    <form action="file-upload.php" method="post" enctype="multipart/form-data"
    Ma il file dell'upload, da quanto dici si chiama UPLOAD_FILE.PHP

    Poi cmq ti consiglierei di commentare tutto il codice per l'upload, e di immettere dei controlli per capire se viene passato il nome del file da caricare e tutti i suoi dettagli!

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    13
    Ora provo con questo altro script:

    Codice PHP:
    <?php

        
    if(is_uploaded_file($_FILES['file']['tmp_name'])){
            
            
    move_uploaded_file($_FILES['file']['tmp_name'], "img/" $_FILES['file']['name']);
            
            echo 
    "success";
            
        }else{
            
            echo 
    "error";
        }

        echo 
    "<pre>";
        
    print_r($_FILES);
        echo 
    "</pre>";

    ?>


    ed il risultato è:



    codice:
    success
    
    Array
    (
        [file] => Array
            (
                [name] => IMG_0841.JPG
                [type] => image/jpeg
                [tmp_name] => /private/var/tmp/phpUSi7FM
                [error] => 0
                [size] => 1442485
            )
    
    )


    Ma il file non viene copiato.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    13
    La destinazione deve avere un path assoluto?

    Scrivendo "img/" si intende che nella stessa cartella dove si trova il file upload.php (ovvero lo script) si deve trovare una cartella "img", giusto?

    E non scrivendo nulla (solo il nome del file) dovrebbe copiarlo nella cartella stessa, no?

  9. #9
    Utente di HTML.it L'avatar di Enoa
    Registrato dal
    Jul 2005
    Messaggi
    573
    controlla che move_uploaded_file non fallisca.
    Codice PHP:
    <?php

        
    if(is_uploaded_file($_FILES['file']['tmp_name'])){
            
            if(
    move_uploaded_file($_FILES['file']['tmp_name'], "img/" $_FILES['file']['name'])){
            
            echo 
    "success";
                }else{
                    echo
    'error move';
                }
            
        }else{
            
            echo 
    "error";
        }

        echo 
    "<pre>";
        
    print_r($_FILES);
        echo 
    "</pre>";

    ?>
    La destinazione può essere un path relativo, ma in ogni caso php deve avere i permessi di scrivere nella porzione di filesystem sulla quale vai ad operare nei limiti di quanto impostato anche dall'open_basedir via Apache o php.ini
    http://php.net/manual/en/ini.core.php

    Se hai disabilitato la visualizzazione dei warnings, non ti viene segnalato il "permission denied". move_uploaded_file restituisce true o false ma solo se non ha i permessi di scrivere sulla cartella di destinazione restituisce false + il warning
    http://it.php.net/manual/en/function...oaded-file.php
    Controlla il tuo php.ini, imposta error_reporting = E_ALL, chiudi & salva & riavvia apache


    In fase di sviluppo (ma pure in produzione...) non usare mai "@" davanti alle funzioni, serve a sopprimere gli errori, che non vuol dire che non ce ne siano. se non li vedi non li correggi.
    http://php.net/manual/en/language.op...rorcontrol.php

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    13
    grazie per i consigli.

    error_reporting però era settato su E_ALL.


    non ho capito bene cosa sia open_basedir, ho trovato solo questo nel php.ini


    codice:
    ; open_basedir, if set, limits all file operations to the defined directory
    ; and below.  This directive makes most sense if used in a per-directory
    ; or per-virtualhost web server configuration file. This directive is
    ; *NOT* affected by whether Safe Mode is turned On or Off.
    ; http://php.net/open-basedir
    ;open_basedir =

    non ce la faccio più, sono più di tre giorni che non riesco a farlo funzionare!!
    Aiutatemi!
    Please!

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.