PhalconPHP 数据库事务在服务器上失败

Posted

技术标签:

【中文标题】PhalconPHP 数据库事务在服务器上失败【英文标题】:PhalconPHP Database transactions fail on server 【发布时间】:2018-08-25 11:03:56 【问题描述】:

我使用 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。使用 cPanel:

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 的兼容性有问题吗?

【问题讨论】:

你不记录错误信息吗? “错误 500”没有帮助。 “寻找来自可靠和/或官方来源的答案。”对外部资源的请求不是被明确认为是题外话吗?缺少minimal reproducible example 不被认为是题外话吗?无论如何,请在您的机器上切换数据库以验证这是否是您的代码不起作用的原因。 你检查过你的 .htaccess 文件了吗? 【参考方案1】:

很可能是旧的 phalconPHP 版本,我猜它不支持最新的 php 7.x 版本。我记得我在另一个博客问题中读过类似的问题。

【讨论】:

【参考方案2】:

MariaDB 的构建大部分与 MySQL 客户端兼容,这不太可能是您出现问题的原因。如果您仍然担心,可以通过转储(导出)表、切换并再次导入它们,从 MariaDB 切换到 MySQL(反之亦然)。

更有可能的是,您显示的错误行表明您的新服务器实际上运行的是 PHP7 (ea-php70),而不是您认为选择的 PHP5.6。

错误End of script output before headers 表示CGI 脚本(在本例中为PHP7 本身)在终止之前没有产生任何HTTP 标头。我怀疑您的 PhalconPHP 版本与 PHP7 不兼容,因此会立即崩溃。

如果 cPanel 无法让您正确配置基础架构,您可能别无选择,只能放弃它并手动设置堆栈。但由于您可能为 cPanel 付费,您可以先尝试向他们开具支持票:https://cpanel.com/support/

【讨论】:

@DevMoutarde 是的,但是服务器上有一个旧的 PhalconPHP 版本。 @Cobra_Fast 感谢您的回答。奇怪的是,如果我删除与数据库相关的所有代码,phalcon 似乎可以工作。 invo 示例应用程序运行良好,这表明扩展程序已加载并正常工作。但是当我对数据库执行一些查询时,只会在我通过整数字段查询时发生此问题。 @Agha 那么尝试切换到 MySQL 看看是否能解决您的问题。

以上是关于PhalconPHP 数据库事务在服务器上失败的主要内容,如果未能解决你的问题,请参考以下文章

sh 在Ubuntu 16.04上安装PHP7的PhalconPhp

为什么失败的微服务架构,大多数死在分布式事务?

为什么说失败的微服务架构,大多数死在分布式事务?

微服务事务

分布式-事务

分布式事务XA