require_onceの解釈について

このQ&Aのポイント
  • PHP初心者のためのrequire_onceの解釈について
  • require_once関数の引数の解釈と、ローカルwindows環境での意味について
  • xamppでのPHP開発環境におけるrequire_onceの使い方と解釈
回答を見る
  • ベストアンサー

require_onceの解釈について

大変恐縮ですが、PHP初心者で、どうしても理解できないので、教えていただけないでしょうか。 【質問】 require_once($_SERVER["DOCUMENT_ROOT"]. "/../libs/MySmarty.class.php")  の解釈について xamppでローカルwindows環境の場合で、 $_SERVER["DOCUMENT_ROOT"]. は c:\xampp\htdocs のことでしょうか。 そして、$_SERVER["DOCUMENT_ROOT"]. "/../libs/MySmarty.class.php" は c:\xampp\htdocs/../libs/MySmarty.class.php ???と私は考えてしまうのですが、 正しくは、どのような考え方になるのでしょうか。 大変お手数をお掛けしますが、よろしくお願い致します。

  • uff-n
  • お礼率54% (47/87)
  • PHP
  • 回答数1
  • ありがとう数2

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

  • ベストアンサー
  • twin_shu
  • ベストアンサー率100% (10/10)
回答No.1

初期設定のままならば、DOCUMENT_ROOTは「c:\xampp\htdocs」です。 で、「$_SERVER["DOCUMENT_ROOT"]. "/../libs/MySmarty.class.php"」は、 「c:\xampp\htdocs/../libs/MySmarty.class.php」 ではなく 「c:/xampp/htdocs/../libs/MySmarty.class.php」 になります。 違いは「\」ではなく「/」になってること。 ここからは補足ですが、「DOCUMENT_ROOT」などのPHPの設定を見たい場合は、ソース内に phpinfo(); を記述すれば、PHPの設定が画面に表示されるので、そこでチェックするといいでしょう。 また、上のくっつける処理について、考えるよりもまずは画面に表示して確認してみることをお勧めします。 上の処理を例にすると、 echo $_SERVER["DOCUMENT_ROOT"]. "/../libs/MySmarty.class.php"."\n"; と記述すると、上の質問の答えが画面に表示されます。 記述の仕方については、考えるよりもまず実践あるのみです(^-^)

uff-n
質問者

お礼

twin_shu様 非常にご丁寧にご説明してくださり、 誠にありがとうございます!! 感謝申し上げます。 ありがとうございました!(^-^)

