я выполняю задание крона каждую ночь, но по некоторым причинам, оно говорит, что файл, который я пытаюсь включать, является несуществующим:
Warning: require(../includes/common.php): failed to open stream: No such file or directory in /home/fini7463/public_html/cron/journeyNotifications.php on line 2
Fatal error: require(): Failed opening required '../includes/common.php' (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/fini7463/public_html/cron/journeyNotifications.php on line 2
вот код:
set_include_path('/home/fini7463/public_html/includes/');
require 'common.php';
файл 'common.php' расположен следующим образом
public_html => cron => journeyNotifications.php
=> includes => common.php
я даже установил включать путь (как показано в коде), но я все еще получаю эту ошибку. какова проблема могла быть?
спасибо!
Если вы выполняете require('../includes/common.php')
, путь просматривается относительно текущего рабочего каталога.
Если вы делаете require('common.php')
, файл ищется в пути include и в каталоге скрипта, который вызывает require().
Чтобы решить эту проблему, сначала измените каталог в вашем crontab:
cd /home/fini7463/public_html; php -f cronjob.php
Вызов set_include_path ()
при этом удаляет предыдущий путь. Вызов заменяет предыдущий путь тем, что вы передаете в качестве аргумента, поэтому, если какой-либо из вашего кода загружает другие библиотеки (например, модули PEAR / PECL), они больше не будут доступны, поскольку вы удалили путь включения. Вы должны использовать:
set_include_path(get_include_path() . PATH_SEPARATOR . '/home/fini7463/public_html/includes/');
Это добавит ваш новый путь к пути включения.
Кроме того, вы никогда не сможете точно сказать, какой будет рабочий каталог, когда cron запустит ваш скрипт. Это может быть домашний каталог пользователя, с которым вы запускаете скрипт, например / tmp или какой-то другой каталог целиком. Если вы хотите использовать относительные пути в скрипте для чего-либо, вам нужно убедиться, что для рабочего каталога задано известное значение. Либо используя 'cd' в crontab, либо используя 'chdir' внутри скрипта, прежде чем делать что-либо, связанное с относительными путями.