トラブルシューティング
Fuel はかなり多くの設定があります。ときに設定が適切に作用するにはいくつかの作業が必要です。あなたのマシンをセットアップする際に起こるかもしれないいくつかのシナリオを以下にリストアップしました。
問題が以下にリストアップされていない場合や、リストされているが適当な解決方法が提供さいれていない場合は、issue tracker ( http://dev.fuelphp.com ) にレポートを上げてください。
クリーンインストール時の構文エラー
Parse error: syntax error, unexpected T_FUNCTION, expecting ')' in /Users/info/Sites/fuel/public/index.php on line 9
いつ発生するか...
5.3 以前のバージョンの PHP で Fuel を実行した時
解決方法
別のテストファイルで phpinfo(); をチェックし、5.3 以上が実行されているかどうかを確認します。詳細は 要件 にあります。
ローカルで開発している際に、サーバを PHP 5.3 の最新のバージョンにアップデートします。ローカルで開発していない場合は、ホスティング会社に尋ねる必要があります。5.3 より前のバージョンは単に私たちだけではなく、PHP 自身 もサポートがなくなっています。
autoloader.php で "child pid [xxxx] exit signal Bus error" が発生する
いつ発生するか...
マルチバイト文字を扱う未知の状況下で発生する
解決策
PHPのバグらしく、このドキュメント(英語版)執筆時点では修正されていません。
殆どの人はPHP5.3.xを利用しており、マルチバイト環境ではこの問題は報告されていません。
FuelPHP開発チームにおいては、PHP5.4.xの利用者で同じエラーに遭遇したという例はまだありません。
回避策として、 zend-multibyte と mbstring を無効にするか、違うバージョンの PHP を使うことが推奨されています。
動作しているが index ページが 404 である
いつ発生するか...
php のインストールには index.php の後に .htaccess にクエスチョンマークを追加する必要がある場合があります。
解決方法
次のようにクエスチョンマークを追加します:
# URL リライトをオンに
RewriteEngine On
# インストールしたディレクトリ
RewriteBase /
# もし fuel が上になければ
# RewriteBase /public
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
# index.php の後の ? に注意
fcgi のインストールの場合にはいくつかの解決方法があります:
RewriteRule ^(.*)$ index.php?$1 [L]
# ? の後のスラッシュが削除されていることに注意
#他のセットアップ方法:
RewriteRule ^(.*)$ /index.php/$1 [L]
# index.php の前にスラッシュが追加されていることに注意
Oil がデータベースに接続できないがアプリケーションは接続できる
mysql_connect(): [2002] No such file or directory (trying to connect via unix:///var/mysql/mysql.sock) in /Users/phil/Sites/fuel/fuel/core/classes/database/mysql/connection.php on 73
いつ発生するか...
コマンドラインでデータベースを設定しようとしたときに起こります。しばしば、MAMP で MySQL サーバを使用したときに起こります。その理由は、MAMP が提供している MAMP の PHP-CLI の インストールが間違っているためです。そのため PHP はデータベースサーバが不明になります。
注意: 問題を修正するために次のステップ実行する前に、通常のブラウザ接続してデータベース接続を修正します。
解決方法
database.php 内の "localhost" を "127.0.0.1" に変更します。
それが失敗する場合:
MAMP の mysql.socket にリンクするシンボリックリンクを作成します。
$ sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /var/mysql/mysql.sock
場合によっては先にディレクトリを作成する必要があります:
$ sudo mkdir /var/mysql
$ sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /var/mysql/mysql.sock
ORM/DB が私のデータを HTML エンティティとして返す
いつ発生するか...
Fuel には "output encoding" と呼ばれるセキュリティ機構があり、デフォルトで有効になっています。これは、
View や ViewModel に渡されるあらゆる値は、あなたが明示的に安全だとマークしない限り、
危険だと考えることを意味します。
配列の中身やオブジェクトのプロパティを含む、安全でないすべての値は htmlentities を通過します。
解決方法
View クラスでのセキュリティ についてもっと学んでください。
Orm\Exception [ Error ]: Listing columns not failed
エラー
Orm\Exception [ Error ]: Listing columns not failed, you have to set the model properties with a static $_properties setting in the model.
いつ発生するか...
mysql への接続していないときに ORM モデルを使用した場合
解決方法
データベース設定の値が正しいか確認し、データベースへの接続をテストしてください。
プロパティを持つモデルを更新します。
protected static $_properties = array('id', 'title', 'contents', 'publish');
または、APPATH/config/db.php 内のデータベースの種類を "mysql" に変更します。
index.php の場所を変更した後、Asset が動作しない
いつ発生するか...
パスが正しく定義されていないことが原因で、Assetクラスではindex.phpへの相対パスが使われています。
解決策
修正するためには app/config/asset.php を正しいパスにセットするように変更しなければなりません。DOCROOT という定数 が index.php 内で定義されています。
define('DOCROOT', __DIR__.DIRECTORY_SEPARATOR);
app/config/asset.php でこれを使用可能です。これは asset パスをデフォルトのフォルダ DOCROOT/public/assets に戻します。そのサブフォルダには、css/、img/、js/ などが配置されています:
'paths' => array(DOCROOT.'public/assets/'),
シンボリックリンクを変更した後、Core、App、Packages が見つからない
いつ発生するか...
DOCROOT/index.phpでrealpth()が相対パスを解決するために使われていて、シンボリックリンクを含むパス情報をキャッシュすることが原因です。
解決策
これを修正するには、DOCROOT/index.php を変更し、キャッシュをクリアするシンボリックリンクを含むそれぞれのパスに
clearstatcache() を使用しなければなりません。またはパスのキャッシュをクリアするために Web サーバをリロードすることもできます。
手動では clearstatcache() コマンドを発行できません。これは、スレッドでキャッシュされ、発行されたコマンドは現在のスレッドに対してのみクリアするためです。
例外発生時にスタックフレームに何も入ってこない
いつ発生するか...
PHPがすでにティアダウンフェーズ(SSLトラフィックを搬送していない状態)の時にエラーが起こり、エラーハンドラが利用できない状態にあることが原因です。
解決策
発生し得る原因は沢山ありますが、最もわかりやすい例を記しておきます:
- webサーバが(デフォルトのAPPPATH、'logs')ログファイルを格納するフォルダへの正しいアクセス権を持っていない