新文本未写入现有文件

时间:2019-03-05 00:02:21

标签: php file

我想将每个HTML命令行保存在一个文件中。我的用户数量很少,从1到几百,所以我打算在名为1.php,2.php,3.php等的文件中创建get参数的副本。

function Message($T) {
  print "$T<br/>";
}

function CheckAndDelete($filename, $Delete)
{
  $res = file_exists($filename);
  if ($res) {
    Message("File \"" . $filename . "\" exist");
    if ($Delete) {
      Message("Deletes file \"" . $filename . "\"");
      unlink($filename) or die("Cannot delete file");
    }
  }
  else
    Message("File \"" . $filename . "\" does not exist");
} // CheckAndDelete()

function Check($Prompt, $fname, $fullfname, $Delete)
{
  Message($Prompt);
  CheckAndDelete($fname, $Delete);
  CheckAndDelete($fullfname, $Delete);
} // Check()

$T = strftime("%T");
$Root = $_SERVER['DOCUMENT_ROOT'] . "/";
Message("Root: " . $Root);
$Owner  = $_GET[P3];

$fname = $Owner . '.php';
$fullfname = $Root . $fname;

Check("I---------------", $fname, $fullfname, TRUE);
Check("II--------------", $fname, $fullfname, TRUE);

$fil = fopen($fname, "w");
fwrite($fil, $Owner);
$S = $T . " " . $Owner;
fwrite($fil, $S);
fclose($fil);
Message($S . " Written!!");

Check("III-------------", $fname, $fullfname, FALSE);

如果文件不存在,则此方法有效,该文件已创建并包含我希望它们包含的内容。但是,如果确实存在文件,则程序的行为就好像一切正​​常,但是文件的内容不会更改。我在互联网上阅读了一些有关完整文件名的信息,并尝试对其进行测试,如下所示:

enter image description here

1 个答案:

答案 0 :(得分:0)

您正在以w模式打开文件:

$fil = fopen($fname, "w");

此模式状态的fopen()的PHP文档(强调我的意思):

  

'w'仅开放用于写作; 将文件指针放在文件开头,然后将文件截断为零长度。如果该文件不存在,请尝试创建它。

您正在覆盖文件,而不是附加到文件。请使用适当的模式进行附加;例如:fopen($fname, 'a');

fopen()文档中有完整的模式列表。

或者,您可以使用带有FILE_APPEND标志的更高级别的功能file_put_contents();例如:

$fil = file_put_contents($fname, $S, FILE_APPEND);

希望这会有所帮助:)