Подскажите код получения ответа сервера

Тема в разделе "Thunder 3.X", создана пользователем ddn128, 26 апр 2017.

  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Внимание!!! До 1 Мая, скидка 30% на Thunder 3 и MassSiteProxy в магазине. http://ifirestarter.ru
    76197935908C47D5
    DB8D53C51B1B4292
    ECE321C0FEAA401A
    BC91C339687A45BF
    D2B06542439C4948
    400AF79DD3C64D5A
    C244061C86A64B01
    6E1B8B292E944D0D
    354131281E244BD3
    A11B629F8F97427F
  1. ddn128

    ddn128 Опытный Пользователь

    31 дек 2015
    507
    232
    Мужской
    Собственно есть
    Код:
    <?php
    
    $url = 'http://ya.ru';
    $headers = get_headers($url);
    
    echo substr($headers[0], 9, 3);
    ?>
    
    Т.е. проверяем лик и получаем ответ сервера.
    В шабе такое
    Код:
    {%  set response = php_get_headers(url) %}
    не работает :(
    Собственно как эту ф-цию оформить в плагин? Чё-то мне не хватает моска
    Или мож. есть другое решение?

    P.S. Зачем это? Например при кешировании картинок, если картинка битая, то получим всеми любимый
    " Slim Application Error "
    а так, зная ответ заранее, можем либо подставить другую картинку, либо не кешировать, либо ... - стр. сгенерится.
    ХЗ, мож и с таймаут CURL так можно будет победить. А может и нед.
     
  2. Art

    Art Участник

    23 фев 2017
    28
    9
    Мужской
    php\html\css developer
    Вобще интересная мысль проверять перед загрузкой.
    Если что-то сделаю номральное отпишусь.
    Пока мне хватает, того что сделал небольшой fix фунции кеширования изображений:

    PHP:
    $url_arr preg_split('/[\?#]/'$url);
    $info = new SplFileInfo($url_arr[0]);
    Заметил что ссылки на изображения иногда приходять, типа:
    image.jpg?bla=bla
    image.jpg#bla

    и я их предварительно разделяю по этим знакам (#,?), чтобы ошибка не выскакивала.

    А Curl разве из-за битых ссылок выскакивает? С локалки тестишь или с сервера?
     
  3. ddn128

    ddn128 Опытный Пользователь

    31 дек 2015
    507
    232
    Мужской
    #3 ddn128, 26 апр 2017
    Последнее редактирование: 26 апр 2017
    я чищу регуляркой

    Код:
    {% set patterns_i = ['/\\.jpg.*/','/\\.jpeg.*/','/\\.png.*/','/\\.gif.*/' ] %}
    {% set replacements_i = ['.jpg','.jpeg','.png','.gif'] %}
    {% set img_rpl_h = php_preg_replace(patterns_i,replacements_i,post_images[0]) %}
    
    нет, но там же явно не 200 приходит (подозреваю 500) ещё не отлавливал, вот этот ответ думаю (в теории) можно отловить и отослать запрос ещё раз или взять др. ПС или не вывести без парсинга - кому как.
    Да, долго, но зато стр. сгенерится
     
  4. Art

    Art Участник

    23 фев 2017
    28
    9
    Мужской
    php\html\css developer
    Ок, норм вариант.

    Сейчас попробовал у себя на первом баннере с яндекса:
    Код:
    {%  set response = php_get_headers('https://awaps.yandex.net/0/c1/tx21lszVAoU5vGvVMTT5HdeOV1qDKWHxMRU7tbdyzVD-oRt4SwT6mrHeS97Hv_tv6T-AvcjIjDS99mUT-z+YpPAtsGLpfQwJSsbHqq2+0fwwNQvEZ-NhxJUyisP_tobp2kt9IQSXxlekB4DGbD9K0NRe3JBZSvDxcTzyxtxC+CicWowIJQ5pjM+Za_tkwy9CB3tmMruKe4gNh+vkc2hJkMmfFqgb-wzEDKRYA5HChiaTOB+0EwRawn+_tRWN7O207OPINGLsAWAqKiaJI8TqYv8hs0kWyfD0KGuWQZof0UAEh9hFwrQzu_tVczaU0oyrlVzU+jNJehf0rx8EVf3S9yLGAu6uwZ4mbPgGxMmDb5EpOUDlJrq_t4dGafKjDLbImks08957OrlqREF31-NyZxaLy3O4NhFRccEegEhqY9F6PfDpl_VWdNA9ktgbkMb2Q4CEn++RKI6Asq4_A_.gif') %}
    {{ php_print_r(response) }}
    
    В ответ получил такое:
    Код:
    Array
    (
        [0] => HTTP/1.1 200 OK
        [1] => Server: nginx
        [2] => Date: Wed, 26 Apr 2017 15:26:07 GMT
        [3] => Content-Type: image/png
        [4] => Content-Length: 10060
        [5] => Connection: close
        [6] => Cache-Control: no-cache, no-store, must-revalidate, max-age=5
        [7] => P3P: CP="NOI DEVa TAIa OUR BUS UNI STA"
        [8] => Access-Control-Allow-Credentials: true
        [9] => Accept-Ranges: bytes
    )
    1

    А у тебя вобще не работает или не работает только с битыми ссылками?
     
    ddn128 нравится это.
  5. ddn128

    ddn128 Опытный Пользователь

    31 дек 2015
    507
    232
    Мужской
    точно, на серваке робит. А на локалке скотина не хочет :(
     
  6. Art

    Art Участник

    23 фев 2017
    28
    9
    Мужской
    php\html\css developer
    Ну да, у меня на локалке тоже иногда Curl timeout при загрузке изображений выскакивает.
     
  7. ddn128

    ddn128 Опытный Пользователь

    31 дек 2015
    507
    232
    Мужской
    Угу. Раньше всегда работал напрямую с серв., пока "тру" прогр. не начали чмырить :) - типо нафига, если можно на локалке - а вот фигушки, оказывается - возвращаюсь на серв.
     
  8. Art

    Art Участник

    23 фев 2017
    28
    9
    Мужской
    php\html\css developer
    #8 Art, 20 июн 2017
    Последнее редактирование: 20 июн 2017
    ...
     
  9. Art

    Art Участник

    23 фев 2017
    28
    9
    Мужской
    php\html\css developer
    Сорри, плохо протестил.) Оказалось, не работает с этим параметром. Я лучше затру прошлое сообщение.
     
  10. Art

    Art Участник

    23 фев 2017
    28
    9
    Мужской
    php\html\css developer
    Нашлось банальное решение, чтобы не ловить ошибку Curl :

    Код:
            $options = array(
                'follow_redirects' => true,
                'useragent'=>'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36',
                'cookies' => $this->container['cookie']
            );
            try {
    
                $response = Requests::get($url,array(), $options);
    
                if($response->success === false){
    
                    return null;
                }
    
            } catch (Requests_Exception $e) {
    
                return null;
            }
    
    т.е. если вдруг бан по ip и еще что-то , то просто отдаст null , а не ошибку :)
    кстати ютуб меня начал банить, когда много обращений с одной ip
     
    ddn128 нравится это.
  11. Glokken

    Glokken Участник

    26 окт 2015
    144
    32
    Мужской
    А куда все это пихать??? Как использовать? Для чайников, плиз! :)
     
    heyner нравится это.
  12. Art

    Art Участник

    23 фев 2017
    28
    9
    Мужской
    php\html\css developer
    Это нужно в плагинах поискать вот эту строчку:
    Код:
    $response = Requests::get($url,array(), $options);
    и просто обернуть ее в try catch:
    Код:
    try {
    
                $response = Requests::get($url,array(), $options);
    
                if($response->success === false){
    
                    return null;
                }
    
            } catch (Requests_Exception $e) {
    
                return null;
            }