2012-04-22 6 views
3

私はajaxとPHPでアップロードスクリプトを使用しています。これは80MB未満のファイルには不思議に思えます。しかし、ファイルが80MBを超えると失敗し、何も出力しません。大きなファイルでphp://入力が失敗する

コードは次のとおりです。

$maxsize = getMaxFileSize(); 
$finalfile = $uploadpath . $finalname; 
$putdata = fopen("php://input", "r"); 
$fp = fopen($finalfile, "w"); 
$filesizecalc = 0; 
while ($data = fread($putdata, 1024)) { 
    fwrite($fp, $data); 
    $filesizecalc = $filesizecalc + 1024; 
} 

fclose($fp); 
fclose($putdata); 
if ($filesizecalc <= $maxsize) { 
    addFile($_SESSION['userdata']['userid'], $finalname); 
    echo "$fn uploaded"; 
} else { 
    unlink($finalfile); 
} 
exit(); 

これは、ほぼすべてのファイル< 80メガバイトで正常に動作しますが、80メガバイトよりも大きなファイルに対しては出力事ないので、私も間違って何が起こっているのか分かりません、私は設定していても

error_reporting(E_ALL | E_NOTICE); 
ini_set('display_errors', 1); 
ini_set('memory_limit', '1024M'); 
ini_set('upload_max_filesize', '1024M'); 
ini_set('post_max_size', '1024M'); 
ini_set('max_input_time', 10000); 
ini_set('max_execution_time', 10000); 
+1

実行php_infoを()。通常はupload_max_filesizeをini_setで設定することはできません – SimSimY

+0

あなたはそうです、それはini_setで設定されていません。しかし、それはホストによって100Mに設定されています。これは99MBのファイルで十分でしょうか? また、max_input_timeは60に設定されていますが、それも低くはありませんか? –

+0

私は、99MBのファイルを100MB制限でアップロードするのは危険であると言います。ヘッダー、制御パケットなどは10%増やす必要があります.60MBの100MBは1.7mb/sのアップロード速度(13.5Mbのアップロードリンク)です。おそらく十分ではありません – SimSimY

答えて

3

は、それがコメントで掘るより正確ではなく読むことができるように、解決策として、それを書き留めます。

  • (あなたphp_infoを確認してください)ini_setコマンドの後に、いくつかの設定 変数は、スクリプトから変更することはできません大きなアップロードを制御〜6つの異なる 値があります。それらすべてをチェックしてください(リストと の黙示はhereです)
  • 実際のエラーについては、 error_logファイルをチェックインしてください。 (またはaccess_logを確認して を確認してください。サーバから返されたリクエストステータスは何ですか)
  • リクエストを制限するアプリケーションファイアウォールまたはApache設定 時間がある可能性があります。この場合、「 接続リセット」などの応答コードが表示されます。

W3Scools upload script試してみてください:ini_set後

<?php 
if (true) 
    { 
    if ($_FILES["file"]["error"] > 0) 
    { 
    echo "Return Code: " . $_FILES["file"]["error"] . "<br />"; 
    } 
    else 
    { 
    echo "Upload: " . $_FILES["file"]["name"] . "<br />"; 
    echo "Type: " . $_FILES["file"]["type"] . "<br />"; 
    echo "Size: " . ($_FILES["file"]["size"]/1024) . " Kb<br />"; 
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />"; 

    if (file_exists("upload/" . $_FILES["file"]["name"])) 
     { 
     echo $_FILES["file"]["name"] . " already exists. "; 
     } 
    else 
     { 
     move_uploaded_file($_FILES["file"]["tmp_name"], 
     "upload/" . $_FILES["file"]["name"]); 
     echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; 
     } 
    } 
    } 
else 
    { 
    echo "Invalid file"; 
    } 
?> 
+0

私はすべてを点検し、それはまだ失敗する。すべての設定変数は巨大な値に設定されていますが、error_logファイルはきれいで、access_logは常にOK 200と表示されます。ここでは失われています。\ –

+0

アクセスログの最後の行をアップロードできますか?最後のパラメータは応答サイズでなければなりません。あなたはいくつかの "エコー"コマンドを置くことができ、scrpitがどのくらい離れているかを見ることができます。ところで、小さなファイルをアップロードするとどうなりますか?私が追加したスクリプトを試してみてください。 – SimSimY

+0

php://入力内でファイルを取得している場合、そのスクリプトを使用できますか? –

関連する問題