PHPプログラム実行についての質問

このQ&Aのポイント
  • 質問内容:PHPプログラムの実行に関する問題が発生しています。if関数でのスタート位置指定が正しく機能していないようです。具体的なコードと共に原因と解決策を教えてください。
  • 質問内容:PHPプログラムの実行時に起きている問題について相談します。if関数でのスタート位置指定が一行目からとなってしまい、指定した行から実行させる方法を教えてください。
  • 質問内容:PHPのプログラム実行時に問題が発生しています。if関数でのスタート位置指定が正しく機能しないため、指定した行から実行させる方法を教えてください。具体的なコードを添えています。
回答を見る
  • ベストアンサー

プログラムの実行について

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
  • 回答数4
  • ありがとう数2

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

  • ベストアンサー
  • Gotthold
  • ベストアンサー率47% (396/832)
回答No.4

> これがもし10行目から読み込みたい場合はどうすればいいんですかね? No.3の「fgets($word); // 1行読み飛ばし」のところをforループの中に入れて9回実行してください。 9行が読み飛ばされて次は10行目からになります。

fukurinnsa
質問者

お礼

Gottholdさん回答有難う御座います!! Gottholdさんのおかげで成功しました!! 本当に有難う御座います。

その他の回答 (3)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

こんな感じですかね $word = fopen("aaa.txt", "r"); fgets($word); // 1行読み飛ばし $lines = fgets($word); // 2行目から読み込みになる

fukurinnsa
質問者

補足

php504さん回答有難う御座います こんな簡単だったんですね(汗) これがもし10行目から読み込みたい場合はどうすればいいんですかね?

  • Gotthold
  • ベストアンサー率47% (396/832)
回答No.2

> 読み飛ばす処理なんて出来るのですか?? fgetsで読んだデータを使わなければ良いだけだと思いますが…。

fukurinnsa
質問者

補足

?? それじゃどうやって "aaa.txt" の二行目からスタートできるのですか??

  • Gotthold
  • ベストアンサー率47% (396/832)
回答No.1

ifは関数ではなく文です。 2行目から始まらないのは2行目から始まる処理なんて書かれていないからです。 $lineは1行読む毎にインクリメントされているだけなので、 初期値が何であろうが読み取り動作には関係ありません。 実際、読み取るだけなら$lineなんて変数はなくても動きます。 > $lines = fgets($word); > の所で "aaa.txt" の一行目からになっているのでしょうか?? そうです。1行目がいらないならちゃんと読み飛ばす処理を入れてください。

fukurinnsa
質問者

補足

Gottholdさん回答有難う御座います >1行目がいらないならちゃんと読み飛ばす処理を入れてください。 読み飛ばす処理なんて出来るのですか?? なにぶん初心者なものですみません。。 fgetで何行目からと言う指定が出来ないから読み飛ばす事は 不可能だと思っているのですが…

