■ユーザーズフォーラム リニューアルのお知らせ
新規投稿は新ユーザーズフォーラムにお願いします。
このフォーラムは閲覧専用のアーカイブです。

(BaserCMS3.0.1) トップページ、indexページのみ、『コントローラがありません』とエラーが出ます

cocoa > (BaserCMS3.0.1) トップページ、indexページのみ、『コントローラがありません』とエラーが出ます @ 2014/2/18 1:35
お世話になっております。

BaserCMS3.0.1を、無事インストールできました。
しかし、index.phpページだけが、エラーで表示されません。


環境は次の通りです。
coreserver(core miniです。)
baserCMS3.0.1
PHP 5.2(インストール時に表示された、現在のPHPバージョン 5.3.27)
MySQL 5.1.22-rc
PHPセーフモードはoff


デバッグモードにしてみたら、次の通りに表示されました。
どこを修正すれば良いでしょうか?

お分かりの方がいらっしゃいましたら、教えていただけると大変ありがたいです。
どうぞよろしくお願い致します。


コントローラがありません

エラー: Index.phpController が見つかりません。

エラー: クラス Index.phpController を app/Controller/Index.phpController.php ファイル内に作成してください。

<?php
class Index.phpController extends AppController {

}
注意: このエラーメッセージをカスタマイズしたい場合は、 app/View/Errors/missing_controller.ctp を作成してください

Stack Trace
APP/webroot/index.php line 146 → Dispatcher->dispatch(CakeRequest, CakeResponse)
$Dispatcher->dispatch(
    new CakeRequest(),
    new CakeResponse()
);
ROOT/index.php line 53 → require(string)
    define('CAKE_CORE_INCLUDE_PATH', ROOT . DS . 'lib');
}

require APP_DIR . DS . WEBROOT_DIR . DS . 'index.php';
cocoa > Re: (BaserCMS3.0.1) トップページ、indexページのみ、『コントローラがありません』とエラーが出ます @ 2014/2/18 17:45
その後、
色々と試しています。

core.php
install.php


等に、

Configure::write('App.baseUrl', $_SERVER['SCRIPT_NAME']);


を入れてみると。。。

やはり、index.phpページが、index.php/index.php/
 となります。

http://nextat.co.jp/staff/archives/42 ページを参考に、

Configure::write('App.baseUrl', '');


を入れてみると、
CSSが読み込まれなくなります。
バージョンが違うのでNGだったのでしょうか。
(でも、テーマによっては、もともと、CSSが読めないものがあります。)

何故、ホームページだけが読めないのか、よく分かりません。

http://Myサイト/でアクセスすると、
トップページ自体は見られます。

http://Myサイト/index.phpへアクセスすると、
表示されているURLは、http://Myサイト/index.php/ですが、
本文などが表示されるべきところに、
Not Found

エラー: The requested address '/index.php/index.php/' was not found on this server.


と表示されます。

一度、indexページだけ、削除して、indexというページ名で作り直して保存しましたが、
状況は変わりません。

インストール・セットアップ > coreserverでインストール時にエラーでstep2から進めません
の投稿で、最後にコメントを下さった、オージェバングさんのサイトでは、
このようなエラーは出ていないようなのですが、基本的に同じcore-mini(または、coreserver)サーバーでも、
色々と違いがあるのでしょうか?

2系でやってきたことも確認しながら、書き換えてはUPしてみますが、
一向に状況が変わりません。

お分かりになる方がいらっしゃいましたら、
ヒントでも教えていただけると、大変ありがたいです。

どうぞよろしくお願い致します。

n1215 > Re: (BaserCMS3.0.1) トップページ、indexページのみ、『コントローラがありません』とエラーが出ます @ 2014/2/18 18:23
cocoa 様

スマートURLをオンにしているのかオフにしているのか
(または.htaccessとApp/webroot/.htaccessの状態を)
教えていただけますか?
configのApp.baseurlの値だけでは状況が把握しづらいのです。

またphp.iniは編集できる環境でしょうか?
cgi.fix_pathinfoの値の修正で
なんとかなるのではないかと予想しているのですが。

core serverは契約時期によって設定が違うというような情報もありますので。


●追記
参考に挙げられているページですが、
そのページではWebサーバとして、一般のレンタルサーバでよく使われるApacheではなくnginxを利用しています。
症状は似ていますが構成が違うので下手に参考にしないほうが良いです。

baserCMSが利用しているCakePHPはCGI関連の環境変数PATH_INFOをURLの解析とルーティングに利用しています。

実はPHPは元々PATH_INFOをCGIの仕様通りに正しく解釈していないため、
PATH_INFOを正しく修正するための設定項目があります。

ApacheとCGI版PHPを利用している場合はこの修正の設定が適用されていて
cgi.fix_pathinfo=1
となっているのが一般的かと思います。
デフォルト値が0となっているサーバでは、
値を1に変更するとインストール時の問題が解決することもあります。
(PHPのバージョンによって設定の違うサーバもあるのでやっかいです)

ちなみに参考記事でのnginx+PHP-FPM利用時はcgi.fix_pathinfo=0と
真逆の設定が必要になっています。

Twitter: @n_1215

cocoa > Re: (BaserCMS3.0.1) トップページ、indexページのみ、『コントローラがありません』とエラーが出ます @ 2014/2/18 22:11
n1215さま

詳細のコメントありがとうございます!

スマートURLは、(試してみましたが、やはり上手く行きませんでしたので。。。)
OFFです。

php.iniですが、
検索してみたところ、
Baserではありませんが、concrete5をCoreserverへのインストールガイドが、
見つかり、参考にしました。

http://concrete5-japan.org/help/install/hosting/coreserver/


php.iniに、
cgi.fix_pathinfo = 0
を書いて、UPロードして試す。

cgi.fix_pathinfo = 1
を書いて、UPロードして試す。。。

とやってみましたが、エラーになって全く表示されませんでした。
(.htaccessと同様、http://Myドメイン/ に置いて見ました。)

何か、設定の仕方が悪いのでしょうか?
n1215 > Re: (BaserCMS3.0.1) トップページ、indexページのみ、『コントローラがありません』とエラーが出ます @ 2014/2/19 0:15
cocoa 様

今一度、詳細な環境を確認させて頂いていいでしょうか?

環境
====================
1.baserCMSの設置場所
ホームページの公開ディレクトリ(以下はpublic_htmlとでも書きます)の直下
※public_htmlがhttp://Myドメイン/ のルートに対応するディレクトリ

2..htaccessの設定
●public_html/.htaccess
mod_rewriteの設定なし
AddHandler application/x-httpd-php53cgi .php
mod_gzip_on Off

●public_html/app/webroot/.htaccess
mod_rewriteの設定なし

3.App.baseUrlの設定
●public_html/app/config/install.php
App.baseUrlの設定は$_SERVER['SCRIPT_NAME']
…
Configure::write('App.baseUrl', $_SERVER['SCRIPT_NAME']);
…



この状態でpublic_html/php.iniにcgi.fix_pathinfoの設定を記述すると画面が全く表示されないということでよろしいでしょうか。
追加で数点確認させてください。

確認事項
========================
1.public_html直下においてあるbaserCMSと無関係のファイルの有無
こちらは今までのやりとりに見当たらなかったので教えていただきたいのですが、
index.htmlなどは設置されていないでしょうか?

2.php.iniへの設定の可不可
public_html/php.iniへcgi.fix_pathinfo以外の設定を行うとどうなるでしょうか?
この場合も画面が全く表示されない(恐らくインターナルサーバーエラー?)でしょうか?
例えばdisplay_errors = Onなど
参考:http://www.coreserver.jp/help/index.php/phpcgi/

3.phpinfo
baserCMS管理画面の[システム設定] > [環境情報] から閲覧できるphpinfo()の出力情報はどうなっているでしょうか?
・PHPのバージョンと実行方式(PHP 5.3.xx CGIなど)
・(CGIないしFastCGIの項目があれば)cgi.fix_pathinfoの値
・CakePHPがURLの解析に利用する各環境変数 _SERVER["PATH_INFO"] _SERVER["PHP_SELF"] _SERVER["SCRIPT_NAME"] _SERVER["REQUEST_URI"] _SERVER['HTTP_X_REWRITE_URL']

4.DirectoryIndexの設定
ApacheのDirecotryIndexの設定はどうなっているかわかりますでしょうか?
もしくは、.htaccessに
DirectoryIndex index.php index.html
などの設定が可能でしょうか?

Twitter: @n_1215

cocoa > Re: (BaserCMS3.0.1) トップページ、indexページのみ、『コントローラがありません』とエラーが出ます @ 2014/2/19 22:22
n1215さま

遅くなってしまいまして、申し訳ありません。

自分なりに、教えていただいたことは、順番に試したり、調べたりもしています。

とりあえず、
次の通りになります。


========
環境
========

1.baserCMSの設置場所

public_html/Myドメイン/ になります。

表だっては、http://Myドメイン/ です。

public_html/Myドメイン ・・・今回の(baserCMS 3.0.1)セーフモード Off、MySQL利用

一応、public_html/以下、他に、baserCMS2、OpenPNE2等あります。

 public_html/Myドメイン1(baserCMS 2.1.2)セーフモード Off、MySQL利用
 public_html/Myドメイン2(baserCMS 2.1.2)セーフモード Off、MySQL利用
 public_html/sub.Myドメイン3(OpenPNE v2.14.9)MySQL利用
 public_html/sub.Myドメイン4(OpenPNE v2.14.9)MySQL利用
 public_html/Myドメイン5(BlognPlus2.5.6)セーフモード On、DB= text版で利用
 public_html/Myドメイン6(BlognPlus2.5.4)セーフモード On、DB= text版で利用
 public_html/sub.Myドメイン7(Web Diary Professional Ver 4.72)DB= text版で利用
 public_html/sub.Myドメイン8(Web Diary Professional Ver 4.72)DB= text版で利用


2..htaccessの設定

●public_html/Myドメイン/.htaccess

public_html/以下には、他のドメインも置いてありますので。。。

AddHandler application/x-httpd-php53cgi .php
mod_gzip_on Off


mod_rewriteの設定なしです。

●public_html/Myドメイン/app/webroot/.htaccess
mod_rewriteの設定なし
★.htaccessの中身は、全てコメントアウトです。


3.App.baseUrlの設定
●public_html/Myドメイン/app/config/install.php

App.baseUrlの設定は$_SERVER['SCRIPT_NAME']

…
Configure::write('App.baseUrl', $_SERVER['SCRIPT_NAME']);
…

public_html/Myドメイン/php.iniにcgi.fix_pathinfo を記述すると、エラーになります。



========
確認事項
========

1. public_html/Myドメイン/ 内に、index.html は置いていません。
 ★(ダウンロードした)BaserCMSのソースだけです。


2. public_html/Myドメイン/php.ini へ
  display_errors = On を記述すると、次のエラーになります。

Script Error

The script did not produce proper HTTP headers. Please see the error log to see the detail of the errors. Depending on the server configuration, you can also run thisscript under CGIWrap debugging. Usually, either rename or linkthe script temporarily to a file which ends with .phpdextension, or add a AddType application/x-httpd-phpcgi-debug .phpline to your .htaccess file.



3. phpinfo

baserCMS環境

スマートURL: OFF
設置フォルダ: /virtual/MyID/public_html/マイドメイン/
セーフモード:Off
データベース: MySQL
baserCMSバージョン: 3.0.1
CakePHPバージョン: 2.4.3

PHP環境

PHP Version 5.3.27
Server API	CGI/FastCGI

_SERVER["PATH_INFO"]      /admin/site_configs/phpinfo
_SERVER["PHP_SELF"]       /index.php/admin/site_configs/phpinfo
_SERVER["SCRIPT_NAME"]     /index.php
_SERVER["REQUEST_URI"]     /index.php/admin/site_configs/phpinfo
_SERVER['HTTP_X_REWRITE_URL']	見つかりませんでした。

以上です。


現在、このスレッドの最初に上げたエラー内容に沿って、


エラー画面の通り(これ↓です。)記述し、
 app/Controller/Index.phpController.php にUPしました。

<?php
class Index.phpController extends AppController {

}



AppController.php

lib/Baser/Controller/AppController.php
を、app/Controller/ へコピーしました。



今は、

http://Myドメイン/ または、
http://Myドメイン/index.php へアクセスするとドメイントップページが見られます。

http://Myドメイン/index.php/ だとエラーになります。
(ヘッダー、フッター等は表示されています。


An Internal Error Has Occurred.

エラー: An Internal Error Has Occurred.


選択しているテーマは、デモページのままなので、
(ホーム以外)

 会社案内
 サービス
 新着情報
 お問い合わせ
 アイコンの使い方
 サイトマップ
 の各ページは、表示されています。


以上です。

とりあえず、
この『ホーム』ページのエラーを無くしたいです。

どうぞよろしくお願い致します。
n1215 > Re: (BaserCMS3.0.1) トップページ、indexページのみ、『コントローラがありません』とエラーが出ます @ 2014/2/20 1:20
cocoa 様

確認ありがとうございます。
質問事項が長くなってしまってすみません。
なるほど、ドメインが複数あるのですね。

まず初めに、エラーメッセージには見つからないとありますが、
Index.phpControllerなる奇妙なコントローラは作成すべきではないです。
トップページも固定ページの1つという扱いなので、
baserCMS側で用意されているPagesControllerで処理されるのが正常なはず。


管理画面のphpinfoのページではPATH_INFOその他環境変数は正常のように見えますね。
php.iniで簡単に修正できたら儲けものかと思っていましたが、
どうやらphp.iniの設定も一苦労なサーバのようですし、
横着はやめてもう少し原因を正確に見極める方向で考えます。


ヘッダーやフッターが表示されているなら
テーマの/public_html/Myドメイン/app/webroot/theme/nada-icons/Layouts/default.phpを書き換えて
(管理画面からでもいじれるかと思います)
トップページに3通りのURLでアクセスした時の環境変数の違いを確かめてみましょうか。

<body id="<?php $this->BcBaser->contentsName() ?>">

の直下に下記コードを突っ込んでみてください。
単に環境変数の値を名前付きで表示するだけのものです。

PATH_INFO:<?php echo env('PATH_INFO') ?>
<br>
PHP_SELF:<?php echo env('PHP_SELF') ?>
<br>
REQUEST_URI:<?php echo env('REQUEST_URI') ?>
<br>
SCRIPT_NAME:<?php echo env('SCRIPT_NAME') ?>


この状態でページにアクセスすると環境変数の値が最上部に出ます。

参考までに、先ほどローカルの仮想マシンで(公式のVagrant Boxを利用して)
baserCMS3.0.1をインストールして試したところ下記のようになりました。

●http://example.com/
PATH_INFO:
PHP_SELF:/index.php
REQUEST_URI:/
SCRIPT_NAME:/index.php

●http://example.com/index.php
PATH_INFO:
PHP_SELF:/index.php
REQUEST_URI:/index.php
SCRIPT_NAME:/index.php

●http://example.com/index.php/
PATH_INFO:/
PHP_SELF:/index.php/
REQUEST_URI:/index.php/
SCRIPT_NAME:/index.php

Twitter: @n_1215

cocoa > Re: (BaserCMS3.0.1) トップページ、indexページのみ、『コントローラがありません』とエラーが出ます @ 2014/2/20 1:56
n1215さま

早速、ありがとうございます。


とりあえず、
appc/ontroller/
Index.phpController.php
AppController.php
は、削除しました。


教えていただいた通りにやってみました。

●http://Myドメイン/
PATH_INFO:
PHP_SELF:/index.php
REQUEST_URI:/
SCRIPT_NAME:/index.php


●http://Myドメイン/index.php
PATH_INFO:
PHP_SELF:/index.php
REQUEST_URI:/index.php
SCRIPT_NAME:/index.php


●http://Myドメイン/index.php/
PATH_INFO:
PHP_SELF:/index.php
REQUEST_URI:/index.php/
SCRIPT_NAME:/index.php


●http://Myドメイン/index.php/service
PATH_INFO:/service
PHP_SELF:/index.php/service
REQUEST_URI:/index.php/service
SCRIPT_NAME:/index.php

以上の通りになりました。


追記))
●http://Myドメイン
http://Myドメイン/
(admin 編集用のヘッダが見えている)
PATH_INFO:
PHP_SELF:/index.php
REQUEST_URI:/
SCRIPT_NAME:/index.php

