PHPについて質問です。


fopen()などで下記のような内容のhoge1.phpというPHPファイルを新規作成するとします。
hoge1.php
<?php
<html>
×××
</html>
?>

以下のhoge2.phpの変数aの内容が上の×××の部分にプラウザで表示するようにしたいのですが、後で変数aの内容を変更してもそれがhoge1.phpに反映されるようにすることってできるでしょうか?
hoge.2php
<?php
$a='ほげほげ';
?>

たとえば、プラウザで「ほげほげ」と表示されてるhoge1.phpを、hoge2.phpの変数a="はてな"と変更するとプラウザでも「はてな」と表示されるようにしたいということです。

Vista、IE、Firefox、最新のXampp、PHP5、 EclipsePDT2を使ってます。
以上よろしくお願いします。

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2010/05/16 20:24:24
  • 終了:2010/05/17 20:20:35

ベストアンサー

id:doropon No.3

回答回数94ベストアンサー獲得回数162010/05/17 15:49:35

ポイント26pt

こんにちは。

あ、私のだと、だいるが入れ変わってしまってましたかね。。。

hoge2.php

$a='ほげほげ';

?>

で、

hoge1.phpで$aを表示する場合は、

<html>

</html>

です。

$content="

というのは変数にその行を文字列として入れているので、動きません。

ですので、上記のhoge1.phpの例である

<html>

</html>

をfopenして書きこみで開いたhoge1.phpという名称のファイルに書き込んでください。

ブラウザ上でhoge1.phpを表示させるとはでません。

プログラムで置き換えていますので。

解釈が違ったらすいません。

id:taroemon

再度のご回答、丁寧にありがとうございます。

私の環境だと<html>と</html>の間が表示されてないかもしれません。

もしdoroponさんの環境で意図した回答と違うものが表示されてるようでしたらコメント欄にフォローください。

これでよければそのままで結構です。


今回は私が適切に質問し切れてないようです。

いったん締め切り、整理した後あらためて再質問させていただきます。

2010/05/17 20:20:03

その他の回答(2件)

id:doropon No.1

回答回数94ベストアンサー獲得回数162010/05/16 20:38:12

ポイント27pt

セッションでできるかなと思います。

hoge1で値を変数に代入するのに、直書きしていますが、

フォームからgetやpostで対応すればいいかと。

その場合は、えすけーぷなどセキュリティを気にしてください。

ご要望に沿っていれば、いいのですが。。

% cat hoge1.php

session_start();

$_SESSION['ans']="ほげほげ";

?>

<html>

<body>

</body>

</html>

% cat hoge2.php

session_start();

?>

<html>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<body>

hogeはでした。

</body>

</html>

id:taroemon

ご回答ありがとうございます。

大変参考になりました。

セッションを使わない方法を知りたいので他の方からのご回答もお待ちしてます。

2010/05/16 22:45:05
id:tezcello No.2

tezcello回答回数460ベストアンサー獲得回数692010/05/16 23:03:15

ポイント27pt

hoge1.php の内容が本当に

<?php
<html>
×××
</html>
?>

であるなら、新規に作ったときの内容を動的に書き換える手段はありません。

(全角の '<' で始まっていては、PHPスクリプトとして動作しません)

<?php
<html>
×××
</html>
?>

であるなら、PHPスクリプトとしては動作しますが、<html> はPHPの文法にはありませんからエラーとなってしまい、

> 上の×××の部分にプラウザで表示する

というような事も出来ません。


hoge1.php を実行した時(ブラウザで開いた時)に、ブラウザに渡されるデータが

<html>
×××
</html>

である(ブラウザ上の表示は「×××」だけ)ならば、簡単です。

(hoge.2php ではなく hoge2.php であるとします。include するだけなら hoge.2php でも問題無いです)

<?php
include 'hoge2.php';

print <<<EOL
<html>
$a
</html>
EOL;

?>

PHPで無くても良ければ、javascript でって方法もあるでしょうが、hoge1.php で得られるHTML文書に含めなくてはならないので、例示のものとかなり違ったものとなります。

