• User

    Problema con upload file php con script di GiorgioTave

    Relativamente allo script pubblicato e descritto in questa pagina

    http://www.giorgiotave.it/guida_php/upload_file.php

    Ho copiato e settato il tutto.. il risultato è che si visualizza il messaggio impossibile effettuare l'upload o peggio l'upload si effettua ma poi nella directory settata per l'upload non vi è traccia di file.

    Potreste aiutarmi?
    sono 10 giorni che giro per la rete provando e riprovando vari script per l'upload senza risultati.. Il mio intento è creare un semplice form per far caricare all'utente dei file pdf e poi visualizzare di volta in volta i file uploadati in una apposita pagina php che si aggiorna ad ogni nuovo upload..

    Spero qualcuno abbia la soluzione per il mio caso.
    Grazie a tutti :bho:


  • Super User

    Ciao paparozziarka e benvenuto nel forum GT 🙂
    Hai cambiato il percorso in cui uppare i files?
    In questo caso:
    /home/httpd/docs/ 🙂
    Hai verificato di aver settato i permessi di scrittura chmod alla directory di destinazione?
    😉
    Fammi sapere,ciao!


  • User

    Allora..
    naturalmente ho settato le informazioni..
    Ho impostato una directory per l'upload chiamata "delibere" e nel codice ho sostituito la voce che mi hai indicato appunto con "/delibere" e i permessi di tale cartella sono chmod 777...

    Vuoi che ti posto il codice completo che ho pubblicato?

    Grazie per l'assistenza..


  • User

    Per essere precisi ho creato e cosi configurato questi 2 file:

    uploadit.php

    che contiene:

    <?php
    echo "<PRE>";
    echo "nome del file locale creato dopo l'invio: $uploadfile\n";
    echo "nome originale del file remoto: $uploadfile_name\n";
    echo "dimensioni del file in byte: $uploadfile_size\n";
    echo "tipo di file: $uploadfile_type\n";
    echo "</PRE>";
    echo "<HR>";

    abbiamo veramente un file?

    if ( $uploadfile == "none" ) {
    echo "Non è stato inviato alcun file<BR>";
    echo "Ritorna al form per inviare il <A HREF="upload.html">file</A>";
    exit;
    }

    controlla innanzitutto le dimensioni del file

    se è meno di 3 KB

    if ($uploadfile_size < 60003072 ) {

    lo copia in una nuova posizione

    if (copy($uploadfile,"delibere/$uploadfile_name"))
    {
    echo "Invio del file riuscito";

    cancella il file temporaneo

    unlink($uploadfile);
    } else {
    echo "Invio del file fallito";
    }
    } else {
    echo "Spiacente, il file da inviare non deve superare le dimensioni di 3 KB<BR>";
    }
    ?>
    Ritorna al form per inviare i <A HREF="upload.html">file</A>

    Il il form nella seconda pagina chiamata appunto upload.htm

    <HTML>
    <BODY>
    <HR>
    <FORM METHOD=POST ACTION="uploadit.php "ENCTYPE="multipart/form-data">
    <TABLE WIDTH="70%" BORDER="8" CELLSPACING="0">
    <TR><TD>
    <B>Inserisci il nome del file da inviare </B><INPUT TYPE=FILE NAME="uploadfile"><BR><BR>
    <INPUT TYPE="SUBMIT" VALUE="Invia le informazioni!">
    <INPUT TYPE="RESET" VALUE="Cancella!">
    </TR></TD>
    </TABLE>
    </FORM>
    </BODY>
    </HTML>
    Non so se c'è qualche errore..

    Ho provato a mettere entrambi i files all'interno di una stessa directory contenente anche la cartella delibere con permessi 777 in modo da avere il tutto in un unica directory ma non funziona.. L'upload non va.. mi segnala errore..
    Ho provato e modificare il codice escludendo l'if che contiene l'indirizzo della directory di upload mettendo così:

    lo copia in una nuova posizione

    copy($uploadfile,"delibere/$uploadfile_name");
    echo "Invio del file riuscito";

    cancella il file temporaneo

    unlink($uploadfile);
    } else {
    echo "Spiacente, il file da inviare non deve superare le dimensioni di 3 KB<BR>";
    }
    ?>
    Ritorna al form per inviare i <A HREF="upload.html">file</A>

    IN QUESTO CASO VISUALIZZA CHE IL FILE E' STATO UPLOADATO MA NESSUN FILE E' PRESENTE NELLA DIRECTORY DI UPLOAD..

    Attendo..
    Grazie ancora..


  • Super User

    Prova a sostituire:
    if (copy($uploadfile,"delibere/$uploadfile_name"));
    con
    if (copy($uploadfile,"./delibere/".$uploadfile_name));

    Fammi sapere,ciao!


  • User

    Ciao,
    l'ho fatto, molto velocemente ma credo di averlo fatto bene..
    mi restituisce questo messaggio di errore:
    Parse error: syntax error, unexpected T_ELSE in D:\Inetpub\webs\comunedicanepinait\uploadit.php on line **24

    :bho:

    Stasera riprovo a rifarlo in diverse directory o a riverede il codice completo, X ora ho solo sotituito la stringa che mi hai suggerito e non va..

    Grazie a presto
    **


  • Super User

    Quell'errore non dipende dalla stringa che ti ho fatto sostituire io 🙂
    Forse hai messo un else in più o in meno 😉
    Ciao!


  • User

    Niente.. ho cambiato directory ma il messaggio di errore è lo stesso..

    Parse error: syntax error, unexpected T_ELSE in D:\Inetpub\webs\comunedicanepinait\armyupload\uploadit.php on line **24

    :arrabbiato:
    **


  • Super User

    Leggi sopra 😉


  • User

    Allora.. Naturalmente avevi ragione e il problema era di sintassi.. guardando alla riga 24 ho scoperto che c'era un ";" di troppo.. Ora lo script gira ma da come risultato "invio del file fallito"..
    C'è un if proprio quello che mi hai fatto modificare che contiene la destinazione del file uploadato.. sembra che quell'if non si verifichi e dia false come risultato e mandi all'else con il messaggio di errore "invio file fallito.." Perchè c'è bisogno di quell'if? non si potrebbe mettere solo la funzione che effettua l'upload direttamentente? e comunque peche l'if in questione da false? Dovrebbe essere tutto settato correttamente..
    Se vuoi dare un ulteriore sguardo di riposto entrambi i codici come sono pubblicati attualmente in seguito alle modifiche che abbiamo apportato insieme:

    FILE upload.html
    <HTML>
    <BODY>
    <HR>
    <FORM METHOD=POST ACTION="uploadit.php "ENCTYPE="multipart/form-data">
    <TABLE WIDTH="70%" BORDER="8" CELLSPACING="0">
    <TR><TD>
    <B>Inserisci il nome del file da inviare </B><INPUT TYPE=FILE NAME="uploadfile"><BR><BR>
    <INPUT TYPE="SUBMIT" VALUE="Invia le informazioni!">
    <INPUT TYPE="RESET" VALUE="Cancella!">
    </TR></TD>
    </TABLE>
    </FORM>
    </BODY>
    </HTML>

    FILE uploadit.php
    <?php
    echo "<PRE>";
    echo "nome del file locale creato dopo l'invio: $uploadfile\n";
    echo "nome originale del file remoto: $uploadfile_name\n";
    echo "dimensioni del file in byte: $uploadfile_size\n";
    echo "tipo di file: $uploadfile_type\n";
    echo "</PRE>";
    echo "<HR>";

    abbiamo veramente un file?

    if ( $uploadfile == "none" ) {
    echo "Non è stato inviato alcun file<BR>";
    echo "Ritorna al form per inviare il <A HREF="upload.html">file</A>";
    exit;
    }

    controlla innanzitutto le dimensioni del file

    se è meno di 3 KB

    if ($uploadfile_size < 60003072 ) {

    lo copia in una nuova posizione

    if (copy($uploadfile,"./delibere/".$uploadfile_name)){
    echo "Invio del file riuscito";

    cancella il file temporaneo

    unlink($uploadfile);
    } else {
    echo "Invio del file fallito";
    }
    } else {
    echo "Spiacente, il file da inviare non deve superare le dimensioni di 3 KB<BR>";
    }
    ?>
    Ritorna al form per inviare i <A HREF="upload.html">file</A>

    A presto


  • User

    Aiutooooo

    Non mi abbandonare proprio sul più bello! Please!...:?


  • User

    anche io ho questo problema..sto bestemmiando tutti i santi..una giornata persa a trovare una soluzione che nn è arrivata.


  • User

    Danko quì non rispondono più, comunque se può esserti d'aiuto io facendo numerosi tentativi ho scoperto che lo spazio web sul quale testavo gli script non permette a priori (per motivi di sicurezza) di impostare i permessi di scrittura sui file (il chmod777) quindi nessuno degli oltre 10 script e applicazioni che ho testato, compreso quello in questa discussione poteva funzionare.. inoltre alcuni provider dei servizi di hosting oltre a non dare tali permessi non permettono nemmeno il corretto funzionamento di alcune funzioni del php come l'invio di email direttamente da proprio sito..

    Ho risolto (almeno provvisoriamente) aprendo uno spazio free e testando li sopra gli script.. che alla fine.. e dico alla fine con molta pazienza hanno funzionato..

    Prima ho provato su http://utenti.lycos.it perchè avevo già tale spazio aperto.. Poi però sono passato ad altervista perche su lycos ci sono pubblicità su pubblicità che invadono a forza le pagine del proprio spazio!

    A te..

    Spero possa esserti d'aiuto.

    In aternativa puoi contattare il tuo provider e chiedere se è possibile avere i permessi di scrittura sulle directory del proprio spazio. Dovrebbe trattarsi del server su cui è ospitato il tuo sito, da quanto ho letto in giro se sei su server windows hai questo problema e per risolverlo il provider dovrebbe spostarti su un server UNIX/LINUX.. Non prendere queste info alla lettera informati!

    Ciao 😉


  • User

    bhe non è detto che se non ti fanno impostare i permessi a 777 non puoi caricare ugualmente i tuoi file!!! dipende dalla configurazione del server.

    con permessi 777 puoi avere problemi di sicurezza!!!

    ad esempio nel nostro servizio di hosting gratuito
    ti facciamo settare i permessi a 777 ma non sono assolutamente necessari!!!

    basterebbe un 700 o 644 l'importante che il tuo utente abbia permessi di scrittura.


  • User

    E come si fa a dare i permessi di scrittura ad un solo utente?

    Prendiamo poi l'esempio di una news.. l'utente inserirsce una news.. la pagina che contiene le news deve essere scritta ed aggiornata.. Se non si danno permessi 777 a tutta la directory che contiene tale file che va ad aggiurnarsi automaticamente in seguito alla compilazione del form lo script mostra che il messaggio è stato correttamente inserito ma nell'archivio news e nella pagina che contiene tutte le news non compare nada! Il file non viene scritto a meno che non si imposti il 777.. ho provato per curiosità con altri metodi 766 ecc ma non funzionava..

    Perchè proprio 700 o 644? Cosa cambia?

    E già che ci siamo vorrei sapere se qualcuno sa spiegarlo in breve e con certezza, quali rischi si corrono a lasciare una directory a 777?


  • User

    ma io sto provando lo script in locale e nn funziona


  • User

    dipende dalla configurazione del tuo server!!!

    perchè sicuramente apache gira come utente www-data e che quindi quando crei un file via php o lo carichi via upload lui ti imposta owner www-data

    ma la cartella dove stai creando o spostando il file ha i permessi del tuo utente e quindi apache non può scriverci tranne se imposti permessi adeguati per l'utente public oppure se il tuo utente fa parte dello stesso gruppo di apache basterà mettere i permessi di scrittura solo per il gruppo e non per public!


  • User

    Come si fa a rendere un utente membro dello stesso gruppo di apache? io non lavor in remoto, carico direttamente i file sul server per testarli....

    Boh...

    Non ci sto capendo più di tanto.. So solo che se tocco i permessi chmod non funziona piu niente..

    Mah..


  • User

    IL 700 FUNZIONA!

    LI AVEVO PROVATI TUTTI MA PENSO CHE QUESTO MI ERA SFUGGITO.. ORA LO SCRIPT FUNZIONA ANCHE CONIL CHMOD700

    CHE COSA SAREBBE CAMBIATO? Posso stare tranquillo riguardo al discorso sicurezza con tale impostazione del chmod?


  • User

    RETTIFICO: Il chmod che mi funziona attualmente è il 770.. non 777