人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPの質問です
a.phpとb.phpという2つのファイルがあるのですが
サーバーにa.phpとb.phpをアップロードし
a.phpを実行してもb.phpの処理内容が表示されません
a.phpに直接b.phpの内容を書き込むしかないのでしょうか?
a.php
****************
<?php require_once "d.php";?>
<TABLE>
<tr>
<td>1</td>
<td>1</td>
<td>ほげ1</td>
<td>ほげ2</td>
<td>ほげ3</td>
<td>ほげ4</td>
<tr>
</TABLE></body></html>
****************

b.php
****************
<?php
$s = '';
$b = strip_tags( @file_get_contents( __FILE__ ), '<tr><td>');
if ( preg_match_all("#<tr[^<]+?(.+?)</tr#is", $b, $trs , PREG_SET_ORDER) ) {
$tr = $trs[0];
if ( preg_match_all("#<td[^<]+?(.+?)</td#is", $tr[1], $tds , PREG_SET_ORDER) ) {
$s .= $tds[5][1] . "\n";
}
}
echo ( $s );
?>
****************


●質問者: takanii
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● うぃんど
●67ポイント

呼び出し側 a.php

<?php
 require_once "b.php";
 tdChoose( __FILE__ ,0 , 5);
?>
<TABLE>
<tr>
<td>1</td>
<td>1</td>
<td>ほげ1</td>
<td>ほげ2</td>
<td>ほげ3</td>
<td>ほげ4</td>
</tr>
</TABLE></body></html>

呼び出され側 b.php

<?php
function tdChoose ( $f, $r, $n ) {
 $s = '';
 $b = strip_tags( @file_get_contents( $f ), '<tr><td>');
 if ( preg_match_all("#<tr[^<]+?(.+?)</tr#is", $b, $trs , PREG_SET_ORDER) ) {
 $tr = $trs[ $r ];
 if ( preg_match_all("#<td[^<]+?(.+?)</td#is", $tr[1], $tds , PREG_SET_ORDER) ) {
 $s .= $tds[ $n ][1] . "\n";
 }
 }
 echo ( $s );
}

__FILE__ は自分自身を表すのでb.php内で使うとb.phpを読みに行ってしまってダメなのです。
a.phpの__FILE__をb.phpに渡す手段を考えるわけですが、ここでfunctionコールを利用します。
tdChoose には(ファイル名、何行目、何列目)の3つのパラメータを渡すようにしてあります。
あと、a.php に /tr タグがないと正常に動かないので足しました。


うぃんどさんのコメント
(1)require と include require/require_once はファイルが存在しなければエラーを吐いて処理が止まる include/include_once もファイルが存在しなければエラーを吐くけれど、読み込み部分を無視して先に進む。 「プログラムファイルが無くても先の処理は行いたい」という目的があれば、 include/include_onceの利用を検討するということになりますが、 プログラムが欠落してしまっていても大丈夫なプログラム構成にするのは難しく、 プログラムがある場合とない場合の動作テストが必要になるというだけでも面倒なことは想像できることでしょう。 include のほうが処理が速いから使うという人もいるけれど、 それはチェック項目が少ないため速くなっているだけの話なので安直に使う事は避けるべきだとおわかりいただけると思います。 (2)_once の有無 どちらも_coreのある命令は、同じファイルは再読み込みせず一度だけ読み込みます。 >|php| <?php require "b.php"; #で読み込み # いろいろやって require "b.php"; #読み込み直して環境をリセット ||< >|php| <?php require_once "b.php"; 読み込み いろいろやって require_once "b.php"; すでに上で読み込んでいるので状況変わらず ||< 必須のライブラリは一度読み込めば済むことが多いのでrequire_onceのほうを主に使います。 >|php| <?php include "b.php"; 読み込み いろいろやって include "b.php"; 読み込み直して環境をリセット ||< >|php| <?php include_once "b.php"; 読み込み いろいろやって include_once "b.php"; すでに上で読み込んでいるので状況変わらず ||< 無くても先に進めたい場合に使うincludeの場合は、 その場その時の状況に合わせるためにincludeを使う事が多いです。 確かに、こういったものもあるという事を知っていて損になることはありませんが、 質疑応答をスムーズに行うための妨げになることもおわかりいただけたかと思います。 あとは takanii さんのご判断(ポイント配分や回答拒否登録など)でどうぞ。

2 ● きゃづみぃ
●67ポイント

b.php側を関数にして インクルードして呼び出すという方法もありますよ。

http://php.net/manual/ja/function.include.php


うぃんどさんのコメント
だから何ですか? 別の方法を紹介してるだけだとでも言いたいのですか? require と include の違いを正しく理解していれば、 今回は関係ないことで書き込む必要などないことだと知っているはずですよ。 まさか、知らないのに答えたのですか? それともまさか、私に違いを説明させるという手間をかけさせたいだけですか? どっちにしても迷惑な行為です。 ほかでも多数似たようなことやってますよね。 回答するならちゃんと調べてから書かないと質問者にも他の回答者にも迷惑です。 http://q.hatena.ne.jp/1378887531#a1213523 http://q.hatena.ne.jp/1378787073#a1213422 http://q.hatena.ne.jp/1378712340#a1213371 http://q.hatena.ne.jp/1378636875#a1213256 その他いろいろ…。 反省するなら、require と include の違いと、 どうして今回は関係ないのかをきっちり説明して、 さらに自身の行動の誤りについて謝罪してください。 反省せず、謝罪もしないならば、虚偽の回答と認めたとみなさせていただいて、 運営にガイドライン違反で利用停止にするように働きかけます。 (他の件もありますし、言質はすでに取ってあります。 私一人で足りなければ、情報提供してくれる人には事欠いておりません。)

tezcelloさんのコメント
> だから何ですか? そういうのは放置すればいいのです。 > 質問者にも他の回答者にも迷惑です それは個々に判断する事でしょうね。 ご自分の回答にケチを付けられたように感じるかもしれませんが... 気が納まらないのなら、厳しい語調ではなく、要点のみ記せば(今回ならば include, include_once, require, require_once の差異と、require_once を選んだ理由)十分に質問者さんにも閲覧者にも伝わるでしょう。 このサイトの利用者は十分理解力はあるはずですから。

3 ● tezcello
●66ポイント

> a.phpを実行してもb.phpの処理内容が表示されません
もしもご提示のスクリプトがチャンとコピペできているとしたら、単なるミスタイプですね。

> <?php require_once "d.php";?>

b.php じゃなく、d.php になっています。


standard_oneさんのコメント
俺もd.phpは気になったけど、さすがにこれはtypoだと思うw

tezcelloさんのコメント
a.php を見ても全行を掲示した訳じゃなさそうなので、b.php もこれが全てではない可能性があれば __FILE__ の解釈違いとは断定できない感じが... まぁ、require_once() なので、これが間違っているとこの行以降は表示されないみたいなので「b.php の処理内容が表示されない」という表現ではないでしょうけど、疑えばキリがないので、大元からの確認という事で。

うぃんどさんのコメント
元はこちらです。 http://q.hatena.ne.jp/1378933333 埋め込みというご希望にお答えして、そこでは終了したのですが、 今度はそれをtakaniiさんなりに別ファイルに分けてみたら動かなくなったということです。 他にもいろいろと試行錯誤なさっておられるのでできるだけ最短距離かつ応用しやすいことを考慮して回答しているつもりですが、 不備があればご指摘いただければと願います。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