如何正确上传文件权限

时间:2014-01-12 19:22:45

标签: php unix file-upload

我有一个上传脚本,将zip文件上传到我网站上的目录,然后解压缩文件并为每个上传的文件创建一个目录。

drwxrwxrwx   7 Fabulous  admin    238 12 Jan 18:20 .
drwxrwxrwx  39 Fabulous  admin   1326 12 Jan 12:28 ..
-rwxr--r--@  1 Fabulous  admin  15364 12 Jan 18:21 .DS_Store
drwxr-xr-x   4 nobody    admin    136 12 Jan 18:20 2012_06
drwxr-xr-x   4 nobody    admin    136 12 Jan 18:20 2012_07
-rwxr--r--   1 Fabulous  admin   2904 31 Oct 16:11 index.php

我有另一个运行的php脚本,它复制目录2012_062012_07中的文件,这些文件由上传脚本创建。通过浏览器,每件事都很好。但是,我尝试使用unix命令行通过命令行自动执行该过程来调用脚本。

问题是如果我使用以下命令将目录的所有权更改为Fabulous,则脚本会运行

cd upload

sudo chown -R Fabulous:admin .

然而,当我这样做时,我的上传脚本index.php不再具有将文件上传到上传目录的权限访问权限,除非我将所有权更改回任何人。

错误消息

  

警告:   重命名(/htdocs/data_vis/upload/2012_06/Audit_Log.csv,htdocs/data_vis/data_out/2012_06_Audit_Log.csv):权限被拒绝   第27行/htdocs/data_vis/rename_files_in_sdir_with_sdir_name_prefix.php

欢迎任何关于我应该做什么的建议/建议或修正或通过许可或任何其他方法解决此问题的正确方法。提前致谢。

2 个答案:

答案 0 :(得分:0)

我使用以下命令更改目录中文件的所有权,以便其他脚本可以使用这些文件。

<?php

// File name and username to use
$file_name= "foo.php";
$path = "/home/sites/php.net/public_html/sandbox/" . $file_name ;
$user_name = "fred";

// Set the user
chown($path, $user_name);

// Check the result
$stat = stat($path);
print_r(posix_getpwuid($stat['uid']));

?>

答案 1 :(得分:0)

要么将它们添加到一个组中,要么将文件归所有者所有,并且拥有Fabulous所拥有的组,你不需要它为admin,root无论如何都可以访问所有内容

最简单的方法是确保群组保持不变是使用粘性位

如果/ path / to / dir归正确的组所有

chmod g+s /path/to/dir

将使/path/to/dir /path/to/dir/1下的所有新文件夹归/path/to/dir所有,而不是用户默认组

https://superuser.com/questions/102253/how-to-make-files-created-in-a-directory-owned-by-directory-group

然后你的web应用程序都应该没问题,而你的cron脚本没有修改代码