0

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

4

1 回答 1

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 - 见评论)


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

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

于 2012-05-31T11:49:02.797 回答