相对路径在 cron PHP 脚本中不起作用
如果 PHP 脚本作为 cron 脚本运行,则在使用相对路径时,包含通常会失败。例如,如果您有
require_once('foo.php');
在命令行上运行时会找到文件 foo.php,但从 cron 脚本运行时找不到。
一个典型的解决方法是首先将 chdir 转到工作目录,或使用绝对路径。但是,我想知道导致此行为的cron和shell之间有什么不同。为什么在 cron 脚本中使用相对路径时会失败?
如果 PHP 脚本作为 cron 脚本运行,则在使用相对路径时,包含通常会失败。例如,如果您有
require_once('foo.php');
在命令行上运行时会找到文件 foo.php,但从 cron 脚本运行时找不到。
一个典型的解决方法是首先将 chdir 转到工作目录,或使用绝对路径。但是,我想知道导致此行为的cron和shell之间有什么不同。为什么在 cron 脚本中使用相对路径时会失败?
将工作目录更改为正在运行的文件路径。只需使用
chdir(dirname(__FILE__));
include_once '../your_file_name.php'; //we can use relative path after changing directory
在正在运行的文件中。然后,您就不需要在每个页面中将所有相对路径更改为绝对路径。
从 cron 运行时,脚本的工作目录可能会有所不同。此外,关于PHP require()和incluse()存在一些混淆,这导致了对工作目录真正成为问题的混淆:
include('foo.php') // searches for foo.php in the same directory as the current script
include('./foo.php') // searches for foo.php in the current working directory
include('foo/bar.php') // searches for foo/bar.php, relative to the directory of the current script
include('../bar.php') // searches for bar.php, in the parent directory of the current working directory