拒绝了 cron 和浏览器的 mkdir 权限


Permission denied mkdir for cron and browser

我们有一个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。

有几个

想法需要注意:get_current_user获取.php文件(即脚本)的所有者,而不是运行php脚本的用户的名称。这些总是不同的,因为文件将由您(普通用户)上传,而 php/apache 将以不同的用户(通常称为"apache"或"www")运行。您需要这两个中的后者。 从 PHP 手册中建议的片段是:

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

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


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

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