PHPでの階層構造

このQ&Aのポイント
  • PHP初心者のための階層構造の基本的な設定方法について解説します
  • 階層構造によるファイルの配置方法やアクセス制限の方法を説明します
  • PHPファイルへの直接アクセスを制限する方法について紹介します
回答を見る
  • ベストアンサー

PHPでの階層構造

PHP初心者です。 現在、winxp pro sp2でapache2.0.54とPHP4でサイトを作っているのですが、PHPファイルの基本的な階層構造(ファイルの置き方)やこうした方が良いという方法はありませんでしょうか? 例) htdocs(DocumentRoot) ┣proc ┃┗regist_check.php(登録内容の入力チェック用) ┣index.php ┣top.php ┣regist.php ┗.htaccess 今現在、上のような階層になっています。 「http://自分のURL/proc/」 このようにアクセスされる分にはapache側でアクセス出来ないようになっていますが、 「http://自分のURL/proc/regist_check.php」 このようにチェック用のPHP等に直接アクセスされると非常に困るのですが、こういったことを回避するにはどういう方法がよろしいでしょうか? よろしくお願い致します。

  • PHP
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
  • MicroK2O
  • ベストアンサー率53% (33/62)
回答No.2

実際今試してみました。 実験環境は以下の通りです。 Fedoracore3 Linux apache2.0.52 PHPのバージョンは同じく4だったと思います。 階層は以下の通り /(ルート) ├home(ユーザー用全体ディレクトリ)   ├user(ユーザーのホームディレクトリ)   │ ├public.html(webで見られるドキュメントルート)   │ │ └test.php(呼び出し側スクリプト)   │ └vars1.php(呼び出されるデータ1)   └vars2.php(呼び出されるデータ2) (分かりにくくて申し訳ありません。) 結果から言うと私の環境下では所有者をルートでもユーザーでも homeディレクトリ直下までは呼び出しが出来ます。 ただしドキュメントルートより上に置くことは セキュリティの関係からもあまり賢明ではないと思われます。 もし呼び出したいPHPスクリプトがあるなら ドキュメントルート直下に何かディレクトリを作って(./include/等) まとめておけば良いのではないでしょうか? また、管理者がユーザー制限を厳密にやっていれば 呼び出すことも出来ないかと思われます。 いずれにしろ、stupid_honeyさんの環境が分かりませんので 断言はできませんが可能ではあるということで宜しいでしょうか。

stupid_honey
質問者

お礼

お返事が遅くなりまして申し訳ありません。 色々と試したのですが、includeするものに関してはドキュメントルートより上の階層にphpスクリプトを設置しても呼び出せました。よってブラウザから直にアクセスすることは不可能になりました。 とりあえずの手段としては、スクリプトを呼び出す側で値をPOSTする際にhidden等に持たせて、呼び出される側でどこから呼ばれたのかを判断するようにしました。

その他の回答 (1)

  • MicroK2O
  • ベストアンサー率53% (33/62)
回答No.1

.htaccessで任意ディレクトリに直接パスワードなりIP制限なりかけるのも手ですが 折角PHPを使うのでしたらスクリプトにその機能を含ませたらどうでしょう。

参考URL:
http://www.shtml.jp/htaccess/
stupid_honey
質問者

お礼

早速のご回答ありがとうございました。 とりあえずの対策として、.htaccessでアクセスされたくないディレクトリは認証制限を設けました。 あと、PHPファイル自体をドキュメントルートより上の階層に置いてrequire等で呼び出すことはできるのでしょうか?

