Невозможно установить CURLOPT_NOBODY без сбоя curl_exec - PullRequest
0 голосов
/ 25 ноября 2010

Я убивал себя весь день за эту ошибку.Я не могу сказать вам достаточно, насколько я был бы признателен за любую возможную помощь в этом.

По сути, у меня есть очень простой сценарий.Он заходит на веб-сайт, просматривает заголовок файла, чтобы увидеть, является ли это тип изображения, а затем загружает его.Затем он повторяет это три раза.

Проблема в том, что я не могу установить CURLOPT_NOBODY без curl_exec, вызывающего сбой всего скрипта с ошибками -no-.(Я даже не могу позвонить или получить curl_error!) Может показаться, что я не могу перейти от CURLOPT_NOBODY, true к CURLOPT_NOBODY, false.Цикл ниже запускается один раз, а затем умирает ().

Что может быть причиной этой ошибки?

Вот скрипт:

// Log into the Website
curl_setopt($ch, CURLOPT_URL, 'http://myexample.com/login');
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.12) Gecko/2009070611 Firefox/3.0.12");
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_exec($ch);

// Begin the Loop for Finding Images
for($i = 0; $i < 3; $i++) {
    curl_setopt($ch, CURLOPT_URL, 'http://myexample.com/file.php?id=' . $i);
    curl_setopt($ch, CURLOPT_NOBODY, true);
    curl_setopt($ch, CURLOPT_HEADER, true);
    $output = curl_exec($ch) or die('WHY DOES THIS DIE!!!');
    $curl_info = curl_getinfo($ch);
    echo '<br/>' . $output;

    // (Normally checks for content type here) Download the File
    curl_setopt($ch, CURLOPT_URL, 'http://myexample.com/file.php?id=' . $i);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_NOBODY, false);
    $filename = 'downloads/test-' . $i . '.jpg';
    $fp = fopen($filename, 'w');
    curl_setopt($ch, CURLOPT_FILE, $fp);
    curl_exec($ch);
    fclose($fp);
}

Я бегуApache 2.2 и PHP версии 5.2.13.Спасибо за любую помощь - я не могу сказать вам, как я буду благодарен.Я полностью застрял здесь.(

1 Ответ

1 голос
/ 25 ноября 2010

Мне кажется, что библиотека curl запуталась, особенно если вы повторно используете ресурс.

вы должны сделать

$ch = curl_init();
// do stuff with curl
curl_close($ch);
$ch = curl_init();
// another curl call
curl_close($ch);
$ch = curl_init();
// yet another curl call
curl_close($ch);

Мне выдавались те же ошибки при выполнении вашего скрипта, но добавление в curl_close и curl_init для повторной инициализации, похоже, решило проблему. Я не знаю, приемлемо ли это, если нет. Я бы использовал fopen () для загрузки http, это намного более интуитивно понятно, чем использование curl, если только вам не нужно что-то, что не поддерживается в fopen.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...