简单的PHP文本文件编辑器

22

我为客户开发了一个网站,他希望能够在后台解决方案中编辑主页面的一小部分。因此,我的解决方案是添加一个非常基本的编辑器(domain.com/backend/editor.php),当您访问它时,它将具有一个包含代码的文本框和一个保存按钮。它将编辑的代码将被设置为一个 TXT 文件。

我认为这样的东西用 PHP 编写应该很容易,但 Google 这次没有帮助我,所以我希望这里可能会有人指引我正确的方向。请注意,我没有 PHP 编程经验,只有 HTML 和基本的 JavaScript,因此请在提供任何回复时要详尽。


这个网站有数据库吗?还是你想从TXT文件中加载数据? - user898741
你似乎只是在寻找一个内容管理系统(CMS)?! - markus
1
这里在SO上有很多关于文件IO的问题,例如https://dev59.com/j0fRa4cB1Zd3GeqP6y3H。 - Till Helge
8个回答

42
你创建了一个HTML表单来编辑文本文件的内容。如果提交了表单,你会更新文本文件(并重新定向到表单,以防止F5/刷新警告)。
<?php

// configuration
$url = 'http://example.com/backend/editor.php';
$file = '/path/to/txt/file';

// check if form has been submitted
if (isset($_POST['text']))
{
    // save the text contents
    file_put_contents($file, $_POST['text']);

    // redirect to form again
    header(sprintf('Location: %s', $url));
    printf('<a href="%s">Moved</a>.', htmlspecialchars($url));
    exit();
}

// read the textfile
$text = file_get_contents($file);

?>
<!-- HTML form -->
<form action="" method="post">
<textarea name="text"><?php echo htmlspecialchars((string)$text); ?></textarea>
<input type="submit" />
<input type="reset" />
</form>

使用UNIX换行符保存文件:file_put_contents($file, str_replace("\r", '', $_POST['text'])); - Sunry
@Sunny:请查看:文本区域中表示新行的字符是什么 - 我建议您进行标准的换行符规范化:如何以最聪明的方式在PHP中替换不同的换行符样式? - 然后您将使用\n进行替换。请注意,您还需要处理字符编码,答案中的示例并不特定于某个编码。 - hakre
当我在Dreamweaver / Notepad中打开保存的文件时,会出现重复的换行符。这会导致“500内部服务器错误”,因为我正在使用代码从浏览器保存.htaccesss文件。但是,在我的Windows本地主机上,这个功能正常工作,但是在托管时会出现此问题。请帮忙解决。 - Bhavesh G
@BhaveshGangani:你需要处理的是换行符规范化(以及可能的检测)。请参见https://en.wikipedia.org/wiki/Newline;https://dev59.com/W2oy5IYBdhLWcg3wUcf_和https://dev59.com/4WYq5IYBdhLWcg3wxTSq-此外,请查找有关具体主题的现有答案,这里的答案仅是一个粗略的示例。它不关心换行符的细节(这已经是我第二次考虑这个问题了,而且很古老,所以这个问题可能不会经常出现)。-除了换行符之外,文件和网站的字符编码也很重要。在这里也要小心。 - hakre
@SomeGuyOnAComputer:感谢您的参与,但是我刚刚已经将您的更改回滚了,因为所有这些HTML标记都会自动成为文档的一部分,除了样式标记,我认为它对答案没有任何帮助。相反,它增加了代码量和阅读难度,这会降低答案的质量。在我看来,问答是不是用于复制-粘贴的代码库。 - hakre
显示剩余7条评论

5

读取文件:

<?php
    $file = "pages/file.txt";
    if(isset($_POST))
    {
        $postedHTML = $_POST['html']; // You want to make this more secure!
        file_put_contents($file, $postedHTML);
    }
?>
<form action="" method="post">
    <?php
    $content = file_get_contents($file);
    echo "<textarea name='html'>" . htmlspecialchars($content) . "</textarea>";
    ?>
    <input type="submit" value="Edit page" />
</form>

请问您能否提供更多关于如何添加此内容的信息?以及如何将文本字段插入其中并使其功能正常?正如我之前所提到的,我对PHP非常陌生。 - Alehandro Darie
它能工作,但是在加载时它没有获取txt文件的内容。如果可以的话,您能否请调整代码来实现这个功能? - Alehandro Darie
1
很抱歉,我不明白你所说的“在加载时获取txt文件的内容”的意思。 - Niels

