首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP:请求路径对cron作业不起作用?

PHP:请求路径对cron作业不起作用?
EN

Stack Overflow用户
提问于 2010-06-25 22:16:15
回答 5查看 30.8K关注 0票数 29

我有一个cron作业,需要包含这个文件:

代码语言:javascript
复制
require '../includes/common.php';

但是,当它通过cron作业(而不是我的本地测试)运行时,相对路径不起作用。cron作业运行以下文件(在实时服务器上):

代码语言:javascript
复制
/home/username123/public_html/cron/mycronjob.php

下面是错误:

代码语言:javascript
复制
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将位于

代码语言:javascript
复制
/home/username123/public_html/includes/common.php

这是否意味着我必须将第2行替换为:

代码语言:javascript
复制
require '/home/username123/public_html/includes/common.php';

谢谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-06-25 22:18:01

从技术上讲,php脚本是在cron所在的位置运行的;例如。如果cron在/bin/cron中,则此语句将在/bin/includes/common.php中查找common.php。

所以,是的,您可能必须使用完整路径或使用set_include_path

代码语言:javascript
复制
set_include_path('/home/username123/public_html/includes/');
require 'common.php';
票数 33
EN

Stack Overflow用户

发布于 2010-06-25 22:19:29

不,不。您需要在crons上使用绝对路径。

我所做的是:

代码语言:javascript
复制
// 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
票数 28
EN

Stack Overflow用户

发布于 2017-09-03 22:20:36

推荐绝对路径规范的解决方案的替代方案是在脚本中使用chdir。这样,您的相对路径将按预期工作。

例如,要切换到脚本所在的目录:

代码语言:javascript
复制
$curr_dir = dirname(__FILE__);
chdir($curr_dir);

要切换到脚本的父目录,请执行以下操作:

代码语言:javascript
复制
$curr_dir = dirname(__FILE__);
chdir($curr_dir . "/..");

以此类推。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3118699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档