• ベストアンサー

require,includeとAjaxで分岐

お世話になります PHPファイルについて requireやincludeで読み込まれた場合と Ajaxでのアクセスに対する処理を分岐する というのは可能でしょうか? $_SERVER['PHP_SELF']と__FILE__を比較すればいいかな とか思ってますがそれで本当に大丈夫なのか? もしかしてこの二つ、なんか違う形でパス返したりしないか? もうちょっと賢いやり方あるんじゃないか?とちょっと不安です 動機としては『これって一つにまとまってた方が便利じゃね?』 ぐらいのもんなんで、やめといたほうがいいっていうものなら諦めます よろしくお願いします

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

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

  • ベストアンサー
  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.5

$_SERVER['X-Requested-With'] とか $header = getallheaders(); $header['X-Requested-With'] とかで分岐させるのは? ライブラリによって名称は違うかもしれませんが。

H240S18B73
質問者

お礼

そんなカンジです、ありがとうございます こっちのやってるのが非表示のiframeにロードして contentsのテキストをjsonに変換とかいう なんちゃってAjaxでなかったらまさにそれでした formからの送信でrequestheaderを操作することって できないですかね…?

H240S18B73
質問者

補足

結局今回の件については 当初想定してた__FILE__と$_SERVERの情報比較で それ自身が呼び出されてるのかrequireされたりして 別のファイルから呼び出されてるのかを見る形にしました $_SERVER['PHP_SELF']は__FILE__と違って ドキュメントルートを含まずURL変数を含み サーバーが解釈した後のものなので全部小文字になってたりする というのがあったのでそれを踏まえ if((str_ireplace(__FILE__,'',$_SERVER['DOCUMENT_ROOT'].$_SERVER['PHP_SELF'])=="")&&isset($_POST['hoge'])){Ajaxアクセスの処理} みたいなカンジでとりあえず行きました (URL変数が含まれてしまうのは逆に GETでのアクセスを遮断できるので対処してません) しかし今後に有用な情報をいただけました、ありがとうございます

その他の回答 (4)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

ごめんなさい、私の書いたことはわすれてください たぶん質問者さんの質問内容と根本的にズレている気がしています。 お役に立てずすみません。

H240S18B73
質問者

お礼

いえ、わかりにくい質問につきあっていただき ありがとうございます

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

>どうも見えてないです 同意 そもそもなぜajaxとincludeを分けようとしている? 同じものを出力するだけなら分ける必要はないよね? ちがうものを処理するならたとえば・・・ 通常の出力については、出力.phpでライブラリ.phpをincludeして、 出力ルーチンは出力.phpに書く ajaxについてはajax.phpからライブラリ.phpをincludeして 出力処理はajax.phpに書く そうしればライブラリ側でどういう風に呼び出されたなんて 考慮する必要なないでしょ? (とうぜんライブラリはclassなので出力を前提としていない) 質問自体そういうことではないの?

H240S18B73
質問者

補足

ライブラリは自分自身を使うAjaxのformを吐きます 出力がライブラリを必要とするように ライブラリも出力を必要とします 使用上の注意に『つねに出力と一緒にしてください』 が入るか入らないか、フォルダにいれるのか 一つのファイルで完結するかの境目なので迷ってます

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>それをページ表示にも使いたいしAjaxで >json吐かせるのにも使いたいって言うカンジで ajaxで呼び出すファイルでincludeすればいいだけの話

H240S18B73
質問者

補足

どうも見えてないです 結局同じ物をincludeするのに Ajaxでそれを直接それにjson吐いてもらうのは なんらか負荷があるってことですか? 多少程度なら便利をとります

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

通常includeして使うのはライブラリ ライブラリをajaxで直接読むことはあまり効率的だとはいえない したがって「やめといたほうがいい」が回答になります

H240S18B73
質問者

補足

