• ベストアンサー

すべての処理が開始される前に、必ず実行される処理

みなさん、おつかれさまです。 さて、PHP開発にあたって「すべての処理が開始される前に、必ず実行される処理」ファイルを用意しようと思っています。 他のサーバサイドスクリプトでは、たとえばASPですとglobal.asa、AdobeのColdFusionですとApplication.cfmなどがありますが、PHPの仕様として、これに相当する「予約ファイル名」はあるのでしょうか?

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

  • ベストアンサー
回答No.2

ありません。 ありませんが、様々なフレームワークがあるのでそれらを利用すれば、似たような処理を簡単に行うことが可能です。 もしくは、簡単なスクリプトを書いて、mod_rewriteでも使えば、同じような動作を行うことは可能です。 -----global.php-------- <?php require_once './global.function.php'; define('APPLICATION_PARAM_NAME', 'p'); if(!isset($_GET[APPLICATION_PARAM_NAME])) exit(); if(!preg_match('/^[a-zA-Z0-9_-]+\.php$/D', $_GET[APPLICATION_PARAM_NAME])) exit(); if(function_exists('application_onstart')){ application_onstart(); } if(function_exists('application_onend')){ register_shutdown_function('application_onend'); } require_once $_GET[APPLICATION_PARAM_NAME]; function u_session_start(){ global $_SESSION_FIRST; session_start(); if(empty($_SESSION)){ if(function_exists('session_onstart')){ session_onstart(); } } } function u_session_destroy(){ global $_SESSION_DEST; session_destroy(); if(function_exists('session_onend')){ session_onend(); } } ?> -----global.function.php-------- <?php function application_onstart(){ echo "start<br />"; } function application_onend(){ echo "<br />end"; } function session_onstart(){ } function session_onend(){ } ?> -----.htaccess-------- <IfModule mod_rewrite.c> RewriteEngine on RewriteCond $1 ^[a-zA-Z0-9_-]+\.php$ RewriteRule ^(.*)$ global.php?p=$1 [QSA] </IfModule> こんな感じで。 後は適当な名前のphpファイルを作成して、アクセスしてみてください。 u_session_start/u_session_destroyに関しては、sessionが初めてロードした時にsession_onstartを走らせるという挙動が出来ないのでユーザ関数で実装、u_session_destroyもセッションを破棄したときに自動的にsession_onendを走らせることが出来ないので同様に。 (session_set_save_handlerとか使えばもう少しスマートに実装できそうです。)

tomatsu777
質問者

お礼

丁寧なご回答ありがとうございます。 現状ある各種フレームワークの特徴を評価してみようと思います。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • karace
  • ベストアンサー率45% (9/20)
回答No.3

フレームワークを使わない前提の場合には、 config.php などの初期ファイルを作っておき どのページのphpでも必ず頭でconfig.phpを呼ぶようにします。 test.phpの中身ーーーーーーー <?php require 'config.php' ?> <?php   # test.phpでの処理 ?> ーーーーーーーーーーーーーー

tomatsu777
質問者

お礼

application server仕様上「すべての処理が開始される前に、必ず実行される処理」ファイルが用意されてない場合は、もちろんそうなるでしょうね。 おっしゃるとおり、各ファイル冒頭でインクルードさせる手法でやってみたいと思います。

全文を見る
すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

それってクラスをつくってコンストラクタで処理するのではだめですか?

tomatsu777
質問者

お礼

