【问题标题】:PHP text file cleared when using return statement使用 return 语句时清除 PHP 文本文件
【发布时间】:2011-08-10 01:12:44
【问题描述】:

首先,我基本上有一个函数,它打开一个文本文件,抓取第一行,将其从文件中删除,然后将文件与其余部分一起保存。一切正常,除非我使用 return 语句返回检索到的行。使用 return 语句,由于某种原因它会清除文件;删除 return 语句,函数会做它应该做的事情。我正在争论这是否是一个 PHP 错误,或者这里是否隐藏了一些我没有看到的东西。下面列出了部分代码,任何帮助将不胜感激。

谢谢!

    $nlines = array();

    $lines  = file(CACHE_PATH."/test.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

    $link  = $lines[0];

    $lcount = count($lines)-1;
    for($i=1; $i < $lcount; $i++)
    {
        $nlines[] = $lines[$i];
    }

    $file  = fopen(CACHE_PATH."/test.txt", 'w');

    for($i=0; $i <= $lcount; $i++)
    {
        fwrite($file, $nlines[$i]);
    }

    fclose($file);

    return $link;

【问题讨论】:

  • 你能创建一个最小的测试用例来演示这个问题吗?
  • 您意识到您只是将count($lines)-2 元素添加到$nlines,但您正在尝试从中读取count($lines) 元素?
  • @Oli Charlesworth 我知道我几乎是从数组中的 1 开始,但在我正在做的事情之前结束 2,但我不明白你在做什么“从中读取 count() 元素”。计数只是获取数组中元素的数量,使用它,我可以根据索引$i从文件中抓取行到$nlines。无论如何,Saben Malik 对我的方法有更好的解决方案,应该想到它。不幸的是,这并不能解决退货问题。我将用一个测试用例场景来评论正在发生的事情。谢谢!
  • 这是测试用例场景。 function example(){ $lines = file("test.txt"); $lnk = $lines[0]; $file = fopen("test.txt", 'a'); fwrite($file, "test text"); fclose($file); return $lnk; } 上面的代码中(没测试过,刚写的)要抓取文件的第一行,要清空文件,要写文本“测试文本”。但是,随着函数中的return语句,文件被完全清除,刚刚写入的文本消失了。希望这可以澄清。谢谢

标签: php fopen return


【解决方案1】:

代码对我来说似乎是正确的。然而,这里是一个简化版本。但它未经测试:

function something(){

    $lines  = file(CACHE_PATH."/test.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    $link  = $lines[0];
    unset($lines[0]);

    $file  = fopen(CACHE_PATH."/test.txt", 'w');
    fwrite($file, implode("\n" , $lines) );
    fclose($file);

    return $link;

}

【讨论】:

  • 感谢您的回复。没有想过以这种方式接近它以避免循环。谢谢。 :) 不幸的是,这并不能解决问题,return 语句仍然由于某种原因导致文件的内容完全擦除。这让我感到困惑,想知道这是否是一个与 PHP 相关的整体问题,而不是我的代码。谢谢。
  • @Friday 好的,在这种情况下,您为什么不尝试保存到 test2.txt 以进行测试,看看会发生什么?也做一个 print_r($lines);在unset() 之后,看看之后是否真的有任何数据。我确信这是微不足道的。
  • 感谢您的回复。我试了一下test2.txt,它没有任何擦除就写好了。所以我回去试了一下test.txt,它没有擦除就写了。这是最奇怪的事情,它现在神奇地起作用了。我想有什么阻碍了它,当我重写文件路径时它被删除了。感谢您的帮助,非常感谢。 =)
猜你喜欢
  • 2010-11-07
  • 1970-01-01
  • 1970-01-01
  • 2019-02-12
  • 1970-01-01
  • 2013-12-22
  • 2011-02-11
  • 2020-02-16
  • 2021-01-09
相关资源
最近更新 更多