PHPで下記のスクリプトを作成してください。


下記の「hoge.html」をfile_get_contentsで読み込み、
「hoge.php」にfwriteするという内容で下記の通りスクリプトを作りました。

hoge.html
---------------
<html>
<body>
</body>
</html>
---------------

作成したスクリプト
---------------
<?php
$html = file_get_contents('hoge.html');
$fp = fopen('hoge.php' , 'w');
fwrite($fp,$html);
fclose($fp);
?>
---------------

ここからが問題なのですが、
「hoge.php」に出力されるスクリプトの「body」と「/body」の間に、
別ファイルである「hatena.php」をincludeさせたいです。
つまり、「hatena.php」の内容を変更すると、
それが「hoge.php」にも自動的に反映されるようにしたいのです。
どのようにしたらよいのでしょうか?

Vista、PHP5、Firefoxという環境でやっています。
質問が不足してたり、不明瞭であったら、その旨お知らせください。
以上、よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/11/10 00:10:32
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:worldtravel No.1

回答回数34ベストアンサー獲得回数4

ポイント60pt

こういう事でしょうか?

違っていたらすいません。


<html>

<body>

#hatena#

</body>

</html>


<?php

$html = file_get_contents('hoge.html');

$hatena = file_get_contents('hatena.php');

$html = ereg_replace("#hatena#",$hatena);

$fp = fopen('hoge.php' , 'w');

fwrite($fp,$html);

fclose($fp);

?>

id:taroemon

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


いただいたスクリプトをそのままコピペして使ってみましたが、

「Warning: Wrong parameter count for ereg_replace() in (中略) on line 7」というエラーがでました。


あと、私の質問が悪かったので、下記の通り追加修正させていただきます。


簡単のために<body>と</body>の間を空白にしておりますが、

この間にはいろいろなことが書かれているという前提でお願いします。


①「hoge.php」をfwrite。

②「hatena.php」を変更。

③ブラウザでの表示上、「hoge.php」が変更される。

①の後に再びfwriteしなくても③が変更されているというようにしたいのです。

実際には「hoge.php」のようなファイルがたくさんあって、

それらの一部分の変更だけを「hatena.php」で一元管理したいのです。

別の表現をするならCSSで一元管理するみたいにイメージしていただけると幸いです。


また、特定のファイルの一部分だけをincludeさせることはできるでしょうか?

例えば、「hatena.php」内のユーザー定義関数「jinnriki()」をincludeさせるということです。

本当にそんな都合のよいようにできるのかなぁと思いつつ質問しています。

不可能ならこちらは実現できなくてもかまいません。


目的がかなうならいずれかのスクリプトを大胆に変更していただいてもかまいません。

ひきつづき皆様からのご回答をお待ちしております。

2008/11/07 12:35:46
  • id:tdoi
    確認していませんが、以下の感じでどうですか?

    $html = file_get_contents('hoge.html');
    $html = preg_replace('/<body>(.*?)<\/body>/', '\1<?php include("hatena.php"); ?>', $html);
    $fp = fopen('hoge.php' , 'w');
    fwrite($fp,$html);
    fclose($fp);

    hoge.htmlのbodyタグに何か入っていて、その途中に入れるのであれば、もう少し工夫がいると思いますが。

    何かの参考になれば。
  • id:worldtravel
    すいません。
    既にコメントがあったことに気付きませんでした。
  • id:worldtravel
    すいません。

    $html = ereg_replace("#hatena#",$hatena,$html);

    の間違えです。
  • id:taroemon
    tdoiさん
    コメントありがとうございます。

    bodyタグの間にはいろいろ入ってます。

    いただいたスクリプトをコピペして使ってみたのですが、
    うまく「hatena.php」をincludeできませんでした。

    いずれも私の質問が悪かったせいですみません。
    またお時間のあるときに気が向いたらぜひ教えてください。
  • id:taroemon
    worldtravelさん
    何度も丁寧にコメントしていただきありがとうございます。

    他の方のコメントを見てからいただいた回答を開きましたので、お気になされないでください。
    またスクリプトの修正ありがとうございます。

    質問文を修正・追加しましたので、
    またお時間のあるときにご回答ください。
  • id:worldtravel
    こうでしょうか
    phpのベテランではないので綺麗ではないかもしれませんが...


    <html>
    <body>
    <?php
    include 'hatena.php';
    hogehoge();
    ?>
    </body>
    </html>


    <?php
    $html = file_get_contents('hoge.html');
    $fp = fopen('hoge.php' , 'w');
    fwrite($fp,$html);
    fclose($fp);
    ?>


    hatena.php
    <?
    function hogehoge(){
    print time();
    }
    ?>
  • id:taroemon
    worldtravelさん
    何度も丁寧にご回答いただきありがとうございます。

    うまく動くことができました。
    困っていたので大変助かりました。ありがとうございます。

    >phpのベテランではないので綺麗ではないかもしれませんが...
    こういうことはどうぞ気になされないでください。
    実際に動くものを作っていただいたわけですし、
    仮にこれより優れたものがあったとしても
    別の方のご意見によりさらに洗練されることもありますので、
    ご回答いただかないと貴重な機会を失うことになります。
    また質問しますので、お時間のある時には今後もぜひご回答いただきますようお願いします。

    ところで、今回いただいたスクリプトで希望通りできたわけですが、
    htmlにより「include 'hatena.php'; hogehoge();」をさらすということはセキュリティ的に問題あるでしょうか?
    皆様からのご意見をお待ちしています。

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

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

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

回答リクエストを送信したユーザーはいません