• ベストアンサー

外部ファイル(テキスト)を取り込んで表示すると余計なおまけが・・・

おはようございます。 以下のようにして外部からテキストファイルを取り込みました。 $FileName = "hoge.txt"; $FileIn = include($FileName); if($FileIn){ echo $FileIn; } すると、『hoge.txt』の中身をどのようにしようが反映されるのですが、 最後に必ず「1」と表示されます。 hoge.txtの中身が「こんにちは」なら「こんにちは1」 「さようなら」→「さようなら1」 「困ったよ1」→「困ったよ11」 「<p>おはようございます</p>」→「おはようございます」改段「1」 これは何故でしょうか? 「include」の代わりに「require」や「include_once」を使っても 全く同じ症状です。 どうしたら直るでしょうか。 初歩的な質問で恐縮ですが、皆さまのお知恵を拝借できれば幸いです。 よろしくお願いいたします。

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

  • ベストアンサー
  • ts3m-ickw
  • ベストアンサー率43% (1248/2897)
回答No.1

echoしてるからinclude関数の戻り値が表示されているのでは? ココ↓の例16-9を参照 http://manual.xwd.jp/function.include.html

kumatti51
質問者

お礼

ts3m-ickwさん、コメントありがとうございました。 戻り値について全く理解しておりませんでした。 「ファイルの中身」と「1」、両方の戻り値が同時に 戻ってきてしまったようですね。 ご紹介いただいたURLを拝見して状況を理解することができました。 御礼申し上げます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

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

include()やrequire()はファイルを読み込んで「評価する」関数なので、その現象が起きる、起きないにかかわらずファイルシステム関数を使う方がベターと考えられます。 http://jp.php.net/manual/ja/ref.filesystem.php

kumatti51
質問者

お礼

UmJammerさん、コメントありがとうございます。 ファイルシステム関数の中から、 「file_get_contents」を使ってやってみたら、 なんとか上手く表示することができました。 御礼申し上げます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 外部PHPファイルの読込みについて

    いつもお世話になります。 外部PHPファイルの読込みが、期待通りの動作をしません。 レンタルサーバ会社は、Aサーバ、Bサーバ 同じ。(条件同じ) allow_url_fopen は、defaultの ONです。 まずAサーバに、agent.phpをアップロード。agent.phpファイルの中身は、 <?php $agent =$agent = $_SERVER['HTTP_USER_AGENT']; ?> これを、Bサーバの、test.phpに読込み。test.phpの中身は、 <?php include("http://BサーバのURL/agent.php"); echo "<html><head><title>.....</title></head>\n"; echo "<body><p>UserAgent : " . $agent . "</p></body></html>\n"; ?> この場合、http://BサーバのURL/agent.phpを開いても、 UserAgent($agent)の値は出てきません。これは、どうしてでしょうか? 但し、Aサーバに、下記のPHPファイル(xyz.php)をアップロードして <?php echo "<p>あいうえお</p>\n"; ?> として、Bサーバのtest.phpの中身を <?php echo "<html><head><title>.....</title></head><body>\n"; include("http://BサーバのURL/xyz.php"); echo "</body></html>\n"; ?> として、test.phpを読み出すと、「あいうえお」と出力されます。 何故なのか、またどうしたら期待通り動作するのかを、教えて下さい。  よろしくお願いします。

    • ベストアンサー
    • PHP
  • テキストデータから一部の情報を抜き出して,別のテキストデータに書き出す

    テキストデータから一部の情報を抜き出して,別のテキストデータに書き出す方法についてです.DOSの知識は皆無なのでトンチンカンな質問でしたらご容赦ください. 処理内容は例えば, 001_20100601.txt 002_20106002.txt 003_20100604.txt という中身のfilename_list.txtから001,002,003だけを抜き出して, 001 002 003 という中身のid_list.txtを作りたいです.ネットで調べながら自分なりに考えてみて以下のような記述で処理できました. del id_list.txt & for /F "tokens=1 delims=_" %a in (filename_list.txt) do @echo %a >>id_list.txt 質問は2点で,do @echo %a の意義(意味)というか処理内容が分からないので,それを理解したいということと,よりスマートな記述ができやしないかということです.前者についてはforの後には何らかの実行コマンドが必要だから無理やりつけている程度にしか理解できていません. よろしくお願いします. ※MATLABからコマンドプロンプトを動かして処理しているので,そんな回りくどいことしなくても,MATLABで直接この処理ができるようならその方法も知りたいです.

  • リモートファイルのrequireに関して

    はじめまして、 PHPのマニュアルには 「php.iniでallow_url_fopenを有効にした場合、 パラメータとしてファイル名をとる関数の多くでHTTPおよびFTPのURL を使用することができます。加えて、include(), include_once(), require(), require_once() 命令でURLを使用することができます。」 とあるのですが、requireでリモートファイルを読みこめません PHP のバージョンは 4.1.2 php.iniでallow_url_fopenが有効(On)になっているのは確認しました。 http://www.****1.com/hoge1.php から http://www.****2.com/hoge2.php を呼び出しています。 hoge1.php及びhoge2.phpのソースは以下のとおりです。 ----hoge1.php-------------------------------------------------------- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML lang="ja"> <HEAD> <META http-equiv="content-type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <TITILE></TITILE> </HEAD> <BODY> <?php require ("http://www.****2.com/hoge2.php"); dispword(); ?> </BODY> </HTML> --------------------------------------------------------------------- ----hoge2.php-------------------------------------------------------- <?php function dispword(){ print xyz; } ?> --------------------------------------------------------------------- 実行結果は Fatal error: Call to undefined function: dispword() in ・・略・・****1.php on line 11 となります。 10行目じゃなく11行目にでてるということは、requireできてるんでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • テキストファイルのアップロードについての質問です

    現在テキストファイルのアップローダーのページを表示し、アップロードされたテキストファイルの文章を表示するプログラムを作っております。 プログラムは以下です。 //省略 <form method="post" enctype="multipart/form-data" action="testup.php"> <input type="file" name="data" size="30"> <input type="submit" value="upload"> </form> <?php $updir = "./up/"; $filename = $_FILES['data']['name']; if(file_exists($_FILES['data']['tmp_name'])){ $filesize = filesize($_FILES['data']['tmp_name']); if($filesize <= 700000){ if(ereg("(^[a-zA-Z0-9_-]+)\.(txt)",$filename)){ move_uploaded_file($_FILES['data']['tmp_name'], $updir.$filename); echo "File : " . $filename . " Upload Suceeded!!"; echo $_FILES['data']['error']; echo "<br><br>"; include("./$updir/$filename"); } else { } }else { echo "$filesize Byte too large size。<br>File must be less than 700000 Byte"; } } if ($handle = opendir($updir)) { while (false !== ($file = readdir($handle))) { if ($file != "." and $file != "..") { include("./$updir/$file"); } } closedir($handle); //以下省略 このプログラムを実行すると問題なく動くのですが、今回お聞きしたいのは、アップロードされた文章をこのページだけでなくほかのページにも表示させるにはどうすればいいのかということです。 例えば <form method="post" enctype="multipart/form-data" action="testup.php">の[action = " "]のところに表示したいページのアドレスを入れればいいのかと思ったのですが、そうすると、テキストファイルの内容だけでなく、アップロード完了後のUpload Suceeded!!";まで表示されてしまうのであまり好ましくないと思います。また if ($handle = opendir($updir)) { からclosedir($handle);の部分を別に保存して include(-----);としたのですが、 Warning: include(.//ete.txt) [function.include]: failed to open stream: No such file or directory in C:\xampp\htdocs\inc2.php on line 8 Warning: include() [function.include]: Failed opening './/ete.txt' for inclusion (include_path='.;C:\xampp\php\pear\') in C:\xampp\htdocs\inc2.php on line 8 というようなエラーメッセージが出てしまいました。 長い文章になってしまいましたが、今まで書いてきたとおり、アップロードされたファイルを別のページでも表示させるにはどうすればいいのでしょうか?お分かりになる方がいらっしゃいましたら教えていただけないでしょうか?よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • コマンドプロンプトのfor文の処理について

    以下のようなスクリプトを書き,拡張子を除いた文字列を抽出できているようなのですが, for文の中の ”echo”で出力することができません. 具体的には,入力として,「hoge01.txt」 を与え 「hoge01」 を抽出したいです. 出力結果として 「echoはONです」 とでます. for文の後のechoでは,「hoge01」と問題なく出力されます. これは何故なのかご教授していただけませんでしょうか? ------------------------------------------- for %%i in (*.txt) do (set/p c=%%~ni & echo %c%) echo %c% ------------------------------------------- for文の中だと,変数の指定方法等が異なるのでしょうか? 勉強不足で大変恐縮ですが,どうぞよろしくお願いいたします.

  • PHPのコーディングルール?

    お世話になります。 只今、PHP5で開発しているのですが 皆様のご意見を聞きたいと思いまして、質問させていただきます。 以下の場合、どちらでコーディングしますか? また具体的な理由などありましたら、ご教授頂けますでしょうか。 (1)if(!isset($hoge)){ (2)if(isset($hoge) == false){ 以下の場合、どちらでコーディングしますか? また具体的な理由などありましたら、ご教授頂けますでしょうか。 (3)require_once(/jp/ne/goo/Hoge.php) ・・・絶対パスでrequireする。 (4)require_once(goo/Hoge.php)  ・・・include_pathを通すなどして、相対パスで記述する。 基本的なことかもしれませんが、ご教授よろしくお願いいたします。

    • 締切済み
    • PHP
  • インクルードファイル内にPHPコードを挿入してecho表示

    処理が異なる2つのPHPファイルを一つのテンプレートファイルから index.phpファイルへ表示させたいのですが、テンプレートファイル内に css_echo.phpをインクルードさせたコードを書くとそのままソース上に表示されてしまいます。 どのような方法をとればいいかアドバイス下さい。 ■条件としては、 ・css.php/css_echo.phpの処理ファイルはそれぞれ別ファイルとしたい ・index.phpファイルは <html> <head> <?php require_once('./css_echo.php');//ブラウザを判別してCSSファイルを出力 ?> </head> <body> <?php $temp = "./temp.html"; //このページのテンプレートファイル名パス require_once('./echo.php'); ?> </body> </html> には書かない方法で対応したいです。 ファイルは以下です。 ---------------------------------------------------------------------- テンプレートファイル(temp.html) <html> <head> <!--問題はここです。 --> <?php require_once('./css_echo.php');//ブラウザを判別してCSSファイルを出力 ?> </head> <body> サンプル表示{この中はブラウザ判別して表示・非表示にする} </body> </html> 処理PHPファイル(echo.php) <?php $htm = file_get_contents($temp); echo preg_replace('/[{}]/', '', $htm);// {}内を削除して表示 ?> ブラウザ判別用ファイル(css_echo.php) <?php //実際にはこの前にブラウザ判別し処理コード(省略) echo "<link rel=\"stylesheet\" href=\"$dir$pc\" type=\"text/css\">\n"; ?> メイン表示用PHPファイル(index.php) <?php $temp = "./temp.html"; //このページのテンプレートファイル名パス require_once('./echo.php'); ?> ------------------------------------------------------------------------

    • 締切済み
    • PHP
  • smartyの必要性について

    phpを用いて携帯サイトを作成しています。 phpのみを表記している「a.php」「b.php」「c.php」「d.php」「e.php」があります。 ------------a.php------------- <?php if(~~){ $a[0] = '~~'; }else(~~~~){ $a[0] = '~~~'; } $a[1] = '~~'; $a[2] = '~~~'; ・ ・ ・ $a[n-10] = <<< MESSAGE <h1>{$a[n-25}</h1> <p>テスト表示</p>     ・     ・ <p>{$a[n-15]}</p> MESSAGE; ・ ・ $a[n] = <<< MESSAGE <h1>{$a[n-50}</h1> <p>テスト表示</p>     ・     ・ <p>{$a[n-45]}</p> MESSAGE; ?> ----------------------------------- ------------b.php------------------ <?php if(~~){ $b[0] = '~~'; }else(~~~~){ $b[0] = '~~~'; } $b[1] = '~~'; $b[2] = '~~~'; ・ ・ ・ $b[n] = <<< MESSAGE <h1>{$b[0}</h1> <p>テスト表示</p>     ・     ・ <p>{$b[n-10]}</p> MESSAGE; ?> --------------------------------------- c.php以下の内容もだいたいおなじ内容になっております。 -----------index.php-------------------- <html> <head> <?php include_once 'a.php'; include_once 'b.php'; include_once 'c.php'; include_once 'd.php'; include_once 'e.php'; ?> </head> <body> <?php echo $a[0]; echo $a[n]; echo $b[n-60]; echo $c[n-30]; ?> </body> </html> ----------------------------------------- -----------index1.php------------------- <html> <head> <?php include_once 'a.php'; include_once 'b.php'; include_once 'c.php'; include_once 'd.php'; include_once 'e.php'; ?> </head> <body> <?php echo $a[0]; echo $a[n]; echo $b[n-80]; echo $c[n-3]; ?> </body> </html> ------------------------------------- このような感じでindex.php ~ index[n].phpを作成しております。 index.php ~ index[n].phpは、基本として修正は行なわず a.php ~ e.phpを修正することによって、すべてのページへ 瞬時に反映できるようにして作成しております。 現在、この方法で十分管理はできています。 つぎは、smartyを用いておなじような処理を考えてみました。 ######################## ### smarty使用 #### ######################## ------------index.php開始---------------- <?php require_once 'libs/Smarty.class.php'; $smarty = new Smarty; $smarty->compile_check = true; include_once 'a.php'; include_once 'b.php'; include_once 'c.php'; include_once 'd.php'; include_once 'e.php'; $smarty->assign("a", $a); $smarty->assign("b",$b); $smarty->assign("c",$c); $smarty->display('test.tpl'); ?> ------------------------------------------ ------------index.tpl--------------------- <html> <head> </head> <body> {$a[0]} {$a[n]} {$b[n-60]} {$c[n-30]} </body> </html> --------------------------------------- smartyを使っていないときよりも、smartyを使ったほうが 処理速度が速くなるようでしたらsmartyに乗り換えるのですが Smarty.class.phpを余分に読み込む分、処理速度が速くなって いるとも思えません。 また、index.html ~ index[n].htmlへの記述も大差ないので 可視性やデザイン面でもとくに違和感なく修正できます。 上記の作成方法で、smartyを用いるうえでの可視性の向上以外の利点は ありますでしょうか? また、改善点などございましたら、ご教授いただけると幸いです。

    • 締切済み
    • PHP
  • 入力した値をファイルに出力するプログラム

    C++でscanfなどで入力した値をファイルに出力するプログラムを作りたいのですがうまくいきません。下記のプログラムを書いてみたのですが入力した値を出力することができませんでした。どこを変更すればいいのかわかる方がいましたらご指導よろしくお願いします。 #include<iostream> #include <fstream> using namespace std; int main( ) { char ch; char ss[10]; int dt; int i,p; ofstream fileout; // 出力用ストリームの宣言 ifstream filein; // 入力用ストリームの宣言 fileout.open("sampledata.txt"); // 出力ファイルをオープン if (!fileout) // エラー処理 { cout << "エラー!出力ファイルをオープンできません\n"; return 1; } printf("IDを入力してください:"); scanf("%s",i); printf("\nパスワードを入力してください:"); scanf("%s",p); printf("\n登録しました。"); fileout << "ID=%d PASS=%s\n",i,p; // 文字列データ出力 fileout.close(); // 出力ファイルをクローズ filein.open("sampledata.txt"); // 入力ファイルをオープン if (!filein) // エラー処理 { cout << "エラー!入力ファイルをオープンできません\n"; return 1; } filein >> ch; // 文字データ入力 filein >> ss; // 文字列データ入力 filein >> dt; // 数値データの入力 cout << ch << '\n'; cout << ss << '\n'; cout << dt << '\n'; filein.close(); // 出力ファイルをクローズ return 0; }

  • JpGraphについて

    JpGraphを使ったグラフ用のファイル graph.php をindex.phpにインクルードさせようと思って <html> <body> 中身中身中身 <? require_once("graph.php"); ?> </body> </html> と記述したとたんにエラーがでちゃいます・・。 エラー内容は 中身中身中身 ----------------------------------------------- JpGraph Error: HTTP headers have already been sent. Caused by output from file index.php at line 24. ----------------------------------------------- <? require_once("graph.php"); ?> <html> <body> 中身中身中身 </body> </html> これだとグラフ表示はされるのですが、htmlの中身を読んでくれないです。 requireがだめならば、includeでもためしてみました。 グラフ表示するためには何をしたらよいでしょうか? アドバイスお願いします。

    • 締切済み
    • PHP