• User Attivo

    Ciao,

    se ti è stato inviato un file, questo è nella cartella temporanea del server. Lo puoi aprire senza necessariamente copiarlo o spostarlo in una cartella del sito.
    Ad esempio:
    [php]
    $righefile=file($_FILES['campo_file']['tmp_name']);
    [/php]

    Alessandro


  • Super User

    [..]
    Ciao, avevo pensato anch'io ad una cosa del genere, ma ho scoperto che il campo che tu chiami "campo_file" è differente ad ogni chiamata, dunque impossibile da fare...
    Ho trovato la funzione "file_get_contents()", la conosci per caso?
    Domani la provo, ma se c'è di meglio son qui! 🙂


  • User Attivo

    Ciao,

    $_FILES è pur sempre un array e come per ogni array puoi trovare i dati che ti servono con i vari strumenti che hai a disposizione.

    Questi di seguito sono solo alcuni esempi tra le varie soluzioni adottabili (i primi che mi son venuti in mente):

    se viene inviato un unico file, il nome che io ho indicato come 'campo_file' e che dici esser diverso di volta in volta, puoi, nel caso ti servisse, recuperarlo così:
    [PHP]
    $nome_campo=key($_FILES);
    [/PHP]

    Sempre nel caso in cui hai un unico file inviato, puoi recuperare i dati così:
    [PHP]
    $file_data=current($_FILES);
    $righefile=file($file_data['tmp_name']);
    [/PHP]

    Se hai più file inviati, poi opportunamente ciclare le istruzioni precedenti ricordandoti di avanzare nell'array con
    [PHP]
    $file_data=next($_FILES);
    [/PHP]

    oppure, più comodamente, usare un foreach
    [PHP]
    $righefile=array();
    foreach($_FILES as $file_data)
    {
    $righefile[]=file($file_data['tmp_name']);
    }
    [/PHP]

    Alessandro


  • Super User

    Grazie della precisione! 😉
    Domani ti so dire se è tutto ok!!


  • Super User

    Col tuo metodo mi si andava ad incasinare lo script...
    Per conoscienza riporto la funzione file_get_contents(php://input) che invece funziona correttamente.

    A presto! 😄


  • User Attivo

    file(), file_get_contents(), fopen() sono solo alcune delle funzioni che ti permettono di accedere al contenuto del file.
    Il mio era solo un esempio su come aprire il file e recuperare i dati, ma quello che seviva alla risoluzione del problema da te posto è il codice che precede quell'istruzione.

    L'importante è che tutto funzioni 🙂

    Alessandro


  • Super User

    Non ho capito cosa intendi, io ho messo solo la funzione file_get_contents(php://input), cmq l'importante sia risolto il problema.


  • User Attivo

    L'enctype per l'invio di files è "multipart/form-data" e per questo tipo di enctype **php://input **non è disponibile.

    Il fatto che funzioni non significa che è il metodo corretto, ma che c'è un'incongruenza nell'invio dei dati.
    La prima ipotesi che mi viene da fare è che non ti inviano un file, ma il suo contenuto come stringa.


  • Super User

    @Magicale said:

    L'enctype per l'invio di files è "multipart/form-data" e per questo tipo di enctype **php://input **non è disponibile.

    Il fatto che funzioni non significa che è il metodo corretto, ma che c'è un'incongruenza nell'invio dei dati.
    La prima ipotesi che mi viene da fare è che non ti inviano un file, ma il suo contenuto come stringa.
    :mmm: mah, le loro specifiche parlano di file, e stampando il $_POST c'è una variabile "fileInviato", dunque dovrebbe sì essere un file quello che mi mandano...
    Dici mi potrebbe dare problemi più avanti??
    E' che la tua soluzione mi mandava in loop la pagina!


  • User Attivo

    Se il contenuto del file è dentro
    [php]
    $_POST['fileInviato']
    [/php]
    non ti è stato inviato un file, ma solo il suo contenuto, quindi la tua soluzione va bene.

    Per fare una prova puoi controllare il contenuto di $_FILES, se:
    [php]
    print_r($_FILES);
    [/php]
    ti restituisce un array vuoto, significa che, come detto sopra, non è stato inviato un file, ma solo il suo contenuto.