我用timeout和set_time_limit设置了所有选项,但这没有帮助。CURL在40秒后得到500错误。在远程服务器上开始漫长的过程,我需要等待完成。如果文件很小-没问题,如果文件很大-在40秒后得到500个错误。这是我的代码:
$curl = curl_init("http://example.com/index.php?page=uploads");
curl_setopt($curl, CURLOPT_POST, 1);
$datas = array(
"id" => $id,
"video" => $filename->new_file_name,
"title" => $_POST["title"],
"description" => $_POST["description"],
"category" => array($_POST["category"]),
"location" => $_POST["location"],
"check" => $check,
"start" => $start,
"duration" => $duration
);
$data = json_encode($datas);
$fp = fopen(dirname(__FILE__).'/errorlog.txt', 'w');
curl_setopt($curl, CURLOPT_VERBOSE, 1);
curl_setopt($curl, CURLOPT_STDERR, $fp);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($curl, CURLOPT_TIMEOUT_MS, 900000);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_NOSIGNAL, 1);
curl_setopt($curl, CURLOPT_FRESH_CONNECT, 1);
curl_setopt($curl, curl_exec, 0);
curl_exec($curl);
print_r(curl_getinfo($curl));
curl_close($curl);
我知道这是旧的,海报可能没有同样的问题,但是:
解决HTTP 500错误,读取apache错误日志文件。
如果你在40秒后收到一个HTTP500,那么可能在你的日志文件中的错误是"mod_fcgid:在40秒内读取数据超时",这不是通过增加你的PHP执行超时而是增加FcgidIOTimeout默认为40秒来解决的。
http://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html fcgidiotimeout
这可以通过在fcgid.conf文件中添加/修改以下行来完成。
FcgidIOTimeout 120
HTTP500
错误表示存在服务器端错误。
检查web服务器(Apache?)或应用服务器(Php?)日志,以便能够调试问题。
HTTP500状态说明:http://www.checkupdown.com/status/E500.html