Я пытаюсь запустить некоторые сценарии PHP как CLI, а не через HTTP. Как мне заставить их играть красиво? - PullRequest
0 голосов
/ 24 марта 2010

Я использую некоторые PHP-скрипты от FeedForAll для объединения RSS-каналов и отображения их в формате HTML (RSS2HTML).

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

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

<a href="http://www.mydomain.com/a/rss2htmlcore/rss2html2.php?XMLFILE=http://www.mydomain.com/a/myapp/xmlcache/feed.xml&TEMPLATE=template.html" rel="nofollow noreferrer">http://www.mydomain.com/a/rss2htmlcore/rss2html2.php?XMLFILE=http://www.mydomain.com/a/myapp/xmlcache/feed.xml&TEMPLATE=template.html</a>

Это даст желаемый вывод 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)

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

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

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

-Это сервер Linux.

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

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

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


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


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

Ответы [ 2 ]

0 голосов
/ 25 марта 2010

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

0 голосов
/ 25 марта 2010

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

Перезапустите и посмотрите, не выдает ли это какие-то ошибки для вас.

...