1

经过多年的 php 编程,这个问题对我来说仍然很奇怪。

我想让一个文件在动态上可写,以便在生产/开发中没有权限问题......但它仍然给我带来了麻烦。

有人可以解释我错了什么吗?

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

2 回答 2

6

更改chmod($fileRequest, '0777')chmod($fileRequest, 0777)。该字符串'0777'将被转换为一个数值,这将是十进制的 777,这不是您所期望的;你真正想要的是 0777 八进制。

于 2012-06-08T11:10:14.307 回答
2

这是 chmod 的手册页:http: //php.net/chmod 你可以看到函数“尝试更改指定文件的模式”

这是因为可能不允许运行脚本的用户(例如 apache)覆盖该目录所有者设置的权限(至少这可能是原因之一)

更新:您可以尝试与所有者一起进入父目录(或确定为 root)并将所有权更改为您需要能够执行此操作的用户(chown apache:apache dirname 或类似的东西)

于 2012-06-08T11:08:19.037 回答