• ベストアンサー

ウエブページにssiで挿入されるコンテンツの更新を「ブラウザに対してこのページの送信が行われる期間以外」に行う方法

一部のコンテンツがssiで挿入されるウエブページを生成する場合、 「ブラウザに対してこのウエブページの送信が行われている期間を避けて、上記コンテンツを更新する」には、 phpやjavascriptでどのような処理をすればよいか教えて下さい。 なお、ブラウザに対する送信は、コンテンツの更新の前と後との何れで行われても結構です。 以上、よろしくお願い致します。

  • PHP
  • 回答数3
  • ありがとう数5

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

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

うーん・・そもそも仕様として「ちゃんと考えてない感」が強いのですが(汗 とりあえずSSIでの挿入を単純なファイル読み込みでなく、execでCGIの実行結果取り込みにしてCGI側に排他制御(待ち合わせ)を組み込むくらいですねぇ。CGIは単にファイルを読んで(このときに排他をチェック)そのまま返すだけでいいですね。

tfj3116
質問者

お礼

ssiのコマンドをincludeに代えてexecとし、 これで起動されるphpスクリプトで排他制御とファイルの内容を出力する処理を盛り込む ことにより、解決しました。 お忙しいところ、早々に適切なご指導を頂きありがとうございました。 もし可能でしたら、以下の点を併せて教えて頂きたく、よろしくお願い致します。 上記スクリプトについては、execコマンドによる起動時にurlに「?」と「所望の値」を付加することにより、パラメータを引き渡そうとしたのですが、どうも無理なようです。 したがって、パラメータのとり得る個々の値に対応した複数のスクリプト(主要部が同じ)を作ることも止むを得ないようです。 パラメータのとり得る値が多い場合にも、よりスマートかつ確実にパラメータを引き渡す方法がありましたら、是非教えて下さい。

その他の回答 (2)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.3

>上記スクリプトについては、execコマンドによる起動時にurlに「?」と「所望の値」を >付加することにより、パラメータを引き渡そうとしたのですが、どうも無理なようです。 execは「exec cgi」か「exec cmd」のどちらでしょうか?普通のCGIのように環境変数から値を取得しようとされてませんか?引数(argv)で渡すようにしてみては?

tfj3116
質問者

お礼

度々、そして早々と教えて頂きありがとうございます。 早速、引数(argv)で引き渡すように試みてみます。 これからも、どうかよろしくお願い致します。

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

>phpやjavascriptでどのような処理をすればよいか教えて下さい。 phpはまだしも、JavaScriptでサーバのファイルを更新した経験がありません(汗 ファイルの更新に時間がかかるとは思えないのですが、どの程度の時間がかかって困っていらっしゃるのでしょうか?もしDB処理などで「数十秒程度かかる」のであれば、いったん別ファイルに書き出しておいてからコピーするとかではダメなんですか? #コピーでダメならFTPで転送しても同じことなので・・

tfj3116
質問者

補足

早速の回答、ありがとうございます。 ssiで挿入されるコンテンツは、ブラウザによりアクセスされたとき所定(本件には関係がないため省略)の条件で更新されるテキストファイル(内容はhtml)です。 サイズは、数キロバイト、更新に所要する時間はきわめて短いものと思われます。 現状では、このテキストファイルは、 phpスクリプト(ブラウザによりアクセスされたことをきっかけとして起動される)により更新されますが、 このように更新されている期間にも、 ブラウザ(先にアクセスしたブラウザだけではなく、遅れてアクセスした他のブラウザを含む)に対して、 ssiによる送信が並行して行われてしまうようです。 すなわち、テキストファイルのアクセスに関する排他制御ができていないと思われます。 現状では、phpのflock関数を用いて排他制御を行い、 さらに、stream_set_write_buffer関数により書き込みバッファサイズを「0」としていますが、 症状は改善されず、どうも、サーバサイドでは、phpと、ssiによる送信のための読み出しとの間に、排他制御が成立していないものと思われます。 そのために、ブラウザ画面上では、レイアウトの崩れ等が生じています。(ブラウザで受信されたソースでも確認) ブラウザが1つだけであれば、onloadイベントを検出して、getメソッド等によりサーバサイド(php)に送信の完了を通知させることができますが、 実際には複数のブラウザがランダムに並行してアクセスする可能性が高いため、コンテンツの更新を行ってもよい期間をどのようにして検出してよいものか、困っております。 サーバサイドで該当ページの転送が行われていない期間が識別できるならば、それが最良とおもわれるのですが、自力ではどのようにしてよいかわかりません。 以上をふまえて、よい方法がありましたら、教えて頂きたく、よろしくお願い致します。

関連するQ&A

  • SSIを挿入したWEBぺージがFireFoxでブラウザの中央に表示され

    SSIを挿入したWEBぺージがFireFoxでブラウザの中央に表示される方法をどなたか教えていただけませんか? TOPページに最新情報を挿入するためSSIのインクルードを使ってページを更新したところ、それまでブラウザの中央に表示されていたのですが、FireFoxで左寄せになってしまいました。(IEでは中央に表示されます。) 他のページが全て中央表示なので何とか中央表示にしたいのですが、どなたか対処方法を御存じの方がいらっしゃいましたらお教えください。 もともとは,<iframe>で表示していたのですが、SEO上ページに更新記録を付け加えても変更していないことになってしまうので、SSIを使用することにしました。 挿入したタグは <!--#include file="kousin.html"--> です。 ページは http://www.gassyuku-saijo.jp です。 よろしくお願いします。

  • webブラウザを開かないで移動しない方法教えてください

    PHP又はjvascriptでプログラムを作成しています。 <form action=~ で送信すると webブラウザが別ページに移動されますが、 webブラウザを開かないで移動しない方法を考えています。 教えていただけないでしょうか?

  • ブラウザを使わずコマンドプロンプトなどからwebページへアクセス(送信)する

    DNS更新の操作で、アカウントとパスワードを設定してドメイン提供サイトの更新ページへアクセスする。という作業があるのですが、これをブラウザを使わずワンクリックで行えるプログラムを作ろうと思っております。 DNSサービスはddoで以下の形式で更新ページへアクセスすることでドメインの更新ができます。 (http://)freeddo.jp/dnsupdate.php?dn=ドメイン&pw=パスワード&ip=IP クリックしたときにコマンドプロンプト呼出の形式でブラウザを立ち上げることはできたのですが、更新のたびにブラウザが立ち上がり消すのは手動になってしまいどうにも気に入りません。 おそらく上記のページにアクセスするだけで更新はされるのだと思うのですが、ブラウザを使わずバックグラウンドでアクセスだけをさせる方法はないでしょうか? (思いつくワードで検索したところPerlを使うというページがいくつか見受けられたのでこちらで質問させて頂きました。) なお、登録したいIPがVPNのIPであるため、DiCEを使うという手段は使えません。

    • ベストアンサー
    • Perl
  • 更新したページがブラウザでは更新されない…

    ウェブページの更新がブラウザ(Firefox)で反映されず困っています。 スーパーリロードも試しましたが効果なし、キャッシュを削除しても解決には至りませんでした。 この場合、他にどういった原因が考えられますでしょうか。 なお、1度パソコンをシャットダウン後に開くとページは更新されます。 解決方法がわかる方、ご回答いただけると助かります。

  • 自分のWebページの更新日付が毎回新しくなる

    今まではNo.6898580番の回答のようになっており何の問題もありませんでした。 半年ほど前からウェブの容量20Mbが一杯になり、Yahoo!ジオシティーの100Mb無料に引越し中です。 コンテンツはFFFTPを使わずインターネットのブラウザで直接ウェブページを編集,更新できるので重宝していますが、Y!ではページを開いた時の最新の時刻が表示されます。 <body> : <pre>  最終更新日[<script language="javascript" type="text/javascript"> <!-- document.write(" ",document.lastModified); --> </script> ] : </pre> </body> ウェブページには下のように表示されます。 ~~~~~~~~~~~~~~~~~  〇X〇Xのお話   最終更新日[ 10/31/2014 08:03:24 ]                      戻る ~~~~~~~~~~~~~~~~~ ところが、 自宅PCからFFFTPでアップした内容とY!に転送(引越)した物を2つ見比べたら日付が8月頃の日付のままです。勿論更新するので日付は変わりますが、Y!だけはブラウザの更新ボタンでも毎回日付表示が変わります。 ~~~~~~~~~~~~~~~~~  〇X〇Xのお話   最終更新日[ 08/16/2014 23:51:39 ]                      戻る ~~~~~~~~~~~~~~~~~ PCは32bit Win7 professional、プロバイダーはQTnetです。 さしあたり実害はないので時間がある時に、お目に留まれば幸いです。

  • Web ページの 送信ボタンを押す

    JavaScript とか、VBScript とかで 自作Webページの 送信ボタン、とかを自動で押す方法ないでしょうか。 UWSC とかは使えない環境です。 何か方法はないでしょうか。

  • 自身のページとiframeの2つのページを同時更新する方法

    いつもありがとうございます。初心者です。御指導お願いします。 テキストにリンクを貼って、クリックと同時にiframeの2ヶ所のページにGETでデータが送信され、同じ値がGETで自身のページにも送信され 自身とiframeの3つのページが同時に更新されるようにしたいのですが、下記の記述では、GETで送信されて、iframe内のページは更新されるのですが、自身のページは更新ボタンを押さないと内容が更新されません。 テキストリンクをクリックしただけで、自身のページとiframe内の2つのページを同時更新できる方法を教えて下さい。 <SCRIPT language="JavaScript"> function Syncro(mPage,cPage,sPage){ parent.main.location.href=mPage; parent.control.location.href=cPage; self.location.href=sPage; } </SCRIPT> phpで書いたページ内のテキストリンクです。 <A HREF="Javascript:Syncro('right.php?entry_day=2008-02-04','top.php?entry_day=2008-02-04','offer_calender.php?entry_day=2008-02-04')">2008-02-04</a> phpで書いたページ内のiframe のページ <td bgcolor="#999999"><iframe src="right.php?entry_day=2008-02-04" name="main" width="300" height="330" scrolling="yes"></iframe></td> <td bgcolor="#3399CC"><iframe src="top.php?entry_day=2008-02-04" name="control" width="677" height="330" scrolling="yes"></iframe></td>

  • ウェブブラウザ画面の更新(変化)を感知させたい

     ウェブブラウザにはページの自動更新という機能がありますが,あるページの自動更新を設定して,そのページに更新(変化)があった場合に,それをアラームなどで知らせることはできないでしょうか?ちなみに,僕は今 windowsXP で sleipnir を使っています.

  • WEBページの更新日時確認方法

    こんばんは。 WEBページの「過去」の更新日時を見る方法を探しています。 フリーソフトのFaEdit Freeとjavascriptでの方法は 確認したいページに無料ホームページで作成した場合に表示されることの多い広告が邪魔をして 広告の最終更新日時が表示されてしまいます(※広告の最終更新日時よりも更新が新しい場合はそちらが反映されるようですが) 広告が入ってしまっているページでも、そのページが過去何時最終的に更新されたのか確認できる方法をご存知の方いましたら教えていただけると助かります。

  • WEBページ自動更新ソフト

    WEBページ自動更新ソフト WEBページで指定した部分のみ変更があった場合に知らせてくれるソフトって無いでしょうか?(できればフリーで) 他の自動更新ソフトを使っても、変化が無いのにアラートが出たりしてイマイチなんです・・。広告とかにひっかかっているんですかね? ちなみに普段使ってるブラウザはFireFoxですが、IEでも構いません。 よろしくおねがいします。

専門家に質問してみよう