Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [Upload e recupero type FILE da form]

    Scusate ragazzi sto cercando di capire l'upload di file su server remoto.

    Nonostante avessi letto un pò di discussioni ancora non capisco alcuni pasaggi fondamentali.

    Innanzitutto non capisco come va impostato il form html per l'invio dei dati. In alcuni manuali è riportato il seguente codice:

    codice:
    <form action="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>
    1)Ma questo sottintende mica che i form per l'invio dei dati possono essere o solo di tipo valori text o simili oppure solo di tipo file. Cioè in sostanza posso tranquillamente inviare da uno stesso form sia valori di tipo file che valori di tipo text e quant'altro?

    2) Ho letto in giro che i valori di tipo file in php si prelevano dalle variabili globali $HTTP_POST_FILES o $_FILES. La cosa che non capisco è il fatto che $_FILE sia un array bidimensionale del tipo $_FILES["nomefile"]["tmp_name"]; non so "nomefile" e "tmp_name" a cosa si riferiscono.
    Nomefile posso immaginare si riferisca, nel caso del form riportato in alto, a "upfile" ma "tmp_name"? Qual'è la sua utilità?

    3)Poi ci sarebbe una terza variabile globale $_SERVER["DOCUMENT_ROOT"] di cui immagino la funzione sia quella di creare una connessione col server remoto. Se è così a posto di "document_root" cosa ci va?

    Vi ringrazio dell'aiuto anticipatamente.

  2. #2
    1) sì

    2) http://it2.php.net/manual/it/features.file-upload.php
    noemfile è il nome del camponel form.. puoi inviare anche + file contemporaneamente.. quindi devi poterli distinguere sempklicemente dal nome del cmapo dl form
    tmp_name è il nome del file temporaneo sul srever... l'upload avviene nella dir temp del server.. dopo di che puoi fare quello che ti pare: spostare il file con move_uploaded_file(), inserirlo nel dtaabase, etc etc...

    3) Assolutamente no. comincia con $ quindi è una variabile.. non una funzioone.. in particolare $_SERVER è un array di variabili di sistema.. e DOCUMENT_ROOT contiene il path della document root di apache.. ovvero della radice dello spazio web. Probabilmente l'hai visto utilizzato in qualche script per costruire dinamicamente il path in cui spostare il file uploadato


  3. #3
    3) Assolutamente no. comincia con $ quindi è una variabile.. non una funzioone.. in particolare $_SERVER è un array di variabili di sistema.. e DOCUMENT_ROOT contiene il path della document root di apache.. ovvero della radice dello spazio web. Probabilmente l'hai visto utilizzato in qualche script per costruire dinamicamente il path in cui spostare il file uploadato

    Ti ringrazio tanto per le prime due risposte chiarificatrici.

    La terza ho ancora qualche perplessità:
    Ti posto il codice di un upload trovato in giro.
    codice:
    // Directory dove salvare i files Uploadati ( chmod 777, percorso assoluto)
    $upload_dir = $_SERVER["DOCUMENT_ROOT"] . "/upload";
    
    // 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") 
    or die("Impossibile spostare il file, controlla l'esistenza o i permessi della directory dove fare l'upload.");
    
    } else {
    
    die("Problemi nell'upload del file " . $_FILES["upfile"]["name"]);
    
    }
    
    echo "L'upload del file " . $_FILES["upfile"]["name"] . " è avvenuto correttamente";
    
    ?>
    Mi dicevi che tmp_name è il path dove si sposta il file in upload. Quindi se voglio impostare un path diverso sul server in cui risiedo che tipo di percorso devo inserire?

    Ad esempio:

    $_FILES["upfile"]["public_html/miosito/images/nomefile.jpg"] ????

    E poi di nuovo, nel codice postato in alto a che server $_SERVER["DOCUMENT_ROOT"]?

    Grazie.

  4. #4
    Originariamente inviato da lorenz_italy

    Mi dicevi che tmp_name è il path dove si sposta il file in upload.
    no.. è dove il srever mette i file che riceve.. quindi da dove devi copiare il file.

    Quindi se voglio impostare un path diverso sul server in cui risiedo che tipo di percorso devo inserire?

    Ad esempio:

    $_FILES["upfile"]["public_html/miosito/images/nomefile.jpg"] ????
    no..
    innanzitutto le variabili d'ambiente ($_NOMEVARIABILE) sono usate solo pe rleggere valori, e non per impostarli...
    in secondo luogo è al contrario: usi questa: http://it.php.net/manual/it/function...oaded-file.php

    per copiare DA $_FILES["nomefile"]["tmp_name"] al path che vuoi....


    E poi di nuovo, nel codice postato in alto a che server $_SERVER["DOCUMENT_ROOT"]?

    Grazie.
    se $_FILES["nomefile"]["tmp_name"] serve a sapere DA DOVE prendere il file...
    $_SERVER["DOCUMENT_ROOT"] ti serve a costruire il path VERSO CUI copiare il file....

    codice:
    $upload_dir = $_SERVER["DOCUMENT_ROOT"] . "/upload";
    ...
    ...
    @move_uploaded_file($_FILES["upfile"]["tmp_name"], "$upload_dir/$file_name")
    questo vuol dire che i file saranno spostati dalla directory temporanea in cui apache li mette, alla diorectory "upload" che si trova nella DOCUMENT_ROOT (ovvero nella radice dello spazio web).


    Leggiti per bene quel link che ti ho dato prima e vedrai che capirai d asolo


  5. #5
    Ciao...ho letto con attenzione tutto il materiale che ho trovato a riguardo e ho provato a mettere in pratica ciò che ho letto.

    Ancora ho problemi, posto il mio codice
    e ti riporto anche gli errori che da.

    Codice PHP:

    echo $_FILES['image1']['name']."
    "
    ;
                      echo 
    $_FILES['image1']['tmp_name'];                  
                                      if(
    $_FILES['image1']['name']){
                                      
    $upload_dir $_SERVER["DOCUMENT_ROOT"] ."/nonnagab/images/".$_FILES['userfile']['name'];
                                    
    move_uploaded_file($_FILES["image1"]["tmp_name"], "$upload_dir"
                                    or die(
    "Impossibile spostare il file, controlla l'esistenza o i permessi della directory dove fare l'upload."); 

    L'errore è questo:

    codice:
    goal.jpg
    /tmp/phpZPf9QQ
    
    Warning: move_uploaded_file(/home/pagespub/public_html/nonnagab/images/): failed to open stream: Is a directory in /home/pagespub/public_html/nonnagab/modifiche.php on line 139
    
    Warning: move_uploaded_file(): Unable to move '/tmp/phpZPf9QQ' to '/home/pagespub/public_html/nonnagab/images/' in /home/pagespub/public_html/nonnagab/modifiche.php on line 139
    Impossibile spostare il file, controlla l'esistenza o i permessi della directory dove fare l'upload.
    Ho provato a stampare il contenuto delle variabili $_FILES[][] e sono stupito dal contenuto di $_FILES['image1']['tmp_name'] = /tmp/phpZPf9QQ

    Mi aiutate dove sbaglio?

  6. #6
    e 'perchè mai sei stupito dal contenuto di $_FILES['image1']['tmp_name']??

    quanto all'errore: cerchi di copiare un file su una directory!

    per copiarlo DENTRO la directory devi dargli anche un nome.. e puoi usarne uno a tuo piacimento oppure quello originale che ormai sai dove trovare

    altrimenti è quesitione di eprmessi..nel qual caso prova a impostare 777 sulla dir in cui devi copiare i file uploadati


  7. #7
    Scusatemi....ho risolto il problema era nella riga,

    Codice PHP:

    $upload_dir 
    $_SERVER["DOCUMENT_ROOT"] ."/nonnagab/images/".$_FILES['image1']['name']; 
    Ho dimenticato completamente di inserire il valore del file e cioè image1 in $_FILE['']['name']


    Grazie ciao

  8. #8
    appunto..

    vabbè.. tutto bene quel che finisce bene

  9. #9
    A rieccomi!!

    Finalmente riesco a caricare le immagini in remoto, però non capisco per quale motivo non riesce a caricare più di 50 Kb pur non avendo inserito alcuna limitazione.

    Capirei se pesassero 500 Kb o un 1Mb. Ma non mi spiego per quale motivo non riesce a copiare 50 kb.
    Devo aggiungere che nel php.ini upload_max_filesize del server è impostato a 50 M.

    Non è che sbaglio a prelevare dal form i dati di tipo file?
    io ho un form con 5 campi di tipo file e dall'altra parte li ricevo come $_FILES["file1"]["name"],$_FILES["file2"]["name"], $_FILES["file3"]["name"]....e ripeto il trasferimento per ogni
    variabile $_FILE.
    Facendo così riesco a caricare al massimo due immagini di un peso comlessivo di 40 Kb(onestamente poco ragionevole).

    Suggerimenti?

  10. #10
    posta il codice...

    nel form non hia messo limitazioni vero?

    è smeplicemente moltolenta la tua connesisone (o mq il server)-....?


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 © 2024 vBulletin Solutions, Inc. All rights reserved.