| 投稿者 | 投稿 | 
		
			|  | #1 2010 年 10 月 18 日(月) 22:16 | 
		
			| 会員 登録者: 9 2010 返信数: 17 | サーバを変える必要が出てきて、現在ラピッドサイトのVPSを利用しだしたのですが、include_pathが稼働していないのか、サイドバー等の外部共通ファイルが表示してくれません。
 
 これまでは、Webページを.phpでつくって、ページの一番先頭に
 <?php include_once("last-mod.php"); ?>
 と書いたり、サイドバーの箇所は
 <?php include_once("sidebar.php"); ?>
 
 と書いたりしていました。
 これらの外部ファイルはincというフォルダをつくって全てそこに収めております。
 
 そして、マルチドメインのサーバなのですが、ドメインごとにphp.iniファイルを勝手につくって
 アップすれば、php.iniに記述したinclue_path通りにパスが通ってくれます。
 以下のようにphp.iniには書いています。
 
 include_path = ".:/usr/local/bin:/usr/bin:/bin; .:/export/eieiei/www/jp/rentalserver/myaccount/mysite.com/inc"
 
 これだけ記述したphp.iniファイルを複数のドメインフォルダがある中で、該当ドメインを開いたドメイン直下にアップロードしました。
 こうしておけば、外部ファイルへのインクルードパスが見事につながり、ちゃんと機能していました。
 
 
 しかし、ラピッドサイトのVPSへ移動すると、パスが通ってくれないのか、どうにも外部ファイルのインクルードパスが機能してくれません、。
 
 問い合わせると、プログラミングはサポートしない、と書かれてありつつ、
 「php.iniのパスは/usr/local/php5/lib/php.iniですが、お間違いございませんでしょうか。」
 とありました。
 見つけて開いてみましたが、ものすごくたくさん何か記述がされていました。
 ここで、これまでやってきた記述をどこでもいいので書こうかとも思ったのですが、
 よく考えると、ここに書いてしまうと、「どのドメインに対してのインクルードパスなのか?」ということがわからない、つまり、ドメインごとの記述になっていないので、きっとサーバは「どのドメインのパスのことなの?」とわからないはずだと思いました。
 このサーバの場合、php.iniへの書き方は以下だと思うのですが、
 
 include_path = ".:/usr/bin:/bin; .:/home/member/www/mysite.com/inc"
 
 これを、ドメインごとにアップするphp.iniじゃなく、大元のphp.iniファイルに書いてもドメインがわからないと思います。
 
 このようなサーバの場合、どうやって解決すれば良いのでしょうか?
 ドメインごとにphp.iniファイルをドメイン直下にアップしても機能しなかったので、各ドメイン名のフォルダ直下にphp.iniをアップしてもダメだったとわかっています。
 
 「 /usr/local/php5/lib/」にある大元のphp.iniファイルで記述するのなら、いったいどのように記述すればドメインごとの違いを記述できるのでしょうか?
 
 また、旧サーバのように、ドメインフォルダ直下に、ドメインごとにphp.iniをアップして機能させることはできないのでしょうか?
 
 宜しくお願い致します。
 | 
		
			|  | #2 2010 年 10 月 19 日(火) 9:22 | 
		
			| 会員 登録者: 8 2009 返信数: 103 | おはようございます。vpsは自分で環境を構築する必要があります。
 以前のサーバーではすでにそのような設定がされていたのでドメイン毎にphp.iniを読み込んでくれたのです。
 
 vpsは仮想専用サーバーで安くて自由度が高いのが売りのようですがサーバー構築のスキルがないと扱えないものと思ってください。
 (初心者でも簡単とうたってる業者がいますが、代行設置など使って環境さえ構築してしまえば、普通のホスティングサービスと変わらず簡単なんでしょう)
 
 上記をふまえ
 > また、旧サーバのように、ドメインフォルダ直下に、ドメインごとにphp.iniをアップして機能させることはできないのでしょうか?
 の質問に答えるなら
 サーバーに設定すればドメイン毎にphp.iniを設置することは可能です。
 になります。
 
 具体的な設定は記述しません。
 phpの動作モードにより設定内容は異なるし、それとサーバー構築の話に及ぶからです。
 
 
 もしphpがapacheモジュールとして動作しているのなら
 .htaccessに
 php_value include_path "パス"
 を追加するといいでしょう。
 この場合もapacheコンフィグに
 AllowOverride Options(もしくはAllowOverride All)
 がなければ動作しません。(通常のホスティングサービスでは設定されています)
 というようにhttpサーバ構築に及びます。
 http://www.php.net/manual/ja/configuration.changes.php
 
 phpが5.3.0以降であれば
 http://www.php.net/manual/ja/configuration.file.per-user.php
 の方法が使えるかもしれません。
 (CGI/FastCGI SAPI の場合)
 | 
		
			|  | #3 2010 年 10 月 19 日(火) 10:01 | 
		
			| 会員 登録者: 8 2009 返信数: 103 | 標準のphp.iniについて書いておりませんでした。
 > これを、ドメインごとにアップするphp.iniじゃなく、大元のphp.iniファイルに書いてもドメインがわからないと思います。
 わからないわけではありません。
 すべてのドメインから読み込まれることになります。
 last-mod.phpやsidebar.phpが他のドメインからも使用可能になるということです。
 アクセス権をしっかり設定しておけば大丈夫ですけど。
 ゆるいと他のドメイン使用者からソースとかパスワード等抜かれる危険性があります。
 (vpsなので他のドメイン使用者はご自身か身内か社内の誰かさんでしょうけど)
 | 
		
			|  | #4 2010 年 10 月 19 日(火) 10:11 | 
		
			| 会員 登録者: 8 2009 返信数: 103 | 連投失礼。上記のアクセス権の話はphpがcgi-modeでsuexecが有効の場合にしか適用できません。
 | 
		
			|  | #5 2010 年 10 月 19 日(火) 23:21 | 
		
			| 会員 登録者: 9 2010 返信数: 17 | ありがとうございます!
 > もしphpがapacheモジュールとして動作しているのなら.htaccessに
 > php_value include_path "パス"
 > を追加するといいでしょう。
 
 モジュールモードだと書いたつもりが読み返すと書いてませんでした。。。
 そして、上記実践にてズバリincludeのパスが見事に通りました!!
 す、すばらしすぎる・・・・・
 
 ただ、なんででしょうか、パスが通った外部ファイルの中に、last-mod.phpもあるのですが、
 これがなぜか機能していないようです。
 sitemap.xml自動生成ツールでは相変わらず1970/1/1
 のタイムスタンプになっています。
 旧サーバならばちゃんと最終更新日時が出るようになってたんですが・・・
 ちょっとここがわからないですがまた急ぎ業務の対応がでt
 | 
		
			|  | #6 2010 年 10 月 19 日(火) 23:33 | 
		
			| 会員 登録者: 8 2009 返信数: 103 | こんばんは。last-mod.phpが以前のlast-modified.phpと仮定して。
 
 http://bbs.php.gr.jp/topic-post659.html
 ご自身の最初の投稿をお忘れでしょうか?
 モジュールモードの場合必要ありません。
 
 とても忙しいようですね。ご自愛ください。
 | 
		
			|  | #7 2010 年 10 月 20 日(水) 8:10 | 
		
			| 会員 登録者: 9 2010 返信数: 17 | うへぇ~~!ソフト開発者さんからモジュールモードの場合は.htaccess一行記述で良いと返答あったことをワタシ自身が書いてますね。。オハズカシイ。。。
 
 で、やってみました。するとできました!!!
 .htaccessには
 php_flag last_modified on
 と一行記述し、
 まずは外部ファイルであるlast-mod.phpはコメントアウトして適用しないようにしました。
 以下のようにしました。
 
 ------------------------------------------------------------------------------------------------------------
 <!-- 本ソースはPHPがモジュールモードの場合は不要 (.htaccessに一行追加手法でOK )
 <?php
 
 $mtime = filemtime($_SERVER["HOME"]);
 # header("Last-Modified: " . gmdate("D, d M Y H:i:s", $mtime) . " GMT");
 header("Last-Modified: " . gmdate("D, d M Y H:i:s", $time_newest) . " GMT");
 
 ?>
 -->
 ------------------------------------------------------------------------------------------------------------
 
 すると、これではできませんでした。
 ウン??PHPのコメントアウトって、HTMLとはまた違うのかな??
 ホントはコメントアウトだけで終わらせて、他のサイト、サーバの場合でも使いまわししやすくしたいのになぁ・・・
 と思いながらも、しかたないのでとりあえず呼び出している元の各ページから
 以下のlast-modifiedの記述自体を削除してみることにしました。
 削除したソース↓
 <?php include_once("last-mod.php"); ?>
 
 すると、取得できました!!ヤッター!!
 今日の現在の日時が取得できてます!!
 
 nullaさまは巨人です、そして広く深い目を持っておられます。感謝感謝です!!!取り急ぎ報告まで
 | 
		
			|  | #8 2010 年 10 月 20 日(水) 8:21 | 
		
			| 会員 登録者: 9 2010 返信数: 17 | phpのコメントアウトもわかりまして、コメントアウトでの処置でもできました!! |