テキストファイルの関数で最後の行を取得する方法

このQ&Aのポイント
  • PHPのfile関数を使用して、テキストファイルの最後の行を取得する方法を説明します。
  • 特定のテキストファイルの最後の行を取得するためには、file関数を使用し、配列の最後の要素を取得すれば良いです。
  • テキストファイルの最後の行が指定した文字列と一致する場合、変数を指定の値に変更することができます。ただし、変更が反映されない場合、バージョンや環境の問題が考えられます。
回答を見る
  • ベストアンサー

textファイルの関数について

$logmax = file("test.txt"); $line = $logmax[count($logmax) - 1]; if ($line == "終了"){ $line = 1; } 今の段階で "test.txt" の最後の行を取得して もし最後の行が "終了" なら $line を 1 に変えたいのですが "終了" のままで変更されていません(泣) もちろん test.txt の最後の行に "終了" が入ってる事は確認済みです 何か他の方法 or 何が間違っているか分かる方がいたら教えてください。 宜しくお願いします。 流れとしては test.txt の最後の行を取得して 最後の行が "終了" なら 1 に変えると言う作業です。 宜しくお願いします。 osはwindows phpバージョンは5.2.11.11です

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • UmJammer
  • ベストアンサー率58% (115/196)
回答No.1

改行文字が含まれているから一致しないのでは。 マニュアルにfile関数についてこう注意があります。 ---- 注意: FILE_IGNORE_NEW_LINES を指定しない限り、 配列に取り込まれた各行は行末文字も含みます。 行末文字を取り除きたい場合には rtrim() を使用する必要があります。 ---- #test.txtの最後の"終了"を1に変えたいわけじゃないですよね。

fukurinnsa
質問者

お礼

UmJammerさん回答有難う御座います!! UmJammerさんの言うとおりrtrim() で改行を取ると成功しました!! 改行が原因だったみたいです!! ホントに助かりました。

関連するQ&A

  • textファイルについて

    あるディレクトリーに test.txt aaa.txt があるのですが、 二つのテキストを開いて もし text.txtの3行目に http://www.goo.ne.jp/ があり aaa.txtの10行目にも http://www.goo.ne.jp/ があるとすれば aaa.txtの10行目を消したいのですが、 そんな事って可能ですか?? 色々考えたのですが、aaa.txtの10行目を消す時に 10行目を空にすると言う指定が出来なくて困ってます。 どうしてもaaa.txtの削除が出来ません。 参考までにスクリプトを載せておきます <?php $file_name = array("aaa.txt", "test.txt"); $list = fopen($file_name[0], "a+"); $delete_list = fopen($file_name[1], "r"); $listfile = file($file_name[0]); $listmax = count($listfile); $listfile = file($file_name[1]); $delete_listmax = count($listfile); if ($delete_listmax > 0){ for ($delete_line = 1; !feof($delete_list); $delete_line++){ $delete_lines = fgets($delete_list); $delete_lines = trim($delete_lines); if ($delete_lines){ if (is_file($file_name[0])){ for ($line = 1; !feof($list); $line++){ $lines = fgets($list); $lines = trim($lines); if ($lines){ if ($delete_lines == $lines){ //ここの部分がわからないです fputs($list, "あああ"); echo "O,K\n"; } } } } } } } fclose($delete_list); fclose($list); echo "\n終了\n"; ?> 詳しい方がいましたら宜しくお願いします

    • ベストアンサー
    • PHP
  • プログラムの実行について

    os は windows php のバージョンは 5.2.11.11 です。 $logmax = file("test.txt"); $start = $logmax[count($logmax) - 1]; $start = trim($start); if ($start == "終了"){ $start = 1; } if (is_file("aaa.txt")){ $word = fopen("aaa.txt", "r"); for ($line = $start; !feof($word); $line++){ $lines = fgets($word); $lines = trim($lines); if ($lines){ 以下処理 } } } という感じの処理なのですが、三行目までは "test.txt" の最後の文字又は数字を抜き取る作業で 最初の if 関数はもし最後に "終了" ならば $start = 1 にするという感じです。 次の if 関数からが問題なのですが $start に 1 が入って "aaa.txt" の一行目からのスタートしてくれるのですが、 $start に 2 が入ってる場合は "aaa.txt" の二行目からスタートしたいのですが、 スタートしてくれず "aaa.txt" の一行目からスタートになってしまいます。 if 関数だとスタートが一行目からになってしまうのでしょうか?? それとも $lines = fgets($word); の所で "aaa.txt" の一行目からになっているのでしょうか?? 何が原因か分かる方がいましたらどうすればいいか教えてください。 宜しくお願いします

    • ベストアンサー
    • PHP
  • PHP、外部ファイルにテキストを書きだす。

    こんにちは、皆様。 下記のソースを実行したいと思います。期待する結果としては、外部ファイルに行列に書き出すことです。 <?php $count_file="count.dat"; if(file_exists($count_file)){ $file = fopen("count.dat", "a") or die("file can not open"); $order_no = fgets($file) + time(); print $order_no; }else{ $file = fopen($count_file, "w") or die("file can not open"); $order_no = time(); } set_file_buffer($file,0); flock($file, LOCK_EX); fputs($file , $order_no); flock($file, LOCK_UN); fclose($file); ?> このソースの結果は配列として書き込まれてました。こんな感じです。 129835261512983526501298355377129835537912983566121298356635 このソースを実行する度にcount.datファイルに順次書き出したと思います。 1298352615 1298352650 1298355377 1298355379 1298356612 1298356635 まだまだPHP勉強中なのでわかる方教えてください。 (1)この行で$order_no = fgets($file) + time(); 改行記号をどう付ければ良いでしょうか? (2) C言語のようにポインターで指定しなければならないですか?書き方を教えてください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • file()からのmb_substr()について

    下記ののような感じで テキストファイルから配列に入れて、行の先頭を取り出し 比較をしたかったのですが、うまく先頭だけを取り出せません 表示要素を見るとないはずの「"」が頭と最後についていました。 これが原因なのでしょうか? また削除することは可能でしょうか? 不可能な場合、他によい方法はありますか? まだ初心者ですが宜しくお願いします。 ●test.txt(内容) 12345 ●test.php(内容) $line = @file("test.txt"); $no = mb_substr($line[0],0,1,"utf-8"); print $line[0]."<br>"; print $no."<br>"; //問題なし↓ $line2 = "12345"; $no2 = mb_substr($line2,0,1,"utf-8"); print $no2; ●結果 12345      ←1が表示されない? 1

    • ベストアンサー
    • PHP
  • phpを使いファイル内を検索

    phpでファイル内を検索したいです。 以下のようにphpを書きましたが、やりたいことは1行目から5行目までの中でphpという言葉を検索し6行目から10行目までの中でsnsという文字を検索といったように、行数で分けて検索する言葉も分けたいです。 どのように書いて良いかなどのヒントなどいただけないでしょうか。 $file = dirname(__FILE__) . '/list.txt'; $word = 'php'; if(is_file($file)){ $array = @file( $file, FILE_IGNORE_NEW_LINES); if(in_array($word,$array)){ print_r($word); } } ?>

    • 締切済み
    • PHP
  • 外部ファイルの読み込み

    3つのファイルが同じディレクトリに入っているのですが、「main.php」を開くとphpがそのままテキストで表示されてしまいます。 phpを読み込んでhtml化した状態で表示するにはどうしたらいいでしょうか? test.txt ----------- テスト ----------- test.php ----------- <?PHP file_get_contents("test.txt"); ?> ----------- main.php ----------- <?PHP file_get_contents("test.php"); ?> ----------- main.phpを開くと ----------- <?PHP file_get_contents("test.txt"); ?> ----------- と表示されてしまいます。

    • ベストアンサー
    • PHP
  • テキストファイルに情報を格納したい。上手に動作せず

    数百ページの各ページの特定部分の情報をテキストファイルに格納するものを作りたいのです。 テキストファイルを作るところまではできたのですが、上手にできません。 初めてページを開くなら情報の新規作成、2回目以降であれば上書きしたいです。 なにが原因で動かないのでしょうか。 <?php $filename = "samplefile.txt"; $page_list = file($filename); //-------------------------------- //手入力で内容を更新するエリア //-------------------------------- $url = 1 ."page.php"; //現在開いているページ。http://test.com/236page.phpなどのようになる $h1DATE = "タイトルテスト"; $imgDATE = "img/sample.jpg"; //全てのページで固定 $comeDATE = "これはテストです。"; //-------------------------------- $lines = $url."|".$h1DATE."|".$imgDATE."|".$comeDATE."\n"; //samplefile.txtに追加する行 $fp = fopen($filename, "a"); $file = file_get_contents($filename); //ファイルを全て文字列として取得 $text = explode("\n",$file); //\nを元に行を分けて配列に格納 for($i = 0; $i <= count($text) - 1; $i++){ if(ereg($url,$text[$i]) || ereg($h1DATE,$text[$i]) || ereg($imgDATE,$text[$i])|| ereg($comeDATE,$text[$i])){ $text[$i] = ""; //このページの$url、$h1DATE、$imgDATE、$comeDATEのどれかに一致するものはその行を削除 } } $text[count($text)] = $lines; fwrite($fp, $text[count($text)]); fclose($fp); ?> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>ページ1</title> </head> <body> <div id="main"> <h1><?php echo $h1DATE ?></h1> <?php echo '<img src="'.$imgDATE.'" id="imgID" />' ?> <p id="comeID"><?php echo $comeDATE ?></p> </div> </body> </html>

    • ベストアンサー
    • PHP
  • テキストデータから指定行の削除

    phpでサイトを作っています。 テキストデータを一行ずつ表示させ、指定した行を削除したいのですが、どうすればいいのでしょうか? -- data.txt -- aaa,data1, bbb,data1, ccc,data1, ddd,data1, -- php -- <?php $del=$_POST['del_no']; if($del!=""){ $data_all = file("data.txt"); for($i=0;$i<count($data_all);$i++){ $data_array = explode(",",$data_all[$i]); if($data_array[0]!=$del){//削除データ以外を再書き込み $txt="$data_array[0],$data_array[1],\n"; $fp = fopen("data.txt", "w"); flock($fp,1); foreach ($txt as $line) {// 1行ずつファイルへ書き込み? fwrite($fp, $line); } fclose($fp); break; } } } ?> <b>data list</b> <? $data_all = file("data.txt"); for($i=0;$i<count($data_all);$i++){ $data_array = explode(",",$data_all[$i]); echo "$data_array [0]<br />"; echo "<form method=\"post\">"; <input type=\"hidden\"name=\"del_no\" value=\"$data_array[0]\" />";//削除するデータをPOST echo "<input type=\"submit\" value=\"削除\" />"; echo "</form>"; } ?> こうすると、テキストデータが白紙になってしまいます。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • ファイル指定

    こんにちは。 UNIXでPHPを勉強しています。 ファイルの存在チェックをしたいのですが、 if(file_exists($file)){ としています。 $fileにはファイルチェックするファイルと同じディレクトリ内の workというフォルダのtest.txtファイル名を格納したいと考えています。 $fileには どのようにいれればいいのでしょうか? windowsだと $file="work\\test.txt"; でだいじょうぶなのですが・・・

    • ベストアンサー
    • PHP
  • テキストファイルを経由しての画像呼び出し

    はじめまして。 PHPをはじめてまだ間もない者ですが、行き詰ってしまいましたのでご質問させていただきたいと思います。 画像をアップロードする時に backimg.txt という名前でファイル名を取得しているのですが それを利用して画像を呼び出そうとしているのですがどうにも表示してくれません。 表示どころか、エラーが出てしまいます… ファイル構成・PHP部分は以下の通りです。 public_html ├─ index.php  ←ここの一部のプログラムです ├─  ・ ├─  ・ └─ background_img     ├─ backimg.txt  アップロードしたファイル名が記述     └─ test.jpg   アップロードした画像 <?php if(file_exists("background_img/backimg.txt")){ $fp = fopen("background_img/backimg.txt","r") or die("ファイルのオープンに失敗しました"); $buff = fgets($fp); fclose($fp); } echo'<img src="'.$buff.'" border="0">'; ?> ※この $buff = fgets($fp); の部分でエラーが出ます。 backimg.txt内の文字(UPする度、この一行を上書きしていってます) ──────────────────   background_img/test.jpg ────────────────── ※PHPでアップロードした画像は  background_img フォルダに入るようになっています。 ※画像名はまちまち変わりますので、 test.jpg 固定ではありません。 ※データベースを使えないサーバを利用しております。 以上の条件でどうやったら解決できるのか、 お手数おかけいたしますが、教えていただければ幸いに思います。

    • ベストアンサー
    • PHP

専門家に質問してみよう