PHP:需要路径不适用于cron作业?

gsq*_*567 23 php cron require include absolute-path

我有一个需要包含此文件的cron作业:

require '../includes/common.php';
Run Code Online (Sandbox Code Playgroud)

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

/home/username123/public_html/cron/mycronjob.php
Run Code Online (Sandbox Code Playgroud)

这是错误:

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
Run Code Online (Sandbox Code Playgroud)

使用与cron作业相同的绝对格式,common.php将位于

/home/username123/public_html/includes/common.php
Run Code Online (Sandbox Code Playgroud)

这是否意味着我必须用以下代码替换我的第2行:

require '/home/username123/public_html/includes/common.php';
Run Code Online (Sandbox Code Playgroud)

谢谢!

Rob*_*bus 27

Technically seen the php script is run where cron is located; ex. If cron was in /bin/cron, then this statement would look for common.php in /bin/includes/common.php.

So yeah, you'll probably have to use fullpaths or use set_include_path

set_include_path('/home/username123/public_html/includes/');
require 'common.php';
Run Code Online (Sandbox Code Playgroud)

  • 为了使调试更容易,我可以这样说: if(file_exists('/home/username123/public_html/includes/common.php')) { set_include_path('/home/username123/public_html/includes/'); 需要'common.php'; } 否则需要'../includes/common.php'; 还是我每次都需要手动更改它并执行以下操作:// LIVE set_include_path('/home/fini7463/public_html/includes/'); 需要'common.php'; // 调试 //需要 '../includes/common.php'; ? (2认同)

Gab*_*osa 26

nono. you need to use absolute paths on crons.

what I do is:

// 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
Run Code Online (Sandbox Code Playgroud)


Acc*_*t م 26

所有人都尊重所有当前的答案,他们都采用了“更改 php 代码”的方法。

我不喜欢仅仅为了从 a 运行它而更改我的 PHP 文件,cron因为它降低了代码的可移植性并增加了忘记更改一两个相对路径并破坏程序的机会。

而是更改cron选项卡行中的目录,并保持所有相对路径和 PHP 文件不变。例如

1 1 * * * cd /home/username/public_html/&& php -f script.php
Run Code Online (Sandbox Code Playgroud)

检查这个答案

也检查这篇文章,我会引用相关的部分

根据 PHP 脚本中的代码,它可能只有在从特定目录调用时才能正确运行。例如,如果脚本使用相对路径来包含文件,则只有从正确的目录调用它才会运行。以下命令显示了如何从特定目录调用 PHP 脚本:

cd /home/username/public_html/; php -q script.php
Run Code Online (Sandbox Code Playgroud)

  • 这个答案就更好了。 (3认同)
  • 这是所有情况下 100% 正确的答案 (2认同)