PHP中文本区域的文件I/O
我和我的朋友有一点空闲时间一起浏览主页。他不是程序员,为了让他能够更改首页上的一些文本,我创建了一个php脚本 1) 从文件“tester.txt”读取数据(这是应该放在首页的文本)PHP中文本区域的文件I/O,php,file-io,Php,File Io,我和我的朋友有一点空闲时间一起浏览主页。他不是程序员,为了让他能够更改首页上的一些文本,我创建了一个php脚本 1) 从文件“tester.txt”读取数据(这是应该放在首页的文本) 2) 将此文本打印到文本区域,您可以在其中编辑文本并再次提交 3) 将编辑的文本写入同一文件“tester.txt” 两个函数Read();然后写();像这样 function Read() { $file = "tester.txt"; $fp = fopen($file, "r"); w
2) 将此文本打印到文本区域,您可以在其中编辑文本并再次提交
3) 将编辑的文本写入同一文件“tester.txt” 两个函数Read();然后写();像这样
function Read() {
$file = "tester.txt";
$fp = fopen($file, "r");
while(!feof($fp)) {
$data = fgets($fp, filesize($file));
echo "$data <br>";
}
fclose($fp);
}
function Write() {
$file = "tester.txt";
$fp = fopen($file, "w");
$data = $_POST["tekst"];
fwrite($fp, $data);
fclose($fp);
}
函数读取(){
$file=“tester.txt”;
$fp=fopen($file,“r”);
而(!feof($fp)){
$data=fgets($fp,filesize($file));
回显“$data
”;
}
fclose($fp);
}
函数写入(){
$file=“tester.txt”;
$fp=fopen($file,“w”);
$data=$_POST[“tekst”];
fwrite($fp,$data);
fclose($fp);
}
我唯一的问题是,当文本被打印到文本区域时,返回的行被写为
——我真的不希望它这样做,因为当你编辑一些代码并重写它时,会出现另一层
。下面是一个屏幕截图来说明:
有什么解决办法吗
谢谢
如果您需要代码的其余部分,请参阅:
<html>
<head>
<title>Updater</title>
</head>
<body>
<?php
function Read() {
$file = "tester.txt";
$fp = fopen($file, "r");
while(!feof($fp)) {
$data = fgets($fp, filesize($file));
echo "$data <br>";
}
fclose($fp);
}
function Write() {
$file = "tester.txt";
$fp = fopen($file, "w");
$data = $_POST["tekst"];
fwrite($fp, $data);
fclose($fp);
}
?>
<?php
if ($_POST["submit_check"]){
Write();
};
?>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
<textarea width="400px" height="400px" name="tekst"><?php Read(); ?></textarea><br>
<input type="submit" name="submit" value="Update text">
<input type="hidden" name="submit_check" value="1">
</form>
<?php
if ($_POST["submit_check"]){
echo 'Text updated';
};
?>
</body>
</html>
更新程序
您使用echo“$data
”代码>-只需让回显$data代码>?猜一猜,这是托管在*nix机器上的,他正在使用Windows机器进行编辑
如果是这种情况,将写函数更改为该函数应该可以解决问题:
function Write(){
$file = "tester.txt";
$fp = fopen($file, "w");
$data = str_replace(array("\r\n","\r"),"\n",$_POST["tekst"]);
fwrite($fp, $data);
fclose($fp);
};
您不需要
。根据
的配置方式,默认情况下,使用\n
硬包装行。保存文件时会保留这些标记,因此不需要添加自己的换行符。使用正则表达式将换行符标记替换为换行符
preg_replace('#<br\s*/?>#i', "\n", $data);
preg#u replace(“##i”、“\n”、$data);
您可以找到更详细的解释这比您想象的要简单。您不应该输出
标记,因为文本区域已包含输入的换行符(\r\n
或\n
)。你不必像那样读文件,如果你这样读,你永远不必担心字符内容
更改:
$fp = fopen($file, "r");
while(!feof($fp)) {
$data = fgets($fp, filesize($file));
echo "$data <br>";
}
fclose($fp);
问题已解决。之所以发生这种情况,是因为在将内容写入文本区域时,您在每行末尾都放置了一个
。但是在文本区域中,换行符用“\n”
表示。保存现有文本时,下次换行符将替换为更多的
在公共页面上打印内容时,请保留
。但在编辑页面中,删除br
下面是我对PHP代码所做的:
<?php
define("FILE_NAME", "tester.txt");
function Read()
{
echo @file_get_contents(FILE_NAME);
}
;
function Write()
{
$data = $_POST["tekst"];
@file_put_contents(FILE_NAME, $data);
}
?>
<?php
if ($_POST["submit_check"])
{
Write();
}
?>
textdedit for Mac:)中编辑的文本和AptanaStudio中的代码-同样对于macMac可能会产生相同的问题,请尝试上述功能,看看是否可以解决。这都是关于系统之间换行的风格。重点是,我不写
!它们自己出现,您使用echo“$data
”编写它们
当然,您需要删除当前文本文件,因为它包含一堆
标记,但是在这之后,您不应该再看到任何
标记。
<?php
define("FILE_NAME", "tester.txt");
function Read()
{
echo @file_get_contents(FILE_NAME);
}
;
function Write()
{
$data = $_POST["tekst"];
@file_put_contents(FILE_NAME, $data);
}
?>
<?php
if ($_POST["submit_check"])
{
Write();
}
?>