我有一个cron作业,需要包含这个文件:
require '../includes/common.php';
但是,当它通过cron作业(而不是我的本地测试)运行时,相对路径不起作用。cron作业运行以下文件(在实时服务器上):
/home/username123/public_html/cron/mycronjob.php
下面是错误:
Fatal error: require(): Failed opening required '../includes/common.php'
(include_path='.:/usr/lib/php:/usr/local/lib/php') in
/home/username123/public_html/cron/mycronjob.php on line 2
使用与cron作业相同的绝对格式,common.php
将位于
/home/username123/public_html/includes/common.php
这是否意味着我必须将第2行替换为:
require '/home/username123/public_html/includes/common.php';
谢谢!
发布于 2010-06-25 22:18:01
从技术上讲,php脚本是在cron所在的位置运行的;例如。如果cron在/bin/cron中,则此语句将在/bin/includes/common.php中查找common.php。
所以,是的,您可能必须使用完整路径或使用set_include_path
set_include_path('/home/username123/public_html/includes/');
require 'common.php';
发布于 2010-06-25 22:19:29
不,不。您需要在crons上使用绝对路径。
我所做的是:
// supouse your cron is on app/cron and your lib is on app/lib
$base = dirname(dirname(__FILE__)); // now $base contains "app"
include_once $base . '/lib/db.inc';
// move on
发布于 2017-09-03 22:20:36
推荐绝对路径规范的解决方案的替代方案是在脚本中使用chdir
。这样,您的相对路径将按预期工作。
例如,要切换到脚本所在的目录:
$curr_dir = dirname(__FILE__);
chdir($curr_dir);
要切换到脚本的父目录,请执行以下操作:
$curr_dir = dirname(__FILE__);
chdir($curr_dir . "/..");
以此类推。
https://stackoverflow.com/questions/3118699
复制相似问题