ブラウザ上では変わりませんが。

id:taroemon

ご回答ありがとうございます。


>全角の '<' で始まっていては、PHPスクリプトとして動作しません。

全角はわざとです。それをちゃんとことわっておくべきでした。

以前、半角でタグを書いたらひどいことになってしまったので、このような書き方をしました。以下、タグの開始と終了タグは全角とさせていただきます。

また、hoge.2phpはhoge2.phpの書き間違いです。いずれもご指摘ありがとうございました。


質問文にはもう一箇所誤りがあります。

hoge1.phpの×××は変数(仮に$contentとします)に格納されており、

それが新規作成されたhoge1.phpに反映されるという仕組みになっています。

例えば、$content="人力"だとすれば、hoge1.phpは下記のようになります。

<html>

人力

</html>

<?phpと?>はありませんでした。

$content="<?php include 'hoge2.php'; echo $a; ?>"とすると、

プラウザ上で「<?php include 'hoge2.php'; echo $a; ?>」とそのまま表示されてしまいます。


・・・とここまで書いて、まだ把握してないこともあるのではないかと思うようになりました。PEARを使ってるのでコードも完全に理解してません。質問が不適切である可能性がありますので、今後ご回答いただく方はその点をご了承の上、推測混じりにご回答ください。結果として的はずれな回答となっても、それは私の落ち度のせいですし、今後の参考になりますので、気にしないでご回答くださいますようお願いします。私の方でさらに補足すべきことがありましたら、解答欄かコメントに記述します。

2010/05/17 02:24:46
id:doropon No.3

回答回数94ベストアンサー獲得回数162010/05/17 15:49:35ここでベストアンサー

ポイント26pt

こんにちは。

あ、私のだと、だいるが入れ変わってしまってましたかね。。。

hoge2.php

$a='ほげほげ';

?>

で、

hoge1.phpで$aを表示する場合は、

<html>

</html>

です。

$content="

というのは変数にその行を文字列として入れているので、動きません。

ですので、上記のhoge1.phpの例である

<html>

</html>

をfopenして書きこみで開いたhoge1.phpという名称のファイルに書き込んでください。

ブラウザ上でhoge1.phpを表示させるとはでません。

プログラムで置き換えていますので。

解釈が違ったらすいません。

id:taroemon

再度のご回答、丁寧にありがとうございます。

私の環境だと<html>と</html>の間が表示されてないかもしれません。

もしdoroponさんの環境で意図した回答と違うものが表示されてるようでしたらコメント欄にフォローください。

これでよければそのままで結構です。


今回は私が適切に質問し切れてないようです。

いったん締め切り、整理した後あらためて再質問させていただきます。

