- ベストアンサー
require,includeとAjaxで分岐
お世話になります PHPファイルについて requireやincludeで読み込まれた場合と Ajaxでのアクセスに対する処理を分岐する というのは可能でしょうか? $_SERVER['PHP_SELF']と__FILE__を比較すればいいかな とか思ってますがそれで本当に大丈夫なのか? もしかしてこの二つ、なんか違う形でパス返したりしないか? もうちょっと賢いやり方あるんじゃないか?とちょっと不安です 動機としては『これって一つにまとまってた方が便利じゃね?』 ぐらいのもんなんで、やめといたほうがいいっていうものなら諦めます よろしくお願いします
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
$_SERVER['X-Requested-With'] とか $header = getallheaders(); $header['X-Requested-With'] とかで分岐させるのは? ライブラリによって名称は違うかもしれませんが。
その他の回答 (4)
- yambejp
- ベストアンサー率51% (3827/7415)
ごめんなさい、私の書いたことはわすれてください たぶん質問者さんの質問内容と根本的にズレている気がしています。 お役に立てずすみません。
お礼
いえ、わかりにくい質問につきあっていただき ありがとうございます
- yambejp
- ベストアンサー率51% (3827/7415)
>どうも見えてないです 同意 そもそもなぜajaxとincludeを分けようとしている? 同じものを出力するだけなら分ける必要はないよね? ちがうものを処理するならたとえば・・・ 通常の出力については、出力.phpでライブラリ.phpをincludeして、 出力ルーチンは出力.phpに書く ajaxについてはajax.phpからライブラリ.phpをincludeして 出力処理はajax.phpに書く そうしればライブラリ側でどういう風に呼び出されたなんて 考慮する必要なないでしょ? (とうぜんライブラリはclassなので出力を前提としていない) 質問自体そういうことではないの?
補足
ライブラリは自分自身を使うAjaxのformを吐きます 出力がライブラリを必要とするように ライブラリも出力を必要とします 使用上の注意に『つねに出力と一緒にしてください』 が入るか入らないか、フォルダにいれるのか 一つのファイルで完結するかの境目なので迷ってます
- yambejp
- ベストアンサー率51% (3827/7415)
>それをページ表示にも使いたいしAjaxで >json吐かせるのにも使いたいって言うカンジで ajaxで呼び出すファイルでincludeすればいいだけの話
補足
どうも見えてないです 結局同じ物をincludeするのに Ajaxでそれを直接それにjson吐いてもらうのは なんらか負荷があるってことですか? 多少程度なら便利をとります
- yambejp
- ベストアンサー率51% (3827/7415)
通常includeして使うのはライブラリ ライブラリをajaxで直接読むことはあまり効率的だとはいえない したがって「やめといたほうがいい」が回答になります
補足
回答ありがとうございます 件のPHPファイルには2~3個のclassの定義をしていて、 それをページ表示にも使いたいしAjaxで json吐かせるのにも使いたいって言うカンジで 仮にファイルを分けたとしても Ajax用のファイルにも結局同じファイルを includeなりすることになるので 多分処理としては分岐処理以上の処理が増えることはないと思います
お礼
そんなカンジです、ありがとうございます こっちのやってるのが非表示のiframeにロードして contentsのテキストをjsonに変換とかいう なんちゃってAjaxでなかったらまさにそれでした formからの送信でrequestheaderを操作することって できないですかね…?
補足
結局今回の件については 当初想定してた__FILE__と$_SERVERの情報比較で それ自身が呼び出されてるのかrequireされたりして 別のファイルから呼び出されてるのかを見る形にしました $_SERVER['PHP_SELF']は__FILE__と違って ドキュメントルートを含まずURL変数を含み サーバーが解釈した後のものなので全部小文字になってたりする というのがあったのでそれを踏まえ if((str_ireplace(__FILE__,'',$_SERVER['DOCUMENT_ROOT'].$_SERVER['PHP_SELF'])=="")&&isset($_POST['hoge'])){Ajaxアクセスの処理} みたいなカンジでとりあえず行きました (URL変数が含まれてしまうのは逆に GETでのアクセスを遮断できるので対処してません) しかし今後に有用な情報をいただけました、ありがとうございます