- ベストアンサー
phpでの実行結果をhtmファイルのbody内に書き込む方法がわかりません
下記のphpスクリプトの実行結果(print・・・)を、 同じディレクトリ内のaaa.htmファイルの☆☆☆のところへ書き込むスクリプトを考えているのですが、自力ではわからず質問させていただきます。 zzz.php ====== <?php $strDir=dirname(__FILE__); $strXml=$strDir."/aaa.xml"; $strXsl=$strDir."/bbb.xsl"; $objPrc=xslt_create(); $result=xslt_process($objPrc,$strXml,$strXsl); print(mb_convert_encoding($result,"Shift_Jis","UTF-8")); ?> ====== aaa.htmファイル ====== <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_Jis"> <meta http-equiv="Cache-Control" content="no-cache"> <title>タイトル</title> </head> <body> ☆☆☆ </body> </html> ====== どのような方法がありますでしょうか? ご教授願います。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
zzz.php は cron で実行されるのですね。 でしたら, 以下の方法等があると思います。 1. aaa.htm 全体を cron処理が行われる度に出力する 2. cron処理で aaa.htm が読み込む JavaScriptファイルを生成する zzz.php の実行ユーザが aaa.htm があるディレクトリに書き込み権限があるならば, 1の方法が一番手っ取り早いです。 (Smarty や HTML_Template_Flexyといった)テンプレートライブラリを用いれば, 簡単に☆☆☆の部分だけを変換することも可能ですし。 1 がだめなら, ☆☆☆の部分を表示する JavaScriptファイルを zzz.php が生成するという 2の方法もあります。 ブラウザからアクセスできるディレクトリに, result.js 等の名前でファイルを出力し, aaa.htm からはそれを実行するようにすれば JavaScript での制御が可能です。
その他の回答 (4)
- gryfinndors
- ベストアンサー率18% (127/671)
aaa.htmのファイル名を変えられないなら、PHPで全部出力してはどうですか。 BODYだけじゃなくてHEADも全部。 一番簡単だと思います。 あと嫌ならINFRAMEを使って呼び出すファイルだけ書き直すとか。
補足
アドバイスありがとうございます。 INFRAMEでもアクセス権の関係で制御されてしまう気がします。 もし私の未知さが原因でしたら申し訳ございません。
すみません, いくつか訂正です。 >aaa.htm に .htaccess という名前のファイルを作成して aaa.htm があるディレクトリに .htaccess という名前のファイルを作成して >document.getElementById("hoge") = "置き換えたい文字列"; document.getElementById("hoge").innerHTML = "置き換えたい文字列"; >document.getElementById('hoge') = result; document.getElementById('hoge').innerHTML = result;
補足
#2と#3につきまして親切&丁寧な解説感謝いたします。 ちょっと私の説明不足がありましたので補足いたします。 希望している動きは、zzz.phpはクーロンとして動かしているので、aaa.htmファイルからのアクセスがトリガーにはならないのです。 よって、zzz.phpが実行されたときにaaa.htmファイルへ書き込む動きが理想です。 また、ぶっちゃけhtmファイルはファイル名さえ変わらなければその都度全部を書き換えても問題ないので、htmファイル全体を出力してリダイレクトするようなphpでも問題ありません。 説明不足で本と申し訳ございません。
色々と制限のある環境のようですね ^^; >『# aaa.htm を PHPスクリプトとして動作させることもできたりしますが・・・』が気になります。 レンタルサーバの Webサーバは Apache を想定しています。 もし, aaa.htm が置かれているディレクトリで .htaccess ファイルによるユーザの Webサーバの設定変更が許されていて, かつ AddTypeディレクティブが有効に働くならば, aaa.htm に .htaccess という名前のファイルを作成して, 以下の1行を記述することで htm の拡張子を持つファイルを PHPスクリプトとして動作させることが可能です。 AddType application/x-httpd-php .php .htm .htaccess による設定変更が可能かどうかはレンタルサーバ先に確認してみて下さい。 もう一つの JavaScript による方法ですが, ☆☆☆の部分を <div id="hoge"></div> のようにしておき, JavaScript内で document.getElementById("hoge") = "置き換えたい文字列"; のような感じで置き換えることもできます。 “JavaScript のプログラム自体”を出力する PHPスクリプトを記述し, aaa.html の先頭で下記のように PHPスクリプトにアクセスしてJavaScript を実行します。 <script type="text/javascript" src="/path/to/zzz.php"></script> 置き換えたい文字列は, zzz.php で JavaScript の変数として出力します。 この例だと $result がそれにあたりますので zzz.php の出力を, print "var result = " . mb_convert_encoding($result, "Shift_JIS", "UTF-8") . ";"; のように JavaScript の変数宣言文を出力して, aaa.htm 内部のどこかで, document.getElementById('hoge') = result; を実行すれば, PHP で加工した値を☆☆☆の場所に埋め込むことが可能です。
aaa.htm はどうしても HTMLファイルではないとだめなのでしょうか? aaa.php でも良いのであれば, 1. aaa.htm と zzz.php を一つの PHPファイルにまとめる aaa.htm と zzz.php を合わせて一つの aaa.php にして, ☆☆☆ → <?php print mb_convert_encoding($result,"Shift_Jis","UTF-8"); ?> のように直接出力する。 2. zzz.php をインクルードする aaa.html を aaa.php にリネームして, PHPファイルとして実行できるようにし, ☆☆☆ → <?php include("zzz.php"); ?> or <?php require("zzz.php"); ?> のように, zzz.php を外部ファイルとして読み込む。 等の方法があります。 どうしても aaa.htm のまま使いたいというのであれば, JavaScript を駆使して出来ないこともないですが, 結構複雑になりますし, ブラウザによっては長期間表示がキャッシュされ続けてしまう可能性もあります。 # 見せ方の問題だけなら, Webサーバの設定次第では, # aaa.htm を PHPスクリプトとして動作させることもできたりしますが・・・
補足
>aaa.htm はどうしても HTMLファイルではないとだめな>のでしょうか? はい。require等も考えたのですが最終的にサイトに表示させるファイルではアクセス権の都合でこの外部ファイルzzz.phpを呼び出せないのです。 ですのでいったんhtmファイルに書き出し、 そのままftp関数で最終的に表示させるディレクトリにupする感じにしようと思ってます。 サーバーはレンタルサーバーのためroot権限が無く、 zzz.phpはwebユーザーのディレクトリ htmファイルはメインユーザー(rootではないです)のディレクトリです。 こんな事情なんです。 もしよりよい方法がありましたらご教授ください。 『# aaa.htm を PHPスクリプトとして動作させることもできたりしますが・・・』が気になります。
お礼
本当は1で行きたいのですが、レンタルサーバのためsmarty や HTML_Template_Flexyのインストールが危ういため2.で行きたいと思います。 どうもありがとうございました。