使用 fopen($file, 'w') 打开的文件不可写
File Opened With fopen($file, 'w') Is Not Writeable
使用 fopen($file, 'w') 将文本文件加载到表单中,但文件未写入-able 并且无法保存更改。显然是权限问题,但出于明显的安全原因,我不想将它们更改为 777。有没有办法即时做,保存后再改回来?
<?php $file = "$ServerRoot/text/test.txt";
// $ServerRoot is defined elsewhere and is to the root of the filesystem
// Retrieve the submitted changes and save to the file
if ($_SERVER['REQUEST_METHOD'] === "POST") :
$fh = fopen($file, 'w') or die("Can't open file for writing.");
fwrite($fh, $_POST['textfield']);
fclose($fh);
echo "Content saved.";
endif;
// FOR DIAGNOSTIC PURPOSES ONLY
$TestFile = (file_exists($file)) ? "The file exists\n" : "The file does <font color=\"red\">NOT</font> exist\n";
$TestFile .= (is_readable($file)) ? "The file is readable\n" : "The file is <font color=\"red\">NOT</font> readable\n";
$TestFile .= (is_writable($file)) ? "The file is writable\n" : "The file is <font color=\"red\">NOT</font> writable\n";
$TestFile = nl2br($TestFile);
// Read the textfile
$text = file_get_contents($file);?>
<div align="center">
<?=$TestFile;?>
<form action="<?=$submitFormAction;?>" method="post">
<div><input type="submit" value="Save File" />
<input type="reset" value="Reset"/></div>
<div><textarea name="textfield" rows="25" cols="85"><?=htmlspecialchars($text);?></textarea></div>
<div><input type="submit" value="Save File" />
<input type="reset" value="Reset"/></div>
</form>
</div>
永远不要将文件更改为 777。即使是暂时的。这是一个安全风险,在正确设置的服务器上不需要。
如果PHP 无法写入文件,这意味着网络服务器不是该文件的所有者,或者您以某种方式撤销了所有者作为 root / 管理员的写入权限。验证相关文件的所有者。如果您使用 Apache 作为您的网络服务器,所有者可能应该类似于 www-data
。如果它不是正确的所有者,请确保通过更改所有者来解决该问题。
请记住,如果您将 apache 设置为服务于多个域,则所有者可能完全不同,例如 client1
、client2
等
确保设置了正确的所有者后,将文件更改为 755 应该就足够了。
使用 fopen($file, 'w') 将文本文件加载到表单中,但文件未写入-able 并且无法保存更改。显然是权限问题,但出于明显的安全原因,我不想将它们更改为 777。有没有办法即时做,保存后再改回来?
<?php $file = "$ServerRoot/text/test.txt";
// $ServerRoot is defined elsewhere and is to the root of the filesystem
// Retrieve the submitted changes and save to the file
if ($_SERVER['REQUEST_METHOD'] === "POST") :
$fh = fopen($file, 'w') or die("Can't open file for writing.");
fwrite($fh, $_POST['textfield']);
fclose($fh);
echo "Content saved.";
endif;
// FOR DIAGNOSTIC PURPOSES ONLY
$TestFile = (file_exists($file)) ? "The file exists\n" : "The file does <font color=\"red\">NOT</font> exist\n";
$TestFile .= (is_readable($file)) ? "The file is readable\n" : "The file is <font color=\"red\">NOT</font> readable\n";
$TestFile .= (is_writable($file)) ? "The file is writable\n" : "The file is <font color=\"red\">NOT</font> writable\n";
$TestFile = nl2br($TestFile);
// Read the textfile
$text = file_get_contents($file);?>
<div align="center">
<?=$TestFile;?>
<form action="<?=$submitFormAction;?>" method="post">
<div><input type="submit" value="Save File" />
<input type="reset" value="Reset"/></div>
<div><textarea name="textfield" rows="25" cols="85"><?=htmlspecialchars($text);?></textarea></div>
<div><input type="submit" value="Save File" />
<input type="reset" value="Reset"/></div>
</form>
</div>
永远不要将文件更改为 777。即使是暂时的。这是一个安全风险,在正确设置的服务器上不需要。
如果PHP 无法写入文件,这意味着网络服务器不是该文件的所有者,或者您以某种方式撤销了所有者作为 root / 管理员的写入权限。验证相关文件的所有者。如果您使用 Apache 作为您的网络服务器,所有者可能应该类似于 www-data
。如果它不是正确的所有者,请确保通过更改所有者来解决该问题。
请记住,如果您将 apache 设置为服务于多个域,则所有者可能完全不同,例如 client1
、client2
等
确保设置了正确的所有者后,将文件更改为 755 应该就足够了。