权限被拒绝为cron和浏览器mkdir

时间:2012-05-31 10:26:35

标签: php browser cron mkdir permission-denied

我们有一个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.7版运行Linux。

1 个答案:

答案 0 :(得分:1)

一些人想要注意: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 - 见评论)


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

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