我期待PHP函数fwrite()
出现问题$filename = 'rss.xml';
if (file_exists($filename)) {
echo "The file $filename exists";
}
if (is_writable($filename)) {
$fp = fopen($filename, 'w');
fwrite($fp, $feed);
fclose($fp);
}
else{
echo '<br />not writable..';
if(!is_readable($filename)){
echo ' and not readable!';
}
}
执行脚本后返回:
The file rss.xml exists
not writable..
rss.xml的chmod为755,安全模式已关闭。
我在(mt)mediatemple.com上托管了(dv),当我在(gs)解决方案上托管时,脚本工作正常。
我找不到错误的原因= /
答案 0 :(得分:3)
755
表示:
rwx
:读取,写入,执行所有者r-x
:读取,执行群组r-x
:读取,执行其他人因此,每个人都可以阅读(并执行)该文件,但只有所有者才能写入。
拥有该文件的用户可能不是运行PHP脚本的用户?即文件可能属于任何人,而您的脚本由Apache的用户(通常是www-data
)运行?
第一个想法可能是删除文件,让你的脚本尝试重新创建它;如果它被正确地重新创建(这意味着Apache对包含它的directoy有write
权限),那么它应该能够修改它。
否则,您应该尝试将write
权限授予other
- 如果您的脚本由另一个用户运行而不是该文件的所有者; chmod o+w rss.xml
应该做到这一点。
答案 1 :(得分:0)
755表示文件的所有者可以修改它,但不能修改其他任何人。所有者可能不是Web服务器而是您自己(您的FTP帐户?),因此PHP无法修改它。尽量给予更广泛的支持。从775开始,如果不起作用,请尝试777。
有些Web主机以与FTP帐户相同的用户身份运行Web服务器,因此他们不会获得有关文件权限的支持问题,但在我看来,这是一个很大的安全漏洞。我认为Mediatemple做正确的事情是不要将Web服务器作为您的FTP帐户运行。
答案 2 :(得分:0)
编辑:我忽略了这一点,正如Pascal Martin和其他人指出的那样,755可能意味着该文件是合法的不可写的,您可能需要777或更改所有者。我留下这个答案,以防万一设置正确,并且is_writable()仍然返回false,这就是我所假设的。
奇。在is_writable User Contributed Notes中对此进行了简短的讨论。对于那里的帖子,切换到PHP 5解决了它(虽然我怀疑它是服务器/ PHP /哪个进程运行的用户问题)。
你可以试试:
当然:当你绕过检查时文件是否真的有fwrite()?
答案 3 :(得分:0)
在不同的主机上,PHP运行并以
的形式访问文件所有者或
GROUP 或
WORLD
第一个变体是最适合您的安全性。
在这种情况下,您应该设置文件权限644,在最后一种情况下 - 666。
如果只在那里存储数据,为什么要设置777并使文件可执行?
答案 4 :(得分:0)
创建一个文件夹,用于保存具有0777权限的文件,然后以低权限级别0644将文件放入其中。因此,每个人都可以访问该文件夹但不是每个人都可以更改文件(0644) =这就是我找到的最佳解决方案。 另一个不太安全的解决方案是不要创建文件夹,只是将文件权限更改为666或者有些人更喜欢777 =不是一个好的安全解决方案
答案 5 :(得分:-1)
CHMOD 0755表示只有文件所有者才能写入(组和其他人可以读取和执行)。您应该将CHMOD更改为0775甚至0777,具体取决于PHP的用户/组。