9

ファイルのアップロードに問題があります。私はこの記事で説明されているまさにその方法を使用しています。著者が公開したスクリプト全体をここからダウンロードしまし
このアプリケーションは、HTML5のドラッグアンドドロップを介してファイルをロードし、次に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

以前は、「X_FILENAME」ヘッダーを設定するためにXMLHttpRequest.setRequestHeaderメソッドが起動されていました。これがjavascriptです:

var xhr = new XMLHttpRequest();

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

そして、これがその証拠です(私のChromeの「firebug」からの抜粋):

PHPで$fn変数をvar_dumpすると、ブール値のFALSEが返されます。なにが問題ですか?

PS私はWin7x64でApache2.4.3とPHP5.4.7でXAMPPv1.8.1を使用しています。最新のChromeでサイトを運営しています。ご想像のとおり、サイトはローカルホストで実行されています。php.iniファイルでは何も変更していません。すべてがデフォルトに設定されています。

4

2 に答える 2

17

アンダースコアはヘッダー名の有効な文字ではないようです。ハイフンを使用すると、美しく機能します。

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

PHPに変更を加える必要はありません。

于 2012-12-07T22:13:58.627 に答える
-1

ApacheとPHP5.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'));
    }
于 2015-11-03T20:06:34.147 に答える