作者:没有结局的相遇 | 来源:互联网 | 2023-06-28 21:02
我正在尝试在docker容器(运行Ubuntu 18.04)中设置Question2Answer。我能够将其连接到我的数据库(最初是空的),但是随后遇到了安装问题。首先,如果我只是访问基本URL,则会得到以下信息:
您的Question2Answer数据库已正确检查。
[转到管理中心]
有效地单击链接无济于事,因为我再次获得了同一页面的服务。是时候卷起袖子去潜水了。
探索了一段时间后,我尝试手动访问以下URL,确定在安装过程中此点应自动被调用:
/index.php?qa=install
然后这给了我
数据库set_charset错误
表面上看似乎不是很有帮助,但是到目前为止归结为,对qa_db_connect()内部的mysqli :: set_charset()的调用返回false,而mysqli :: $ errno和mysqli却返回: :$ error之后都为空。这是qa_db_connect()的摘录(摘自qa-include / qa-db.php中的80行):
// in mysqli we connect and select database in constructor
if ($port !== null)
$db = new mysqli($host,QA_FINAL_MYSQL_username,QA_FINAL_MYSQL_PASSWORD,QA_FINAL_MYSQL_DATABASE,$port);
else
$db = new mysqli($host,QA_FINAL_MYSQL_DATABASE);
// must use procedural `mysqli_connect_error` here prior to 5.2.9
$conn_error = mysqli_connect_error();
if ($conn_error)
qa_db_fail_error('connect',$db->connect_errno,$conn_error);
// From Q2A 1.5,we explicitly set the character encoding of the MySQL connection,instead of using lots of "SELECT BINARY col"-style queries.
// Testing showed that overhead is minimal,so this seems worth trading off against the benefit of more straightforward queries,especially
// for plugin developers.
if (!$db->set_charset('utf8'))
qa_db_fail_error('set_charset',$db->errno,$db->error);
这里是qa_db_fail_error()方法,它说明了传入的errno和错误值为空的事实(基于上面的微薄输出):
function qa_db_fail_error($type,$errno = null,$error = null,$query = null)
{
if (qa_to_override(__FUNCTION__)) { $args=func_get_args(); return qa_call_override(__FUNCTION__,$args); }
global $qa_db_fail_handler;
@error_log('PHP Question2Answer MySQL ' . $type . ' error ' . $errno . ': ' . $error . (isset($query) ? (' - Query: ' . $query) : ''));
if (function_exists($qa_db_fail_handler))
$qa_db_fail_handler($type,$errno,$error,$query);
else {
echo sprintf(
'
',htmlspecialchars($type . ' error ' . $errno),nl2br(htmlspecialchars($error)),nl2br(htmlspecialchars($query))
);
qa_exit('error');
}
}
不幸的是,搜索该问题到目前为止没有发现任何帮助。如果我尝试在开发服务器上(顺便说一下,在Joomla子目录中)设置Q2A,则不会遇到这些问题,并出现页面提示我设置数据库。
据我所知,我的docker容器配置正确。我正在使用Apache,PHP-FPM(7.3)并安装了以下php扩展名:
ii php-common 2:70+ubuntu18.04.1+deb.sury.org+6 all Common files for PHP packages
ii php7.3 7.3.11-1+ubuntu18.04.1+deb.sury.org+1 all server-side,HTML-embedded scripting language (metapackage)
ii php7.3-cli 7.3.11-1+ubuntu18.04.1+deb.sury.org+1 amd64 command-line interpreter for the PHP scripting language
ii php7.3-common 7.3.11-1+ubuntu18.04.1+deb.sury.org+1 amd64 documentation,examples and common module for PHP
ii php7.3-curl 7.3.11-1+ubuntu18.04.1+deb.sury.org+1 amd64 CURL module for PHP
ii php7.3-fpm 7.3.11-1+ubuntu18.04.1+deb.sury.org+1 amd64 server-side,HTML-embedded scripting language (FPM-CGI binary)
ii php7.3-gd 7.3.11-1+ubuntu18.04.1+deb.sury.org+1 amd64 GD module for PHP
ii php7.3-intl 7.3.11-1+ubuntu18.04.1+deb.sury.org+1 amd64 Internationalisation module for PHP
ii php7.3-json 7.3.11-1+ubuntu18.04.1+deb.sury.org+1 amd64 JSON module for PHP
ii php7.3-mbstring 7.3.11-1+ubuntu18.04.1+deb.sury.org+1 amd64 MBSTRING module for PHP
ii php7.3-mysql 7.3.11-1+ubuntu18.04.1+deb.sury.org+1 amd64 MySQL module for PHP
ii php7.3-opcache 7.3.11-1+ubuntu18.04.1+deb.sury.org+1 amd64 Zend OpCache module for PHP
ii php7.3-readline 7.3.11-1+ubuntu18.04.1+deb.sury.org+1 amd64 readline module for PHP
ii php7.3-xml 7.3.11-1+ubuntu18.04.1+deb.sury.org+1 amd64 DOM,SimpleXML,WDDX,XML,and XSL module for PHP
ii php7.3-zip 7.3.11-1+ubuntu18.04.1+deb.sury.org+1 amd64 Zip module for PHP
最后,出于好奇,我尝试忽略set_charset的错误返回并允许代码继续进行。进行此更改后,我在执行的第一个SQL查询上会收到类似的错误:
数据库查询错误
选择标题,内容来自qa_options
同样,调用查询返回false,但错误详细信息为空。任何线索都非常感谢!