由于 PHP 版本,Apache 中的 PHPMyAdmin 500 内部服务器错误

2022-01-05 00:00:00 ubuntu php mysql apache phpmyadmin

版本:

  • 操作系统 lsb_release -a:Ubuntu 18.04.5 LTS
  • PHP php -v : 8.0.1
  • Apache apache2 -v : 2.4.29 (Ubuntu)
  • MySQL mysql --version : mysql Ver 14.14 Distrib 5.7.32

问题:

我正在尝试使用以下 文章.但是,我在从浏览器访问 phpmyadmin 时遇到 HTTP 500 错误.

并使用以下命令安装 phpmyadmin.

  • sudo apt install phpmyadmin php-mbstring php-zip php-gd php-json php-curl

尝试过:

所以,我检查了错误日志 tail -f/var/log/apache2/error.log 并发现 Phpmyadmin 运行在折旧版本的 PHP 上.

[Sat Jan 30 12:56:38.798871 2021] [php:error] [pid 17271] [client103.25.169.179:28514] PHP 致命错误:数组和字符串偏移访问不再支持带花括号的语法/usr/share/phpmyadmin/libraries/Util.php 在线 2087[Sat Jan 30 12:56:38.798871 2021] [php:error] [pid 17271] [client 103.25.169.179:28514] PHP 致命错误:未捕获的 ValueError:mb_convert_encoding(): 参数 #2 ($to_encoding) 必须是有效的编码,"在/usr/share/php/php-php- 中给出gettext/gettext.inc:181
堆栈跟踪:
#0/usr/share/php/php-php-gettext/gettext.inc(181): mb_convert_encoding()
#1/usr/share/php/php-php-gettext/gettext.inc(278): _encode()
#2/usr/share/php/php-php-gettext/gettext.inc(285): _gettext()
#3/usr/share/phpmyadmin/libraries/sanitizing.lib.php(179): __()
#4/usr/share/phpmyadmin/libraries/Message.php(607): PMA_sanitize()
#5/usr/share/phpmyadmin/libraries/Message.php(672):PMA\libraries\Message::decodeBB()
#6/usr/share/phpmyadmin/libraries/Error.php(220): PMA\libraries\Message->getMessage()
#7/usr/share/phpmyadmin/libraries/ErrorHandler.php(193):PMA\libraries\Error->getHash()
#8/usr/share/phpmyadmin/libraries/ErrorHandler.php(156):PMA\libraries\ErrorHandler->addError()
#9 [内部函数]:PMA\libraries\ErrorHandler->handleError()
#10/usr/share/phpmyadmin/libraries/session.inc.php(133): ini_set()
#11/usr/share/phpmyadmin/libraries/common.inc.php(280): require('...')
#12/usr/share/phpmyadmin/index.php(13): require_once('...')
#13 {main}
在第 181 行的/usr/share/php/php-php-gettext/gettext.inc 中抛出

  • 我通过使用 [ ] 删除 { } 解决了数组和字符串偏移访问语法错误
  • 运行以下命令sudo phpenmod mbstring

解决方案

重要提示:

如果您将 phpMyAdmin 公开或需要较新 phpMyAdmin 版本的功能,请更改版本号以获得更高的安全性.

<块引用>

这是从聊天中截取的.有些事情可能不准确,但这解决了 OP 的问题

使用以下教程安装 PHPMyAdmin:

1.

apt purge phpmyadmin -y

cd/path/to/somefolder

wget https://files.phpmyadmin.net/phpMyAdmin/5.1.0-rc1/phpMyAdmin-5.1.0-rc1-all-languages.zip &&解压 phpMyAdmin-5.1.0-rc1-all-languages.zip &&cd phpMyAdmin-5.1.0-rc1-all-languages

apt install pwgen -y

  1. 记下此命令的输出,我将其称为pw

pwgen -s 32 1

cp config.sample.inc.php config.inc.php

  1. 使用喜欢的编辑器编辑 config.inc.php,并将 pw 粘贴到这一行:

<预><代码>...$cfg['blowfish_secret'] = 'STRINGOFTHIRTYTWORANDOMCHARACTERS';/* 你必须填写这个以获得 cookie 身份验证!*/...

vim/etc/apache2/conf-available/phpmyadmin-custom.conf

  1. 将以下内容粘贴到上一个命令中:

别名/phpmyadmin/path/to/that/phpMyAdmin-5.1.0-rc1-all-languages<目录"/path/to/that/phpMyAdmin-5.1.0-rc1-all-languages>选项 SymLinksIfOwnerMatch目录索引 index.php要求所有授予</目录>

  1. 使用:wq保存上一个,运行以下命令

a2enconf phpmyadmin-custom &&systemctl 重启 apache2 &&mysql

  1. your_password_here 替换为您自己的密码.

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password_here';

systemctl restart mysql

现在应该可以了.

附加说明:

要只允许您查看 phpMyAdmin,请尝试:

<目录/path/to/that/phpMyAdmin-5.1.0-rc1-all-languages">选项 SymLinksIfOwnerMatch目录索引 index.php需要本地# 或者改成# 需要 ip 127.0.0.1# 将 127.0.0.1 更改为您的个人电脑 IP 地址,# 不给服务器ip# 如果你想从公共服务器访问phpMyAdmin,但不允许其他人访问它</目录>

Version:

  • OS lsb_release -a : Ubuntu 18.04.5 LTS
  • PHP php -v : 8.0.1
  • Apache apache2 -v : 2.4.29 (Ubuntu)
  • MySQL mysql --version : mysql Ver 14.14 Distrib 5.7.32

Problem:

I'm trying to install LAMP Stack using following article. However, I was getting HTTP 500 Error while accessing phpmyadmin from browser.

And installed phpmyadmin using below command.

  • sudo apt install phpmyadmin php-mbstring php-zip php-gd php-json php-curl

Tried :

So, I checked with Error Log tail -f /var/log/apache2/error.log and found that Phpmyadmin was running on depreciated version of PHP.

[Sat Jan 30 12:56:38.798871 2021] [php:error] [pid 17271] [client 
103.25.169.179:28514] PHP Fatal error:  Array and string offset access 
syntax with curly braces is no longer supported in 
/usr/share/phpmyadmin/libraries/Util.php on line 2087

[Sat Jan 30 12:56:38.798871 2021] [php:error] [pid 17271] [client 103.25.169.179:28514] PHP Fatal error:  Uncaught ValueError: 
mb_convert_encoding(): Argument #2 ($to_encoding) must be a valid 
encoding, "" given in /usr/share/php/php-php-
gettext/gettext.inc:181
Stack trace:
#0 /usr/share/php/php-php-
gettext/gettext.inc(181): mb_convert_encoding()
#1 /usr/share/php/php-
php-gettext/gettext.inc(278): _encode()
#2 /usr/share/php/php-php-
gettext/gettext.inc(285): _gettext()
#3 
/usr/share/phpmyadmin/libraries/sanitizing.lib.php(179): __()
#4 
/usr/share/phpmyadmin/libraries/Message.php(607): PMA_sanitize()
#5 
/usr/share/phpmyadmin/libraries/Message.php(672): 
PMA\libraries\Message::decodeBB()
#6 
/usr/share/phpmyadmin/libraries/Error.php(220): PMA\libraries\Message-
>getMessage()
#7 /usr/share/phpmyadmin/libraries/ErrorHandler.php(193): 
PMA\libraries\Error->getHash()
#8 
/usr/share/phpmyadmin/libraries/ErrorHandler.php(156): 
PMA\libraries\ErrorHandler->addError()
#9 [internal function]: 
PMA\libraries\ErrorHandler->handleError()
#10 
/usr/share/phpmyadmin/libraries/session.inc.php(133): ini_set()
#11 
/usr/share/phpmyadmin/libraries/common.inc.php(280): require('...')
#12 
/usr/share/phpmyadmin/index.php(13): require_once('...')
#13 {main}
  
thrown in /usr/share/php/php-php-gettext/gettext.inc on line 181

  • I'd solved Array and string offset access syntax error by removing { } with [ ]
  • Run the following command sudo phpenmod mbstring

解决方案

Important:

Please change the version number to get more security if you have phpMyAdmin exposed to the public or need features from newer phpMyAdmin versions.

This was taken from a chat. Some things might be inaccurate, but this solved the OP's problem

Install PHPMyAdmin using the following tutorial:

1.

apt purge phpmyadmin -y

cd /path/to/somefolder

wget https://files.phpmyadmin.net/phpMyAdmin/5.1.0-rc1/phpMyAdmin-5.1.0-rc1-all-languages.zip && unzip phpMyAdmin-5.1.0-rc1-all-languages.zip && 
cd phpMyAdmin-5.1.0-rc1-all-languages

apt install pwgen -y

  1. Make note of the output of this command, I will refer to it as pw

pwgen -s 32 1

cp config.sample.inc.php config.inc.php

  1. Edit config.inc.php with favorite editor, and paste the pw in this line:

. . .
$cfg['blowfish_secret'] = 'STRINGOFTHIRTYTWORANDOMCHARACTERS'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
. . .

vim /etc/apache2/conf-available/phpmyadmin-custom.conf

  1. Paste the following to that previous command:

Alias /phpmyadmin /path/to/that/phpMyAdmin-5.1.0-rc1-all-languages
<Directory "/path/to/that/phpMyAdmin-5.1.0-rc1-all-languages">
Options SymLinksIfOwnerMatch
DirectoryIndex index.php
Require all granted
</Directory>

  1. Save the previous one using :wq, Run the following command

a2enconf phpmyadmin-custom && systemctl restart apache2 && mysql

  1. Replace your_password_here to your own password.

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password_here';

systemctl restart mysql

It should work now.

Additional notes:

To only allow you to view phpMyAdmin, try:

<Directory "/path/to/that/phpMyAdmin-5.1.0-rc1-all-languages">
Options SymLinksIfOwnerMatch
DirectoryIndex index.php
Require local
# Or change it to
# Require ip 127.0.0.1
# change 127.0.0.1 to your personal computers ip address,
# not to the server ip
# if you want to access phpMyAdmin from a public server, but not allow others to access it
</Directory>

相关文章