プロが教える店舗&オフィスのセキュリティ対策術

PHP5+Apatch2でプログラムを作成しています。
Apatch,PHP共に初心者です。

-----------------------------------------------------
index.php[1]
|
PHPフォルダ[1]- CLASSフォルダ[2a]- class.php[3a]
|              |
|              phpfile.php[2a]
|
LIBフォルダ[1]- lib.php[2b]
-------------------------------------------
*[]内は同じ番号のものが同じ階層を表すとします。
*apatchのドキュメントルートは[1]の一つ上になっています。


とプログラムを作成して、class.php[3a]の中で
require_once("../phpfile.php[2a]");を
行った場合、
No such file or directoryのエラーが発生します。

かわりにrequire_once("../PHP/phpfile.php[2a]");と
置き換えた場合は動作します。

相対パス"../"は一つ上の階層に上がると理解していたのですが、
二つ上にある階層へと移動しているように思います。
気になったので、lib.php[2b]から<a href="../index.php[1]">aaa</a>
を表示させてみたところ、上手くindex.php[1]へリンクを貼れます。

apatchの設定、PHP5がおかしい、HTMLがおかしい、誤解している等、
初心者なりに予測されるものが多いので手が付かなくなっています。
原因と思われるものがあればどうかご指摘ください。

よろしくお願いします。

A 回答 (2件)

まずは カレントディレクトリを調べては?


<?php
//カレントディレクトリの絶対パスを表示
print getcwd();
?>

試しに 手元の Apache/2.2.3 (Unix) DAV/2 PHP/4.4.7 mod_ssl/2.2.3 OpenSSL/0.9.7l

require_once("../ひとつ上の階層にあるphpファイル");
して問題なく動作しました。

#1さんも匂わせてますけど
例えば、質問者さんの構成でPHPフォルダにあるphpファイルから
class.php[3a]をrequireして
そのclass.php[3a]のなかでrequireする場合は
カレントディレクトリは PHP/CLASS/ではなく
PHP/のままの筈です
http://code.nanigac.com/source/view/303
    • good
    • 0
この回答へのお礼

ありがとうございます。

umasikajiroさんのご丁寧な解説で解決しました。

以前にも同じことで躓いて、その時は解決したのですが、
なぜか今回は混乱したままでした。

getcwd();はこういった相対パスを考える場合に使いやすい関数ですね。
勉強になりました。

お礼日時:2008/05/02 18:57

実際にブラウザから呼び出しているスクリプトの位置は?class.php自体をブラウザからアクセスしているんでしょうか?

    • good
    • 0
この回答へのお礼

申し訳ありません。
設計図等なしで闇雲に制作していたため混乱していました。
require先にあるファイルからではなく、
ブラウザがアクセスしているページからの階層を指定しなければ
ならなかったのですね。

同じことで以前にも躓いて、
その時は解決したはずなのにまた躓いていました。

ありがとうございました。

お礼日時:2008/05/02 18:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!