関連する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
  • ファイルを読み込んで表示すると文字化けします

    次のようにファイルを読み込んでIEやGoogle Chromeで表示させると 日本語の文字化けが起こってしまいます・・・ どのようにすれば解決できるのでしょうか? [1.txt] ああ いい $file_name = "./1.txt"; if(is_file($file_name)){ $text = fopen($file_name,'r'); for($line = 1; !feof($text); $line++){ $lines = fgets($text); if($lines){ //print $lines; $pairs[] = preg_split('/ /', $lines); } } fclose($text); }else{ exit; } print_r($pairs);

    • ベストアンサー
    • PHP
  • バッチファイルについて

    バッチファイルから.txtを読み込んで.txtを何行目からスタートさせる事はできるのでしょうか?? 作業としては aaa.txtの三行目を読み込んで test.txtを処理して aaa.txtの終点にくれば作業終了 と言う感じなのですが。 どなたか詳しい方教えてください。 宜しくお願いします。

  • 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
  • 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
  • プロシージャの実行方法

    テキストファイル(test.txt)から文字列を一行ずつ読み込んでDBMS_OUTPUTで表示を最後の行まで繰り返すプロシージャを作りたいのですが、プロシージャ制作までは出来るのですがプロシージャの実行が出来ません。 原因が理解できないのですが返答をお願いします。 create or replace procedure TXT_R as FH UTL_FILE.FILE_TYPE; V_LINE VARCHAR2(32767); BEGIN FH := UTL_FILE.FOPEN('DATA_PUMP_DIR','test.txt','R'); LOOP UTL_FILE.GET_LINE(FH,V_LINE); DBMS_OUTPUT.PUT_LINE(V_LINE); END LOOP; EXCEPTION WHEN NO_DATA_FOUND THEN UTL_FILE.FCLOSE(FH); END TXT_R; ここまでプロシージャです。 そしてネットで調べた結果引数が無い時は書かなくていいと書かれていたのですが、 exec TXT_R; で実行すると ORA-00900: SQL文が無効です。 となってしまいます。

  • if文の質問です

    初心者です。 よろしくお願いします。 aaaという文字を売ったときにだけtrueを表示したいのですが、うまくいきません。 以下の<結果>のようになってしまいます。 どうしたらうまくいくのか例文を探しても載っていなかったので質問しました。 if [ $1 = "aaa" ] ; then echo true ; else echo false ; fi <結果> $ ./test.txt aaa ./test.txt: line 7: syntax error near unexpected token `fi' ./test.txt: line 7: `fi'

  • PHPでfile()を使った際の配列の要素について

    PHPのfile関数の動作について質問させて頂きます。 テキストファイルからfile()を使って配列に各行のデータを取り込んだのですが、その配列から特定の要素を探そうとしたところ、検出できませんでした。 テキスト.txtの内容------- AAA BBB CCC --------------- $array = file("テキスト.txt"); $word = "AAA"; $keys = array_keys($array,$word); var_dump($keys); 簡略化しましたが、こんな感じで実行するとAAAが格納されているはずの[0]番目のkeyは検出されません。 bar_dumpを使って$array[0]と$wordを確認してみたところ、以下のようなデータが帰ってきました。 $array[0] → string(5) "AAA" $word → string(3) "AAA" まったく同じ文字列なのに、配列の方の長さが2ほど大きくなっています。 そこでtrimを使用してみたところ、配列からこの謎の2バイト?のデータが削除できました。 検索も正しく動作するようになりました。 文末に改行が入ってるのかとも思ったのですが、\nを削除する処理では検索が出来なかったので、不思議に思っております。 テキストファイルから取り込んだ際に、文字列の前か後ろに何らかの文字が入っているのだと思うのですが、実際どのような文字が入っているのでしょうか? ---------------------------------- それともう一つお聞きしたいのですが、 テキストファイル内容がある程度長い(100行以上、または1万文字以上など)場合、file()で配列にデータを取り込むのは負荷が大きかったりするのでしょうか? fgetsで1行ずつ取り出して比較する方法も考えたのですが、処理の繰り返しと取り込むデータの大きさのどちらに配慮するべきか悩んでいます。 もし100行や1万文字が多い・少ないという感覚になる場合、実際「配列にするには大きすぎる」という感覚はどれくらいの容量から考えるべきでしょうか? 後半の質問につきましては明確な答えで無くても、「自分はこう感じる」というような感覚的なご意見でもお聞きしたいと思っています。 お手数をおかけしますが、どうぞよろしくお願い致します。

    • ベストアンサー
    • PHP
  • PHPでファイルから取り込んだ数字で計算できない

    test.txtの内容 ------ 10 ------ のとき、 <? $file="test.txt"; //ファイルの中の行を配列に格納 $ary=file($file); //テキストファイル内の数字を取得 foreach ( $ary as $key => $value ) { $value = str_replace(array("\r\n","\r","\n"), "", $value); if (strlen($value )>0){ $a=trim($value); } } $a=$a+1; print $a; ?> として、11が出力されることを期待したのですが、 1が出力されてしまいます。 11を出力されるにはどうしたらよいでしょうか? どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 初心者です!すみませんがお願いします!

    すいません!緊急でお願いしたいのですが、データファイルを読み込みを行う命令文だとは思うのですが↓ ------------------------------------------------------ $data_file = "test.txt"; $ext = file_exists($data_file); $lines = $ext ? file($data_file) : array(); ------------------------------------------------------ 3行目の $lines = $ext ? file($data_file) : array();←はどういう意味なのでしょうか?サンプルプログラムの一部なのですが、こんな書き方初めてみたので。。教えていただけますでしょうか? お願いいたします!!

    • ベストアンサー
    • PHP

専門家に質問してみよう