PHP Cron Job: Включая файл не работает? - PullRequest
5 голосов
/ 29 июня 2010

я запускаю задание cron каждую ночь, но по какой-то причине он говорит, что файл, который я пытаюсь включить, не существует:

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

Я даже установил путь включения (как показано в коде), но я все еще получаю эту ошибку.в чем может быть проблема?

спасибо!

Ответы [ 2 ]

9 голосов
/ 29 июня 2010

Если вы введете require('../includes/common.php'), путь будет пройден относительно текущего рабочего каталога .

Если вы выполните require('common.php'), файл будет найден по пути включения и в каталоге скрипта, который вызывает require ().

Чтобы решить эту проблему, сначала измените каталогВаш crontab:

cd /home/fini7463/public_html; php -f cronjob.php
3 голосов
/ 29 июня 2010

Вызов set_include_path(), так как вы выбрасываете предыдущий путь.Вызов заменяет предыдущий путь тем, что вы передаете в качестве аргумента, поэтому, если какой-либо из ваших кодов загружает другие библиотеки (например, модули PEAR / PECL), они больше не будут доступны, поскольку вы удалили путь включения.Вы должны использовать:

set_include_path(get_include_path() . PATH_SEPARATOR . '/home/fini7463/public_html/includes/');

Это добавит ваш новый путь к пути включения.

Кроме того, вы никогда не сможете точно сказать, каким будет рабочий каталог, когда cron запустит ваш скрипт,Это может быть домашний каталог пользователя, с которым вы запускаете скрипт, может быть / tmp, или какой-то другой каталог целиком.Если вы хотите использовать относительные пути в скрипте для чего-либо, вы должны убедиться, что для рабочего каталога установлено известное значение.Либо с помощью «cd» в crontab, либо с помощью «chdir» внутри скрипта, прежде чем делать что-либо с относительными путями.

...