Назад | Перейти на главную страницу

Некоторые параметры $ _SERVER отсутствуют при доступе к PHP-скрипту через Cron

У меня есть скрипт, который мне нужно запустить с 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' знак равно

он очень сильно зависит от сценария - что, если он ожидает там каких-то реальных значений? что, если, например, проверяется реферер?