【问题标题】:Permission denied mkdir for cron and browsercron 和浏览器的权限被拒绝 mkdir
【发布时间】:2012-06-05 14:28:31
【问题描述】:

我们有一个 PHP XML 解析脚本,可以将照片上传到像 /content/images/2012/05/31/%object_id%/ 这样的文件夹结构。此解析器主要作为 DirectAdmin cronjob 运行。在通过浏览器运行解析器时,我们在获取文件夹权限以启用该目录中的 cronjob 上传时遇到了许多问题。

根据print_r(posix_getpwuid(fileowner($directory)));,该目录的所有者与get_current_user() 相同。尽管如此,我在通过浏览器运行脚本时收到:Warning: mkdir() [function.mkdir]: Permission denied。将其作为 cron 作业运行时运行良好。

所有文件夹都有 chmod 0777 并且新文件夹是这样创建的;

mkdir($path,0777,true);

当然,我们在上传和/或删除文件本身时也会遇到同样的权限问题。

有什么方法可以让所有文件操作都作为 cron 作业和浏览器运行?

我们正在使用 PHP 版本 5.2.17 运行 Linux。

【问题讨论】:

    标签: php browser cron mkdir permission-denied


    【解决方案1】:

    需要注意几点:get_current_user 获取 .php 文件(即脚本)的所有者,但不是运行 php 脚本的用户的名称。这些总是不同的,因为文件将由您(普通用户)上传,而 php/apache 将以不同的用户(通常称为“apache”或“www”)运行。您需要这两者中的后者。从 php 手册中建议 sn-p 得到这个是:

    $processUser = posix_getpwuid(posix_geteuid());
    print $processUser['name'];
    

    (http://php.net/manual/en/function.get-current-user.php - 见 cmets)


    但是,为了解决您当前的问题,我强烈建议以运行 php/apache 的同一用户身份运行 cron(检查 crontab 上的手册页)- 该用户应该是该 sn-p 中的用户上面,将文件和目录 CHOWN 给同一个用户(他们当前是 root)和一个在你和 FTP 客户端之间共享的组。然后确保用户和组具有读+写权限,以便您也可以从 ftp 进行编辑。确保在脚本创建目录 (775) 和文件 (644) 时更改它们的权限。

    还要注意,如果你 mkdir(),那么上面的目录也必须对用户有写权限(这实际上可能是你最初的问题,为什么只有 root/cron 可以写在那里)。

    【讨论】:

    • 谢谢!确实;当我使用您的 sn-p 时,我看到脚本正在以“apache”的形式运行。我们目前正在构建一种解决方法,以便最终脚本作为 cron 作业运行,并考虑以不同的用户身份运行它。我们还将研究相关文件夹的正确权限和组
    猜你喜欢
    • 2016-08-24
    • 2013-07-01
    • 2012-08-13
    • 1970-01-01
    • 2023-03-22
    • 2018-03-19
    • 2021-12-20
    相关资源
    最近更新 更多