www.example.jp(メイン)
aaa.example.jp(サブ)
bbb.example.jp(サブ)
のような状態です。
メインとサブドメイン全てでSmartyを利用しており、それぞれにSmartyを設置する手間を省きたいと考え、サブドメインからメインのSmartyにアクセスしたいと思っています。
※今後、サブドメインを数百設置する予定です。
PHPなどで、以下のようにインクルードしているものを
include "./smarty/Smarty.class.php";
以下のようにしたいのですが
include "メインのパス/smarty/Smarty.class.php";
サブドメインからメインへのアクセス権限がないようで、アクセスすることができない状態です。
本来、このようなことは可能なのでしょうか?
可能であれば解決策をお教え下さい。
可能です。
が、お使いの環境で可能かは判断しかねます。
共有サーバをPleskで管理する場合、殆どの場合にPHPセーフモード機能によりアクセスできるディレクトリを制限しています。
参考:
http://manual.xwd.jp/features.safe-mode.html
この機能を無効にする、あるいは、この機能で許可する場所(例えば、/usr/lib/php)を増やし、/usr/lib/php/smartyなどとして配置することにより、可能です。
これらの設定は、おおもとのhttp.confまたは、各サブドメインごとに作成されている設定ファイル(たとえば、httpd.includeなど)の中で設定されていますので、一度ごらんになってはいかがでしょうか?
サーバの情報を整理させてください。
Apacheの設定
/etc/httpd.conf
※内部でメイン用設定ファイル(/var/www/vhosts/example.jp/conf/vhost.conf)をインクルード
※内部でサブ1用設定ファイル(/var/www/vhosts/example.jp/conf/aaa.conf)をインクルード
※内部でサブ2用設定ファイル(/var/www/vhosts/example.jp/conf/bbb.conf)をインクルード
という仮定でよいでしょうか?
こうでない場合は、aaa.example.jpやbbb.example.jpのVirtualHost設定がどこに記述されているかを教えてください。
この仮定ですと、
メインの設定は、提示してもらったvhosts.confにより、/var/www/vhosts/example.jp/以下のファイルにアクセスが可能です。
しかしながら、推測になりますが、サブ側の設定ではvhosts.confの内容は影響していないため、デフォルトのセーフモードの設定が反映されているのではないでしょうか?
そのため、以下の点を確認していただけます?
1.www.example.com以下のページでphpinfoの表示とaaa.example.com以下のページでphpinfoの表示との違いがないか確認
2.1で違いがああれば、最初の設定でいうaaa.confに相当するファイルを修正する
いかがでしょうか?
サブドメインのvhost.confにあたるものは見当たりませんでした。
/var/www/vhosts/example.jp/conf/httpd.include
上記のhttpd.include内にサブドメインの設定情報が記載されていました。
以下のように、メインからサブへ順に記載されています。vhost.confはメインの時のみインクルードしているようです。
<VirtualHost 000.000.000.000:80>
ServerName example.jp:80
略
Include /var/www/vhosts/example.jp/conf/vhost.conf
</VirtualHost>
<VirtualHost 000.000.000.000:80>
ServerName aaa.example.jp:80
略
</VirtualHost>
<VirtualHost 000.000.000.000:80>
ServerName bbb.example.jp:80
略
</VirtualHost>
1.の表示の違いですが、違いがあり、サブドメインはデフォルトの状態のままでした。
おそらくサブドメインの設定部分でvhost.confをインクルードすれば良いのだと思いますが、やはりhttpd.includeを直接編集しなければいけないのでしょうか?
サーバの状況が分かりました。
この状態であれば、
php.ini または、http.include のどちらかを修正する必要があります。
ただ、後者の場合はPleskから何かを設定すると、上書きされて再度、修正が必要となってしまうので、次のURLを参考にするとよいかもです。
https://jpy.swsoft.com/manuals/Plesk7.5Reloaded_AdminGuide_Japan...
なるほど。
となると、以下のようにサブドメインそれぞれのvhost.confを作成し有効化していくということでしょうか?
<VirtualHost 000.000.000.000:80>
ServerName example.jp:80
略
Include /var/www/vhosts/example.jp/conf/vhost.conf
</VirtualHost>
<VirtualHost 000.000.000.000:80>
ServerName aaa.example.jp:80
略
Include /var/www/vhosts/example.jp/subdomains/aaa/conf/vhost.conf
</VirtualHost>
<VirtualHost 000.000.000.000:80>
ServerName bbb.example.jp:80
略
Include /var/www/vhosts/example.jp/subdomains/bbb/conf/vhost.conf
</VirtualHost>
数百個サブドメインを設定するので、何か一括で指定できる方法があれば良いのですが、やはり地道にやっていくしか無理でしょうか?
どれもオススメできる方法ではないですが、
・Pleskをハックして、デフォルトで生成するhttpd.includeに適切なopen_basedirが含まれるようにする
・/tmp(恐らくopen_basedirに含まれていると思います)以下にSmarty関連のファイルを置く。ただし、/tmp以下は自動削除される可能性があるので、それにも対応しておく。
という方法は存在するには存在すると思います。
ただ、サーバの設定ということなので、一度設定後はそんなに頻繁に発生しないことだと思うので、各ドメインのvhots.confを自動生成するようなスクリプトを書くというのが、一番よいような気がします。
vhost.confファイルが存在すれば、httpd.includeへのIncludeディレクティブの追加はPleskがやってくれるようなので。
なるほど。
やはりひとつひとつ設定する方が安全そうですね。
ありがとうございました。
すみません。情報が足りなかったですね。
PHPはセーフモードで動いています。
サーバー運営会社からはセーフモードは解除しない方が良いとすすめられているため、できればhttp.confでディレクトリを指定して解除したいです。
サーバーのサポートに問い合わせいろいろと試したのですが、
/var/www/vhosts/example.jp/conf/以下にvhost.conf
を作成し、以下のコードを記述するように指示されました。
<Directory /var/www/vhosts/example.jp/httpdocs/>
<IfModule sapi_apache2.c>
php_admin_value open_basedir /var/www/vhosts/example.jp
php_admin_value safe_mode_exec_dir /var/www/vhosts/example.jp/
</IfModule>
</Directory>
再起動後、open_basedirとsafe_mode_exec_dirが指定した値になっていることをphpinfo();で確認したのですが、サブドメインからメインへはアクセスできませんでした。
この記述が間違っている気がするのですが、いまいち理解できていません。何かわかりますでしょうか?