• 締切済み

アプリケーションの構成

wantと申します。 Webアプリケーションの構成に関して質問させて頂きます。 状況を説明すると、現在 httpd.confで  DocumentRoot "/www/htdocs" のように設定し、Webアプリケーションの構成は以下のようにしています。 /www/htdocs/site/ … PHPファイル(MVCモデルでいうCの部分)を配置 /www/htdocs/css/ … スタイルシートを配置 /www/htdocs/js/ … Javascriptファイルを配置 /www/docs/ … PHPファイル(MVCモデルでいうVの部分)を配置 /www/htdocs/site/ にある contrl.phpは、先頭で set_include_path('../../'); を行い、プログラムの最後で、 require('docs/view.php'); とし、画面を呼んでいます。 /www/docs/ にある view.phpは、以下のようになっています。 <html> <head> <script language="JavaScript" src="../../js/test.js"></script> <link href="../../css/test.css" rel="stylesheet" type="text/css"> </head> <body> <form name="form1" onSubmit="javascript:submitform()"> 名前:<input type="text" name="fname" value="<?=$req['fname']?>" class="t01"> -(略)- 質問というのは、javascriptとcssのパス設定なんですが、 セキュリティ上、/www/js/ や /www/css/にファイルを置いて、 ブラウザからはアクセスできないようにしたいのですが、 /www/css/ のディレクトリにファイルを置いて、 正しいパスを設定しても、ファイルが正しく読み込まれません。(パーミッションは777) それで、仕方なく/www/htdocs/js/ にファイルを置いているのですが、 この場合だと、http://localhost/js/test.js として アクセスすると、ファイルにアクセスできてしまいます。 httpd.confで、アクセスできないようにすることも可能だとは思いますが、 /www/js/ のようにはできないのでしょうか?

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

みんなの回答

  • little-m
  • ベストアンサー率44% (45/102)
回答No.3

 phpの include は WEBサーバー側での処理ですので、サーバー側の何処に置いてもアクセスできると思いますが、javascriptやスタイルシートはブラウザ側での(ローカルのパソコン側での)処理ですのでブラウザがアクセスできる場所に置いていなければいけなのだと思います。  ただ、どうしても上記のような事を行いたいのなら、javascriptやスタイルシートのファイルも、phpによってHTML中にinclude してやるようにすればできると思いますが、この場合ソースは見られてしまいますので、wantedさんの目的に合うかはわかりませんが・・・。

  • shiz
  • ベストアンサー率36% (4/11)
回答No.2

ドキュメントルートというキーワードがあります。httpクライアント(ブラウザ)からhttpサーバにアクセスしたときに見えるルートディレクトリで、基本的にhttpサーバ側で設定します(apacheの場合はhttpd.conf)。その設定を見れば分かりますが、 document_root = /www/htdocs という具合に、ファイルシステムのあるディレクトリ以下をWeb向けのルートディレクトリとして公開するワケです。 と、おそらくこのあたりは理解されていると思うのですが、htmlファイル(および、phpファイルの中でhtmlが記述されている部分)の中では、このドキュメントルート以下のファイル、つまり外から見えるファイルしか参照できません。 (wantさんの構成でいうと、おそらく/www/htdocsがドキュメントルートに設定されていると思うので、/www/htdocs/より下のディレクトリ・ファイルしかhtml内で参照できないことになります。) 逆に言うと、「.js」や「.css」を、一般ユーザーが見えないディレクトリに配置することは実質不可能なのです。 元々javascriptやcssは、htmlからプログラム部分・見た目部分だけを別ファイルに書き出したところから始まったので、外から見えてしまうのは当然の挙動とも言えるでしょう。 そもそも公開したくないロジック・情報をjavascriptで実装するのは、上記のjavascriptの仕様上ありえないので、別の手段を考えるべきです。

回答No.1