ええ、それでもけっこうです。 もちろん要件を満たすためならば、多様な手法があると思いますが、サーバサイドでの仕様上、予約されたファイル名があるのかな?と想像したのです。 なかなか探し出せなかったので投稿した次第です。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Global.asaについて

    お世話になります。 今回ASPを使用してアプリケーション開発をしております。 データベースに接続して、データを拾おうと思うのですが、そのデータベースへの宣言などをGlobal.asaでしようと試みている途中で止まってしまいましたので・・・ Global.asaはルートディレクトリにおいてあり、IISでの設定はセッションONになっております。 テスト的に実行するため、 <SCRIPT LANGUAGE="VBScript" RUNAT="Server"> Sub Application_OnStart Application("test") = "" End Sub Sub Session_OnStart Application.Lock Application("test") = "ttt" Application.UnLock End Sub </SCRIPT> とGlobal.asaには記述してあります。 ASPには <% Response.Write test %> と記述してありまして、実行しますと「ttt」と表示されません。なにか間違っている部分はあるのでしょうか?

  • 拡張子がhtmlでもphpスクリプト実行したい

    webサーバがApacheの、レンタルサーバーでホームページを作っております。フレームの代わりにphpのincludeを使ってメニュー等を表示しています。しかし最終的に表示されるページの拡張子がphpでないと、きちんと表示されません。拡張子がhtmlでもphpスクリプトが実行されるようにしたくて、色々調べていたのですが、それらしき方法を発見しました。 Apacheで言えばhttpd.confの AddType application/x-httpd-php .php というところを例えば AddType application/x-httpd-php .php .html にするだけで、*.phpでも*.htmlなファイルであってもそこに埋め込まれているPHPスクリプトは実行されるようになる。 …とあったのですが、何をどう加えるか、もしくは変えればいいのかサッパリです。 もっとこっちの方が簡単だ、など、詳しい方いらっしゃいましたら、どうか宜しくお願い致します。

    • ベストアンサー
    • PHP
  • PHPをCGIとして実行する方法

    PHPをCGIとして実行する方法 現在PHP(モジュール版)にて開発を行っているのですが、 仕様上.htaccessを使用してcgi-binディレクトリ内にあるphpファイルをCGIとして 実行しなければならなくなりました。 下記の記述方法だと500エラーが発生してしまい、大変困っています。 <Directory "/usr/~(任意のcgi-binディレクトリのフルパス)~/cgi-bin"> AddType application/x-httpd-cgi .php </Directory> 因みに.htaccessはcgi-binディレクトリの1階層上に設置しています。 単に「AddType application/x-httpd-cgi .php」を記述する分には誤作動は起さないのですが、出来れば指定のディレクトリ内だけで指定したいと考えています。 もし思い当たる点がありましたら、ご教授お願い致します。 下記に環境を記しておきます。 【環境情報】 OS:FreeBSD 6.2(レンタルサーバ) PHP:5.2.4

    • ベストアンサー
    • PHP
  • PHPで作るフレーム、どんな風に作ってます?

     PHPやASPなどのサーバーサイドスクリプトで、全てのページにメニューなどを表示させて、フレームみたいなものを作るのがよくありますが、あれってどのように作ってますか?  僕はそれぞれのファイルに <?php function display_html(){ print <<<HJK ページの本文 HJK; } ?>  として、フレームファイルindex.phpでdisplay_html()を呼び出してフレームを作成しているのですが、一般的にはどうなのかな、と思いまして。

    • ベストアンサー
    • PHP
  • phpで画像処理

    phpで画像処理 いつもお世話になっております。 phpで画像処理を行いたいのですが どのような方法があるかご存知の方いませんでしょうか。 内容としては ある画像ファイルの予め決めた場所に 文字を出力しブラウザに表示するという仕様です。(phpファイルにアクセスした際)

    • ベストアンサー
    • PHP
  • タイムアウト処理?となる

    ローカルのシステムでデータベースからCSVファイルを作成して、公開用WEBサーバへFTPアップロード。その後CSVファイルをWEB用データベースに登録する処理を開発しているんのですが、開発用WEBサーバでは正常に完了するのですが、本番用WEBサーバで行うと最初の数万件は登録できているのですが、途中でエラーというか真っ白になって処理がSTOPしてしまいます。 開発、本番用共に同じPHPのファイルを使用しており、データベース構成も同じです。 【相違点】 開発(正常):PHP4.4.2(Apacheモジュールにて動作) 本番(異常):PHP4.4.1(CGI動作) エラーとなるのも、CSVのファイルの容量によって違います。 ちなみにFTPでのアップロードは開発・運用供正常にできています。 どなたかご教授お願いします。

    • ベストアンサー
    • PHP
  • イベントビューアのアプリケーションログについて

    Windows 2003 serverでの質問です。 サーバーの種類に限らないかもしれないですが、ASPプログラムを使用するサイトでglobal.asaを使用しております。 このglobal.asa内で使用できないサーバーメソッドを使用しておりイベントビューアのアプリケーションログで警告が出力されました。 ここまでは問題ないのですが、そのサイトを一度閉じてまたサイトを開き直すと、global.asaの処理がはしり、新たにイベントビューアのアプリケーションログで警告が出力されると思ったのですが出力されませんでした。 global.asaのファイルに更新をかけてサイトを開き直すとまた新たに警告が出力されるのですが、global.asaのファイルに更新をかけないと警告が出力されません。 global.asaの処理が動いていることは確認できるのでなぜイベントビューアのアプリケーションログに警告が出力されないか疑問です。 理由をご存知の方がいらっしゃいましたらご教授頂けると助かります。

  • Session_OnStartを見てくれなかったりする?

    【したいこと】 セッション開始時に global.asa内のSub Session_OnStartでApplication.Contents("AAA")="111"を実行させる。 【起きている現象】 アプリケーションの起動時(ファイルを編集したりした後)にのみ、Sub Session_OnStartもしくは、Sub Application_OnStartを辿る(←これもまちまち)が、 その後、ブラウザを全て閉じても、global.asaを通ってくれない。 Sub Application_OnStart Application.Contents("AAA") = "" Sub End Sub Session_OnStart Application.Lock Application.Contents("AAA") = "aaa" Application.Unlock Sub End こんなかんじです。 ASPファイルからもApplication.Contents("AAA")にアクセスしていると考えてください。 情報が少なくて申し訳ありませんが なにか思い当たることがあればお願いします。

  • ASP VBS global.asa Session_OnStart内

    ASP VBS global.asa Session_OnStart内でサーバーの環境変数取得 教えてください。global.asa内で環境変数って取得できるのでしょうか? 今までglobal.asaファイル内で直接書いていた文言を、環境変数から取得する、 というプログラム修正をしなければならなくなりました。 まず、VBSファイルを作成して、環境変数を取得することはできました。 その内容でそのままglobal.asaに記述すると、おそらく、環境変数が正しく取得できません。 このおそらくというのは、エラーが表示されないのです。 ただ、取得できていないので、その後の処理でエラーとなります。 環境は、 IIS 6 Windows2003server です。 いろいろ調べているのですが、いい回答が見つからず。 そもそも、global.asa内で環境変数を取得できるのかも分からず。 お願いします。

  • Global.asaxでクラスを宣言?

    お世話になります。 ASP+VB6で開発した場合 Global.asaの冒頭で宣言した <object RUNAT = Server SCOPE = Application id=idName progid="dllName.ClassName" VIEWASTEXT></object> は、 ASP.NET2005ではどう宣言すればよいのでしょうか。 Global.asaxにPublicで宣言してもだめでした。 要は、1度だけ宣言しaspx各ページ全体で共通のクラスを利用したいだけです。 ネット検索および書店にも行きましたがどこにもそのような方法が見つけられませんでした。 本日ASP(.NET)を始めたばかりで、さっぱり判りません。 そもそも使い方が全く間違っているのでしょうか。 それとも、各ページで宣言しなければならなくなったのでしょうか。 よろしくお願いします。