2015-08-06 2 views
0

просьбы об Окей, я сделал сценарий проверки, если файл существует, но заголовок я получил от Curl плохоCurl получить заголовок с получить не голову

$curl = curl_init($url); 
    curl_setopt($curl, CURLOPT_NOBODY, true); 
    curl_setopt($curl, CURLOPT_HEADER, true); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); 
    curl_setopt($curl, CURLOPT_FRESH_CONNECT, true); 
    $data = curl_exec($curl); 
    var_dump($data); 

и это заставляет меня Ответный 200 в то время как @file_headers() получает меня логический ложь, что право файл не может быть загружен (сброс соединения одноранговой)

я хотел бы использовать file_headers, но его muuuch медленнее, чем ротор (проверка около 10к файлов)

любая идея, как исправить скручивание, чтобы заставить его показывать это правильно, если файл существует?

FYI curl_getinfo ($ curl, CURLINFO_HTTP_CODE); показывает 200 слишком

* Я имею в виду, если файл сбрасывается пэром, потому что Керл обнаруживает, если файл существует безотказно (делая запрос Head), а get_headers) использовать (получить запрос по умолчанию, есть способ заставить Curl сделать прибудет запрос?

после добавления curl_setopt ($ curl, CURLOPT_HTTPGET, true); Когда я войти локон я вижу: * Пустой ответ от сервера, при получении «сбросить пэр» файл, но это загружает весь мой файл

хорошо, я думаю, что Ive сделал обходной путь добавления curl_setopt ($ локон, CURLOPT_RANGE «1 -1"); и загрузка 1 байта вместо получения заголовка, а если false, то файл не существует или не перезагружается пользователем

ответ

0

Сброс происходит после статуса http, так что да, возможно 200 статус.

Ошибка, кажется, запретная или медленная загрузка.

ли это:

  • Укажи агент пользователя в вашем завитка запроса
  • Set (случайное) время ожидания между запросами

Смотрите следующие примеры: PHP cURL how to add the User Agent value OR overcome the Servers blocking cURL requests?

+0

нет, я просто упростил код здесь, я добавил useragent, и сброс равным является правильным ответом для этого файла, я просто хочу поймать такую ​​ошибку cURL, им тестирование один файл только Использование локон я получаю: HTTP/1.1 200 OK Сервер: Nginx Дата: Чт, 6 августа 2015 9:25:05 GMT Content-Type: применение/октет-поток Контент- Длина: 2147483648 Последнее изменение: вс, 10 мая 2015 г. 23:05:19 GMT Подключение: закрыть и я могу ошибиться вместо 200 – klystianek

+0

Как я уже говорил, сброс соединения не влияет на статус http. Во-вторых, http-статус 200 не гарантирует, что файл существует ;-) – schellingerht

+0

так, как правильно его проверить, завивая, если файл существует (даже в случаях, когда соединение сбрасывается одноранговым узлом)? file_headers() ответ мне подходит. Я могу легко поймать эту ошибку, но она медленная, черт возьми, cURLing на 20-30% быстрее для меня. сейчас я понял, что мой главный вопрос должен быть другим :) – klystianek