Странная ситуация - не пойму в чем дело. Написан скрипт на PHP, использующий cURL. На моем локалхосте (Linux) все сносно работает. Заливаю на другие хостинги - болт! Делаю запросы в RU зону - никаких данных cURL не получает, даже хидеры (например, yandex.ru, vkontakte.ru, rambler.ru). Сделал запрос в зону .NET, ответ приходит. Возможно ли, что хостинг ограничивает cURL? Или какие-то настройки по дефолту не те стоят?
PHP: <?php function curl($url, $post = '', $binary = 0) { global $cookie; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); curl_setopt($ch, CURLOPT_COOKIE, $cookie); curl_setopt($ch, CURLOPT_BINARYTRANSFER, $binary); curl_setopt($ch, CURLOPT_TIMEOUT, 60); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($ch); curl_close($ch); return $result;} ?> Думаю решение нашел http://icebeer.livejournal.com/19772.html Тестирую...
PHP: <?php function curling($url, $post = '') { global $cookie; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 1); if(!empty($post)){ curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); } curl_setopt($ch, CURLOPT_COOKIE, $cookie); curl_setopt($ch, CURLOPT_TIMEOUT, 15); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($ch); curl_close($ch); return $result; } ?> ну попробуйте сделать обычный запрос к гуглу: curling('http://www.google.ru');
Хостинг: forsite.org Запрос на www.google.com - проходит! Запрос на www.google.ru - не проходит! Видимо дело в хостинге. Хостинг фришный, поэтому скорей всего и режут запросы (интересно как?) На другом хостинге (www.abris.com.ua) тоже не работает, но там что-то другое. К сожалению, возможности протестировать на нем не было, хост не мой. Буду искать выходы, о результатах отпишусь.
Спасибо за ссылку! Отпишусь о результатах UPD: Скрипт заработал! Только на хостинге не выполняется set_time_limit(0); Из-за чего скрипт не обновляется онлайн.
GlooK, если бы (не дай бог) set_time_limit(0); работал, вас бы выпилили на след. день Представляете, сколько системных ресурсов потребуется? На всех хостах по 30-60 сек обновление стоит дефолтом, если, конечно не vds и права рута
Dark_Scorpicore, ну и сколько сис. ресурсов потребуется? set_time_limit ставит всего лишь лимит время выполнения скрипта, и не больше. А кол-во пожираемых сис. ресурсов зависит от самого скрипта + на любом адекватном хостинге стоят ограничения на эти ресурсы, по этому никого и не "выпиляют".
Ну не знай... На iphoster.ru, хостинг за 0.7$ другой скрипт, который выполнял те же функции - работал. UPD: Установил Денвер. Попробовал на нем - скрипт не заработал. Оказалось, что на денвере по умолчанию нет cURL. Установил расширение PHP 5, и раскомментировал в php.ini строку extension. Всё заработало!
Время выполнение скрипта можно установить не только через set_time_limit Set_time_limit() в 90% случаях на фришках отключают.
Зачем интригуешь? Рассказывай давай! P.S. Посоветуйте легкий win-сервер Apache + PHP, желательно без установки.
Около 50% хостеров забывают о существовании такой великолепной функции - ini_set() Вот с помощью неё и можно снять все эти ограничения. Вот, что нужно сделать, чтобы поставить set_time_limit = 0: PHP: <?php @ini_set('max_execution_time', 0); ?> Лично я знаю хостинг, отличный, где запрещены все такие функции, как: set_time_limit, ignore_user_abort и т.п. Там они легко устанавливаются через ini_set.