最近有一個文件上傳超時問題,我的系統上有許多用戶正在經歷這個問題。基本上,用戶全天登錄上傳系統,通常以1-10個文件批量發送通常爲1-3MB的文件。當用戶上傳文件或批處理一段時間時,dropzone文件上傳失敗,並向用戶發送一條消息「服務器響應0代碼」。此問題有時只會發生,但如果我嘗試上傳需要幾分鐘上傳的大文件,我可以隨時輕鬆地複製該問題。到目前爲止,我已經搜索並嘗試了很多東西,但問題仍然存在。Laravel,Dropzone.js,Apache文件上傳超時
如果上傳成功,則文件將被保存到服務器上的一個位置,並且有關每個文件的信息將存儲在數據庫中。
該系統使用Laravel PHP,Dropzone.js,Mysql和Apache構建。下面是關於錯誤日誌,配置文件和我嘗試過的東西的一些信息。
下面介紹一下laravel錯誤日誌上傳後報告失敗:
[2014-10-02 15:52:26] log.ERROR: exception 'Symfony\Component\HttpKernel\Exception\NotFoundHttpException' in /usr/www/www.example.com/beta/vendor/laravel/framework/src/Illuminate/Routing/Router.php:1429
Stack trace:
#0 /usr/www/www.example.com/beta/vendor/laravel/framework/src/Illuminate/Routing/Router.php(1050): Illuminate\Routing\Router->handleRoutingException(Object(Symfony\Component\Routing\Exception\ResourceNotFoundException))
#1 /usr/www/www.example.com/beta/vendor/laravel/framework/src/Illuminate/Routing/Router.php(1014): Illuminate\Routing\Router->findRoute(Object(Illuminate\Http\Request))
#2 /usr/www/www.example.com/beta/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(576): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#3 /usr/www/www.example.com/beta/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(552): Illuminate\Foundation\Application->dispatch(Object(Illuminate\Http\Request))
#4 /usr/www/www.example.com/beta/public/index.php(49): Illuminate\Foundation\Application->run()
#5 {main} [] []
[2014-10-02 15:52:29] log.ERROR: exception 'Symfony\Component\HttpKernel\Exception\NotFoundHttpException' with message 'Controller method not found.' in /usr/www/www.example.com/beta/vendor/laravel/framework/src/Illuminate/Routing/Controllers/Controller.php:290
Stack trace:
#0 [internal function]: Illuminate\Routing\Controllers\Controller->missingMethod(Array)
#1 /usr/www/www.example.com/beta/vendor/laravel/framework/src/Illuminate/Routing/Controllers/Controller.php(138): call_user_func_array(Array, Array)
#2 /usr/www/www.example.com/beta/vendor/laravel/framework/src/Illuminate/Routing/Controllers/Controller.php(115): Illuminate\Routing\Controllers\Controller->callMethod('missingMethod', Array)
#3 /usr/www/www.example.com/beta/vendor/laravel/framework/src/Illuminate/Routing/Router.php(985): Illuminate\Routing\Controllers\Controller->callAction(Object(Illuminate\Foundation\Application), Object(Illuminate\Routing\Router), 'missingMethod', Array)
#4 [internal function]: Illuminate\Routing\Router->Illuminate\Routing\{closure}(Array)
#5 /usr/www/www.example.com/beta/vendor/laravel/framework/src/Illuminate/Routing/Route.php(80): call_user_func_array(Object(Closure), Array)
#6 /usr/www/www.example.com/beta/vendor/laravel/framework/src/Illuminate/Routing/Route.php(47): Illuminate\Routing\Route->callCallable()
#7 /usr/www/www.example.com/beta/vendor/laravel/framework/src/Illuminate/Routing/Router.php(1016): Illuminate\Routing\Route->run(Object(Illuminate\Http\Request))
#8 /usr/www/www.example.com/beta/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(576): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#9 /usr/www/www.example.com/beta/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(552): Illuminate\Foundation\Application->dispatch(Object(Illuminate\Http\Request))
#10 /usr/www/www.example.com/beta/public/index.php(49): Illuminate\Foundation\Application->run()
#11 {main} [] []
下面是Apache的(httpd.conf)中的一些設置:
KeepAlive On
MaxKeepAliveRequests 500
KeepAliveTimeout 5
ServerLimit 513
MaxClients 100
MaxRequestsPerChild 10000
我都以不同的方式改變這些設置例如將超時/最大客戶端數增加到500,但結果仍然相同。在某個特定時間上傳失敗,似乎完全忽略了這些設置。
這裏是在php.ini
default_socket_timeout = 500
mysql.connect_timeout = 500
max_execution_time = 1200
max_input_time = 1200
file_uploads = On
max_file_uploads = 50
post_max_size = 2047M
upload_max_filesize = 2047M
memory_limit = 258M
這裏的一些設置年代laravel .htaccess文件
Options -Indexes
我也試圖改變dropzone.js AJAX加入「xhr.timeout =上傳代碼4000" 。通過將這一行添加到dropzone.js,上傳將部分上傳到進度條中,但不會變成紅色並失敗。上傳會永遠停頓,這讓我認爲問題出現在laravel或服務器上,但我不確定這一點。沒有這些代碼,在我看來,在某些隨機時間的AJAX請求只會被服務器/ laravel丟棄,並且文件上傳失敗。更令我感到奇怪的是,這個錯誤剛剛發生。系統運行平穩,並在此之前上傳文件數月。
我非常感謝在這個問題上的任何頭腦風暴,反饋或幫助。
謝謝
UPDATE:
我加入這一行我filters.php文件,看看有什麼遺漏的路線是......
App::missing(function($exception)
{
Log::error('Missing URL was: ' . Request::fullUrl());
});
我能夠刪除所有從我的laravel錯誤日誌中發現「NotFoundHTTPException ...」和「Controller method not found ...」錯誤。但是,文件上傳仍然會隨機失敗,但現在在laravel錯誤日誌中沒有報告錯誤。 dropzone ajax上傳請求只是在隨機時間下降,並返回狀態代碼0.
任何人有任何想法,我應該嘗試下一步解決此問題?
我認爲你的ajax請求超時。 1)[http://stackoverflow.com/questions/3825581/does-an-http-status-code-of-0-have-any-meaning][1] 2)[HTTP ://stackoverflow.com/questions/6578834/chrome-timeout-ajax-request-after-120-seconds] [2] [1]:http://stackoverflow.com/questions/3825581/ do-an-http-status-code-of-any-any-meaning [2]:http://stackoverflow.com/questions/6578834/chrome-timeout-ajax-request-after-120-seconds – erickallemeyn 2014-10-03 20:34:51
看來網絡上的其他網站一直沒有收到任何迴應當服務器正在加載時,服務器也在服務器上。我只知道這個網站有加載問題。我相信問題與服務器有關。可能需要將該網絡上的一些網站加載到另一臺服務器上。 – hopefulcd 2014-10-03 21:00:11