【问题标题】:Why is fopen failing when in a file executed by a cron job?为什么在 cron 作业执行的文件中 fopen 失败?
【发布时间】:2014-06-30 20:23:57
【问题描述】:

我在 PHP 文件中有以下代码:

if(!$fp = fopen(__DIR__ . '/up.lock', "c+"))
{
    die('Failed to open up.lock');
}

代码的目的是防止文件的多个实例运行。

当我通过网络浏览器通过shell执行文件时,它工作正常。但是,当它作为 cron 作业执行时,Failed to open up.lock 会通过电子邮件发送给我。

为什么它在作为 cron 作业执行时不起作用,我该如何解决?

【问题讨论】:

    标签: php cron fopen


    【解决方案1】:

    __DIR__ 需要是绝对路径。如果是,你必须确保你的 cron 用户有足够的权限

    【讨论】:

    • “你必须确保你的网络浏览器有足够的权限”根本没有意义。
    • 我以为__DIR__ 创建了一个绝对路径?这不就是使用它的意义吗? PHP手册说它返回The directory of the filephp.net/manual/en/language.constants.predefined.php
    • 完全正确。我需要睡眠。因此,请检查启动脚本的用户的权限。你能告诉我们你的 cron 行和脚本上的 ls -al 吗?
    • 我只是将echo __DIR__; 放入我的cron 并打印出正确的路径,因此fopen 中的路径是正确的。我不确定您所说的ls -al 是什么意思?
    • 如果您第一次创建文件时是从您的网络浏览器创建的,那么该文件可能归您的网络服务器用户所有;在这种情况下,如果您通过 cron 再次使用简单用户执行脚本,您将无法写入文件,这是“c+” fopen 所需的权限
    猜你喜欢
    • 2019-10-19
    • 2016-03-18
    • 2014-07-23
    • 1970-01-01
    • 2013-01-17
    • 2014-06-21
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    相关资源
    最近更新 更多