метод XMLHttpRequest setRequestHeader объекта javascript не работает

у меня проблема с загрузкой файлов. Я использую тот самый метод, описанный в этой статьи. Я загрузил весь скрипт, опубликованный автором из здесь.
Приложение предназначено для загрузки файлов через HTML5 drag&drop, а затем, через javascript, отправить их на сервер по ajax-запросу.
Все работает нормально, но проблема возникает, когда я хочу прочитать параметр из заголовка запроса AJAX. Вот код файла PHP читатель":

$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

ранее, XMLHttpRequest.метод setRequestHeader запускается для установки заголовка" X_FILENAME". Вот javascript:

var xhr = new XMLHttpRequest();

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

и вот доказательство (урожай из "firebug" моего хрома):

Когда Я вложенностями the $fn переменная в PHP возвращает логическое значение FALSE. Что случилось?

P. S. Я с помощью XAMPP v1.8.1 С Apache 2.4.3 и PHP 5.4.7 на Win7 x64. Я запускаю сайт на последнем Chrome. Как вы можете догадаться, сайт работает на localhost. Я ничего не менял в php.ini-файл-все установлено по умолчанию.

2 ответов


подчеркивания не кажутся допустимыми символами для имен заголовков. Используйте дефисы, и он будет работать красиво.

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

и никаких изменений не требуется в вашем PHP.


новые версии Apache и 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'));
    }