require_once не работает в командной строке

php /home/test9/public_html/degerlendir/test-4567.php "var1=18&var2=22"

Мне нужно запустить одну страницу в фоновом режиме с помощью cron. Я проверил мой код с командой выше. Но я получаю эту ошибку:

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/extensions/no-debug-non-zts-20100525/imagick.so' - /usr/lib64/extensions/no-debug-non-zts-20100525/imagick.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning:  require_once(../config.php): failed to open stream: No such file or directory in /home/test9/public_html/degerlendir/test-4567.php on line 2
PHP Fatal error:  require_once(): Failed opening required '../config.php' (include_path='.:/usr/lib64/php') in /home/test9/public_html/degerlendir/test-4567.php on line 2

Проблема в том, что страница не включает config.php в родительском каталоге. Страница работает в браузере нормально. Я пытался использовать различные варианты require_once, такие как require_once ($ _SERVER [‘DOCUMENT_ROOT’]. «/ config.php»). Я не мог заставить его работать.

1

Решение

Задания Cron всегда берут полный путь включенного файла из вашего корня.

/home/test/…/your-file

3

Другие решения

из командной строки нет $_SERVER['DOCUMENT_ROOT'], Этот доступен только с http-сервера (Apache).

Рабочий каталог не будет установлен автоматически. Если вы в данный момент указываете на / some / path /, скрипт попытается найти config.php в /some/config.php.

Попробуйте перейти к текущему пути с помощью __DIR__ в начале вашего сценария

<?php chdir(__DIR__); ?>

3

В вашей работе cron вам нужно перейти в правильный рабочий каталог, чтобы ваш PHP-файл обнаружил, что он включает. Я делаю это путем создания небольших сценариев оболочки и запускаю сценарии оболочки из cron:

#!/bin/bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"cd  ${DIR}
php test-4567.php

exit 0

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

#!/bin/bash
FIND_PROC=`ps -ef |grep "php test-4567.php" | awk '{if ($8 !~ /grep/) print $2}'`
# if FIND_PROC is empty, the process has died; restart it

if [ -z "${FIND_PROC}" ]; then
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"cd  ${DIR}
php test-4567.php
fi

exit 0
1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector