2012-05-31 55 views
0

我们有一个PHP XML解析脚本,可以将照片上传到像/content/images/2012/05/31/%object_id%/这样的文件夹结构。此解析器主要作为DirectAdmin cronjob运行。我们遇到了很多问题,让文件夹权限正确,以允许在该目录中上传两个cronjob作为通过浏览器运行解析器。cron和浏览器的权限被拒绝mkdir

根据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。

回答

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上的man page) - 用户应该是上面代码片段中的那个,CHOWN文件和目录添加到同一用户(他们当前是root用户)以及您和FTP客户端共享的组。然后确保用户和组具有读取和写入权限,以便您也可以从ftp进行编辑。确保您在脚本创建时更改了直接存储(775)和文件(644)的权限。

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

+0

谢谢!确实;当我使用你的代码片段时,我发现脚本以“apache”运行。我们目前正在构建一个解决方法,以便最终脚本作为cron作业运行,并将其作为另一个用户运行。我们还将研究相关文件夹的适当权利和组织 – DaFrenk