file_get_contents回应了一些东西,但是fgets返回false

时间:2017-07-08 01:17:28

标签: php html forms file echo

这是我的代码:

<?php
                extract ($_POST);
                $fh = fopen ("./s.txt", "a");
                echo file_get_contents( "./s.txt" );
                if(($line = fgets($fh)) !== false) {}
                echo($line);
                file_put_contents("./signup.txt", "");

                if($line!=false && $line!='') {
                        echo '<script language="javascript">';echo 'alert($line)';echo '</script>';
                        fwrite ($fh, "$line \n");
                        $n = $line;
                }
                else {
                        fwrite ($fh, "$_POST[n] \n");
                        $n = $_POST[n];
                }
                fclose ($fh);

  $script = $_SERVER['PHP_SELF'];
  print <<<TOP
  <html>
  <body>
  <form method = "post" action = "$script">
  <table border = "1">
        <tr>
          <td> Name</td>
          <td> <input type = "text" value = "$n" name = "n" size = "30" /></td>
        </tr>

TOP;
  print <<<BOTTOM
  <tr><td><input type = "submit" name = "order" value = "Submit Order" /></td></tr>
  </table></form></body></html>
BOTTOM;
?>

基本上,这有一个人可以进入的入口点,一旦有人进入它,数据就会被写入文件。每次加载页面后,都应该从文件中读取数据并将其设置为输入值。

但是当我加载程序时,输入“Word”作为字段,然后按提交,然后打开一个新选项卡(以确保它不仅仅是保存的数据)并重新输入URL,“Word”将回显为{ {1}},但file_get_contents没有回应任何内容,输入字段中没有任何内容。

为什么会这样,我该如何解决?

1 个答案:

答案 0 :(得分:1)

虽然这似乎没有在php.net中明确/清楚地记录(我将提供下面相关文档的链接),但我刚刚在我的最后进行了测试,我发现了如果您在fgets()

中使用'a'作为模式的文件资源上运行,fopen()将始终返回false

我想象这是&#39; a&#39;的一个副作用。模式仅为写入打开文件。运行完全相同的测试,使用&#39; a +&#39; (打开用于编写读取的文件)作为模式,同时输出fgets()file_get_contents()&#39; word&#39;。 fopen文档详细介绍了不同的模式。

http://php.net/manual/en/function.fopen.php

http://php.net/manual/en/function.fgets.php

如果您想查看我测试过的代码以及您自己的结果,我会在我的测试中截取几张截图:

Using mode 'a'

Using mode 'a+'