2012-12-07 15 views
7

Ho un problema con il caricamento dei file. Sto usando lo stesso metodo descritto nell'articolo THIS. Ho scaricato l'intero script pubblicato dall'autore dallo HERE.
L'applicazione ha lo scopo di caricare i file tramite il trascinamento HTML5 & e quindi, tramite javascript, inviarli al server tramite una richiesta Ajax.
Tutto funziona correttamente ma il problema si verifica quando voglio leggere un parametro dall'intestazione della richiesta AJAX. Ecco il codice di PHP "lettore di file":Il metodo XMLHttpRequest del metodo javascriptHeader dell'oggetto javascript non funziona

$fn = (isset($_SERVER['HTTP_X_FILENAME']) ? $_SERVER['HTTP_X_FILENAME'] : false); 

if ($fn) { 
//above there is the upload of the file with file_put_contents function 
//which actually works fine when I replace $fn with my own value and ommit the "if" condition 

In precedenza, il metodo XMLHttpRequest.setRequestHeader viene lanciato per impostare "X_FILENAME" intestazione. Ecco il javascript:

var xhr = new XMLHttpRequest(); 

// start upload 
xhr.open("POST", $id("upload").action, true); 
xhr.setRequestHeader("X_FILENAME", file.name); 
xhr.send(file); 

Ed ecco la prova (un raccolto dal mio "piromane" di Chrome):

Quando ho var_dump il $ fn variabile in PHP restituisce FALSO booleano. Che c'è?

P.S. Sto usando XAMPP v1.8.1 con Apache 2.4.3 e PHP 5.4.7 su Win7 x64. Sto eseguendo il sito sull'ultimo Chrome. Come puoi immaginare, il sito è in esecuzione su localhost. Non ho cambiato nulla nel file php.ini - tutto è impostato su default.

risposta

15

I caratteri di sottolineatura non sembrano essere caratteri validi per i nomi di intestazione. Usa Hyphens e funzionerà magnificamente.

xhr.setRequestHeader("X-FILENAME", file.name); 

e nel tuo PHP non sono richieste modifiche.

+0

La soluzione funziona benissimo! Grazie. Al primo approccio non ho notato l'ultima riga nel tuo commento e anche se sono condannato. – matewka

-1

Le nuove versioni di Apache e PHP 5,3

$UploadDir=dirname(__FILE__).'/'.; 
    $Datos_cabecera=getallheaders(); 
    $fn = (isset($_SERVER['HTTP_X_FILENAME']) ? $_SERVER['HTTP_X_FILENAME'] : false); 
    if (!$fn) {$fn=$Datos_cabecera['X_FILENAME'];} //New versions of Apache and PHP 5.3 
    if ($fn) { 
    file_put_contents($UploadDir.$fn,file_get_contents('php://input')); 
    } 
+4

Utilizzare l'inglese. – agabrys

+0

Usa variabili e commenti in inglese. –

Problemi correlati