在php问题中覆盖文件

时间:2014-05-19 20:57:52

标签: php file

我正在运行一个可以执行各种操作的脚本。其中一个问题是在html textarea框内向屏幕生成css文件的内容,并允许编辑和提交。为了用我使用的新内容覆盖现有文件:

$myFile = "default.css";
$fh = fopen($myFile, 'w');
$stringData = $_POST['css'];
$write = fwrite($fh, $stringData);
fclose($fh);

如果我添加到文件并提交内容将擦除并按预期写入文件。但是,如果我从文件中删除了内容,则新提交的数据将附加到现有数据的顶部,而不是删除它。

如果在添加和删除数据时如何覆盖文件?

更新

通过添加和删除,澄清一小部分我的css文件:

p, h1 {
text-align: center;
}

如果我要添加color: blue;并提交,则会添加此内容,文件的其余部分将保持不变。如果我然后删除这个新添加的信息并再次提交新的工作表(没有color: blue;)将附加到顶部(对不起,我首先说底部)所以没有颜色的工作表将是顶部,整个工作表将有颜色将在下面。

我已经尝试了file_put_contents("default.css", $_POST['css']);同样的结果。包括var_dump($stringData);在首次提交时显示字符串长度为1500(ish),在第二次提交时显示大约3000。正如建议的那样,我提交了$stringData;来清除字符串,一旦提交内容进行写作。

因为我不想留下比特,因为这里的某人可能很明显很明显这个请求的完整php($ data是收集并打印内容到textarea):

if  (isset($_POST['css'])) {
    $myFile = "default.css";
    $fh = fopen($myFile, 'w');
    $stringData = $_POST['css'];
    $write = fwrite($fh, $stringData);
    var_dump($stringData);
    fclose($fh);
    $stringData;
                }

    $data = file_get_contents("default.css");

控制此的表格:

    <form onsubmit="return confirm('Confirm Submission');" method="post" action="<?php echo ($_SERVER["PHP_SELF"]);?>">
    <textarea cols="60" rows="20" name="css" id="css"><?php echo $data; if(isset($_POST['css'])) {  
         echo htmlentities ($_POST['css']); }?>
    </textarea>
<br><br>
    <input type="submit" value="Submit CSS"/>
    </form>

4 个答案:

答案 0 :(得分:3)

我怀疑问题出在$stringData。在页面的某处尝试var_dump($stringData)。查看是否附加了新的简化数据。 $stringData是否需要清除? $stringData;会这样做。

文件操作中的

w通常会写新的。 a会追加。我怀疑问题在于表单处理而不是文件操作。

答案 1 :(得分:1)

只需使用file_put_contents(),您就没有问题。该函数接受一个字符串,并写入一个文件(不附加)。

全部在一行!

file_put_contents("default.css", $_POST['css']);

答案 2 :(得分:1)

这不是真的有意义 - 打开模式w应该写,并将指针放在文件的开头。请尝试w+而不是w,如果这不起作用,请使用file_put_contents。这将上面的整个代码块转换为:

file_put_contents("default.css", $_POST['css']);

答案 3 :(得分:0)

在尝试了一些建议并尝试了我自己的一些后,我做了一个相当讨厌的发现[因为我没有立即发现它]。我发现重复来自textarea框,正如@Mr. Helper所建议的那样。每次提交数据时,都会附加到框的末尾。

为了解决这个问题,我将$data = file_get_contents("default.css");变量移动到一个单独的PHP文件(style.php),其中包含一个$data;清晰的方面以防万一。 style.php文件通过onclick ajax请求运行。现在,当按下提交按钮时,没有请求将现有的css表从$ data变量打印到文本区域。

感谢所有建议。我从所有的评论和答案中找到了一些更好的方法来实现我的代码。