●http://Myドメイン/index.php
(admin 編集用のヘッダが見えている)
PATH_INFO:
PHP_SELF:/index.php
REQUEST_URI:/index.php
SCRIPT_NAME:/index.php

●http://Myドメイン/index.php/
(admin 編集用のヘッダがない)
PATH_INFO:
PHP_SELF:/index.php
REQUEST_URI:/index.php/
SCRIPT_NAME:/index.php


よろしくお願い致します。
cocoa > Re: (BaserCMS3.0.1) トップページ、indexページのみ、『コントローラがありません』とエラーが出ます @ 2014/2/20 19:45
お世話になります。

その後、
自分でも、思いつくことを全部試してみています。

index.phpページがまともに表示されないのなら、
そのページだけ外して、別の名前で、『ホーム』をクリックしたときに表示できれば、と考えて、
そちらも、試しているのですが、
これも何故か、上手くいかず、表示は一向に変わりません。

他のページは表示されているので(今のところ、保存もできるようなので。。。)
『ホーム』ボタン部分の名前を変えて、
別名のページが表示されれば、何とか使えるのではと考えているのですが、
如何でしょうか?

どこをどうやっても、これ以上、前に進まないので、
Ver3は諦めた方が良いのでしょうか?

(でも、同じ、core-miniサーバーで、立ち上げている方もいるのに、どうしてなのかが、一向にわかりません。。。)

n1215 > Re: (BaserCMS3.0.1) トップページ、indexページのみ、『コントローラがありません』とエラーが出ます @ 2014/2/20 23:38
cocoa様

お待たせしました。
やはりhttp://Myドメイン/index.php/ でのアクセス時だけPATH_INFOとPHP_SELFの値がズレてますね。

できればサーバの設定(.htaccessかphp.ini)で解決したかったのですが、
サーバの設定が詳しく分からない以上
アプリケーションのほうで無理やり何とかする方法しか思いつかないです。
とりあえず以下を試してもらえますでしょうか。

●方針
Network/CakeRequestクラスの_url()メソッド
(簡単に書くとスマートURLのオンオフの差異を吸収しつつ
 CakePHPにどのページがリクエストされたかを判断するためのものです)
を修正します。


●修正するファイル
ディレクトリの中を探してみると
CakePHPのディレクトリ内 → lib/Cake/Network/CakeRequest.php
baserCMSのディレクトリ内 → lib/Baser/Network/CakeRequest.php
と2つありますが、CakePHPのデフォルトのものをbaserCMSは上書きして利用しているので実際に使われているのは後者です。

HelperやViewのようにapp/ディレクトリ以下に同じファイルを配置して上書きできると思っていたらどうやら出来ないみたいです。
あらかじめファイルのバックアップを取っておいて(本当は大変よろしくないですが)
lib/Baser/Network/CakeRequest.phpを書き換えます。


