За последние 24 часа нас посетили 66773 программиста и 1617 роботов. Сейчас ищут 957 программистов ...

Скрипт выполняется не до конца

Тема в разделе "PHP и базы данных", создана пользователем zahermaher, 13 май 2015.

  1. zahermaher

    zahermaher Новичок

    С нами с:
    27 сен 2014
    Сообщения:
    169
    Симпатии:
    14
    Здравствуйте.
    есть скрипт который парсит новости с другого сайта и записывает в базу моего сайта и закачивает фото новости.
    Так вот если вызвать этот скрипт самого через браузер ,то все новости и картинки к новостям добавляются на мой сайт, зачищается кэш и подтираются старые записи. (то есть работает как надо)

    Но если запускается этот скрипт через cron ,то текст всех новостей добавляется в базу , но картинки добавляются только к половине новостей и из этого же скрипта не чиститься кеш (чистить кеш нужно ,так как сайт на битрикс)

    Права на скрипт 755 ,на папку для фото новостей права 755.
    В скрипте set_time_limit(0);

    В чем может быть проблема?
     
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Клик на ссыль в моей подписи, и прошу ознакомиться, особенно с пунктом 7.
     
  3. zahermaher

    zahermaher Новичок

    С нами с:
    27 сен 2014
    Сообщения:
    169
    Симпатии:
    14
    ничего криминального там нет. там парситься rss лента рамблер новостей.
    Даже на моем сайт у каждой новости подпись ,что эта новость взята с рамблер-новости.

    Добавлено спустя 15 минут 24 секунды:
    rss читаю так. может через cron не может прочесть?

    Код (Text):
    1.     function RSS_Read($url)
    2.     {
    3.         $doc  = new DOMDocument();
    4.         $doc->load($url);
    5.      
    6.         $items = $doc->getElementsByTagName("item");    
    7.      
    8.         $RSS_Content = array();
    9.      
    10.         foreach($items as $item)
    11.         {
    12.             $y = RSS_Tags($item);  
    13.             array_push($RSS_Content, $y);
    14.         }
    15.         return $RSS_Content;    
    16.     }
    17.  
    18.     $feeds = RSS_Read("http://news.rambler.ru/rss/business");
     
  4. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    RSS это же XML, не? Зачем же DOMDocument, когда есть XML-парсеры в пыхе?

    Насчет работы - проверяйте, чем отличается вызов при кроне от вызова "нормального".
    И для крона тоже?

    Добавлено спустя 59 секунд:
    Прост, если код работает, то он работает. Значит проблема не в нем, а в том, что отличает вызов по крону от "честного" вызова, только и всего.
     
  5. zahermaher

    zahermaher Новичок

    С нами с:
    27 сен 2014
    Сообщения:
    169
    Симпатии:
    14
    DOMDocument выполняется только в браузере?

    просто в других кусках кода нет того чтобы не смогло работать без браузера.
    в смысле ,что никаких куки ,авторизаций нет и тд.
     
  6. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    В браузере вообще никакой пхп-код не выполняется. Просто гвозди забивают молотком, шурупы ввинчивают шуруповертом. Не наоборот. Гвоздь и шуруп, конечно, похожи на определенном уровне абстракции, равно как HTML похож на XML, и шуруп даже можно загнать молотком, но лучше все же использовать специнстурменты. Иначе бы их просто не создавали.

    Повторюсь. Если код работает, то он работает. В нем проблем нет. Тем более если он не юзает всякие куки.
    Более того, он у вас по какой-то причине отрабатывает лишь наполовину. Я ставлю на настройки Крона. В них косяк.
     
  7. zahermaher

    zahermaher Новичок

    С нами с:
    27 сен 2014
    Сообщения:
    169
    Симпатии:
    14

    Спасибо. понял.
    Сейчас запрос с крона такой, он срабатывает.(но как описано выше скрипт срабатывает не до конца.)
    /usr/local/bin/php -f /home/site/domains/site.com/public_html/parsnews.php >/dev/null 2>&1

    Какой то параметр можно в этом запросе добавить или нужно просить хостера ,чтобы он у себя перенастроил ,для того чтобы скрипт до конца срабатывал?
    Спасибо.
     
  8. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Запрос роли не играет. Спроси хостера на тему ограничений для крона.
     
  9. zahermaher

    zahermaher Новичок

    С нами с:
    27 сен 2014
    Сообщения:
    169
    Симпатии:
    14
    Спасибо за помощь!
    Написал хостеру ,они посоветовали такой запрос:
    Код (Text):
    1. /usr/local/bin/wget -q -O /dev/null http://site.com/parsnews.php
    И действительно все работает. Может кому то будет полезно.
     
  10. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Значит играет, ок :)
     
  11. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Резюмирую:
    Код (Text):
    1. /usr/local/bin/php -f /home/site/domains/site.com/public_html/parsnews.php >/dev/null 2>&1
    Запускает скрипт из консоли без участия нжинксов и прочих апачей.
    Код (Text):
    1. /usr/local/bin/wget -q -O /dev/null http://site.com/parsnews.php
    Стучится на url, по сути примерно тоже самое, что набрать его браузере. В результате http-сервер выполнит скрипт как обычно.

    Потому разница есть и она значительна, хотя бы те же права: php из консоли может выполнятся от совершенно другого пользователя, которому не хватит 755 на изменения файлов. Отсюда и невозможность сохранения картинок. Недостаточно прав )