3

私はajaxとPHPでアップロードスクリプトを使用していますが、80MB未満のファイルでは驚異的に機能します。ただし、ファイルが80MBより大きい場合は失敗し、何も出力されません。

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

$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 MB未満のほとんどすべてのファイルで正常に機能しますが、80 MBを超えるファイルでは出力されないため、設定しても何が問題になっているのかさえわかりません。

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);
4

1 に答える 1

3

コメントを掘り下げるのではなく、正しく読めるように解決策として書き留めましょう。

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

W3Scools アップロード スクリプトを試してください:

<?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";
  }
?> 
于 2012-04-22T15:13:15.977 に答える