2011-08-10 9 views
0

まず、テキストファイルを開き、最初の行を取得してファイルから削除し、残りのファイルを保存する関数を持っています。返された行を返すためにreturn文を使用する場合を除いて、すべてが正常に機能しています。 return文を使用すると、なんらかの理由でファイルがクリアされます。 return文を削除すると、関数はそれが何をするかを行います。私はこれがPHPのバグか、ここに隠れた何かが私が見ていないかどうか議論しています。コードの一部を以下に示します。どんなヘルプも非常に高く評価されます。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; 
+0

問題を示す最小のテストケースを作成できますか? –

+0

'$ nlines'に' count($ lines)-2'要素を追加しているに過ぎませんが、 'count($ lines)'要素を読み込もうとしていますか? –

+0

も参照してください。http://stackoverflow.com/questions/2404707/php-efficent-way-to-get-and-remove-first-line-in-file – JRL

答えて

0

コードが正しいと思われます。しかし、ここでは単純化されたバージョンです。そのテストされていません:

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; 

} 
+0

お返事ありがとうございます。ループを避けるために、このように接近することについて考えなかった。ありがとう。 :)残念ながら、これは問題を解決しない、何らかの理由でreturn文がまだファイルの内容を完全にきれいに拭く原因となる。 これは私が困惑し、私のコードではなく、これがPHP関連の問題であるかどうか疑問に思っています。おかげさまで – Friday

+0

@Friday okその場合、なぜテスト目的でtest2.txtに保存しようとしていないのですか?また、print_r($ lines)を実行します。 'unset()'の後に実際にデータが存在するかどうかを確認してください。私はこれが何か自明であると確信しています。 –

+0

返事をありがとう。私はtest2.txtに試してみましたが、消去せずに書きました。そこで戻り、test.txtに試してみたところ、消去せずに書きました。奇妙なことですが、今は魔法のように動作します。私は何かがそれを妨害していたと思うし、ファイルパスを書き直すと削除されました。あなたのおかげで、大変感謝しています。 =) – Friday

関連する問題