MVCをかなり曲解されてるような? それは、個人的な事として、 WEBサーバーからのアクセスとファイルシステムのアクセスを区別されるべきでしょう

関連するQ&A

  • アプリケーション・ディレクトリの構成

    lampを使って、以下のようなディレクトリ構成で アプリケーションを開発しています。 /webapps |---- /php phpプログラムを配置 |---- /base phpソースが読込むhtmlを配置 |---- /lib 各種ライブラリを配置 |---- /css CSSを配置 |---- /image 画像を配置 |---- /js Javascriptを配置 /php にあるphpプログラムは、単純にいうと 以下のようになっています。 ---- /php/test.php --------------------- <?php // 処理プログラムを記述 require('/base/test.tphp'); // HTMLベースのファイル ?> --------------------------------------- 上記のようにやるのは、 デザイン部分とプログラムのソースの部分を別にしたいからなのですが、 これをやると現在 http://ドメイン/base/test.tphp としても、アクセスできてしまいます。 test.tphpに、以下のような記述があった場合 <input type="text" name="login_cd" value="<?=$_REQUEST['login_cd']?>"> 画面に<?=$_REQUEST['login_cd']?> が表示され セキュリティ上、好ましくないと思うのですが、 現在のパーミッション baseディレクトリ ・・・ 744 test.tphp ・・・ 744 をそれぞれ、700に変更すると、 test.phpのrequire()関数の箇所で エラーになってしまい、 思うようなアクセス制御がかけられません。 プログラムファイルとデザインファイルを分離して、 デザインファイルにアクセスできないようにするには、 http://ドメイン/base/ 以下にアクセスしたときに、 エラー画面などにリダイレクトさせるように、 apache側で制御を掛けるしか方法はないのでしょうか? 他の方法をご存知の方がいましたらご教授ください。 以上、宜しくお願いいたします。

    • ベストアンサー
    • MySQL
  • 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初期設定の確認で、phpinfo スクリプトのままブラウザ表示されます。

    Apacheとphpをインストールしてhttpd.confの設定を以下のように追記。動作確認で test.phpファイルを作成して test.phpファイルの記述。 <?php phpinfo(); ?> htdocsディレクトリに保存しましたが、ブラウザで確認するとphpinfo でスクリプトが表示されます。なにが足りないのでしょうか? 教えてください。 詳細環境 Windows2000 apache_1.3.24 インストール先 C:/Apache Group php-4.1.2 インストール先 C:/php4 httpd.confの設定追記 ScriptAlias /php4/ "C:/php4/" AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps Action application/x-httpd-php /php4/php.exe DirectoryIndex index.php Apacheを再起動 はやくスタートラインに並びたいです。 ご存知のかた教えてください。

    • ベストアンサー
    • 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
  • バーチャルホストで、同htmlファイルが表示される

    バーチャルホストを作成しました。 http://wp.yat-net.com/?p=2400 http://likealunatic.jp/2008/05/16_xampp.php の様のページを参考にし、バーチャルドメインを設定しました。 【1.httpd.conf】  Include "conf/extra/httpd-vhosts.conf" ←有効 【2.httpd-vhosts.con :2つのバーチャルホスト作成】 <VirtualHost *:80>  DocumentRoot C:/xampp/htdocs  ServerName localhost  ErrorLog "logs/error.log"  CustomLog "logs/error.log" common </VirtualHost> <VirtualHost *:80>  DocumentRoot C:/xampp/htdocs/test/doc  ServerName wordpress.localhost  ErrorLog "logs/error.log"  CustomLog "logs/error.log" common </VirtualHost> 【3.hostsの設定】  127.0.0.1 localhost  127.0.0.1 wordpress.localhost 【4.index.htmlを作成】   C:/xampp/htdocs/index.html ⇒ aaaaa と記述したもの   C:/xampp/htdocs/test/doc ⇒ eeeee と記述したもの 【5.ブラウザからアクセス】  http://wordpress.localhost/index.html  http://localhost/index.html 【6.結果】 「http://wordpress.localhost/index.html」「http://localhost/index.html」のどちらでアクセスしても、 「C:/xampp/htdocs/index.html」の内容(aaaaa)が表示されます。 <質問> なぜ、「http://wordpress.localhost/index.html」でアクセスした際に、eeeeのindex.htmlファイルが 表示されないのでしょうか…。 環境は「Win7、Xampp1.7.7で Apache/2.2.21 」になります。

  • xamppでcgiが動かない

    Mac OS10.6.8でXAMPPをインストールした後 htdocs/test/というフォルダを作って http://test/ となるような環境を作りました。 httpd-vhosts.confファイルには <VirtualHost *:80> DocumentRoot "/Applications/XAMPP/xamppfiles/htdocs/test" ServerName test </VirtualHost> <Directory "/Applications/XAMPP/xamppfiles/htdocs/test"> Options Indexes FollowSymLinks MultiViews Includes ExecCGI AddType text/html .shtml .html AddHandler server-parsed .shtml .html AddHandler cgi-script .cgi .pl AllowOverride All Order allow,deny Allow from all </Directory> このように記述しております。 http://test/test.cgiにアクセスしたら Error message: Premature end of script headers: test.cgi このように言われてしまいました。 これは何が原因なのでしょうか? パスが間違っているのかな?と思ったのですが、XAMPPを使った場合 test.cgiファイルのパスはどうすればいいのでしょうか? よろしければ教えて下さい。 ※ とりあえず usr/bin/perl としました。

  • apache2にアクセスできない!!!

    apache2をインストールしてhttpd.confの基本的な設定を行ったところ、デフォルトのindex.htmlがテスト用に作ったテキストだけのものならアクセスできるのですが、テキスト以外のファイルを表示させようとすると、アクセスできなくなります。 httpd.confの設定の基本的なことなのかもしれないですが、教えてください。よろしくお願いします。

  • 外部ファイルを指定するとページ上部に空白が

    bodyやcssでマージンは全てにしているのですが、javascript外部ファイルを読み込ませようとして記述を追加すると上部に空白ができてしまいます。 何が原因なのでしょうか? ↓ページのソース(都合によりファイル名は全て仮名ですすいません) <head> <title>サンプルページ</title> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <script type="text/javascript" src="http://test.com/****1.js"></script> <script type="text/javascript" src="http://test.com/****2.js"></script> <link rel="stylesheet" type="text/css" href="http://test.com/****.css"> <style type="text/css"> <!-- body { background-position: 0px 0px} --> </style> </head> <body topmargin="0" leftmargin="0" marginwidth="0" marginheight="0" bgcolor="#FFFFFF" text="#333333"> スクリプトの場所は全て絶対パスで指定しています。 また、charsetがeucなのはこのファイルがphpで記述されているためです。 ****1.jsはページで使うスクリプト全て(ポップアップやロールオーバー等)を記述、****2.jsはアクセス解析用のスクリプトを入れています。後者を追加してから空白が出てきたような気がします。 スクリプトの種類によってこういうことが起きるのでしょうか? ご回答お願い致します。

  • /から始まるパスについて

    たびたびお世話になっております。 /から始まるパスというのは、サーバにあげないと読みにいきませんよね。 でもサーバにあげても読み込みしません。。。javascriptでスタイルシートの振り分けをしているのですが、その際、JSファイルに <link rel="stylesheet" href="/cmn_css/win.css" type="text/css"> という設定をしてあります。 各ページは、 <script language="JavaScript" type="text/javascript" src="/cmn_js/prart.js"></script> という記述でJSファイルを読みこみしています。ですが、読み込んでくれません。。。相対パスで記述するとスタイルシートが反映されます。 どうしてでしょうか。サーバ側で何か設定が必要なのでしょうか。 すみませんが、よろしくお願いします!

  • 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

専門家に質問してみよう