VPSサーバーにPleskを入れて独自ドメインで利用しており、サブドメインを設定しています。


www.example.jp(メイン)
aaa.example.jp(サブ)
bbb.example.jp(サブ)

のような状態です。
メインとサブドメイン全てでSmartyを利用しており、それぞれにSmartyを設置する手間を省きたいと考え、サブドメインからメインのSmartyにアクセスしたいと思っています。
※今後、サブドメインを数百設置する予定です。

PHPなどで、以下のようにインクルードしているものを
include "./smarty/Smarty.class.php";

以下のようにしたいのですが
include "メインのパス/smarty/Smarty.class.php";

サブドメインからメインへのアクセス権限がないようで、アクセスすることができない状態です。

本来、このようなことは可能なのでしょうか?
可能であれば解決策をお教え下さい。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2007/06/15 20:40:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:t_shiono No.1

回答回数256ベストアンサー獲得回数22

ポイント23pt

可能です。

が、お使いの環境で可能かは判断しかねます。

共有サーバをPleskで管理する場合、殆どの場合にPHPセーフモード機能によりアクセスできるディレクトリを制限しています。

参考:

http://manual.xwd.jp/features.safe-mode.html

この機能を無効にする、あるいは、この機能で許可する場所(例えば、/usr/lib/php)を増やし、/usr/lib/php/smartyなどとして配置することにより、可能です。


これらの設定は、おおもとのhttp.confまたは、各サブドメインごとに作成されている設定ファイル(たとえば、httpd.includeなど)の中で設定されていますので、一度ごらんになってはいかがでしょうか?

id:liser

すみません。情報が足りなかったですね。

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();で確認したのですが、サブドメインからメインへはアクセスできませんでした。

この記述が間違っている気がするのですが、いまいち理解できていません。何かわかりますでしょうか?

2007/06/11 20:20:16
id:t_shiono No.2

回答回数256ベストアンサー獲得回数22

ポイント23pt

サーバの情報を整理させてください。

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に相当するファイルを修正する

いかがでしょうか?

id:liser

サブドメインの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を直接編集しなければいけないのでしょうか?

2007/06/11 21:23:06
id:t_shiono No.3

回答回数256ベストアンサー獲得回数22

ポイント22pt

サーバの状況が分かりました。

この状態であれば、

php.ini または、http.include のどちらかを修正する必要があります。

ただ、後者の場合はPleskから何かを設定すると、上書きされて再度、修正が必要となってしまうので、次のURLを参考にするとよいかもです。

https://jpy.swsoft.com/manuals/Plesk7.5Reloaded_AdminGuide_Japan...

id:liser

なるほど。

となると、以下のようにサブドメインそれぞれの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>

数百個サブドメインを設定するので、何か一括で指定できる方法があれば良いのですが、やはり地道にやっていくしか無理でしょうか?

2007/06/11 22:19:46
id:t_shiono No.4

回答回数256ベストアンサー獲得回数22

ポイント22pt

どれもオススメできる方法ではないですが、

・Pleskをハックして、デフォルトで生成するhttpd.includeに適切なopen_basedirが含まれるようにする

・/tmp(恐らくopen_basedirに含まれていると思います)以下にSmarty関連のファイルを置く。ただし、/tmp以下は自動削除される可能性があるので、それにも対応しておく。

という方法は存在するには存在すると思います。


ただ、サーバの設定ということなので、一度設定後はそんなに頻繁に発生しないことだと思うので、各ドメインのvhots.confを自動生成するようなスクリプトを書くというのが、一番よいような気がします。

vhost.confファイルが存在すれば、httpd.includeへのIncludeディレクティブの追加はPleskがやってくれるようなので。

id:liser

なるほど。

やはりひとつひとつ設定する方が安全そうですね。

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

2007/06/15 20:39:18

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません