2010-03-24 3 views
0

Я использую некоторые PHP-скрипты из FeedForAll, чтобы объединить RSS-каналы (RSSmesh) и отображать их как HTML (RSS2HTML).Я пытаюсь запустить некоторые PHP-скрипты как CLI, а не через HTTP. Как заставить их играть хорошо?

Поскольку я намерен интенсивно запускать эти сценарии и не хочу, чтобы полученные HTTP-запросы и пропускная способность учитывались в моей квоте на хостинг, я в процессе перехода к их запуску на сервере веб-хоста в зонтике PHP «пакетный» сценарий, и вызываем этот скрипт через cron (кстати, это сервер Linux).

Вот (рабочий) запрос выборки через HTTP:

http://www.mydomain.com/a/rss2htmlcore/rss2html2.php?XMLFILE=http://www.mydomain.com/a/myapp/xmlcache/feed.xml&TEMPLATE=template.html

Это даст желаемый результат HTML. Пример того, как я хочу, чтобы это работало в командной строке:

/srv/customers/mycustomer#/mydomain.com/www/a/rss2htmlcore/rss2html2-cli.php /srv/customers/mycustomer#/mydomain.com/www/a/myapp/xmlcache/feed.xml /srv/customers/mycustomer#/mydomain.com/www/a/template.html

Это с правильной линией хижину добавлен в «rss2html2-cli.php». Я мог бы точно указать исполняемый файл («/ usr/local/bin/php») в запросе, я сомневаюсь, что это имеет значение, потому что я могу без проблем запускать другой скрипт (который я написал сам).

Теперь RSS2HTML и RSSmesh отличаются тем, что для стартеров они включают в себя вторичные файлы, например, оба включают сценарий синтаксического анализатора XML, и я подозреваю, что это то, где я немного нахожусь над головой ,

Сейчас я звоню Exec() из "зонтика" пакетного сценария, например, так:

exec("/srv/customers/mycustomer#/mydomain.com/www/a/rss2htmlcore/rss2html2-cli.php /srv/customers/mycustomer#/mydomain.com/www/a/myapp/xmlcache/feed.xml /srv/customers/mycustomer#/mydomain.com/www/a/template.html", $output)

Но вывод не производится. Каков наилучший способ сделать это и что «gotchas» я должен иметь в виду? Правильно ли подходит метод exec()? Он отлично работает для другого (простого) скрипта, но записывает собственный результат. Для этого я хочу получить вывод и записать его в файл из зонтичного скрипта, если это возможно. Я также пробовал буферизацию вывода, но безрезультатно.

Должен ли я обратить внимание на что-либо конкретное в отношении включений? Сейчас они указаны в сценариях как include_once("FeedForAll_XMLParser.inc.php");, и указанные файлы действительно находятся в одной папке.

Дополнительная информация:

-Этот является сервером Linux.

-У меня нет прямого доступа к оболочке, поэтому я не могу проверить вещи непосредственно в командной строке, все через crontab.

-Я признаю, что поддержка сценариев FeedForAll оставляет желать лучшего, но я хотел бы продолжать использовать их скрипты, если это вообще возможно, хотя бы потому, что я их знаю и использую их некоторое время , Я просмотрел Simplepie, но сценарии FFA делают некоторые вещи, на которые я не видел очевидных решений для Simplepie, например ограничение количества элементов на отдельный канал (RSSmesh) или ограничение длины описания (RSS2HTML).

-Yahoo! Трубы отсутствуют, они слишком долго кэшируют свои данные для моего приложения.


Если вы хотите взглянуть на код, here являются скрипты как текстовые файлы.RSS2HTML2 и RSSmesh являются скриптами FeedForAll, FeedForAll_XMLParser ... является включенным парсером. Обратите внимание, что я еще не исправил их для обработки $ argv и т. Д. Однако у меня есть «scraper-universal-rss-cli», который отлично работает с CLI.


Если у кого-то есть мысли поделиться этим, было бы очень полезно. Заранее спасибо.

ответ

0

Я думаю, что линия $hideErrors = 0; в rss2html не помогает. Поскольку isset используется, чтобы проверить, должны ли отображаться ошибки, вы должны прокомментировать это. Установка его в ноль ничего не делает, поскольку переменная, установленная в 0, по-прежнему оценивает значение true с isset.

Повторно запустите и проверьте, не вызывает ли у вас некоторых ошибок.

+0

Вы правы. Спасибо, что помог мне в правильном направлении. – gnfti

0

Используйте wget или curl для запроса запроса на локальный веб-сервер. Не используйте CLI.