2012-12-07 15 views
7

Mam problem z przesyłaniem plików. Używam tej właśnie metody opisanej w artykule THIS. Pobrałem cały skrypt opublikowany przez autora z HERE.
Aplikacja służy do ładowania plików przez przeciągnięcie HTML5 & upuść, a następnie, za pośrednictwem javascript, wysłać je do serveide przez żądanie ajax.
Wszystko działa dobrze, ale problem występuje, gdy chcę odczytać parametr z nagłówka żądania AJAX. Oto kod PHP „czytnik plików”:Metoda XMLHttpRequest obiektu javascript metoda setRequestHeader nie działa

$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 

Wcześniej metoda XMLHttpRequest.setRequestHeader jest uruchomiona aby ustawić „X_FILENAME” nagłówek. Oto javascript:

var xhr = new XMLHttpRequest(); 

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

A oto dowód (a plon z moim "Firebug" Chrome):

Kiedy var_dump$ fn zmienna w PHP zwraca boolean FAŁSZ. Co jest nie tak?

P.S. Używam XAMPP v1.8.1 z Apache 2.4.3 i PHP 5.4.7 na Win7 x64. Używam witryny w najnowszym Chrome. Jak można się domyślić, strona działa na localhost. Nic nie zmieniłem w pliku php.ini - wszystko jest ustawione domyślnie.

Odpowiedz

15

Podkreślenia nie wydają się być poprawnymi znakami dla nazw nagłówków. Użyj Hyphens i będzie pięknie.

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

i żadne zmiany nie są wymagane w twoim PHP.

+0

Twoje rozwiązanie działa świetnie! Dziękuję Ci. Przy pierwszym podejściu nie zauważyłem ostatniej linii w twoim komentarzu i chociaż jestem skazany na zagładę. – matewka

-1

Nowe wersje Apache i 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

Proszę używać języka angielskiego. – agabrys

+0

Używaj zmiennych i komentarzy w języku angielskim. –