我的PHP版本是5.2.9p2。 这个典型的代码是我用来将文件发布到另一台服务器的。
$post_url = "http://www.website.com/upload";
$post_data['file'] = "@$filePath";
$post_data['title'] = "title";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $post_url);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_nm);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_nm);
$return = curl_exec($ch);
我正在使用共享服务器,其Apache设置说 “超时连接:180 - 保持活力:3 ”
如果文件大小有些大(大约15Mb),任何浏览器都会在3分钟内显示超时消息,然后没有任何反应。但是,文件已成功传输。只是浏览器没有显示其结果。
[编辑]
我认为,因为在脚本完成之前没有加载任何内容,所以会导致超时。 我添加了“ curl_setopt($ ch,CURLOPT_NOPROGRESS,false); ”,但它没有做任何事情。我想它根本不起作用。 我还尝试使用他们的文件上传API(SOAP)下面的代码。
function stream_notification_callback($notification_code, $severity, $message, $message_code, $bytes_transferred, $bytes_max) {
echo $notification_code . $severity . $message . $message_code . $bytes_transferred . $bytes_max;
}
$ctx = stream_context_create();
stream_context_set_params($ctx, array("notification" => "stream_notification_callback"));
$post_data["file"] = file_get_contents("files/$fileName", false, $ctx);
但是,它没有运行“stream_notification_callback”功能。
是否有任何解决方案可以避免Apache超时? 我无法编辑Apache设置。提前谢谢。