Php 使用fopen($File,';w';)打开的文件不可写

Php 使用fopen($File,';w';)打开的文件不可写,php,file-permissions,fopen,Php,File Permissions,Fopen,将文本文件加载到带有fopen($file,'w')的表单中,但该文件不可写,无法保存更改。显然存在权限问题,但出于明显的安全原因,我不想将其更改为777。是否有一种方法可以在运行时执行此操作,然后在保存后将其更改回来 <?php $file = "$ServerRoot/text/test.txt"; // $ServerRoot is defined elsewhere and is to the root of the filesystem // Retrieve the subm

将文本文件加载到带有fopen($file,'w')的表单中,但该文件不可写,无法保存更改。显然存在权限问题,但出于明显的安全原因,我不想将其更改为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>


从不将chmod文件复制到777。甚至不是暂时的。这是一种安全风险,在已正确设置的服务器上不需要

如果PHP无法写入文件,则意味着Web服务器不是文件的所有者,或者您以root/administrator的身份从所有者处撤销了写入权限。验证相关文件的所有者。如果您使用Apache作为Web服务器,那么所有者可能类似于
www-data
。如果不是正确的所有者,请确保通过更改所有者来解决该问题

请记住,如果您已将apache设置为服务于多个域,则所有者可能会有很大不同,如
client1
client2


确保设置了正确的所有者后,将文件命名为755就足够了。

webserver用户应该是服务器中文件/目录的所有者。这样,您就不必使用chmod文件。如果您是服务器所有者,您应该确保这一点。如果没有,你应该因为你的服务器提供商没有这么做而给他一巴掌另外,为了回答您的问题:不,如果PHP一开始就没有写入文件的权限,那么您不能从PHP内部对具有更多权限的文件进行chmod。到目前为止,这在我的开发系统上是脱机的,并且这些文件都应该归Web服务器所有。我会检查的。如果您确定Web服务器用户是所有者,那么chmoddding到755应该是正确的suffice@icecub你是对的,这些文件是属于我的,不是属于网络服务器的!在我看来(现在我想起来了),当它在几年前建立时,这是我能够移动、复制或保存文件并打开文件以使用桌面应用程序编辑它们的唯一方法。我会试着换回去。live server不应该有这样的限制,但是在开发中测试它还为时过早,因为这个表单还没有任何身份验证。我强烈建议您签出。这是完全免费的,他们有关于如何为自己设置整个(测试)服务器的完整教程。这是一个小小的工作,但是一旦你完成了所有的工作,你将拥有一个非常容易管理的服务器来满足你所需要的一切。