PhalconPHP 数据库事务在服务器上失败
PhalconPHP Database transactions fail on server
我使用 PhalconPHP 开发了一个网站。该网站在我的本地计算机上运行良好,具有以下规格:
PHP Version 7.0.22
Apache/2.4.18
PhalconPHP 3.3.1
还有我以前的服务器(使用 DirectAdmin):
PHP Version 5.6.26
Apache 2
PhalconPHP 3.0.1
但最近我迁移到了新的 VPS。使用控制面板:
CENTOS 7.4 vmware [server]
cPanel v68.0.30
PHP Version 5.6.34 (multiple versions available, this one selected by myself)
PhalconPHP 3.2.2
在新 VPS 我的网站上总是给我 Error 500
。
在我的 Apache 错误日志文件中:[cgi:error] End of script output before headers: ea-php70, referer: http://mywebsitedomain.net
我怀疑是新的数据库系统。新的不是mySql。它是 MariaDB 10.1
。我试图降级到 MySQL 5.6,但 WHM 说我无法降级到更低版本。
这是我的配置文件:
[database]
adapter = Mysql
host = localhost
username = root
password = XXXXXXXXXXXX
dbname = XXXXXXXXXXXX
charset = utf8
和我的 Services.php
:
protected function initDb()
{
$config = $this->get('config')->get('database')->toArray();
$dbClass = 'Phalcon\Db\Adapter\Pdo\' . $config['adapter'];
unset($config['adapter']);
return new $dbClass($config);
}
在我的控制器中...
例如这段代码抛出 Error 500
:
$this->view->files = Patients::query()->orderBy("id ASC")->execute();
但将 id
更改为 fname
可以解决问题:
$this->view->files = Patients::query()->orderBy("fname ASC")->execute();
甚至下面的代码抛出 error 500
:
$user = Users::findFirst(array(
"conditions" => "id = :id:",
"bind" => array("id" => $this->session->get("userID"))
));
PhalconPHP和MariaDB的兼容性有问题吗?
MariaDB 的构建目的是大部分 与MySQL 客户端兼容,这不太可能是您遇到问题的原因。如果您仍然担心,您可以通过转储(导出)您的表、切换并再次导入它们,从 MariaDB 切换到 MySQL(反之亦然)。
更有可能的是,您显示的错误行表明您的新服务器实际上是 运行 PHP7 (ea-php70
) 而不是 PHP5.6以为你选择了。
错误 End of script output before headers
表示 CGI 脚本(在本例中 PHP7 本身)在终止前没有生成任何 HTTP headers。我怀疑您的 PhalconPHP 版本与 PHP7 不兼容,因此会立即崩溃。
如果 cPanel 不允许您正确配置您的基础架构,您可能别无选择,只能放弃它并手动设置您的堆栈。但由于您可能为 cPanel 付费,您可以先尝试向他们开具支持票:https://cpanel.com/support/
很可能是旧的 phalconPHP 版本,我猜它不支持最新的 php 7.x 版本。我记得我在另一个博客问题中读过类似的问题。
我使用 PhalconPHP 开发了一个网站。该网站在我的本地计算机上运行良好,具有以下规格:
PHP Version 7.0.22
Apache/2.4.18
PhalconPHP 3.3.1
还有我以前的服务器(使用 DirectAdmin):
PHP Version 5.6.26
Apache 2
PhalconPHP 3.0.1
但最近我迁移到了新的 VPS。使用控制面板:
CENTOS 7.4 vmware [server]
cPanel v68.0.30
PHP Version 5.6.34 (multiple versions available, this one selected by myself)
PhalconPHP 3.2.2
在新 VPS 我的网站上总是给我 Error 500
。
在我的 Apache 错误日志文件中:[cgi:error] End of script output before headers: ea-php70, referer: http://mywebsitedomain.net
我怀疑是新的数据库系统。新的不是mySql。它是 MariaDB 10.1
。我试图降级到 MySQL 5.6,但 WHM 说我无法降级到更低版本。
这是我的配置文件:
[database]
adapter = Mysql
host = localhost
username = root
password = XXXXXXXXXXXX
dbname = XXXXXXXXXXXX
charset = utf8
和我的 Services.php
:
protected function initDb()
{
$config = $this->get('config')->get('database')->toArray();
$dbClass = 'Phalcon\Db\Adapter\Pdo\' . $config['adapter'];
unset($config['adapter']);
return new $dbClass($config);
}
在我的控制器中...
例如这段代码抛出 Error 500
:
$this->view->files = Patients::query()->orderBy("id ASC")->execute();
但将 id
更改为 fname
可以解决问题:
$this->view->files = Patients::query()->orderBy("fname ASC")->execute();
甚至下面的代码抛出 error 500
:
$user = Users::findFirst(array(
"conditions" => "id = :id:",
"bind" => array("id" => $this->session->get("userID"))
));
PhalconPHP和MariaDB的兼容性有问题吗?
MariaDB 的构建目的是大部分 与MySQL 客户端兼容,这不太可能是您遇到问题的原因。如果您仍然担心,您可以通过转储(导出)您的表、切换并再次导入它们,从 MariaDB 切换到 MySQL(反之亦然)。
更有可能的是,您显示的错误行表明您的新服务器实际上是 运行 PHP7 (ea-php70
) 而不是 PHP5.6以为你选择了。
错误 End of script output before headers
表示 CGI 脚本(在本例中 PHP7 本身)在终止前没有生成任何 HTTP headers。我怀疑您的 PhalconPHP 版本与 PHP7 不兼容,因此会立即崩溃。
如果 cPanel 不允许您正确配置您的基础架构,您可能别无选择,只能放弃它并手动设置您的堆栈。但由于您可能为 cPanel 付费,您可以先尝试向他们开具支持票:https://cpanel.com/support/
很可能是旧的 phalconPHP 版本,我猜它不支持最新的 php 7.x 版本。我记得我在另一个博客问题中读过类似的问题。