cURL + Редирект 302

Тема в разделе "PHP", создана пользователем alexz15, 17 окт 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. alexz15

    alexz15

    Регистр.:
    3 окт 2008
    Сообщения:
    394
    Симпатии:
    191
    Здравствуйте.
    У меня такая задача:
    я веду поиск по определенным картинкам, например с номерами как 12345. они находятся по адресу sayt.ru/12345.jpg и т.д.
    Т.е. я просто отправляю get запрос из формы (12345) и открывается адрес с картинкой (в теге < img >). Но если картинки по этому адресу нет, то происходит редирект 302 (на сайте с картинками). А мне нужно автоматически распознать редирект и начать поиск по другому критерию, например 12345-2.
    Скажите, каким образом мозно распознать редирект и начать новый поиск? Я пробовал с помощью этого:
    PHP:
    $size getimagesize($full_url);
    $fp fopen($full_url"rb");
    if (
    $size && $fp) {
        
    header("Content-type: {$size['mime']}");
        
    fpassthru($fp);
        exit;
    } else { ...
    работает, но открывается очень долго.
    тогда я попробовал с cURL:
    PHP:
    $uagent "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)";

      
    $ch curl_init();
      
      
    curl_setopt($chCURLOPT_URL$full_url);
      
    curl_setopt($chCURLOPT_HEADER0);
      
    curl_setopt($chCURLOPT_RETURNTRANSFER0);
      
    curl_setopt($chCURLOPT_USERAGENT$uagent);
      
    curl_setopt($chCURLOPT_FOLLOWLOCATION0);
      
      
    header("Content-type: {$size['mime']}");
      
      
    $content curl_exec($ch);
      
    $content="HTTP/1.1 ".curl_getinfo($ch,CURLINFO_HTTP_CODE).$content;
      
      
    $out=explode("\r\n",$content);
      return 
    $out
      
    curl_close($ch);
    Но если редирект, то пишет: 302 Found
    Как можно распознать редирект? Может есть другие способы кроме этих. Заранее благодарен.
     
  2. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    591
    В curl есть опция получения заголовков.
    Получайте заголовок и сравнивайте с 302.
     
  3. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    890
    Симпатии:
    558
    То есть как распознать?
    Просто смотришь что вернул скрипт, если там есть напр HTTP/1.1 302 Found. Значит редирект.
     
  4. alexz15

    alexz15

    Регистр.:
    3 окт 2008
    Сообщения:
    394
    Симпатии:
    191
    Вот, вроде работает :) :
    PHP:
    $img '<img src="'.$url.'"></img>';
    //  Проверка доступности URL с помощью CURL
    function check_url2($url) {
        
    $c curl_init();
        
    curl_setopt($cCURLOPT_URL$url);
        
    curl_setopt($cCURLOPT_RETURNTRANSFER0);
        
    header("Content-type: {$size['mime']}");    
        if (!
    curl_exec($c)){return false; }
        
    $httpcode curl_getinfo($cCURLINFO_HTTP_CODE);
        if (
    $httpcode == 301 || $httpcode == 302){ 
        echo 
    'redirect';
        } else {
        echo 
    $img;
        }
        return (
    $httpcode 400);    
    }
    Если что-то неправильно, то поправьте плз.
     
  5. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    хз конечно что у тебя за ситуация

    но обычно редирект идет на адрес картинки которая есть , т.е. в твоем случае на 12345-2.jpg

    для такого случая достаточно
    PHP:
    curl_setopt($chCURLOPT_FOLLOWLOCATION1);
    установи 1 и курл сам будет проходить по редиректам через
    для тебя всебудет прозрачно

    и кстати что бы получать header в ответе курла достаточно
    PHP:
    curl_setopt($chCURLOPT_HEADER1);
    а то я не совсем пойму твои извраты :(
     
  6. alexz15

    alexz15

    Регистр.:
    3 окт 2008
    Сообщения:
    394
    Симпатии:
    191
    В общем, я не сильно пока понимаю пхп, поэтому в кодах могут быть лишние команды и тд.
    ситуация такая:
    sayt.ru - чужой сайт с картинками,
    я хочу найти (и открыть) картинку по адресу sayt.ru/catalog/12345.jpg со своего сайта, подставляя адрес
    PHP:
    $img '<img src="http://sayt.ru/catalog/12345.jpg"></img>';
    , но если ее по этому адресу нет, то происходит редирект на sayt.ru.
    Но эта картинка еще может называться 12345-2.jpg, и, если скрипт видит что редирект, то пытается открыть ее по адресу http://sayt.ru/catalog/12345-2.jpg. Если ее и там нет, тогда Not Found.
    Т.е. я ищу конкретную картинку по конкретному адресу.
    Мне нужна такая функция, которая сразу определит-существует этот адрес или нет, если существует, то открыть картинку, если нет, то проверить другой адрес.
     
  7. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    дай конкретный сайт и адрес картинки
    а тобудем обсуждать Сферического коня в вакууме

    на конкретике гораздо проще разбираться
     
  8. alexz15

    alexz15

    Регистр.:
    3 окт 2008
    Сообщения:
    394
    Симпатии:
    191
    Я делаю скрипт, для удобного просмотра превьюшек на TemplateMonster. Пишу его только ради удобства, т.к. чувствую, что буду частенько их просматривать. Скрипт, конечно, выложу в сети для общего доступа.
    Но загорелось мне сделать более функциональный скрипт. Там обычно все превьюхи заканчиваются на "-b.jpg", но есть и такие, что на "-osc-b.jpg" и еще парочку. Например, как эта 18181-osc-b.jpg.
    Решил использовать курл. но задача курла, должна заключаться Только в проверке на редирект: если редирект, то план Б; если снова редирект - план С.
    Как мне это организовать? Мой последний скрипт вроде работает, только наверно там куча лишнего, а так же он кроме проверки еще и открывает картинку. Нужен совет по этому поводу.
    Голова уже не варит.
     
  9. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    591
    Получай курлом только заголовки и проверяй их, опции CURLOPT_NOBODY и CURLOPT_HEADER.
     
    alexz15 нравится это.
Статус темы:
Закрыта.