トラブルシューティング

Fuel はかなり多くの設定があります。ときに設定が適切に作用するにはいくつかの作業が必要です。あなたのマシンをセットアップする際に起こるかもしれないいくつかのシナリオを以下にリストアップしました。

問題が以下にリストアップされていない場合や、リストされているが適当な解決方法が提供さいれていない場合は、問題トラッカー ( http://dev.fuelphp.com ) にレポートを上げてください。

クリーンインストールで 500 エラー

いつ発生するか...

あなたの HTTP サーバが、ファイルシステムに関してシンボリックリンクをフォローする十分なパーミッションを持たないとき。

解決方法

.htaccess ファイルをチェックし、次の行を修正します

Option +FollowSymLinks

読み込みできるように:

Option +SymLinksIfOwnerMatch

クリーンインストール時の構文エラー

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 のバグらしく、このドキュメント(英語版)執筆時点では修正されていません。 殆どの人は PHP 5.3.x を利用しており、マルチバイト環境ではこの問題は報告されていません。 FuelPHP 開発チームにおいては、PHP 5.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 や Presenter に渡されるあらゆる値は、あなたが明示的に安全だとマークしない限り、 危険だと考えることを意味します。 配列の中身やオブジェクトのプロパティを含む、安全でないすべての値は 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/'),

いつ発生するか...

DOCROOT/index.php で realpath() が相対パスを解決するために使われていて、シンボリックリンクを含むパス情報をキャッシュすることが原因です。

解決策

これを修正するには、DOCROOT/index.php を変更し、キャッシュをクリアするシンボリックリンクを含むそれぞれのパスに clearstatcache() を使用しなければなりません。またはパスのキャッシュをクリアするために Web サーバをリロードすることもできます。 手動では clearstatcache() コマンドを発行できません。これは、スレッドでキャッシュされ、発行されたコマンドは現在のスレッドに対してのみクリアするためです。

例外発生時にスタックフレームに何も入ってこない

いつ発生するか...

PHP がすでにティアダウンフェーズの時にエラーが起こり、エラーハンドラが利用できない状態にあることが原因です。

解決策

発生し得る原因は沢山ありますが、最もわかりやすい例を記しておきます:

  • Web サーバがログファイルを格納するフォルダ(デフォルトは APPPATH.'logs')への正しい書き込み権限を持っていない