PHP:要求路径不适用于 cron 作业?
我有一个需要包含此文件的 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';
:
谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
在尊重所有当前答案的情况下,他们都采取了“更改 php 代码”的方法。
我不喜欢仅仅为了从
cron
运行 PHP 文件而更改它,因为这会降低代码的可移植性,并增加忘记更改一两个相对路径并破坏程序的机会。相反,请在
cron
选项卡行更改目录,并保留所有相对路径和 PHP 文件不变。 例如,检查 这个答案
还要检查这篇文章,我会引用相关部分
With all do respect to all the current answers, they all went to "change the php code" approach.
I don't like to change my PHP files just to run it from a
cron
because it reduces the code portability and increases the chances to forget to change one or two relative paths and break the program.Instead change the directory at the
cron
tab line, and leave all your relative paths and your PHP files untouched. For examplecheck this answer
also check this article, I will quote the relative part
从技术上讲,php 脚本是在 cron 所在的位置运行的;前任。如果 cron 位于 /bin/cron 中,则此语句将在 /bin/includes/common.php 中查找 common.php。
所以是的,您可能必须使用完整路径或使用 set_include_path
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
诺诺。您需要在 crons 上使用绝对路径。
我所做的是:
nono. you need to use absolute paths on crons.
what I do is:
建议绝对路径规范的解决方案的替代方案是在脚本中使用
chdir
。这样,您的相对路径将按预期工作。例如,切换到脚本的目录:
切换到脚本的父目录:
等等。
An alternative to the solutions which recommend absolute path specification is using a
chdir
in your script. That way, your relative paths will work as expected.For example, to change to the directory of the script:
To change to the parent directory of the script:
And so forth.
如果相对路径不起作用,则说明 cron 任务运行时设置的当前目录不是 /home/username123/public_html。在这种情况下,您只能使用绝对路径。
If the relative path doesn't work, then it means that the current directory set when the cron tasks are running is not /home/username123/public_html. In such cases, you can only use an absolute path.
这听起来很简单,就像您正在运行的某个脚本正在设置 include_path 并且您正在包含该脚本一样。使用 phpinfo() 检查 include_path 全局与本地设置。
It sounds as simple as just some script you are running is setting the include_path and you are including that script. use phpinfo() to check the include_path global vs local setting.