関連するQ&A

  • 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
  • smartyのdifineについて

    表示するファイルにdefineにてパスを設定すると正常に 表示されるのですが管理が面倒なので別のファイルに defineにてパスを設定するとエラーになってしまいます。 具体的には以下のソースです。 ---Smarty/libs/path.php--- define ('SMARTY_LIBS_DIR', 'C:/Program Files/xampp/htdocs/Smarty/libs/'); ---Smarty/libs/MySmarty.class.php--- require_once dirname(__FILE__) . '/Smarty.class.php'; require_once dirname(__FILE__) . '/path.php'; ---Smarty/index.php--- require_once SMARTY_LIBS_DIR . 'MySmarty.class.php'; 調べてみたのですが表示するファイルに指定する方法しか みつからなかったのですが別ファイルから指定する事は 無理なのでしょうか?

    • 締切済み
    • PHP
  • require_onceについて

    いつもお世話になっております。 超初級な質問で申し訳ないのですが困ってます。 下記のような4つのclassがあります。 A_Class------------ <?php require_once('Base_Class'); class A_Class extends Base_Class{} Base_Class------------------ <?php require_once('B_Class'); abstract class Base_Class { public function hoge (){ $b = new B_Class(); $b->hoge(); } } B_Class--------------------- <?php require_once('C_Class'); class B_Class{ public function hoge (){ $c = new C_Class(); } } C_Class--------------------- <?php require_once('Base_Class'); class C_Class extends Base_Class{} ほかのファイルからrequire_once('A_Class');をすると PHP Fatal error: Class 'Base_Class' not found in C_Class.class.php on line 2 となります。 Base_Classのrequire_once('B_Class');をクラス定義の下に書けば通るのですが、 できればrequire_onceは上部にそろえておきたいです。 require_onceを下に書かずに修正する方法がありましたらご教授お願いします。

    • 締切済み
    • PHP
  • smartyの設定 include?path以下の設定がわからない

    独学でPHPを学んでいます。 PHPの基本はひととおり理解はできました。 開発環境・最新のXAMPP導入。 windows、OSはVISTA smartyをインストールしましたが、その設定につまずいています。 Smarty.class.phpが存在するパス(D:\xampp\libs)をphp.iniファイル447行目を下記のように設定しましたが、うまくいきません include_path=D:\xampp\libs\ xamppフォルダの下にlibsフォルダを入れたので上のパス指定で問題ないと思うのですが、どこが間違っているのでしょうか。 ちなみに、libs以下の\も不要だろうと思い、消したりして試してみましたが、結果は同じ。下記のように表示がなされます。 Warning: require_once(local/xampp/libs/Smarty.class.php) [function.require-once]: failed to open stream: No such file or directory in D:\xampp\htdocs\lesson\smarty1.php on line 3 Fatal error: require_once() [function.require]: Failed opening required 'local/xampp/libs/Smarty.class.php' (include_path='.;D:\xampp\php\pear\') in D:\xampp\htdocs\lesson\smarty1.php on line 3 上の文章ですが、3行目後半”Smarty.class.php' (include_path='.;D:\xampp\php\pear\')”の部分ですが、php.iniからinclude_pathを変更したりしているのですが、一向に表示が変わりません。 もしかしたらphp.iniファイルは二つあったりするのでしょうか。 php.iniのファイルはPHPフォルダに入っているものでよろしいですよね? もちろんアパッチは再起動させています。 なのにできません・ あと、ロジックファイルの require _once()の()内はSmarty.class.phpだけでもよろしいのでしょうか。 もう悩みすぎて頭がおかしくなりそうですね。 ちなみにsmartyがなくても、アプリケーション開発に支障はありませんでしょうか。 あくまで個人で趣味の範囲でアプリケーションを作成したいと感じています。

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

    MAMPを使用して開発しています。 MAMP/htdocsに入っているa.phpから同一階層にあるb.phpを呼びだそうと思い require_once('b.php'); と記述したのですが Warning: require_once(b.php): failed to open stream: No such file or directory in - on line 13 Fatal error: require_once(): Failed opening required 'b.php' (include_path='.:') in - on line 13 とエラーが表示されます。色々と試してみたもののうまくいかず。 アドバイスを宜しくお願い致します。

    • ベストアンサー
    • PHP
  • define でのルートディレクトリの定義について・・・。パスが納得できません。

    宜しくお願いします。 Smarty を使用して PHPを勉強しています。 Smartyのデフォルトを変更しようと、 「MySmarty」として新規にクラスを作成しました。 ソースの先頭で、 define("ROOT_DIR",$_SERVER['DOCUMENT_ROOT']."/.."); として、ROOT_DIRにルートディレクトリまでのパスを記憶させています。 全ソースは下記をごらんくらさい。 そこで、  define("ROOT_DIR",$_SERVER['DOCUMENT_ROOT']."/.."); にある、最後の ."/.."); が納得いきません。。。 最初の . ピリオドは連結のためのものだとわかりますが、 あとの/.. はディレクトリの階層をあげる指示ですよね? てなると、クラスの定義のなかで使用するルートディレクトリへのパス が、 おかしく思えてきます。書籍の通りにやっているので、 この通りにやるとうまくいっていますが、自分的になっとくがいかなく・・。 ソースは下記のようになってます。 特に $this->template_dir  のテンプレートディレクトリへのパスを 再設定しているところですが、 ROOT_DIR."/templates" ということは、ルート/../templates  となりますよね? 作業フォルダの図はこの通りです。↓ C:\xampp   |   libs     |-MySmarty.class.php (下記のソースファイル)   |   |   templates       |-input.tpl   |  templates_c <省略> なんとなくですが、ルート/../templates  ではなくて、 ルート/templates なようなきがします。 わかりにくい説明だったかもしてませんが、何卒宜しくお願いいたします。 ______________________________ define("ROOT_DIR",$_SERVER['DOCUMENT_ROOT']."/.."); require_once("Smarty.class.php"); class MySmarty extends Smarty { function MySmarty (){ $this->template_dir = ROOT_DIR."/templates"; $this->compile_dir = ROOT_DIR."/templates_c"; $this->left_delimiter = "{{"; $this->right_delimiter = "}}"; $this->default_modifiers = array('escape'); $this->Smarty(); } } ____________________________

    • 締切済み
    • PHP
  • $_SERVER["HTTP_HOST"]と、$_SEVER["DOCUMENT_ROOT"]の違いは?

    PHP初心者で勉強中です。 書籍にて勉強をすすめていますが、 そもそも・・・と思い質問させていただきます。 $_SERVER["HTTP_HOST"]と,$SERVER["DOCUMENT_ROOT"]の違いは? といいますか、 どういった場合にどう使いわけてらいいのでしょうか? HTTP_HOSTのほうは、その使用例として 例えば $url = "http://" . $_SERVER["HTTP_HOST"] . dirname($_SERVER["SCRIPT_NAME"]) . "/******.php"; といった場合につうかうそうですが、 DOCUMENT_ROOTの方は、以下のようなSmartyのテンプレート格納ディレクトリの変更の際に使うようです。(書籍の一部を抜粋しました。) define("ROOT_DIR",$_SERVER['DOCUMENT_ROOT']."/.."); require_once("Smarty.class.php"); class MySmarty extends Smarty { function MySmarty (){ $this->template_dir = ROOT_DIR."/templates"; $this->compile_dir = ROOT_DIR."/templates_c";          ・          ・          ・ とても基本的な質問になっていると思いますが、 二つの違いだけでもご教授くださいませ。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • requireの評価順について

    下記のような現象になって不思議に思っています。 class2をインスタンス化する際に親のclass1が無いというエラー内容だと思うのですが、class2.phpの冒頭でrequireしています。 requireを記述した位置で評価されていないのでしょうか。 ちなみにclass2.phpを変更して、class2の定義より後でclass2をインスタンス化すると正常に動作します。 これらはどういった理屈なのでしょう・・・ 環境:Linux+Apache2+PHP 4.3.10 ファイル:class1.php <?php class class1 {} ?> ファイル:class2.php <?php require_once('class1.php'); $obj=new class2(); class class2 extends class1 {} ?> class2.phpを実行: Fatal error: Cannot instantiate non-existent class: class2 in /usr/local/apache2/htdocs/class2.php on line 3

    • ベストアンサー
    • PHP
  • require_onceで意図したエラーがでない

    初心者です。教えていただけますか? さくらのレンタルサーバで http://www.sakura.ne.jp/ 存在しないphpファイルをrequire_onceで読み込んだのですがエラーが出ません。 他の無料レンタルサーバーで全く同じファイルをブラウザで開いたら意図した通りにエラーが出ました。 抑制されているのでしょうか? エラーが出る様にするにはどうすれば、良いですか? <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>無題ドキュメント</title> </head> <body> <?php require_once("xxxxx.php"); ?> </body> </html>

    • ベストアンサー
    • 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