Различия cURL на хостингах

Discussion in 'PHP' started by GlooK, 2 Jan 2010.

  1. GlooK

    GlooK Elder - Старейшина

    Joined:
    20 Apr 2007
    Messages:
    172
    Likes Received:
    53
    Reputations:
    10
    Странная ситуация - не пойму в чем дело.

    Написан скрипт на PHP, использующий cURL.
    На моем локалхосте (Linux) все сносно работает.

    Заливаю на другие хостинги - болт!
    Делаю запросы в RU зону - никаких данных cURL не получает, даже хидеры (например, yandex.ru, vkontakte.ru, rambler.ru).
    Сделал запрос в зону .NET, ответ приходит.

    Возможно ли, что хостинг ограничивает cURL?
    Или какие-то настройки по дефолту не те стоят?
     
    1 person likes this.
  2. Deathdreams

    Deathdreams Elder - Старейшина

    Joined:
    8 Nov 2008
    Messages:
    342
    Likes Received:
    116
    Reputations:
    5
    Код в студию
     
  3. GlooK

    GlooK Elder - Старейшина

    Joined:
    20 Apr 2007
    Messages:
    172
    Likes Received:
    53
    Reputations:
    10
    PHP:
    <?php
    function curl($url$post ''$binary 0) {
    global 
    $cookie;
    $ch curl_init();
    curl_setopt($chCURLOPT_URL$url); 
    curl_setopt($chCURLOPT_HEADER0); 
    curl_setopt($chCURLOPT_POST1); 
    curl_setopt($chCURLOPT_POSTFIELDS$post); 
    curl_setopt($chCURLOPT_COOKIE$cookie);
    curl_setopt($chCURLOPT_BINARYTRANSFER$binary); 
    curl_setopt($chCURLOPT_TIMEOUT60);
    curl_setopt($chCURLOPT_FOLLOWLOCATION0); 
    curl_setopt($chCURLOPT_RETURNTRANSFER1); 
    $result curl_exec($ch); 
    curl_close($ch);
    return 
    $result;}
    ?>
    Думаю решение нашел http://icebeer.livejournal.com/19772.html
    Тестирую...
     
  4. Deathdreams

    Deathdreams Elder - Старейшина

    Joined:
    8 Nov 2008
    Messages:
    342
    Likes Received:
    116
    Reputations:
    5
    PHP:
    <?php
    function curling($url$post '') {
    global 
    $cookie;
    $ch curl_init();
    curl_setopt($chCURLOPT_URL$url); 
    curl_setopt($chCURLOPT_HEADER1); 
    if(!empty(
    $post)){
    curl_setopt($chCURLOPT_POST1); 
    curl_setopt($chCURLOPT_POSTFIELDS$post); 
    }
    curl_setopt($chCURLOPT_COOKIE$cookie);
    curl_setopt($chCURLOPT_TIMEOUT15);
    curl_setopt($chCURLOPT_RETURNTRANSFER1); 
    $result curl_exec($ch); 
    curl_close($ch);
    return 
    $result;
    }
    ?>
    ну попробуйте сделать обычный запрос к гуглу:
    curling('http://www.google.ru');
     
  5. GlooK

    GlooK Elder - Старейшина

    Joined:
    20 Apr 2007
    Messages:
    172
    Likes Received:
    53
    Reputations:
    10
    Хостинг: forsite.org
    Запрос на www.google.com - проходит!
    Запрос на www.google.ru - не проходит!

    Видимо дело в хостинге.
    Хостинг фришный, поэтому скорей всего и режут запросы (интересно как?)

    На другом хостинге (www.abris.com.ua) тоже не работает, но там что-то другое.
    К сожалению, возможности протестировать на нем не было, хост не мой.
    Буду искать выходы, о результатах отпишусь.
     
  6. programming

    programming New Member

    Joined:
    26 Aug 2009
    Messages:
    190
    Likes Received:
    3
    Reputations:
    0
    Из фришных проблемы не возникают только с free-web-host.me
    С другими траблы..
     
    1 person likes this.
  7. GlooK

    GlooK Elder - Старейшина

    Joined:
    20 Apr 2007
    Messages:
    172
    Likes Received:
    53
    Reputations:
    10
    Спасибо за ссылку! Отпишусь о результатах ;)

    UPD:
    Скрипт заработал!
    Только на хостинге не выполняется set_time_limit(0);
    Из-за чего скрипт не обновляется онлайн.
     
    #7 GlooK, 2 Jan 2010
    Last edited: 2 Jan 2010
  8. Dark_Scorpicore

    Joined:
    4 Apr 2009
    Messages:
    53
    Likes Received:
    8
    Reputations:
    0
    GlooK, если бы (не дай бог) set_time_limit(0); работал, вас бы выпилили на след. день :) Представляете, сколько системных ресурсов потребуется? На всех хостах по 30-60 сек обновление стоит дефолтом, если, конечно не vds и права рута :D
     
  9. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    Dark_Scorpicore, ну и сколько сис. ресурсов потребуется? set_time_limit ставит всего лишь лимит время выполнения скрипта, и не больше. А кол-во пожираемых сис. ресурсов зависит от самого скрипта + на любом адекватном хостинге стоят ограничения на эти ресурсы, по этому никого и не "выпиляют".
     
    1 person likes this.
  10. GlooK

    GlooK Elder - Старейшина

    Joined:
    20 Apr 2007
    Messages:
    172
    Likes Received:
    53
    Reputations:
    10
    Ну не знай...
    На iphoster.ru, хостинг за 0.7$ другой скрипт, который выполнял те же функции - работал.

    UPD:
    Установил Денвер. Попробовал на нем - скрипт не заработал.
    Оказалось, что на денвере по умолчанию нет cURL.
    Установил расширение PHP 5, и раскомментировал в php.ini строку extension.
    Всё заработало! ;)
     
    #10 GlooK, 2 Jan 2010
    Last edited: 2 Jan 2010
  11. Deathdreams

    Deathdreams Elder - Старейшина

    Joined:
    8 Nov 2008
    Messages:
    342
    Likes Received:
    116
    Reputations:
    5
    Время выполнение скрипта можно установить не только через set_time_limit ;)
    Set_time_limit() в 90% случаях на фришках отключают.
     
  12. GlooK

    GlooK Elder - Старейшина

    Joined:
    20 Apr 2007
    Messages:
    172
    Likes Received:
    53
    Reputations:
    10
    Зачем интригуешь? :)
    Рассказывай давай!

    P.S. Посоветуйте легкий win-сервер Apache + PHP, желательно без установки.
     
  13. Deathdreams

    Deathdreams Elder - Старейшина

    Joined:
    8 Nov 2008
    Messages:
    342
    Likes Received:
    116
    Reputations:
    5
    Около 50% хостеров забывают о существовании такой великолепной функции - ini_set()
    Вот с помощью неё и можно снять все эти ограничения.
    Вот, что нужно сделать, чтобы поставить set_time_limit = 0:
    PHP:
    <?php
    @ini_set('max_execution_time'0);
    ?>
    Лично я знаю хостинг, отличный, где запрещены все такие функции, как:
    set_time_limit, ignore_user_abort и т.п.
    Там они легко устанавливаются через ini_set.
     
    1 person likes this.