●修正内容
baserCMSが上書きしている部分のうち1箇所をCakePHP本来の動作に戻すだけです。
262行目辺りからになります。
		// CUSTOMIZE MODIFY 2013/09/30 ryuring
		// サブディレクトリ設置時のスマートURLオフに対応していなかったので調整
		// >>>
		//$base = $this->base;
		// ---
		$base = str_replace('/index.php', '', $this->base);
		// <<<

この中の4行目のコメントアウトを解除、6行目をコメントアウトします
		// CUSTOMIZE MODIFY 2013/09/30 ryuring
		// サブディレクトリ設置時のスマートURLオフに対応していなかったので調整
		// >>>
		$base = $this->base;
		// ---
		//$base = str_replace('/index.php', '', $this->base);
		// <<<

これでいかがでしょうか?
今回はコメントで書かれている"サブディレクトリ設置時"にはあたらないはずなので
戻しても他には問題ないと思います。多分。

Twitter: @n_1215

cocoa > Re: (BaserCMS3.0.1) トップページ、indexページのみ、『コントローラがありません』とエラーが出ます @ 2014/2/21 1:16
n1215さま

教えて頂いた通りに、
lib/Baser/Network/CakeRequest.php のバックアップを取ってから、
書き換えました。

結果、きちんと表示されるようになりました!

ありがとうございます!

更に、
スマートURLの設定も、再度、行ってみたところ、
これまで上手くいった試しがなかったのに(2系の時も。。)
スマートURLも使えるようになりました!!

特に、Ver3系の情報は、まだまだ少なかったため、
検索をかけても、新しい情報が見つかりませんでした。

毎回、色々と考えて下さり、ご回答下さったことに、心より感謝申し上げます。

BaserCMS3.0.1を利用しての、サイト構築は、まだまだこれからですので、
また、問題が生じることも出てくるかもしれませんが、
めげずに、構築していきたいと思います。

本当にありがとうございました(^_^)

n1215 > Re: (BaserCMS3.0.1) トップページ、indexページのみ、『コントローラがありません』とエラーが出ます @ 2014/2/21 1:39
cocoa 様

インストール・セットアップに投稿されてからもう10日以上……長かったですね。
根気強い作業お疲れ様です。
いろいろと調べたので自分の勉強にもなりました。

2系から3系へのデータ移行もなかなかの難関のようですが、
こちらは公式サイトその他(先ほど調べたらちょうどTwitterにも体験記が……)に詳しい情報があるので
ぜひその調子で頑張ってください。

最後に一点だけ。

3.0.1に含まれるバグを17件(?)フィックスした3.0.2が月末あたりにリリース予定のようです。
http://project.e-catchup.jp/projects/basercms/roadmap
今回の対処法はbaserCMS本体のアップデートの際に元に戻る可能性が大いにありますのでご留意ください。
その場合は同じ書換を行っていただければひとまずは動くかとは思います。

Twitter: @n_1215

cocoa > Re: (BaserCMS3.0.1) トップページ、indexページのみ、『コントローラがありません』とエラーが出ます @ 2014/2/21 2:34
n1215さま

更に、バグフィックスの情報、ありがとうございます。

気をつけてみます。
また、アップデートの際にも、各ファイルのバックアップなど確認してから、
行いたいと思います。

忘れない間に、覚え書きをメモします!