- Home
- Categorie
- Coding e Sistemistica
- Coding
- Leggere un file passato in POST
-
Leggere un file passato in POST
Ciao gente, ho provato a cercare nel forum, ma non ho trovato nulla di utile al mio caso...
Ho un'applicazione esterna (che dunque non controllo io) che passa un file XML in $_POST ad una mia applicazione PHP.
Vorrei poter leggere il contenuto di tale file SENZA dovermelo salvare sul server per poi parsarlo. So che è fattibile, ma non so come...Help me please!!!
-
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
-
[..]
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!
-
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
-
Grazie della precisione!
Domani ti so dire se è tutto ok!!
-
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!
-
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
-
Non ho capito cosa intendi, io ho messo solo la funzione file_get_contents(php://input), cmq l'importante sia risolto il problema.
-
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.
-
@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.
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!
-
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.