質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

11945閲覧

-PHP- 外部のテキストファイルから文字列を検索し該当箇所の行を指定の色で表示する。

pinsong

総合スコア26

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2016/11/02 14:28

編集2016/11/02 15:50

色付け前

今回、外部からテキストファイルを読み込み、該当箇所red , blue , greenが含まれている行を赤、青、緑で表示するプログラムを作ろうとしてます。
しかし、PHPが実行できないどころか同じくif(strpos($tmp,"red")で文字列の有無を判断させるプログラムも"no"の判定の一点張りでした。

1.このプログラムはstrposで文字判定を行い、該当箇所の文字列の色変更は<span style="color:各色;">"</span>で各文字列の色の変更を行うものとします。

なお、回答者の方にも指摘をいただきましたhttps://teratail.com/questions/53555の質問内容にも重複する部分がありますが、文字列を検索する対象は$tmpであっているでしょうか。

お手数をかけますが、間違っている箇所の指摘をお願いします。

PHP

1<!DOCTYPE html> 2<html lang="ja"> 3 4<head> 5 <meta charset="UTF-8"> 6 <title>外部ファイル読み込み</title> 7</head> 8 9<body> 10 <h1>ファイルの読み込み</h1> 11 <p>PHPでファイルを読み込むには、fopenを使う</p> 12<?php 13$filename = "ex151.txt"; 14$i = 1; 15if(file_exists($filename)){ 16 $f = fopen($filename, "r"); 17 while(!feof($f)){ 18 $tmp = fgets($f); 19 echo("{$i}行目:{$tmp}<br>"); 20 $i++; 21if(strpos($tmp,"red"){ 22echo ("<span style='color:red;'>"{$i}行目:{$tmp}"</span>"); 23 }else{ 24; 25} 26 fclose($f); 27}else{ 28 echo("ファイル{$filename}はありません"); 29} 30 31?> 32</body> 33 34</html> 35

IDE Visual Studio 2015 PHP tools for Visual Studio

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2016/11/02 15:20

回答が付いた質問の編集は慎重に行ってください。質問文のコードについて回答にて指摘があった場合は「追記」し、元のコードを編集する場合も「直したこと」がわかるようにしてください。
guest

回答2

0

PHP

1// 2016/11/03 00:50編集版 2$filename = "ex151.txt"; 3$i = 1; 4if(file_exists($filename)){ 5 $f = fopen($filename, "r"); 6 while(!feof($f)){ 7 $tmp = fgets($f); 8 echo("{$i}行目:{$tmp}<br>"); 9 $i++; 10if(strpos($tmp,"red"){ 11echo ("<span style='color:red;'>"{$i}行目:{$tmp}"</span>"); 12 }else{ 13; 14} 15 fclose($f); 16}else{ 17 echo("ファイル{$filename}はありません"); 18}

↓インデントは適切に付ける癖を付けましょう。

PHP

1$filename = 'ex151.txt'; 2$i = 0; 3if ( file_exists( $filename ) ) { 4 $f = fopen( $filename, "r" ); 5 while( !feof( $f ) ) { 6 $i++; 7 $tmp = fgets( $f ); 8 echo "{$i}行目:{$tmp}<br>"; 9 if ( strpos( $tmp, "red" ) ) { 10 echo "<span style='color:red;'>{$i}行目:{$tmp}</span>"; 11 } else { 12 ; 13 } 14 } 15 fclose( $f ); 16} else { 17 echo 'ファイル'.$filename.'はありません'; 18}

投稿2016/11/02 16:15

kei344

総合スコア69407

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pinsong

2016/11/02 16:23

ありがとうございます。 まだ、terapadの時の癖が残りtabを押さずにそのまま続けてしまうことがよくあるので気を付けるようにします。
guest

0

ベストアンサー

最近ほぼ同じような質問を回答したような気がしますが、これでいけますか?

https://teratail.com/questions/53555

###追記
質問のコードの指摘との事ですので

<?php $filename = "textfile.txt"; if (strpos($tmp,'red') != false){ // $tmpはこの時点ででてきていないのにいきなり使われている // ここはphpを書く<?php ?> 内なので<spanタグなど書くときはechoなどしないといけない // $iもまだ未登場の変数 <span style="color:red;">"{$i}行目:{$tmp}"</span } // 上と同じでまだ$tmpはなにも入っていない状態、 // またstrposの評価、上の(!= false)と( == true)がほぼ等価なので2回でてくるのはおかしい if(strpos($tmp,'red') == true){ (何もしない) } $i = 1; // ここから下でファイルを読み込んでいるがここより上の行にあるredが含まれているかなどの判定のためにかかれたであろうコードを利用していないので、正常に動いてもファイルの内容をそのまま出力するだけになっている if(file_exists($filename)){ $f = fopen($filename, "r"); while(!feof($f)){ $tmp = fgets($f); echo("{$i}行目:{$tmp}<br>"); $i++; } fclose($f); }else{ echo("ファイル{$filename}はありません"); } ?>

投稿2016/11/02 14:32

編集2016/11/02 15:17
hiim

総合スコア1689

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pinsong

2016/11/02 14:38

回答ありがとうございます。 上記URLは事前に参照しましたが、色を変えたい行に対して同じくstrposしたと思うんですがどうしてもエラーが残ってしまい実行できませんでした。 付け加えると、<span style=>もエラーが表示されてしまいビルドができませんでした。
hiim

2016/11/02 14:48

上記リンクは普通に動作すると思うのですが、、、それでもエラーがでるのであれば前後に何を書いたかが問題な気がします。 質問欄に記載されているコードでみてみると ファイルの名前を変数に入れた直後にファイルをオープンも読んでもいないのにいきなりstrposで行を評価しているが、いったいその行はどこからもってきたのか?また行数の$iは何なのかもわからない段階で使っています。 その下までいってようやくファイルを開いて、1行づつ読み込んでいる。 とりあえず、記載されているコードは書く順序でエラーになると思いますので、上記URLのコードも抜粋しか記載されていないため、使いどころに間違いがあるのではないかな?と思います
pinsong

2016/11/02 15:17

質問文のほうをいくらか編集しました。 肝心の$iのほうは、ページに表示する際文字列が何行目にあるのかを表示するものです。 説明不足ですみません。 if(strpos)は、とりあえずfopenでテキストファイルを開いてからのほうが処理の順番として適切かと思いfgetsの下、fcloseの上に配置しました。
hiim

2016/11/02 15:19

追記で回答を書き終わったら、質問自体が大幅に編集されてるし。。。。。
hiim

2016/11/02 15:26

編集されたコードに関してコメントすると まず括弧の数おかしいと思います。 次に $tmp = fgets($f); echo("{$i}行目:{$tmp}<br>"); としてしまうと色の判定もなにもなくまず行を表示している その後で if(strpos($tmp,"red"){ echo ("<span style="color:red;">{$i}行目:{$tmp}</span>");//redを赤色にしたい とredが含まれているか判定している、またこの$iをこれより上でインクリメントしているので実際ファイル内の3行目にredがあったとしてもこれでは4行目と表示されてしまう。 などでしょうか。。。。
kei344

2016/11/02 15:29

横から失礼します。 style="color:red;"も style='color:red;' か style=\"color:red;\" にする必要がありますね。
hiim

2016/11/02 15:32

本当ですね、(汗、 to 質問者様:ダブルクオーツの中のダブルクオーツはエスケープしましょう
pinsong

2016/11/02 15:39

あ、なるほど。 外に"があるから中はシングルクオーテーションってことですね。 これは、失礼しました。style='color:red;'ですね。 ソースの方、編集しておきます。
kei344

2016/11/02 15:47

To: pinsongさん 質問文のコードの「redを赤色にしたい」の行が新たにエラーになっていますよ。
hiim

2016/11/02 15:51

細かい事を言うようですが、 > ソースの方、編集しておきます。 のソースは質問者さんのローカルのソースを編集してください。 質問文上のソース編集は回答と質問が後からよんでかみ合わなく意味のわからないやり取りにしかみえなくなりますので。。。。
pinsong

2016/11/02 15:51

ありがとうございます。 ソースのほう編集しときました。ちょくちょく細かい部分を変更して大変見づらいものになっていると思いますがなにとぞご了承ください。
hiim

2016/11/02 15:54

そして修正されたソースは今度は「行目:」とかがダブルクオーツから出てしまっているのとこういう場合必要になる連結の「.」がないです。
pinsong

2016/11/02 16:01

ごめんなさい。 echo ("<span style='color:red;'>{$i}行目:{$tmp}</span>");でしょうか。 連結の意味が分からないので、教えてもらえますか?
pinsong

2016/11/02 16:15

連結のほうは何を言っているのかわかりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問