За последние 24 часа нас посетили 33513 программистов и 1531 робот. Сейчас ищут 1085 программистов ...

Ошибка php ничем не фиксируется

Тема в разделе "PHP для новичков", создана пользователем Namer, 24 июл 2011.

  1. Namer

    Namer Активный пользователь

    С нами с:
    14 апр 2010
    Сообщения:
    492
    Симпатии:
    0
    Купил скрипт, но не могу его на своем vps запустить. Чего-то ему не хватает. Хотел глянуть какие он пишет ошибки в логи и удивился: нигде никаких ошибок не пишется. В php error.log срипт ничего не пишет, в Apache Access и Log Apache Error Log как ни странно тоже. Когда вызываешь скрипт браузер просто отправляет запрос и больше ничего не происходит, хоть минуту хоть 5 жди.

    Сам скрипт рабочий, на моем тестовом домашнем сервере под виндой работает на ура, а вот в боевых условиях под CentosOS не хочет и зараза не говорит ошибками почему не хочет. Сам сервер работает нормально, проверял добавляя
    PHP:
    1. echo "Hello"; mistake; exit();
    в начало скрипта. С этой строчкой в логи пишется, т.е. логирование работает. А вот что самому скрипту не нравится - не говорит.

    Грешу на вот эту строчку в скрипте:

    PHP:
    1. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    так как пробовал на обычном хостинге jino скрипт запускать, выдавало:
    Код (Text):
    1. 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
    Поэтому ожидал что заработает. А он и не работает и ошибок никаких не выдает.

    Подскажите что делать, чтобы определить ошибку и запустить скрипт?
     
  2. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Думаю, стоит спросить у товарища, у которого ты купил скрипт. Причин может быть сколько угодно и не зная кода скрипта ответить сложно. И даже если ты выложишь скрипт - наверняка там не одна сотня строк и разбираться с ним за просто так никто не захочет...
     
  3. Namer

    Namer Активный пользователь

    С нами с:
    14 апр 2010
    Сообщения:
    492
    Симпатии:
    0
    sobachnik, c разработчиком сильно не поговоришь, он иностранец и не подписывался на установку скрипта. Сам скрипт 100% рабочий, так как у меня под видной работает, просто хостинг под него надо настроить.
    В общем для начала я хотел увидеть ошибку из-за которой скрипт н работает. А эта ошибка почему-то никуда не пишется и в браузер не выводится. Что делать? Как узнать что это за ошибка и в какой строчке?
     
  4. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    х.з., обычно помогает, если в начале написать
    PHP:
    1. <?php
    2. ini_set('display_errors', true);
    3. ?>
     
  5. Namer

    Namer Активный пользователь

    С нами с:
    14 апр 2010
    Сообщения:
    492
    Симпатии:
    0
    sobachnik, прописал. Не помогает: браузер что-то ждет, а в логи ничего не пишется :(
     
  6. Namer

    Namer Активный пользователь

    С нами с:
    14 апр 2010
    Сообщения:
    492
    Симпатии:
    0
    Я даже пробовал прописывать в нем: set_time_limit(30);
    Не помогает, скрипт висит минутами и никаких ошибок ни в барузер ни в лог не пишет. Даже в Apache Access Log его вызов не записывается.
     
  7. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Ну, я не знаю, чего предположить... Наверно надо смотреть код. И настройки php.
    Возможно, что-то связано с курлом - может быть так настроено, что он бесконечно ждёт ответа от удалённого сервера, а тот не отвечает. (хотя не знаю, можно ли так его настроить)
    Попробуй заменить

    Код (Text):
    1. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    на

    Код (Text):
    1. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
     
  8. Namer

    Namer Активный пользователь

    С нами с:
    14 апр 2010
    Сообщения:
    492
    Симпатии:
    0
    Сделал. Так скрипт отрабатывает, но выдает в браузер заготовленное в скрипте сообщение, мол, что-то не то. В Apache Access Log его вызов фиксируется, но в php error.log и в браузер никаких ошибок не пишется.
     
  9. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Возможно, что-то поменялось на том сайте, куда скрипт обращается с помощью curl... А на локалке под виндой - по прежнему работает?
    Запусти их примерно одновременно.
     
  10. Namer

    Namer Активный пользователь

    С нами с:
    14 апр 2010
    Сообщения:
    492
    Симпатии:
    0
    На локалке работает по прежнему.
    Наверно беда в curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    и как подсказывал хостинг jino:
    Код (Text):
    1. 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); на курл не действует.
     
  11. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    ты еще намучишся с safe_mode. ищи другой хостинг. или, если неленивый, попробуй отладить локально со включенным safe_mode
     
  12. Namer

    Namer Активный пользователь

    С нами с:
    14 апр 2010
    Сообщения:
    492
    Симпатии:
    0
    Уже намучался :(
    У меня свой 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); ?
     
  13. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    извини, что спрашиваю, но ты рестартовал апач после изменения php.ini ? чего только не бывает

    я бы попробовал тестировать именно тот код, что имею. втыкал бы die(var_export($var, true)) по ходу выполнения от первой строчки и далее и смотрел где случился пр*еб.

    может выясниться, что проблема не в curl_setopt, а в curl_init -- возможно он вернул FALSE. очень возмоно
     
  14. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    artoodetoo
    Там тот самый код всё-таки на другом компе успешно отрабатывает, поэтому наверно он рабочий...

    Namer
    Минимальный скрипт для теста curl:
    PHP:
    1. <?php
    2. $url = 'http://www.yandex.ru';
    3. $ch = curl_init($url);
    4. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    5. curl_setopt($ch, CURLOPT_TIMEOUT, 15);
    6. $returndata = curl_exec($ch);
    7. echo($returndata);
    8. ?>
     
  15. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Хотя можно ещё минимальней сделать.
     
  16. Namer

    Namer Активный пользователь

    С нами с:
    14 апр 2010
    Сообщения:
    492
    Симпатии:
    0
    да, рестартовал целый сервер. С этим проблем нет, он за 5-10 сек рестартует.

    ок, испытаю работу курла и если не поможет, буду идти построчно.

    Протестировал, все ок. Но хотел минимальный код для теста, в котором бы была строчка:
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    Так как пишут что именно она в основном ошибку вызывает. Вот хотел узнать на простом примере, настроен ли у меня курл на ее использование.
     
  17. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Опция CURLOPT_FOLLOWLOCATION отвечает за то, будет ли curl следовать всем редиректам. Т.е. например curl делает обращение к сайту, а сайт в ответе сообщает, что необходимо перейти по другому адресу. И curl переходит по новой ссылке. А по той новой ссылке сайт, возможно, опять отправляет заголовок, что нужно перейти по другому адресу. И curl снова переходит. И так может длиться до бесконечности :))) Когда этой опции присваивается значение true - значит она включена. Когда false - отключена и curl не будет следовать указаниям из заголовков от сайта о переходе по другому адресу.
    Для теста работоспособности можешь воспользоваться этим:
    PHP:
    1. <?php
    2. $url = 'http://forum.smoothcollie.ru/location.php';
    3. $ch = curl_init($url);
    4. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    5. curl_setopt($ch, CURLOPT_TIMEOUT, 15);
    6. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    7. $returndata = curl_exec($ch);
    8. echo($returndata);
    9. ?>
    Если откроется Яндекс - всё ок.
     
  18. Namer

    Namer Активный пользователь

    С нами с:
    14 апр 2010
    Сообщения:
    492
    Симпатии:
    0
    Спасибо за пояснение!
    Попробовал и пошли "загадки".
    При вызове этого скрипта с названием curl.php в браузере вижу ошибку: Not Found
    The requested URL /location.php was not found on this server.

    Что это значит? Это сильно плохо?
     
  19. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Ага, залил на сайтик этот файл (location.php), потом отвлёкся - на работе всё-таки, и забыл зачем его туда залил. Вспомнить не смог и удалил, чтобы не валялось лишнего :)
    Залил снова.
     
  20. Namer

    Namer Активный пользователь

    С нами с:
    14 апр 2010
    Сообщения:
    492
    Симпатии:
    0
    sobachnik, работает, яндекс открывается. Значит curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); у меня на сервере настроено и ошибка в чем-то другом?
     
  21. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Ну, это значит, что курл работает правильно. И в том числе опцию followlocation - понимает.
    Но теоретически, проблема может оказаться действительно в редиректах. Например, сайт спалил, что это какой-то "вражеский робот" и специально бесконечно перекидывает запросы курла с одного адреса на другой...
     
  22. Namer

    Namer Активный пользователь

    С нами с:
    14 апр 2010
    Сообщения:
    492
    Симпатии:
    0
    Может и такое быть...
    А можно к этой функци прикрутить лог, чтобы она в файлик писала куда и сколько раз ее редиректят? Или curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); работает пока не дойдет до последнего редиректа и такой лог ее работы невозможен?