回答ありがとうございます 件のPHPファイルには2~3個のclassの定義をしていて、 それをページ表示にも使いたいしAjaxで json吐かせるのにも使いたいって言うカンジで 仮にファイルを分けたとしても Ajax用のファイルにも結局同じファイルを includeなりすることになるので 多分処理としては分岐処理以上の処理が増えることはないと思います

関連するQ&A

  • requireとincludeどっちを使えばいいのでしょう?

    題名にもある通り、便利な関数やdefineで定義した定数などを別ファイルにしてそれをインクルードしたいとき、一般的にはincludeとrequireどちらを使えばよいのでしょうか? また、includeのほうが軽くなるということはあるのでしょうか? マニュアルではincludeは呼び出したときに何度でも呼び出される旨 http://www.php.net/manual/ja/function.include.php かいてありますが、実践でどのようにつかえばよいかわかりません。 どなたか、ヒントでもかまいませんのでおしえていただけないでしょうか? 皆様は、どちらをどのようにお使いになってらっしゃいますか? よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • (require / require_once) (include / include_once)について

    毎度、お世話になります。 今回は、requireとrequire_once(includeとinclude_once)の使い分けについて 教えて下さい。 取りあえず、改造しているPHPでは、include()だけを使って正常に動作しています。 include()させている箇所がいくつもあります。 ただ、やっぱりわからないのは、 requireとrequire_once(includeとinclude_once)に関して、 PHPマニュアルなどを見ても、処理方法の違いだけで、それならば最初から全部、 require_once() 又は、include_once() だけの方が良いように思えるのですが、 例えば、この処理に関しては、絶対、include()。これならば、require()。 また、これなら、include_once()、あるいは、require_onceと言う風に、 明確なものはあるのでしょうか? かなり迷路に迷い込んでます。(時間が止まってます) どうかよろしくお願いします。

    • 締切済み
    • PHP
  • include,requireで外部URLの呼び込み

    include,requireのどちらでもいいのですが、別ドメイン或いは同ドメイン内における違う階層のファイルなど(例えば外部のhttp://www.ooxx.sample)を呼び込む際に、呼び込み先のリンクや画像パスが相対バスではうまくいきません。呼び込み先のリンク、画像パスを絶対URLにすれば問題ないと思いますが、作業が困難になるので避けたいです。 PHPでinclude,requireの使い方は向かないのでしょうか?或いは、他の方法で回避できる方法はないのでしょうか? (SSIやHTMLでインラインフレームみたいなことは使わない)

    • 締切済み
    • PHP
  • include時の頭の良いパス指定について

    include時の頭の良いパス指定について 長い上に少々わかりにくい話ですが、includeする場合のパスについてです。 現在の構成は次のとおりです。 / ├inc/ │ ├file_a.class.php │ ├file_b.class.php │ ├file_c.class.php │ │ │ └require/ │   └require.php ├dir/ │└index.php │ └index.php 【/index.phpの中身】 <?php  require_once "./inc/require/require.php";  //その後いろいろ処理 ?> 【/inc/require/require.phpの中身】 <?php  require_once "./inc/file_a.class.php";  require_once "./inc/file_b.class.php";  require_once "./inc/file_c.class.php"; ?> 今回後付で、「/dir/index.php」を設置しました。 「/index.php」とほぼ処理は共通なので、「/dir/index.php」を次のように書いています。 【/index.phpの中身】 <?php  require_once "../index.php"; ?> しかし、この場合「/dir」以下からは、incまでの階層が異なるため、includeしても、 各クラスのファイルを読み込むことができず、 No such file or directory in require.php on line 2 のエラーが表示されてしまいます。 こういう場合、どういうパス指定をするのがいいのでしょうか。

    • ベストアンサー
    • PHP
  • requireでの絶対パス

    いつもお世話になっております。 requireを使ってファイルをインクルードしているのですが、その際は相対パスで記述しています。 <?php require("../template/test.php"); ?> これを絶対パスでうまく記述する方法はあるのでしょうか? 通常、絶対パスで書いてしまうと、iniファイルで定めた絶対パスの指定フォルダが対象になってしまうため、サーバー上での絶対パスにしたいのですが…。 方法がありましたらご教授よろしくお願いします。

    • ベストアンサー
    • PHP
  • include_pathについて

    php.ini内のinclude_pathをinclude_path=".;C:\php\include"と設定してC:\windows\(不安なのでC:\php\にも)に置いているのですが、 なぜかphpinfo()を開いて確認すると".;C:\php5\pear"となっています。 Loaded Configuration File を見ても C:\Windows\php.ini となっていますし。 require_once "DB.php"を実行したときに以下のエラーが出たので、 db.phpのインストールも済んでいることから、include_pathが正しく設定されていないのが問題だと思うのですが・・・ Warning: require_once(DB.php) [function.require-once]: failed to open stream: No such file or directory in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\users.php on line 2 Fatal error: require_once() [function.require]: Failed opening required 'DB.php' (include_path='.;C:\php5\pear') in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\users.php on line 2 php.ini以外にも設定しなければいけない個所があるのでしょうか?

    • 締切済み
    • PHP
  • PHP PEARパッケージのincludeができない。

    PHP PEARパッケージのincludeができない。 お世話になっております。 phpのPEARパッケージのincludeができません。 行うと PHP Warning: require_once(File/CSV.php): failed to open stream: そのようなファイルやディ レクトリはありません in /var/www/httpdocs/XXXXXXXX.php on line 10 PHP Fatal error: require_once(): Failed opening required 'File/CSV.php' (include_path='.:/usr/share/pear') in /var/www/httpdocs/XXXXXXXX.php on line 10 となってしまいます。 エラーメッセージ中の/usr/share/pear上に確かに存在します。 何か他に条件などあるのでしょうか? お願いいたします。

    • ベストアンサー
    • PHP
  • include_onceについて

    php初心者です。 includeやrequireにはinclude_onceやrequire_onceといった "すでに読み込んでいる場合"は無視するというものがありますが、 この"すでに読み込んでいる場合"とはどういう時なのでしょうか? サーバーにキャッシュでもされていて、そのキャッシュがあればそれを利用するという感じなのですか? どういう条件でinclude_onceやrequire_onceが実行されるのか教えてください。 また、どういう時に使い分けるのが賢いやり方なのでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • include_pathについて。

    PHP 5.2以上のバージョンの話として質問をさせて頂きます。 (ローカルではWindows版XAMPPを使用。リモートはLinuxサーバー。) ----- <ファイルの位置関係> imgディレクトリ --- C.jpg (画像ファイル) mainディレクトリ --- A.php sub ディレクトリ --- funcディレクトリ --- B.php (img、main、subディレクトリは3つとも同階層) //------- (A.phpの記述) require_once '../sub/func/B.php'; //------- (B.phpの記述) echo '<img src="C.jpgのパス">'; // ←■画像Cを表示したい■ //★どう表示されるかテスト★ echo dirname(__FILE__) ;   //----- このような状況で、 A.phpにアクセスすると、★テスト★の所は、 ~/sub/func   //←のように表示される。 // つまりこれは、__FILE__ は、 // A.phpではなく、B.phpを指している。(?) と、このような時、B.phpの中で、 C画像の相対パスは、どう書いたらよろしいのでしょうか? A.phpから見た、C画像の相対パスで書いたらいい? それとも、B.phpから見たソレでしょうか? phpinfo()でinclude_pathの項目を調べると、 .:/usr/local/lib/php/~ のように書かれています。(デフォルトのままです。)

    • ベストアンサー
    • PHP
  • it.phpをインクルード

    テンプレートhtmlとデータの結合をさせようと、 php.iniを書き換えて、include_pathの設定をしたのですが、 require_onceでit.phpのインクルードがうまくいきません。。 理由はなにが考えられるでしょうか? どなたか御教授おねがいいたします。 環境は、 PHP Version 4.1.2 Apache/1.3.23 です。

    • ベストアンサー
    • PHP