リモートファイルのrequireに関する疑問

このQ&Aのポイント
  • 再度、リモートファイルのrequireに関して質問させていただきます。
  • phpファイルを読み込む際に、呼び出される側のサーバーで認識されない場合、正常に呼び出せることがあります。
  • しかし、直接アクセスされたときに中身を見られるのが嫌なため、phpファイルを読み込みたいと考えています。
回答を見る
  • ベストアンサー

再度、リモートファイルのrequireに関して

以前、この板で質問させてもらって、解決したと思っていたのですが、実は勘違いで解決にしてしまいました。 ですので、再度質問させてください。 前回の質問&解答は ブラウザのキャッシュに「リモートファイルのrequireに関して」をキワードに検索していただくようお願いします。 ここからが本題ですが、 requireで呼び出すファイルが、呼び出される側のサーバーでphpファイルとして認識されると呼び出せないことです。 phpファイルと認識されないファイル(拡張子がtxtなどのファイル)では正常に呼び出せます。 これは前回解答いただいたとおり、呼び出される側のサーバーがphpファイルとして認識した場合0バイトのファイルが返ってくるのが原因だと思います。 ところが http://www.php.net/manual/ja/function.include.php の 例 11-5. HTTP経由のinclude() では、むしろphpファイルと認識されないとうまく動作しないような書き方がされています。 txtで読みこめるのですが、直接アクセスされたときに中身を見られるのが嫌なため、phpファイルを読みこみたいので改めて質問させてもらいました。 よろしく、ご教授ください。

  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • yatokesa
  • ベストアンサー率40% (201/496)
回答No.1

http://www.php.net/manual/ja/function.include.php > URLで指定されたサーバがファイルをPHPコードとして解釈することが 出来る場合には、HTTP GETを使用してURLリクエストに引数を指定することが 出来ます。これはファイルの読み込み云々やスコープの継承とは関係なく、 ただ単純にスクリプトがリモートのサーバで実行されて結果がローカルの スクリプトに読み込まれる、というだけのことです。 と書かれているとおり、ローカルサーバー上のファイルをinclude/requireする場合と、リモートのファイルのそれとは動作が異なると言うことでしょう。 ローカルファイルは単なる読み込み(置き換え)、httpを経由してファイルをinclude/requireする場合はリモート側で実行すると言うことです。 #HTTP GETでは apacheが応答するわけですから、受け側のapacheがPHPから呼び出されてるのか、それともブラウザから呼び出されているのかを判別できないでしょう。 http://okweb.jp/kotaeru.php3?q=710671 > require ("http://www.****2.com/hoge2.php"); ここで hoge2.phpが www.****2.com のサーバー上で実行されます。このファイルは関数が定義されているだけなので何もしないで終了。 > dispword(); そして、requireではファイルが読み込まれたわけではないので、関数未定義のエラーとなるわけですね。

kazu28
質問者

お礼

yatokesaさん、解答ありがとうございます。 http://www.php.net/manual/ja/function.include.php は何回も見ていたんですが、ご指摘の記述部分はなんとなく読み流していました。 でも、おかげさまで動作しないメカニズムはよく理解できました。 結局私が考えていた方法は難しいというのがわかりましたので、実行結果を取り込む形のコードに書き換えます。 どうもありがとうございました。

関連するQ&A

  • リモートファイルのrequireに関して

    はじめまして、 PHPのマニュアルには 「php.iniでallow_url_fopenを有効にした場合、 パラメータとしてファイル名をとる関数の多くでHTTPおよびFTPのURL を使用することができます。加えて、include(), include_once(), require(), require_once() 命令でURLを使用することができます。」 とあるのですが、requireでリモートファイルを読みこめません PHP のバージョンは 4.1.2 php.iniでallow_url_fopenが有効(On)になっているのは確認しました。 http://www.****1.com/hoge1.php から http://www.****2.com/hoge2.php を呼び出しています。 hoge1.php及びhoge2.phpのソースは以下のとおりです。 ----hoge1.php-------------------------------------------------------- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML lang="ja"> <HEAD> <META http-equiv="content-type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <TITILE></TITILE> </HEAD> <BODY> <?php require ("http://www.****2.com/hoge2.php"); dispword(); ?> </BODY> </HTML> --------------------------------------------------------------------- ----hoge2.php-------------------------------------------------------- <?php function dispword(){ print xyz; } ?> --------------------------------------------------------------------- 実行結果は Fatal error: Call to undefined function: dispword() in ・・略・・****1.php on line 11 となります。 10行目じゃなく11行目にでてるということは、requireできてるんでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 別のドメインのファイルをrequire

    phpで別のドメイン下のファイルをrequireしようとしていますがうまくいきません。 サーバーの環境は【Windows Server 2008 + IIS6.0 + php5.2】で、 php.iniのallow_url_includeはonに設定済みです。 ファイルA http://xxx.com/aaa.php   <html>   <head>   </head>   <body>   <?php   require_once("http://localhost/test.inc");   echo $remember;   ?>   </body>   </html> ファイルB http://yyy.com/bbb.php   <?php   $remember=5577;   ?> 仮にファイルAに「require_once("http://yyy.com/bbb.php");」と書いて実行すると、空白のページが出力され、ページのソースは   <html>   <head>   </head>   <body> となっていました。 phpコードを実行するところで処理が中断されたようです。 空白ページのタイトルは「500-内部サーバーエラー」です。 同じサーバーの違うドメインで試しても、物理的に別のサーバーで試しても結果は同じでした。 ネットで調べた限りでは結構みんなすんなりとできたみたいなので、なおさら不思議で仕方がないです。 何が考えられるか、教えていただければと思います。

    • ベストアンサー
    • PHP
  • 他のサーバにあるphpをrequireしたい

    他のサーバにある変数を引っ張ってくる方法が分からず困っております。 (php.iniのallow_url_includeをonにすれば実行出来たのですが、  offのままで同じ結果になる方法をお教え頂きたく思います。) allow_url_includeをonにした場合には出来た方法↓ 【Aサーバ】にある「a.txt」(a.phpにすると実行出来ませんでした……) <?php $hogeA = 'テキストA'; ?> 【Bサーバ】にある「b.html」 <?php require_once ('http://www.A/a.txt'); echo $hogeA ; ?> b.htmlに「テキストA」を表させたいと考えています。 allow_url_includeを変更せずに出来る代替方法をお教え下さい。 a.phpだと実行出来なかった理由も分からないため、 よろしければこちらもお教え下さい。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • require Auth.php

    require 'Auth/Auth.php'; の動作について教えてください。 サンプルソース a.php に、 「require 'Auth/Auth.php';」と冒頭に記述してありました。 PEARだと思うのですが、結局この記述は、 a.phpに、 (1)Auth.phpの内容を取り込む? (2)Auth.phpの内容を継承する? どちらの解釈の方が正しいのでしょうか? 今までrequire だと、指定したphpの内容を取り込む((1)番だと)だと認識していました。 以下ソースのように動作してると思っています。Auth.phpも同じ動作と思っていいものなのでしょうか。 ・test.php <?php echo "start!!\n"; include("include.php"); echo "end!!\n"; ?> ・include.php <?php echo "include start!!\n" ?> ●実行結果 start!! include start!! end!!

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

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

    • ベストアンサー
    • PHP
  • requireとincludeどっちを使えばいいのでしょう?

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

    • ベストアンサー
    • PHP
  • PHPでhttp上の外部ファイルをrequireしたい

    PHPでhttp上の外部ファイルをrequireしたいのですが、変数がうまく 参照できません。例えば以下のようにすると、common1.phpの中で $a=$a+1 と書いても、11と出力されずに10と出力されます。 (require自体はうまく行っているようで、common1.phpの中で print等を書くとそれ自体は問題なく実行されます。) require("./common1.php")のようにファイル指定だと問題なく11と 出力されます。原因・解決方法等ご存じのかたがいらっしゃったら 教えてください。FedoraCore4 PHP5.0.4です。 <?php $a = 10; require("http://hogehoge/common1.php"); print "$a"; ?>

    • 締切済み
    • PHP
  • require_onceでファイルが開けない!?

    requre_onceでのファイルの読み込みが上手くいかないらしく、次のようなエラー文が出てしまい困っております。 =========エラー文=================== Warning: require_once() [function.require-once]: URL file-access is disabled in the server configuration in C:\xampp\htdocs\wakuphp\girlup_result_kanryou.php on line 6 Warning: require_once(http://waku2work.com/mysql2.php) [function.require-once]: failed to open stream: no suitable wrapper could be found in C:\xampp\htdocs\wakuphp\girlup_result_kanryou.php on line 6 Fatal error: require_once() [function.require]: Failed opening required 'http://waku2work.com/mysql2.php' (include_path='.;C:\xampp\php\pear\') in C:\xampp\htdocs\wakuphp\girlup_result_kanryou.php on line 6 ================================ 問題の6行目のソースコードは以下の通りです。 ======ソースコード6行目================= require_once("http://waku2work.com/mysql2.php"); ================================ この場合、”require_once”が読み込めて無いって事ですよね!? 一応初心者なのですが、気になるのは3つ目のエラー表示で、ローカルのパス表示が出てる点です。 設定がうまくいってないのでしょうか? 有識者の方いらっしゃいましたら、どうか宜しくお願いします!

    • ベストアンサー
    • PHP
  • require_once()でファイルが読み込めません

    すいません、色々やったみたのですがよく分からなかったので教えてください。 PHPのテンプレートのSmartyを使いたいと思い、公式サイトからダウンロードして/usr/local/lib/php/Smartyにコピーしました。 その後、php.iniのinclude_pathにて".:/usr/local/lib/php/Smarty"と設定し、require_once("Smarty.class.php");としたのですが、 failed to open stream: No such file or directoryや Failed opening required 'Smarty.class.php' というエラーが出て読み込めません。また、phpinfo()を見る限りではphp.iniはきちんと読みにいっているようでした。 ためしに/usr/にSmartyを置き、include_pathもそのように変更してみたのですが読み込めません。カレントディレクトリに配置した場合は上手く読み込めました。また、Smartyでなくてもどのファイルでも読み込めない状況です。 環境はFedora6、Apache2.0、PHP5です。何かアドバイスよろしくお願いします。

    • ベストアンサー
    • PHP
  • require,includeとAjaxで分岐

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

    • ベストアンサー
    • PHP

専門家に質問してみよう