Я использую следующую команду для выполнения PHP-файла через cron
php -q /home/seilings/public_html/dvd/cron/mailer.php
Проблема заключается в том, что у меня есть файл, который включен в исполнение, который определяет, какую конфигурацию загружать … например, следующее:
if (!strstr(getenv('HTTP_HOST'), ".com")) { $config["mode"] = "local"; } else { $config["mode"] = "live"; }
Cron загружает LOCAL config, когда он должен загружать конфигурацию LIVE. Я пытался использовать URL http: // для файла вместо абсолютного пути, но не нашел файл. Нужно ли мне изменять команду, чтобы использовать в ней URL?
Используйте этот php_sapi_name()
чтобы проверить, вызван ли сценарий в командной строке:
if (php_sapi_name() === 'cli' OR !strstr(getenv('HTTP_HOST'), ".com")) { $config["mode"] = "local"; } else { $config["mode"] = "live"; }
Если вы хотите использовать «live» в командной строке, используйте этот код:
if (php_sapi_name() === 'cli' OR strstr(getenv('HTTP_HOST'), ".com")) { $config["mode"] = "live"; } else { $config["mode"] = "local"; }
Еще одно простое решение:
хрон:
php -q /home/seilings/public_html/dvd/cron/mailer.php local
PHP:
if (!empty($argv[0])) { $config["mode"] = "local"; } else { $config["mode"] = "live"; }
Когда вы запускаете php с cron, очень вероятно, что тогда переменная среды « HTTP_HOST
» не будет установлена (или равна нулю), а когда null будет присвоен функции strstr
, strstr
вернет false
, поэтому режим установлен на "local"
.
Вероятно, вы получаете другой набор переменных среды, когда вы выполняете свою команду через cron, по сравнению с командной строкой. Возможно, вам потребуется написать сценарий оболочки, который устанавливает среду так, как вы хотите, прежде чем запускать команду PHP.
Переменная HTTP_HOST
такая как HTTP_HOST
существует только при запуске php-скриптов под веб-сервером. Но вы можете добавить его вручную в конфигурацию crontab:
## somewhere in crontab config HTTP_HOST=somthing.com 15 * * * * /path/to/your/script > /dev/null 2>&1
Это позволит вашему сценарию думать, что он работает на производственной среде.
Если вы чувствуете себя ленивым и не хотите, чтобы все эти переменные env работали, вы можете попробовать запустить cron, используя:
lynx -dump http://url.to.your.script > /dev/null