Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中文本区域的文件I/O_Php_File Io - Fatal编程技术网

PHP中文本区域的文件I/O

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

我和我的朋友有一点空闲时间一起浏览主页。他不是程序员,为了让他能够更改首页上的一些文本,我创建了一个php脚本

1) 从文件“tester.txt”读取数据(这是应该放在首页的文本)
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();
    }
    ?>