2012-01-05 123 views
3

问题PHP的mkdir()和Apache所有权问题

我试图将文件上传到PHP通过我自己的服务器。如果文件夹不存在,首先我尝试创建文件夹;

mkdir($folder, 0700); 

我的脚本正在创建文件夹,但apache是​​文件夹(和文件)的所有者,所以我无法访问我上传的文件。

我在我的服务器中关闭了safe_mode。我仍然无法找到解决这个问题的方法。

如果有人能帮我解决这个问题,我会很高兴。

注意: 我试过0755,0777不会改变任何东西。 Apache是​​创建的文件夹的所有者。

+0

权限700是非常严格的。在* only *中,所有者可以对目录执行任何操作。所以你所描述的是预期的。 – 2012-01-05 18:34:23

+0

你有没有检出http://stackoverflow.com/questions/2560762/php-mkdir-and-apache-ownership? – j08691 2012-01-05 18:35:42

+0

@ j08691;是的,我检查了所有。正如我所提到的,safe_mode已关闭。 @Jason McCreary,即使我改变权限,没有任何变化,仍然'apache'是文件夹的所有者。 – Revenant 2012-01-05 18:37:39

回答

2

我建议重新配置Web服务器使用suEXECsuPHP。这种方法的缺点是你不得不在CGI模式下使用PHP而不是Apache模式。尽管如此,我还没有看到这在中低流量网站上成为问题。主要好处是您的脚本将以拥有它们的人员身份运行,因此脚本所产生的任何新目录或文件都将自动由所述用户拥有。

最后,如果你的问题是只是与创建新的目录,而不是文件,你没有任何存储不应由窥探读取,然后chmod($path, 0755);将解决您的问题。

+0

我试过chown(),据我了解,它可能带来很高的安全性问题。我宁愿安全。 – Revenant 2012-01-05 18:39:01

+0

我不得不改变我的答案,我不知道'chown()'需要你以root身份运行脚本才能工作。 – Crontab 2012-01-05 18:41:12

+0

我不知道如何在这些细节处理服务器。我猜这个没有别的办法。 – Revenant 2012-01-05 18:57:28

0

当然。上传目录必须是可写的other /访问,即:XX7:

// fill APPPATH with a suitable directoy name 

if (! file_exists(APPPATH . 'uploads')) 
{ 
    mkdir(APPPATH . 'uploads', 0757, TRUE); 
} 

7: owner permissions, ie: rwx 
5: group permissions, ie: rx 
7: other permissions, ie: rwx 
+0

它创建文件夹,我没有问题。问题是apache是​​文件夹的所有者。 – Revenant 2012-01-05 18:48:36

+0

是的,apache也是上传文件的所有者。只需使目录/文件夹可写并可由其他用户访问。 – 2012-01-05 18:53:14

+0

如果这不起作用,我认为问题必须在脚本的另一部分。你如何访问上传的文件? – 2012-01-05 18:57:52

0

你为什么要摆在首位设置权限,700? 755将允许“任何人”阅读您的文件和文件夹,并且在大多数情况下,它实际上是可以接受的。

+0

更新我的问题。我尝试了755,777没有成功。 Apache是​​每个创建的文件夹的所有者。 – Revenant 2012-01-05 18:50:21

1

下面的代码段创建的权限777(或任何指定的权限),目录:

$oldumask = umask(0); 
mkdir($path, 0777); 
umask($oldumask);