PHP:设置权限,以便我可以写一个文件?

时间:2009-06-02 20:56:10

标签: php chmod

我正在尝试使用PHP创建一个文件,这是我的代码:

$file_to_send = 'ftp_test_from_created_file.txt';
chmod($file_to_send, 0777);
$fh = fopen($file_to_send,'w');
$tsv_line = 'Hey\tThese\tAre\tTab\tSeperated\tValues';
fwrite($fh, $tsv_line);
fwrite($fh, '\n');
$tsv_line = 'Hey\tThese\tAre\tToo';
fwrite($fh, $tsv_line);
fclose($fh);

这显然给了我一个错误,因为我试图设置一个尚不存在的文件的权限。虽然如果我跳过chmod调用,我会收到另一个错误,告诉我我没有设置权限。所以无论是我生病的鸡蛋还是鸡蛋周期还是我需要在包含目录上设置权限......但是如何?它尝试了所有的流程:

chmod('../containingfolder/', 0777);
chmod('../', 0777);
chmod('', 0777);

这些都不起作用......我该怎么办?哦,顺便说一句,一旦完成,我需要更改权限吗?

谢谢!

更新我尝试了 chmod('。',0777),这是我收到的错误:

Warning: chmod(): Operation not permitted

我尝试制作此文件的唯一原因是我可以在其他地方将其FTP,然后我计划取消链接()。那么如果有更好的方法呢?就像可能将文件存储在内存中发送它(不知道是否可能)?我也在使用PHP4。谢谢!

6 个答案:

答案 0 :(得分:1)

也可能是运行的apache服务器(如果是apache)无权更改该目录的权限。它可以有root / root作为用户/组,apache可以在apache group或wwwuser或其他地方运行。

在父目录上执行ls -l,看看哪个用户和组有权访问此文件夹。

答案 1 :(得分:0)

要更改当前目录的权限,请使用

chmod('.', PERMISSION);

你真的需要0777,即世界可读和可写吗?对我来说似乎很松懈!

编辑:您的建议chmod('../ containingfolder /',0777);应该也有效。你能对你得到的错误更加冗长吗?

答案 2 :(得分:0)

在文档根目录之外创建一个我们将调用$tmpFolder的目录,确保运行Web服务器的用户具有对它的读/写权限。然后是以下内容:

$file_to_send = $tmpFolder . '/ftp_test_from_created_file.txt';
chmod($file_to_send, 0777);
$fh = fopen($file_to_send,'w');
$tsv_line = 'Hey\tThese\tAre\tTab\tSeperated\tValues';
fwrite($fh, $tsv_line);
fwrite($fh, '\n');
$tsv_line = 'Hey\tThese\tAre\tToo';
fwrite($fh, $tsv_line);
fclose($fh);

答案 3 :(得分:0)

如果运行php的用户无法修改条目,则无法设置条目的权限。查看apache的配置,搜索它正在运行的用户(默认情况下是www-data)。要在将来避免这些,请将自己设置为与默认组相同的组,并提供文档根chmod -R g + a

答案 4 :(得分:0)

如果当前用户可以写入目录,您应该能够使用file_put_contents()简化所有这些。

<?php
$file = 'file_to_write.txt';
$data = "Tab\tseparated\tvalues\nMore\tseparated\tvalues";
file_put_contents($file);

如果您没有权限写入当前目录(或任何目录),您将无法创建该文件,更不用说chmod了。

如果您可以发布从chmod()命令获得的错误,那将有所帮助。

chmod('.',0777);

应该有用。

答案 5 :(得分:0)

如果你想维护chroot jail,但仍然需要chmod当前目录的权限,你将不得不弄清楚如何使用带-S选项的sudo并将root密码管道输出到STDIN中获得特权。