2009-06-02 56 views
1

我想在这里建立一个档案,PHP是我的代码: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调用,但会得到另一个错误,告诉我我没有设置权限。因此,无论我是在一个生病的鸡还是鸡蛋周期,或者我需要在包含目录中设置权限......但是如何?它试图所有的folling:

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

没有哪个工作...我该怎么办?哦,顺便说一句,我需要更改权限回来吗?

谢谢!

UPDATE我试图CHMOD(,0777“”),这是我得到的错误:

Warning: chmod(): Operation not permitted 

我试图使这个文件的唯一原因是,所以我可以通过FTP它我在别的地方,然后我打算解除()它。那么如果有更好的方法?就像也许将文件存储在内存中发送它(不知道这是否可能)?另外我正在使用PHP4。谢谢!

回答

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); 
0

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

chmod('.', PERMISSION); 

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

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

+2

如果php作为模块运行,并且Web服务器无权chmod包含的目录(或者如果用户调用脚本时不从CLI访问),则可能无法在包含文件夹中工作。 – 2009-06-02 21:09:04

1

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

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

0

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

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); 

应该工作。

0

如果你想维护chroot监狱,但仍然需要权限来chmod当前目录,你将不得不弄清楚如何使用sudo和-S选项并将root密码传递给STDIN为了获得特权。

相关问题