2011-06-22 100 views
7

当保存一个文件的时候,文件的权限会被放到一个不存在的地方,最初被创建为新文件。文件权限和CHMOD:如何在创建文件时在PHP中设置777?

现在,这一切顺利,保存的文件似乎有模式644

为了使文件保存为模式777,我必须在这里更改些什么?

非常感谢任何提示,线索或答案。我认为的代码是与此有关我已经包括:

/* write to file */ 

    self::writeFileContent($path, $value); 

/* Write content to file 
* @param string $file Save content to wich file 
* @param string $content String that needs to be written to the file 
* @return bool 
*/ 

private function writeFileContent($file, $content){ 
    $fp = fopen($file, 'w'); 
    fwrite($fp, $content); 
    fclose($fp); 
    return true; 
} 
+2

请注意,0777模式是**危险**。请参阅http://stackoverflow.com/questions/2338641/in-a-php-apache-linux-context-why-exactly-is-chmod-777-dangerous – 2011-06-22 00:54:27

+0

@Phoenix谢谢。我葡萄牙0766就足够了(需要允许所有的写入权限)。那个更好吗? – Sam

+1

0766更好;这将防止任意代码执行。该文件是否需要**世界**可写,或只要例如Apache可以写入文件就足够了?你有一组需要能够写这些文件的应用程序吗?如果你让它们作为同一组运行并设置0764模式呢? – 2011-06-22 01:05:13

回答

18

PHP有一个内置的叫bool chmod(string $filename, int $mode)

http://php.net/function.chmod

private function writeFileContent($file, $content){ 
    $fp = fopen($file, 'w'); 
    fwrite($fp, $content); 
    fclose($fp); 
    chmod($file, 0777); //changed to add the zero 
    return true; 
} 
+8

_不要使用777,这是一个_decimal_数字,没有像你想要的:-) – paxdiablo

+3

@paxdiablo谢谢!注意和编辑 – thescientist

+0

这是一个安全风险吗?如果文件权限是777,那么攻击者可以使用“PUT”方法将文件上传到系统中?我错了吗?根据你的回答,我会使用你的解决方案。 – Hasan

4

你只需要与chmod()手动设置所需的权限功能:

private function writeFileContent($file, $content){ 
    $fp = fopen($file, 'w'); 
    fwrite($fp, $content); 
    fclose($fp); 

    // Set perms with chmod() 
    chmod($file, 0777); 
    return true; 
} 
+1

请参阅我对科学家的评论 - 正确的面具是** 0777 **不是777. – paxdiablo

+1

@paxdiablo已作出更改。我花了整整一天的时间在unix命令行上,并习惯于脱离特殊位。 –

2

如果要改变现有文件的权限,使用chmod(更改模式):

$itWorked = chmod ("/yourdir/yourfile", 0777); 

如果你希望所有新文件有一定的权限,你需要考虑你的设置umode。这是一个对标准模式应用默认修改的过程设置。

这是一个减法的。那么,我的意思是umode022会给你默认权限755777 - 022 = 755)。

但是您应该仔细考虑这两个这些选项。使用该模式创建的文件将完全不受保护。

+1

'0755'。不是'755'。 –