1

你基本上是在寻找类似于联系表单或类似的概念。

应用像this one这样的教程中的相同原则,而不是使用mail发送电子邮件,请查看PHP.net上的文件函数


0
可以使用这行代码:
    <form action="" method="post">
    <textarea id="test" name="test" style="width:100%; height:50%;"><? echo "$test"; ?></textarea>
    <input type="submit" value="submit">
    </form>

0

我有类似的需求,所以我们创建了一个名为stringmanager.com的客户友好型解决方案,我们在所有项目和CMS无效的地方使用它。

从您的角度来看,您只需要在代码中标记字符串,例如:

echo "Text he wants to edit";

变成:

echo _t("S_Texthewantstoedit");

stringmanager.com会处理其余部分。您的客户可以在我们的在线应用程序中管理特定的文本区域,并在任何地方同步。几乎忘了提到,它是完全免费的。


0
你当时在谷歌上搜索了什么?php写文件给我返回了几百万个结果。
就像fwrite()手册中所述:
<?php
$fp = fopen('data.txt', 'w');
fwrite($fp, '1');
fwrite($fp, '23');
fclose($fp);

// the content of 'data.txt' is now 123 and not 23!
?>

但说实话,你应该先拿起一本PHP书开始尝试。除了想要将文本框(我是指textarea?)发布到TXT文件之外,你没有发布任何单一的要求。这样做就可以:

<?php
if ($_SERVER['REQUEST_METHOD'] == "POST")
{
    $handle = fopen("home.txt", 'w') or die("Can't open file for writing.");
    fwrite($fh, $_POST['textfield']);
    fclose($fh);
    echo "Content saved.";
}
else
{
    // Print the form
    ?>
    <form method="post">
        <textarea name="textfield"></textarea>
        <input type="submit" />
    </form>
    <?php
}

请注意,这与您的描述完全匹配。打印表单时不会读取文件(因此每次想编辑文本都必须从头开始),不检查输入内容(您是否希望用户能够发布HTML?),没有安全性检查(任何人都可以访问和更改文件),而且它不以任何方式读取文件以在所需页面上显示。

那段代码是如何工作的?你能否提供更多信息?我搜索了“php编辑器”等类似词汇,但大多数结果都是用于编辑php文件的应用程序。 - Alehandro Darie
@AlehandroDarie,那你为什么在搜索“php编辑器”时找不到任何东西就停下了呢?你想做的是写一个文件,所以应该搜索那个。我已经更新了我的答案,但它纯粹是演示代码,在生产环境中绝不能使用。 - CodeCaster

0

首先要做的是捕获信息,最简单的方法是使用带有TEXTAREA的HTML表单:

<form method='post' action='save.php'>
  <textarea name='myTextArea'></textarea>
  <button type='submit'>Go</button>
</form>

在“save.php”(或其他地方),您可以轻松地查看从表单发送的信息:
<?php
  echo $_POST['myTextArea']
?>

要创建一个文件,可以查看PHP中的fopen/fwrite命令,以下是另一个简单的示例:
<?php 
  $handle = fopen("myFile.txt","w");
  fwrite($handle,$_POST['myTextArea'];
  fclose($handle);
?>

警告:这是一个极其简单的答案!您可能希望保护您的表单和文件,或者做一些不同的事情...以上所有内容都只会将表单中发布的内容完全写入文件。如果您想指定不同的文件名、覆盖、追加、检查坏内容/垃圾邮件等,则需要做更多的工作。

如果您有一个公开访问并发布内容到网页的编辑器,则垃圾邮件保护是绝对必要的,否则您将会后悔!

如果您不感兴趣学习PHP,那么您应该考虑请专业开发人员为您处理任何编码工作!


-1
<?php
$file = "127.0.0.1/test.html";
$test = file_get_contents('1.jpg', 'a');
if (isset($_POST['test'])) {
file_put_contents($file, $_POST["test"]);
};
?>
<form action="" method="post">
<textarea id="test" name="test" style="width:100%; height:50%;"><? echo "$test"; ?></textarea>
<input type="submit" value="submit">
</form>

还没有时间完成它,只是最简单的可能性,如果需要会添加更多内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接