2010/05/17 20:20:03
  • id:tezcello
    hoge1.php の用途を明確にして頂きたいです。
    PHPスクリプトとして動作させたい(拡張子が .php なのでそうだと予想)のか、そうではないのか?

    動的に変化させたいのなら、何らかのスクリプトが必要でしょう。
    PHPなら、
    <html>
    <?php include 'hoge2.php; print $content; // 質問文では $a ?>
    </html>

    javascript なら、
    Ajax を利用してhoge2.php にアクセス(hoge2.php で $content の値を返すように内容を変更)して得た値を動的に埋め込む
    <html>
    <head>
    <script type="text/javascript">
    window.onload = function() {
    XMLHttpRequest を使って値を取得し、id="content" のタグへ書き込む
    }
    </script>
    </head>
    <div id="content"></div>
    </html>

    こんな感じ。


    > $content="<?php include 'hoge2.php'; echo $a; ?>"とすると
    $content って hoge2.php で定義しているんですよね?無意味じゃないでしょうか?
    ホントにチャンと動作します? エラーになるような気が...

    ひょっとして動的にPHPスクリプトを生成して実行させようという事でしょうか?
  • id:taroemon
    tezcelloさん

    ご無沙汰してます。またコメントいただけてうれしいです。

    >PHPスクリプトとして動作させたい(拡張子が .php なのでそうだと予想)のか、そうではないのか?
    PHPスクリプトとして動作さたいです。

    >動的に変化させたいのなら、何らかのスクリプトが必要でしょう。
    >PHPなら、
    ><html>
    ><?php include 'hoge2.php; print $content; // 質問文では $a ?>
    ></html>

    あらためて整理しますと、
    hoge0.php(質問文にはありません。ここで新たに作りました。)の中にある、
    変数$contentの内容が、下記のhoge1.phpの×××の部分に反映されます。

    hoge1.php
    <html>
    ×××
    </html>を
    プラウザ上では×××とだけ表示されます。

    最終目的はhoge2.phpの中の変数$aを変更したら、
    hoge1.phpの表示が変更されるようにしたいということです。
    $a="人力"ならhoge1.phpはプラウザで人力と表示され、
    $a="はてな"ならhoge1.phpはプラウザではてなと表示されるようにしたいということです。
    hoge2.phpがインクルードできればいいと思い、
    hoge0.phpの変数$contentの内容を
    $content = "<?php include_once \"hoge2.php\"; print $a; ?>
    としましたが、hoge1.phpでこれがPHPスクリプトと認識されず、
    プラウザでは<?php include_once "hoge2.php"; print $a; ?>と表示されてしまいます。
    なんでPHPスクリプトと認識されなければしらべる必要がありますし、
    それができたらご指摘の通りincludeでできそうです。もう少し自分で頑張ってみることにします。

    javascriptはまだ勉強してませんが、いただいたスクリプトはいつか参考にしたいと思います。

    この件はもう一度自分でいろいろ試してみることにします。
    丁寧なコメントありがとうございます。
  • id:doropon
    あ、ごめんなさい。私の回答で、<?php の部分がエスケープされちゃっているんですね。。
    申し訳ないです。
    いまいちtextareaの使い方がわかってないみたいです。。
    全角で書きます。
    hoge1.phpは
    <html>
    xxxx
    </html>

    xxxx
    の部分が
    <?php include="hoge2.php"; echo $a; ?>
    です。
    hoge2.phpは
    <?php
    $a = "ほげほげ";
    ?>
    でいいかと思います。

    語弊があるかもしれませんが、includeは指定したファイルを丸ごと取り込みます。
    hoge2.phpをincludeするということは、
    hoge1.phpは
    <html>
    <?php
    $a="ほげほげ";
    echo $a;
    ?>
    </html>
    と解釈されて、
    ブラウザに送られてくるデータは
    <html>
    ほげほげ
    </html>
    という内容になります。

    私の回答ミスで混乱させていたらごめんなさい。
  • id:taroemon
    doroponさん

    何度も丁寧にお答えいただきありがとうございます。

    >私の回答で、<?php の部分がエスケープされちゃっているんですね。。
    了解しました。

    >私の回答ミスで混乱させていたらごめんなさい。
    いえ。今回は私の質問が適切ではなかったようです。
    また質問しますので教えてください。
  • id:tezcello
    (今更ですが)ご無沙汰しております。

    hoge0.php で hoge1.php を作成して、hoge1.php を実行させた際に、hoge2.php の内容を反映させたいという事でしょうか?

    スクリプト内で '?>' という文字列を記述すると、スクリプトそのものの終了タグと勘違いされるのではないでしょうか?
    もし僕が動的にPHPスクリプトを書き換えなければならないとしたら、その元になるスクリプトを用意しておいて、必要部分だけ書き直して保存すると思います。

    source.txt というファイルに
    <?php
    include 'hoge2.php';
    // fuga1
    print <<<EOL
    <html>
    <!-- fuga2 -->
    $a
    </html>
    EOL;

    ?>
    というのを用意しておいて、hoge0.php では
    $content = file_get_contents('source.txt');
    $content = str_replace('// fuga1', '$a = $a.$a;', $content);
    $content = str_replace('<!-- fuga2 -->', 'fuga2部に差し込むHTMLテキスト', $content);
    file_put_contents('hoge1.php', $content);
    こんな感じでしょうか。(動作未チェックです)
    でもスクリプトを直接書き換えるのは、トラブルの温床となり易く、あまりお勧めしません。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません