トラブルシューティング

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

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

500 Error with clean installation

Happens When...

When your HTTP server has insufficient permissions to follow symbolic links around the filesystem.

Solution

Check the .htaccess file and modify the following line

Option +FollowSymLinks

so that it reads:

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 や 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/'),

いつ発生するか...

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

解決策

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

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

いつ発生するか...

PHP がすでにティアダウンフェーズ(SSL トラフィックを搬送していない状態)の時にエラーが起こり、エラーハンドラが利用できない状態にあることが原因です。

解決策

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

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