• User

    upload immagini sul server

    Ciao a tutti.
    Mi rivolgo a questo forum perchè so che, come altre volte è successo, ho avuto qui la risoluzione ai miei problemi.
    Sto tentando di caricare immagini sul server insieme ad un messaggio di testo utilizzando un file.txt senza database. Il risultato è che il messaggio arriva ma l'immagine no. La destinazione è la cartella public.
    Di seguito riporto i file incriminati, qualcuno mi può dare una mano a capire dove sta l'errore? Grazie anticipate.

    Questo è il form di invio:
    [html]
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
    <title>form</title>
    </head>
    <body>
    <form enctype="multipart/form-data" action="upload.php" method="POST">
    <br>Nome
    <input type="text" name="nome" size="20">
    <br>Recapito
    <input type="text" name="recapito" size="20">
    <p>Oggetto  
    <br>   <textarea name="oggetto" rows="3" cols="40"></textarea> </p>
    <input type="hidden" name="MAX_FILE_SIZE" value="30000">
    Invia questo file: <input name="userfile" type="file">
    <input type="submit" value="Invia file"> </form>
    </body>
    </html>
    [/html]

    questo è l'upload
    [php]
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
    <title>upload</title>
    </head>
    <body>
    <?
    //percorso della cartella dove mettere i file caricati
    $uploaddir = '/public/';

    if (!empty($_POST['nome'])){
    $nome = $_POST['nome'];
    }
    if (!empty($_GET['nome'])){
    $nome = $_GET['nome'];
    }
    if (!empty($_POST['recapito'])){
    $recapito = $_POST['recapito'];
    }
    if (!empty($_GET['recapito'])){
    $recapito = $_GET['recapito'];
    }
    if (!empty($_POST['oggetto'])){
    $oggetto = $_POST['oggetto'];
    }
    if (!empty($_GET['oggetto'])){
    $oggetto = $_GET['oggetto'];
    }

    echo "<center>";
    echo "Ciao ecco i risultati del tuo inserimento:";
    $errore= false;
    If((!$nome) || (!$recapito) || (!$oggetto)) {
    #controllo che nessun campo sia vuoto
    $errore=true;
    echo "Non hai compilato tutti i campi <a href="upload.html">torna
    indietro</a>";
    exit;
    }
    else{
    echo " i campi sono ok";
    }

    //Recupero il percorso temporaneo del file
    $userfile_tmp = $_FILES['userfile']['tmp_name'];
    //recupero il nome originale del file caricato
    $userfile_name = $_FILES['userfile']['name'];

    echo "<HR>";
    che il file sia accessibile
    if (!$apri = fopen ("file.txt","a+"))
    {
    $errore=true;
    echo "non posso aprire il file";
    }else{
    $apriw = fopen ("file.txt","a+");
    #ora creo una variabile che contiene la linea di separazione
    $linea ="<hr color=red>";

    e sul file scrivo nome e vado a capo,il recapito e vado a capo

    l'oggetto e vado a capo e la linea ti separazione

    fputs($apriw,"$nome\n");
    fputs($apriw,"$recapito\n");
    fputs($apriw,"$oggetto\n");
    fputs($apriw,"<img src=$userfile_name>\n");
    fputs($apriw,"$linea");

    #chiudo il file
    fclose($apriw);
    }
    #se c'e l'errore mi dice di inserirli di nuovo altrimenti mi fa leggere gli annunci
    if($errore){
    echo"<br> Riinseriscili per favore<br>";
    } else{
    echo "<br> <a href="annunci.php">leggi gli annunci</a>";
    }
    ?>
    </body>
    </html>
    [/php]

    Questo dovrebbe elencare i messaggi inviati al server:
    [php]
    <?php
    echo "Ecco i vostri annunci<br>";
    if (!$apri = fopen("file.txt","r")){
    echo "Non posso aprire il file";
    }else{

    #Se il file si può leggere allora con un ciclo while

    leggo tutte le righe del mio file

    while(!feof($apri)){
    $leggo = fgets($apri,255);
    echo "$leggo<br>";
    }
    }
    fclose($apri);
    ?>
    [/php]

    Ancora grazie, ciao.


  • ModSenior

    Ciao eisenblu,
    manca proprio la funzione che copia l'immagine sullo spazio web.


  • User

    Ciao Darki
    Pensavo proprio che mancasse qualcosa... non è che me la puoi suggerire?


  • User

    Ciao,
    puoi provare con qualcosa del genere, la cartella "images" devi cambiarla con il percorso che ti serve

    [php]if (!move_uploaded_file($_FILES['userfile']['name'], './images/'.$_FILES['userfile']['name'])) {
    echo "<p>Errore nel caricamento dell'immagine!!</p>";
    }[/php]


  • User

    Ciao Noice
    Purtroppo continua a darmi errore nel caricamento dell'immagine, non so se sia la posizione del codice o altro, io l'ho messo qui:

    [php]
    ......
    //Recupero il percorso temporaneo del file
    $userfile_tmp = $_FILES['userfile']['tmp_name'];
    //recupero il nome originale del file caricato
    $userfile_name = $_FILES['userfile']['name'];

    if (!move_uploaded_file($_FILES['userfile']['name'], '/images/'.$_FILES['userfile']['name'])) {
    echo "<p>Errore nel caricamento dell'immagine!!</p>";
    }
    ...
    [/php]
    Che ne pensi?


  • User

    Prova così:
    [php]<html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
    <title>upload</title>
    </head>
    <body>
    <?php
    //percorso della cartella dove mettere i file caricati
    $uploaddir = './public/';

    if (!empty($_POST['nome'])){
    $nome = $_POST['nome'];
    }
    if (!empty($_GET['nome'])){
    $nome = $_GET['nome'];
    }
    if (!empty($_POST['recapito'])){
    $recapito = $_POST['recapito'];
    }
    if (!empty($_GET['recapito'])){
    $recapito = $_GET['recapito'];
    }
    if (!empty($_POST['oggetto'])){
    $oggetto = $_POST['oggetto'];
    }
    if (!empty($_GET['oggetto'])){
    $oggetto = $_GET['oggetto'];
    }

    echo "<center>";
    echo "Ciao ecco i risultati del tuo inserimento:";
    $errore= false;
    If((!$nome) || (!$recapito) || (!$oggetto)) {
    #controllo che nessun campo sia vuoto
    $errore=true;
    echo "Non hai compilato tutti i campi <a href="upload.html">torna
    indietro</a>";
    exit;
    }
    else{
    echo " i campi sono ok";
    }

    if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
    $userfile_tmp = $_FILES['userfile']['tmp_name'];
    $userfile_name = $_FILES['userfile']['name'];

    if (!move_uploaded_file($userfile_tmp, $uploaddir.$userfile_name)) {
    echo "<p>Errore nel caricamento del file!!</p>";
    die();
    }
    }
    echo "<HR>";
    che il file sia accessibile
    if (!$apri = fopen ("file.txt","a+"))
    {
    $errore=true;
    echo "non posso aprire il file";
    }else{
    $apriw = fopen ("file.txt","a+");
    #ora creo una variabile che contiene la linea di separazione
    $linea ="<hr color=red>";

    e sul file scrivo nome e vado a capo,il recapito e vado a capo

    l'oggetto e vado a capo e la linea ti separazione

    fputs($apriw,"$nome\n");
    fputs($apriw,"$recapito\n");
    fputs($apriw,"$oggetto\n");
    fputs($apriw,"<img src=$userfile_name>\n");
    fputs($apriw,"$linea");

    #chiudo il file
    fclose($apriw);
    }
    #se c'e l'errore mi dice di inserirli di nuovo altrimenti mi fa leggere gli annunci
    if($errore){
    echo"<br> Riinseriscili per favore<br>";
    } else{
    echo "<br> <a href="annunci.php">leggi gli annunci</a>";
    }
    ?>
    </body>
    </html>[/php]


  • User

    Mah!! purtroppo continua a darmi errore, questo:

    Ciao ecco i risultati del tuo inserimento: i campi sono ok.

    Warning: move_uploaded_file(./public/casa_viola.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in D:\Inetpub\webs\tirumapifortit\public\upload.php on line 48

    Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\PHP\upload\php38A7.tmp' to './public/casa_viola.jpg' in D:\Inetpub\webs\tirumapifortit\public\upload.php on line 48
    Errore nel caricamento del file!!


  • User

    Quell'errore significa che la cartella di destinazione non esiste o non e' in quella posizione, modifica la stringa
    [PHP]$uploaddir = './public/';[/PHP]
    partendo dalla radice


  • User

    Ho modificato così:

    [php]
    //percorso della cartella dove mettere i file caricati
    $uploaddir = './miodominio.it/public/';
    [/php]

    Ovviamente con http e www davanti a miodominio, ma continua a darmi lo stesso errore.


  • User

    Mh no, sei andato troppo indietro nel percorso 😄
    con radice intendo la cartella in cui hai (o di norma c'e') l'index.php


  • User

    Ciao Noice,
    ho problemi di connessione alla rete, appena posso farò qualche prova e poi ti dirò, grazie


  • User

    Ciao Noice, alleluia! Sono finalmente riuscito a trasferire delle immagini sul server.
    La cosa però non riesce sempre, può dipendere secondo te dalla dimensione dell'ìmmagine? E se sì c'è un modo per consentire di trasferire files più pesanti?
    Grazie ciao!


  • User

    Ho risolto! Non avevo visto che nel form c'è il "max_file_size".
    Grazie a tutti


  • User

    Ciao,
    nel tuo form e' presente un campo hidden per la dimensione massima dei files in upload (30kb nel tuo caso)
    [HTML]<input type="hidden" name="MAX_FILE_SIZE" value="30000">
    [/HTML]
    ma manca il controllo di quest'ultimo nell'upload.php. In pratica e' qualcosa del genere:
    [PHP]if ($_FILES['userfile'] > $_POST['MAX_FILE_SIZE']) {
    echo "il file e' troppo grande";
    }else{ // istruzioni
    }[/PHP]

    altrimenti puoi controllare e modificare nel php.ini la stringa relativa:

    upload_max_filesize = 2M
    

  • User

    OK Noice, grazie ciao