У меня есть скрипт, который мне нужно запустить с PHP через cron. Первоначальный автор сценария заставил многих пользователей $_SERVER
параметры (например, REQUEST_URI
).
Но похоже, что определенные переменные не существуют при запуске PHP через командную строку или через CRON. Например, нет URI запроса, поэтому имеет смысл REQUEST_URI
параметр недоступен.
Есть ли какой-нибудь способ обойти это, кроме как полностью переписать сценарий, чтобы избежать использования специальных $_SERVER
параметры, которые не доступны повсеместно?
Если вы действительно не знаете сценарий, я бы порекомендовал wget
в вашем CRON, чтобы запустить скрипт через ваш веб-сервер, как это делал бы браузер.
Вкопаться wget http://localhost/yourScript.php
(-O и -o могут быть интересны или нет, поскольку все еще получают сообщения об ошибках и т. Д.) Если вам нужно «больше», например, вход с использованием файлов cookie, вы можете проверить curl
Собираясь использовать hack´n´slay, как упомянул @pQd, и вы не может отредактируйте сценарий 3rdParty, вам следует взглянуть на "auto_prepend_file" в вашем cli.php.ini и подумать о запуске задания, используя php -c
Поскольку очевидно, что serverfault хочет побудить новых пользователей писать ответы, а не просто комментировать, я добавлю +1 к ответу Табакхаза и добавлю сюда свое постепенное улучшение.
Если вы не хотите публиковать свой скрипт в сети, даже с защитой .htaccess, вы можете написать короткий скрипт bash для достижения своей цели. Что-то вроде:
#!/bin/bash
file=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16)
cp $script /var/www/host/$file.php
wget --output-document=output.txt http://server/path/to/$file.php
rm /var/www/host/$file.php
Вам, конечно же, придется повозиться с разрешениями, чтобы убедиться, что тот, кто запускает задание cron, может записывать файлы в ваш / var / www, что имеет свои последствия.
Конечно, вы можете сгенерировать $ file любым удобным для вас способом и управлять выводом / заголовками и т. Д. (Даже файлами cookie!), Отредактировав параметры, переданные в wget.
методом проб и ошибок [анализируя ошибки, напечатанные сценарием] или анализируя исходный код, попробуйте выяснить, какие параметры ожидаются, и в начале сценария добавьте: $ _SERVER ['someName'] = ''; $ _ SERVER ['otherName' знак равно
он очень сильно зависит от сценария - что, если он ожидает там каких-то реальных значений? что, если, например, проверяется реферер?