関連するQ&A

  • php include がどうしてもできません;;

    php include がどうしてもできません;;; php、超がつく程初心者です; Windows7、Internet explorer9、Apache2.2、PHP5.4.6、現在はlocalhost上でphp動作確認、 作業しております。 サイトのメニューをPHPで作成したいと思い色々必死に調べ、htdocsフォルダ直下同士?のphpは何とか表示させることができました。(localhostですが) しかしhtdocsより下のフォルダに入っているものですと、例え同階層でも表示がされません; ↓のような感じで完全に詰まってしまいました; htdocs/index.html に htdocs/topmenu.php を表示させる↓ htdocs/index.html内で <?php include(dirname(__FILE__).'/topmenu.php'); ?> → 成功 htdocs/naiyou/naiyou1.html に htdocs/naiyou/menu.php を表示させる↓ htdocs/naiyou1.html 内で <?php include(dirname(__FILE__).'/menu.php'); ?> → 失敗 htdocs/naiyou/naiyou1.html に htdocs/topmenu.php を表示させる↓ htdocs/naiyou1.html 内で <?php include(dirname(__FILE__).'/../topmenu.php'); ?> → やっぱり失敗 htdocsフォルダ直下のみでしかできない設定に私がしてしまっているのでしょうか。 元々直下のみしか表示できないもの…? それとももっと基本的なところでひかかっているのかな… 何かのパスが間違っているのでしょうか。 htdocsフォルダの場所とDocumentRootは共に "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs" となっています; 知識不足もあり言葉が足りないこと、説明がよく分からないことも多いこともあるかと…すみません。 既出の質問等も探しているのですが同条件を中々見つけられず、もうかれこれ1ヶ月近く解決せず悩んでいます。 申し訳ありませんが、どなたかご教授ください...;

    • ベストアンサー
    • PHP
  • Apacheのバーチャルホストで設定したドメインで上の階層にアクセスできてしまいます

    Apacheのバーチャルドメインにてmydomain.jpを/www/mydomainに割り振ったのですが 試しに上の階層にファイルを置いてphpでアクセスしてみたのですが、アクセスできてしまいました。。。 これはセキュリティ上よろしくないと思うのですが、指定フォルダ以上にアクセスできないように設定するにはどうすればいいのでしょうか(アクセス出来ないようにしたいです)。 あまりサーバーに詳しくないので設定方法のキーワードなどヒントだけでもご教授いただければと存じます。 httpd.confの設定--- NameVirtualHost *:80 <VirtualHost *:80> ServerName www.mydomain.jp ServerAlias mydomain.jp *.mydomain.jp DocumentRoot /www/mydomain </VirtualHost> phpの記述例--- include_once("../test.php");//上の階層のファイルにアクセスできてしまう

  • PHPファイルをドリームウイーバーが・・・

    初めまして。 アパッチとPHP5をインストールしています。 アパッチのhtdocsにPHPファイルを入れて、ブラウザで 確かめようとしてhttp://localhost/sample1.php と入力するとドリームウイーバーが立ち上がってしまうんですが、 回避する方法はありますでしょうか?

    • 締切済み
    • PHP
  • a.htmlへのアクセスをa.phpで処理するには

    詳しい方がいらっしゃいましたら、教えてください。 URL「http://www.abc.com/a.html」へのアクセスをドキュメントルートにあるa.phpファイル(実ファイル)で処理することは可能でしょうか? (php自体は動作する環境があるという前提です) 可能な場合、どのような実現方法があるのでしょうか? (phpというよりapacheに関する質問になるかもしれませんが・・・) 当方はレンタルサーバー環境で、.htaccessぐらいしか変更できません。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • ApacheのDocumentRootについて

    こんにちは。PHPの初歩的質問です。 下記のURLを参照しながら、Apache2.2.8 と PHP 5.2.5 の設定をしています。 http://pocketstudio.jp/log2/2007/01/windows_apache_224_php_520.html ブラウザで http://localhost に接続すると、 "It work!" と表示されました。 しかし、 サンプルとして、ドキュメント・ルートに test.php というファイルを新規作成し、(ファイルの中身は <?php phpinfo(); ?> ) ブラウザから http://localhost/test.php へアクセスしても、つながりません。 気になっている点が2つあります。 (1)実は、上記URLを参照していますが、Appacheのconf/httpdの設定で、RootDirectory の部分は "C:\htdocs" としています。この中に"test.php"ファイルを入れています。これでいいのでしょうか? (2) # This should be changed to whatever you set DocumentRoot to. # C:\htdocs"> Appache の conf/httpd内に、↑のような部分があります。 この C:\htdocs"> は、左右非対称な気がしますが、これでいいのでしょうか? その他、ここをチェックしたほうが良い点などありましたら、ご指摘いただきたく、よろしくお願いいたします。

    • 締切済み
    • PHP
  • PHPのファイルを表示できない

    現在PHPとApacheを用いてPukiwikiを構築しようと思っています。 PHP,Apacheをインストールしphp.iniとhttpd.confの設定をし、ApacheのhtdocsのフォルダにPukiwikiを入れてみたのですが、WebでPukiwiki内のphpファイルを見ようとするとファイルの保存画面が出てきてしまいうまくいきません。 どこかのファイルの設定をいじれば解決できるのでしょうか? ちなみにWindowsXP、PHP-5.2.1、Apache2.2.4を使用しています。 宜しくお願いします。

  • 現在、Windows7で、Apache2.0.63とPHP5.2.13

    現在、Windows7で、Apache2.0.63とPHP5.2.13をインストールし、 環境設定まで終了したので、PHPINFOを流そうとApacheのhtdocsフォルダに データを格納しようとしたら、エラーメッセージ 「この場所に保存するアクセス権限がありません」が出てしまいました。 ちなみに、このPCを使用しているのは私一人で、ユーザIDも1つしかありません。 ちなみに、htdocsフォルダの読み取り専用にチェックが入っていたので それをはずそうとしましたが、そこでも同じエラーメッセージが。 どのようにすればいいでしょうか。

    • ベストアンサー
    • PHP
  • php apache 動かない・・

    画像のようなエラーが出て、.phpファイルを表示してくれません・・。 httpd.confファイルには、 PHPIniDir "C:\php\" LoadModule php5_module "C:/php/php5apache2_2.dll" AddHandler application/x-httpd-php .php とだけ追記しています。 documentrootとかその他全てデフォのままです。 よろしくお願いします・・。 ________________________________________________________________________________ Warning: Unknown: failed to open stream: No such file or directory in Unknown on line 0 Fatal error: Unknown: Failed opening required 'C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs/index.php' (include_path='.;C:\php\pear') in Unknown on line 0

    • ベストアンサー
    • PHP
  • phpのinclude_pathのエラーについて

    phpで以下のエラーが出ております。 いろいろ試しているのですが、解決できません。 各種設定ファイルに設定の誤りがあるのでしたら教えていただきたいと思います。 1)Fatal error: main(): Failed opening required '' (include_path='.;c:\php\includes') in C:\Apache2\htdocs\aaa\ins.php on line 26 2)Fatal error: main(): Failed opening required '' (include_path='.;c:\php4\pear') in C:\Apache2\htdocs\aaa\ins.php on line 26 c:\php4\pearというディレクトリは存在しないがなぜか出る。 3)Fatal error: main(): Failed opening required '' (include_path='.;c:\php\includes\aaa') in C:\Apache2\htdocs\aaa\ins.php on line 26 4)Fatal error: main(): Failed opening required '' (include_path='.;C:\Apache2\htdocs\aaa') in C:\Apache2\htdocs\aaa\ins.php on line 26 ##ins.phpのソース: $tpl = "ccc.tpl"; require_once($tpl); ##ディレクトリ構成 C:\Apache2\htdocs\aaa ins.php ccc.tpl ##php.iniの設定: ---有効にした場合1)のメッセージ include_path = ".;c:\php\includes"  ---コメントアウトした場合2)のメッセージ ;include_path = ".;c:\php\includes"  ---以下のpathにフォルダを作成してccc.tplを配置した場合3)のメッセージ include_path = ".;c:\php\includes\aaa" ---以下のpathを指定した場合4)のメッセージ include_path = ".;C:\Apache2\htdocs\aaa" ##httpd.confの設定: line 231 DocumentRoot "C:/Apache2/htdocs" line 256 <Directory "C:/Apache2/htdocs"> AllowOverride Options AuthConfig ##環境 os:winXP apache2:apache_2.0.58 php:PHP Version 4.4.1

    • ベストアンサー
    • PHP
  • zendframeworkインストールエラー

    初めての質問失礼します PHPでシステム開発をしているのですが、Zend framework をインストール(コピー)して サンプルを作成してテストしてみたのですが以下のエラーが出てなかなか解決できません どなたかわかる方お願いいたします。 Apacheのエラーログ PHP Fatal error: require_once(): Failed opening required './Zend/Version.php' (include_path='.;c:/php/includes;C:/apache/htdocs/ZF2/library/') in C:\\apache\\htdocs\\rewrite_test\\index.php on line 3 自分なりに調べまして php.iniのinclude_pathのエラーでZend framework(以下ZFと書きます) ZFのライブラリが見つかっていないのだなということはわかるのですが 環境はWinXPSP2 Apache2.2.22 PHP 5.3.18です。 ApacheはC:/apacheにインストール もちろんDocumentRootはC:/apache/htdocs/です。 mod_rewriteも有効にしてあります。 php.ini のinclude_pathの設定 798 ; Windows: "\path1;\path2" 799 include_path = ".;c:/php/includes;C:/apache/htdocs/ZF2/library/" C:/PHP5にインストール 作ったサンプルのディレクトリ構成 C:\apache\htdocs\rewrite_test以下 にtest.html と index.phpをおき、 indexphpの内容 ・・・・・・・・・ <?php // Zend_Version クラスをrequireする。 require_once './Zend/Version.php'; // Zend Frameworkのバージョン情報をechoする echo 'hello, Zend Framework ! version = ' . Zend_Version::VERSION; ?> ・・・・・・・・・・・ .htaccessの内容 ・・・・・・・・・・・・ RewriteEngine on RewriteBase /rewrite_test RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php ・・・・・・・・・・・・ ZFのバージョン2.0.5 ApacheのDocumentRootにそのままコピーして ZF2とファイル名変更 でhttp://localhost/rewrite_test/test.htmlでアクセスすると http500えらーがでて上記のエラーがでてしまいます。 どこか間違えありましたらお教えください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう