2017-03-29 12 views
1

ajaxを使用して大きなファイルをアップロードしています。アップロード速度は良いですが、進行状況バーが100%になると、長い待ち時間があり、このエラーが発生します。PHPが大容量のファイルをアップロードするのに時間がかかり、エラーが発生する

リソースのロードに失敗しました:サーバーは504(ゲートウェイタイムアウト) - upload.php

ファイルは宛先フォルダに表示されますが、サーバの応答はありません。

これは小さなファイルには発生しません。 Tempフォルダからmove_uploaded_fileを移動先のフォルダに移動するのに時間がかかるようです。

var xhr, hUploadSpeed; 
     function sendFile() 
     { 
      document.getElementById("serverresponse").innerHTML = "";//clear previous server response 

      var url = "http://www.example.com/wp-content/themes/theme1/file-upload/upload.php"; 
      var formData = new FormData(document.getElementById("form1")); 
      xhr = new XMLHttpRequest(); 

      xhr.upload.addEventListener('progress', uploadProgress, false);//EventListener for upload progress 
      xhr.addEventListener('abort', uploadAbort, false);//EventListener for abort 
      xhr.addEventListener('error', uploadError, false);//EventListener for error 
      xhr.addEventListener('load', uploadThrough, false);//EventListener for completed upload 

      xhr.open("POST", url, true); 
      //xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); //no longer necessary here 
      xhr.onreadystatechange = function() 
      { 
       if(xhr.readyState == 4 && xhr.status == 200) 
       { 
        document.getElementById("serverresponse").innerHTML = xhr.responseText; 
       } 
      } 

      xhr.send(formData); //Send to server 
      hUploadSpeed = setInterval(UploadSpeed, 1000); //per seconds 
     } 

Upload.php

//You can access the uploaded files through $_FILES 
if(isset($_FILES["file1"])) 
    $target_file = $_SERVER['DOCUMENT_ROOT']."/videos/".$_FILES["file1"]['name']; 
    move_uploaded_file($_FILES["file1"]["tmp_name"], $target_file); 

echo "File uploaded successfully."; 

これは小さなファイルの50メガバイトと完璧に動作しますが、私は300メガバイトの周りのファイルを取得する場合。それはずっとかかりますか?

私はこのphp.iniの持つ専用サーバー

upload_max_filesize = 1200M 
post_max_size = 1200M 
max_input_vars = 1000 
memory_limit = -1 
max_file_uploads = 20 
max_execution_time = 7200 
max_input_time = 7200 
max_input_vars = 1000 

なぜそれはそう長くはかからないがありますか?どのように私は解決するのですか?

+0

あなたのPHPのバージョンとOSはどうですか? – neoteknic

+0

OS:CloudLinux 7.3およびPHP 5.6 – mdnba50

+0

正確なPHPバージョンをご覧ください。 – neoteknic

答えて

2

アップロードに影響するmemory_limitにはphp.iniもあります。 php.iniはサーバーの設定ファイルです。

はあなたのphp.iniファイルに以下の値を増加する必要があります。

php_value upload_max_filesize 10M 
php_value post_max_size 10M 
php_value max_input_time 300 
php_value max_execution_time 300 

し、その後、サーバーを再起動します。

+0

一週間前にphp.iniに変更を加えました。変更を行うにはまだサーバーを再起動する必要がありますか? – mdnba50

+0

@ mdnba50 [それによります](// stackoverflow.com/questions/12892331/do-i-need-to-restart-apache-after-changing-the-php-ini-file) – Ivar

1

あなたの問題はこのPHPバグになる可能性があると思います。 https://bugs.php.net/bug.php?id=73807 あなたはphp configです。

7および7.1ブランチで修正されました。今ではPHP 5.6ではありません。たぶんすぐに。 PHPを待つことができない場合、あなたのアプリを7.1にアップグレードする(パフォーマンスは2倍以上速くなる)5.6.30

+0

PHPにアップグレードしようとしました7.1と私は**私はwordpressを使用しているため、** MySQLの拡張機能がありません**エラーが発生します。どうすればPHP 5.6.30にアップグレードできますか?私はドロップダウンでそれを見ない。 PHP 7+ mysql拡張の – mdnba50

+1

がなくなったら、mysqliを使用する必要があります。新しいWordPressのバージョンはPHP 7+をサポートしています。 WPバージョンをアップグレードするか、configでpdo/mysqliを使用できますか?私はあなたのシステムとPHP 5.6.30を知らないので、このバグを修正しないでください。5.6.30以降のバージョンが必要です。私はPHP 7.1のためにアップグレードするのに時間がかかることはありません(高速なウェブサイトなど...) – neoteknic

+0

ありがとう!これは問題を解決した、私はサーバーの応答を得るが、FTPを介して見て、ファイルが表示されるのに時間がかかりますか?私はFTPをリフレッシュし、ファイルは表示されますがフルサイズは表示されません。すべてのリフレッシュとサイズはフルサイズになるまで増加します。これは私が変えることができるものですか?ファイルはすぐに利用可能になるはずです。 – mdnba50

関連する問題