こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

require,includeとAjaxで分岐

お世話になります

PHPファイルについて
requireやincludeで読み込まれた場合と
Ajaxでのアクセスに対する処理を分岐する
というのは可能でしょうか?

$_SERVER['PHP_SELF']と__FILE__を比較すればいいかな
とか思ってますがそれで本当に大丈夫なのか?
もしかしてこの二つ、なんか違う形でパス返したりしないか?
もうちょっと賢いやり方あるんじゃないか?とちょっと不安です

動機としては『これって一つにまとまってた方が便利じゃね?』
ぐらいのもんなんで、やめといたほうがいいっていうものなら諦めます

よろしくお願いします

投稿日時 - 2012-07-01 22:33:55

QNo.7566607

暇なときに回答ください

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

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

投稿日時 - 2012-07-03 19:58:29

補足

結局今回の件については
当初想定してた__FILE__と$_SERVERの情報比較で
それ自身が呼び出されてるのかrequireされたりして
別のファイルから呼び出されてるのかを見る形にしました

$_SERVER['PHP_SELF']は__FILE__と違って
ドキュメントルートを含まずURL変数を含み
サーバーが解釈した後のものなので全部小文字になってたりする
というのがあったのでそれを踏まえ
if((str_ireplace(__FILE__,'',$_SERVER['DOCUMENT_ROOT'].$_SERVER['PHP_SELF'])=="")&&isset($_POST['hoge'])){Ajaxアクセスの処理}
みたいなカンジでとりあえず行きました
(URL変数が含まれてしまうのは逆に
GETでのアクセスを遮断できるので対処してません)

しかし今後に有用な情報をいただけました、ありがとうございます

投稿日時 - 2012-07-07 04:03:35

お礼

そんなカンジです、ありがとうございます

こっちのやってるのが非表示のiframeにロードして
contentsのテキストをjsonに変換とかいう
なんちゃってAjaxでなかったらまさにそれでした

formからの送信でrequestheaderを操作することって
できないですかね…?

投稿日時 - 2012-07-03 22:21:02

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.4

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

投稿日時 - 2012-07-02 23:30:38

お礼

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

投稿日時 - 2012-07-03 22:21:36

ANo.3

>どうも見えてないです

同意

そもそもなぜajaxとincludeを分けようとしている?
同じものを出力するだけなら分ける必要はないよね?

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

質問自体そういうことではないの?

投稿日時 - 2012-07-02 13:38:17

補足

ライブラリは自分自身を使うAjaxのformを吐きます

出力がライブラリを必要とするように
ライブラリも出力を必要とします

使用上の注意に『つねに出力と一緒にしてください』
が入るか入らないか、フォルダにいれるのか
一つのファイルで完結するかの境目なので迷ってます

投稿日時 - 2012-07-02 14:58:18

ANo.2

>それをページ表示にも使いたいしAjaxで
>json吐かせるのにも使いたいって言うカンジで

ajaxで呼び出すファイルでincludeすればいいだけの話

投稿日時 - 2012-07-02 09:17:00

補足

どうも見えてないです

結局同じ物をincludeするのに
Ajaxでそれを直接それにjson吐いてもらうのは
なんらか負荷があるってことですか?

多少程度なら便利をとります

投稿日時 - 2012-07-02 13:19:51

ANo.1

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

投稿日時 - 2012-07-02 00:03:15

補足

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

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

投稿日時 - 2012-07-02 06:38:17

あなたにオススメの質問