经过多年的php编程,这个问题对我来说似乎很奇怪。
我想让一个文件可以在dinamically中写入生产/开发中的权限没有问题....但它仍然给我带来麻烦。
有人可以解释我的错误吗?
// permissions -- the folder writable by www-data
//drwxrwxrwx 2 www-data www-data 4096 mag 24 12:19 Details
// then the file not writable by the owner
-r----x--t 1 www-data www-data 0 giu 8 12:48 /home/giuseppe/homeProj//Ariprova/trunk/PhpCsv/phpcsv/ConfigClasses/Helpers/Virtuemart2/Details/324-PartsToAdd.json
// then the code
if (!file_exists($fileRequest)) { // it's found
throw new Exception ('File non trovato. Nome File completo: '.$fileRequest. ' con cartella '. getcwd());
}
if (!is_writable($fileRequest)) {
$results = @chmod($fileRequest, '0777'); //this gives true
}
$fileReq = fopen($fileRequest, 'w');
fwrite($fileReq, 'a string' ); // this writes nothing on file
fclose($fileReq);
答案 0 :(得分:6)
将chmod($fileRequest, '0777')
更改为chmod($fileRequest, 0777)
。字符串'0777'
将转换为数字值,小数点是777,这不是您所期望的;你真正想要的是0777八进制。
答案 1 :(得分:1)
以下是chmod的手册页:http://php.net/chmod 您可以看到函数“尝试更改指定文件的模式”
这是因为可能不允许运行脚本的用户(例如apache)覆盖该目录所有者设置的权限(至少可能是原因之一)
更新:您可以尝试与所有者(或根目录确定)一起转到父目录,并将所有权更改为您需要能够执行此操作的用户(chown apache:apache dirname或类似的东西)