Купил скрипт, но не могу его на своем vps запустить. Чего-то ему не хватает. Хотел глянуть какие он пишет ошибки в логи и удивился: нигде никаких ошибок не пишется. В php error.log срипт ничего не пишет, в Apache Access и Log Apache Error Log как ни странно тоже. Когда вызываешь скрипт браузер просто отправляет запрос и больше ничего не происходит, хоть минуту хоть 5 жди. Сам скрипт рабочий, на моем тестовом домашнем сервере под виндой работает на ура, а вот в боевых условиях под CentosOS не хочет и зараза не говорит ошибками почему не хочет. Сам сервер работает нормально, проверял добавляя PHP: echo "Hello"; mistake; exit(); в начало скрипта. С этой строчкой в логи пишется, т.е. логирование работает. А вот что самому скрипту не нравится - не говорит. Грешу на вот эту строчку в скрипте: PHP: curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); так как пробовал на обычном хостинге jino скрипт запускать, выдавало: Код (Text): Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when safe_mode is enabled or an open_basedir is set in /home/domains/mydomain.com/index.php on line 158 Но на впске safe_mode отключил и прописал open_basedir none Поэтому ожидал что заработает. А он и не работает и ошибок никаких не выдает. Подскажите что делать, чтобы определить ошибку и запустить скрипт?
Думаю, стоит спросить у товарища, у которого ты купил скрипт. Причин может быть сколько угодно и не зная кода скрипта ответить сложно. И даже если ты выложишь скрипт - наверняка там не одна сотня строк и разбираться с ним за просто так никто не захочет...
sobachnik, c разработчиком сильно не поговоришь, он иностранец и не подписывался на установку скрипта. Сам скрипт 100% рабочий, так как у меня под видной работает, просто хостинг под него надо настроить. В общем для начала я хотел увидеть ошибку из-за которой скрипт н работает. А эта ошибка почему-то никуда не пишется и в браузер не выводится. Что делать? Как узнать что это за ошибка и в какой строчке?
х.з., обычно помогает, если в начале написать PHP: <?php ini_set('display_errors', true); error_reporting(E_ALL); ?>
Я даже пробовал прописывать в нем: set_time_limit(30); Не помогает, скрипт висит минутами и никаких ошибок ни в барузер ни в лог не пишет. Даже в Apache Access Log его вызов не записывается.
Ну, я не знаю, чего предположить... Наверно надо смотреть код. И настройки php. Возможно, что-то связано с курлом - может быть так настроено, что он бесконечно ждёт ответа от удалённого сервера, а тот не отвечает. (хотя не знаю, можно ли так его настроить) Попробуй заменить Код (Text): curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); на Код (Text): curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
Сделал. Так скрипт отрабатывает, но выдает в браузер заготовленное в скрипте сообщение, мол, что-то не то. В Apache Access Log его вызов фиксируется, но в php error.log и в браузер никаких ошибок не пишется.
Возможно, что-то поменялось на том сайте, куда скрипт обращается с помощью curl... А на локалке под виндой - по прежнему работает? Запусти их примерно одновременно.
На локалке работает по прежнему. Наверно беда в curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); и как подсказывал хостинг jino: Код (Text): Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when safe_mode is enabled or an open_basedir is set in /home/domains/mydomain.com/index.php on line 158 А у меня на серваке ошибку не выдает, наверно как ты и говорил из-за того, что ждет ответа от удаленного хоста, а set_time_limit(30); на курл не действует.
ты еще намучишся с safe_mode. ищи другой хостинг. или, если неленивый, попробуй отладить локально со включенным safe_mode
Уже намучался У меня свой vps, могу настройками рулить как хочу. Но что этой курлятине надо не пойму. Пишут что при такой ошибке safe_mode надо наоборот не включать, а отключать. В общем сделал как тут советовали http://www.lsdeex.ru/archives/18 : в php.ini прописал: safe_mode = Off open_basedir = none а в httpd.conf: php_admin_value open_basedir none (хотя строчки php_admin_value первоначально в конфиге не было) и по прежнему эта курлятина не работает. Висит и в логи ничего не пишет. Думаю может ip там на сервере забанен. Можете подсказать минимальный скрипт для теста curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); ?
извини, что спрашиваю, но ты рестартовал апач после изменения php.ini ? чего только не бывает я бы попробовал тестировать именно тот код, что имею. втыкал бы die(var_export($var, true)) по ходу выполнения от первой строчки и далее и смотрел где случился пр*еб. может выясниться, что проблема не в curl_setopt, а в curl_init -- возможно он вернул FALSE. очень возмоно
artoodetoo Там тот самый код всё-таки на другом компе успешно отрабатывает, поэтому наверно он рабочий... Namer Минимальный скрипт для теста curl: PHP: <?php $url = 'http://www.yandex.ru'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 15); $returndata = curl_exec($ch); curl_close($ch); echo($returndata); ?>
да, рестартовал целый сервер. С этим проблем нет, он за 5-10 сек рестартует. ок, испытаю работу курла и если не поможет, буду идти построчно. Протестировал, все ок. Но хотел минимальный код для теста, в котором бы была строчка: curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); Так как пишут что именно она в основном ошибку вызывает. Вот хотел узнать на простом примере, настроен ли у меня курл на ее использование.
Опция CURLOPT_FOLLOWLOCATION отвечает за то, будет ли curl следовать всем редиректам. Т.е. например curl делает обращение к сайту, а сайт в ответе сообщает, что необходимо перейти по другому адресу. И curl переходит по новой ссылке. А по той новой ссылке сайт, возможно, опять отправляет заголовок, что нужно перейти по другому адресу. И curl снова переходит. И так может длиться до бесконечности )) Когда этой опции присваивается значение true - значит она включена. Когда false - отключена и curl не будет следовать указаниям из заголовков от сайта о переходе по другому адресу. Для теста работоспособности можешь воспользоваться этим: PHP: <?php $url = 'http://forum.smoothcollie.ru/location.php'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 15); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); $returndata = curl_exec($ch); curl_close($ch); echo($returndata); ?> Если откроется Яндекс - всё ок.
Спасибо за пояснение! Попробовал и пошли "загадки". При вызове этого скрипта с названием curl.php в браузере вижу ошибку: Not Found The requested URL /location.php was not found on this server. Что это значит? Это сильно плохо?
Ага, залил на сайтик этот файл (location.php), потом отвлёкся - на работе всё-таки, и забыл зачем его туда залил. Вспомнить не смог и удалил, чтобы не валялось лишнего Залил снова.
sobachnik, работает, яндекс открывается. Значит curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); у меня на сервере настроено и ошибка в чем-то другом?
Ну, это значит, что курл работает правильно. И в том числе опцию followlocation - понимает. Но теоретически, проблема может оказаться действительно в редиректах. Например, сайт спалил, что это какой-то "вражеский робот" и специально бесконечно перекидывает запросы курла с одного адреса на другой...
Может и такое быть... А можно к этой функци прикрутить лог, чтобы она в файлик писала куда и сколько раз ее редиректят? Или curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); работает пока не дойдет до последнего редиректа и такой лог ее работы невозможен?