Моя версия 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 - Keep-Alive: 3 "
Если размер файла несколько велик (около 15 Мб), любой браузер показывает сообщение о тайм-ауте через 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. Заранее спасибо.