当前位置: 首页 > 文档资料 > FuelPHP 中文文档 >

故障排除 - 安装

优质
小牛编辑
125浏览
2023-12-01

Fuel 支援各式各样的配置,有时为了正常工作需要一些配置。以下列出了几个当你在你的机器上设置 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 的最新版本。如果你不是在本地开发,你将需要询问你的主机供应商。PHP 5.3 以下的版本不只我们不支援,还有 PHP 它们自己本身也是。

我在 autoloader.php 得到 "child pid [xxxx] exit signal Bus error"

发生在……

在未知的情况下,当使用多位元组支援。

解法

这似乎是一个 PHP 的 bug,在撰写本文的时候还没有修正被发布。 大多数使用 PHP 5.3.3 和多位元组支援的人没有回报此问题。 我们还没有看到使用 PHP 5.4.x 的使用者遇到相同的错误。

做为一种变通方法,建议停用 zend-multibyte 和 mbstring,或尝试使用不同版本的 PHP。

能运作,但首页是 404。

发生在……

在某些 PHP 安装必须在 .htaccess 档案中的 index.php 后面添加一个问号

解法

像这样添加问号:

# 打开 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 无法连到 DB 但应用程序可以

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

发生在……

发生在当你尝试藉由命令列与资料库互动,通常在你为你的 MySQL 伺服器使用 MAMP 时。造成这样的原因是,MAMP 提供的 PHP-CLI 对 MAMP 来说是一个不同的安装,所以 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 有安全性的对策被称为「输出编码」,在预设情况下是打开的。 这意味着,任何传递给 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.

发生在……

当使用 ORM 模型不是藉由 MySQL 连线时。

解法

确认 db 配置值是正确的并且测试你的资料库连线。

更新模型包含的特性。

protected static $_properties = array('id', 'title', 'contents', 'publish');

或在 APPATH/config/db.php 中变更 db 类型为 "mysql"

在变更 index.php 的位置后,Asset 不运作。

发生在……

那是因为你的路径没有正确定义,Asset 类别使用一个相对于 index.php 的路径。

解法

要修正这个问题,你必须修改 app/config/asset.php 去设定正确路径。注意,在 index.php 中一个名为 DOCROOT 的常数被定义:

define('DOCROOT', __DIR__.DIRECTORY_SEPARATOR);

你可以在 app/config/asset.php 中使用。这将设定路径回到预设文件夹 DOCROOT/public/assets,子文件夹 css/ img/ 和 js/ 的所在:

'paths' => array(DOCROOT.'public/assets/'),

在我变更一个符号连结后,核心、应用程序或套件无法被找到

发生在……

这可能会发生,因为在 DOCROOT/index.php,realpath() 被用来处理相对路径,这将快取路径资讯,包括符号连结。

解法

要修正这个问题,你必须修改 DOCROOT/index.php 并为每一个包含符号连结的路径使用 clearstatcache() 以清除快取。或者,你可以重载你的网页伺服器以清除路径快取。你不能手动发出 clearstatcache() 命令, 因为它被每一个线程快取,且发出该命令将只清除目前线程的快取。

Exception thrown without a stack frame

发生在……

造成此讯息的原因是当 PHP 已经在它的拆解阶段(tear-down phase)发生了错误,而且没有错误处理程序是可用的了。

解法

为什幺会发生这种情况的原因有很多。我们会尝试记录最显而易见的:

  • 你的网页伺服器没有写入储存 log 档案资料夹的权限(预设是 APPPATH.'logs')。