PDA

Просмотр полной версии : Различия cURL на хостингах


GlooK
02.01.2010, 16:47
Странная ситуация - не пойму в чем дело.

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

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

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

Deathdreams
02.01.2010, 16:58
Код в студию

GlooK
02.01.2010, 17:05
Код в студию


<?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
Тестирую...

Deathdreams
02.01.2010, 18:00
<?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');

GlooK
02.01.2010, 19:32
Хостинг: forsite.org
Запрос на www.google.com - проходит!
Запрос на www.google.ru - не проходит!

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

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

programming
02.01.2010, 19:59
Хостинг: forsite.org
Запрос на www.google.com - проходит!
Запрос на www.google.ru - не проходит!

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

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

GlooK
02.01.2010, 20:19
Из фришных проблемы не возникают только с free-web-host.me
С другими траблы..
Спасибо за ссылку! Отпишусь о результатах ;)

UPD:
Скрипт заработал!
Только на хостинге не выполняется set_time_limit(0);
Из-за чего скрипт не обновляется онлайн.

Dark_Scorpicore
02.01.2010, 20:54
GlooK, если бы (не дай бог) set_time_limit(0); работал, вас бы выпилили на след. день :) Представляете, сколько системных ресурсов потребуется? На всех хостах по 30-60 сек обновление стоит дефолтом, если, конечно не vds и права рута :D

mailbrush
02.01.2010, 21:01
Dark_Scorpicore, ну и сколько сис. ресурсов потребуется? set_time_limit ставит всего лишь лимит время выполнения скрипта, и не больше. А кол-во пожираемых сис. ресурсов зависит от самого скрипта + на любом адекватном хостинге стоят ограничения на эти ресурсы, по этому никого и не "выпиляют".

GlooK
02.01.2010, 21:08
GlooK, если бы (не дай бог) set_time_limit(0); работал, вас бы выпилили на след. день :) Представляете, сколько системных ресурсов потребуется? На всех хостах по 30-60 сек обновление стоит дефолтом, если, конечно не vds и права рута :D
Ну не знай...
На iphoster.ru, хостинг за 0.7$ другой скрипт, который выполнял те же функции - работал.

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

Deathdreams
02.01.2010, 22:52
Время выполнение скрипта можно установить не только через set_time_limit ;)
Set_time_limit() в 90% случаях на фришках отключают.

GlooK
02.01.2010, 22:59
Время выполнение скрипта можно установить не только через set_time_limit ;)
Set_time_limit() в 90% случаях на фришках отключают.
Зачем интригуешь? :)
Рассказывай давай!

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

Deathdreams
02.01.2010, 23:07
Около 50% хостеров забывают о существовании такой великолепной функции - ini_set()
Вот с помощью неё и можно снять все эти ограничения.
Вот, что нужно сделать, чтобы поставить set_time_limit = 0:

<?php
@ini_set('max_execution_time', 0);
?>

Лично я знаю хостинг, отличный, где запрещены все такие функции, как:
set_time_limit, ignore_user_abort и т.п.
Там они легко устанавливаются через ini_set.