PHP由于 PHP 版本,Apache 出现 MyAdmin 500 内部服务器错误
PHPMyAdmin 500 Internal Server Error in Apache due to PHP Version
版本:
- OS
lsb_release -a
: Ubuntu 18.04.5 LTS
- PHP
php -v
: 8.0.1
- 阿帕奇
apache2 -v
:2.4.29 (Ubuntu)
- MySQL
mysql --version
: mysql Ver 14.14 Distrib 5.7.32
问题:
我正在尝试使用以下 article 安装 LAMP Stack。但是,我在从浏览器访问 phpmyadmin
时收到 HTTP 500 Error
。
并使用以下命令安装了 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] [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\nStack trace:\n#0 /usr/share/php/php-php-
gettext/gettext.inc(181): mb_convert_encoding()\n#1 /usr/share/php/php-
php-gettext/gettext.inc(278): _encode()\n#2 /usr/share/php/php-php-
gettext/gettext.inc(285): _gettext()\n#3
/usr/share/phpmyadmin/libraries/sanitizing.lib.php(179): __()\n#4
/usr/share/phpmyadmin/libraries/Message.php(607): PMA_sanitize()\n#5
/usr/share/phpmyadmin/libraries/Message.php(672):
PMA\libraries\Message::decodeBB()\n#6
/usr/share/phpmyadmin/libraries/Error.php(220): PMA\libraries\Message-
>getMessage()\n#7 /usr/share/phpmyadmin/libraries/ErrorHandler.php(193):
PMA\libraries\Error->getHash()\n#8
/usr/share/phpmyadmin/libraries/ErrorHandler.php(156):
PMA\libraries\ErrorHandler->addError()\n#9 [internal function]:
PMA\libraries\ErrorHandler->handleError()\n#10
/usr/share/phpmyadmin/libraries/session.inc.php(133): ini_set()\n#11
/usr/share/phpmyadmin/libraries/common.inc.php(280): require('...')\n#12
/usr/share/phpmyadmin/index.php(13): require_once('...')\n#13 {main}\n
thrown in /usr/share/php/php-php-gettext/gettext.inc on line 181
- 我通过使用
[ ]
删除 { }
解决了 数组和字符串偏移访问语法错误
- 运行下面的命令
sudo phpenmod mbstring
重要:
如果您将 phpMyAdmin 暴露给 public 或需要更新 phpMyAdmin 版本的功能,请更改版本号以获得更高的安全性。
This was taken from a chat. Some things might be inaccurate, but this solved the OP's problem
使用以下教程安装 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 && unzip phpMyAdmin-5.1.0-rc1-all-languages.zip &&
cd phpMyAdmin-5.1.0-rc1-all-languages
apt install pwgen -y
- 记下此命令的输出,我将其称为 pw
pwgen -s 32 1
cp config.sample.inc.php config.inc.php
- 用最喜欢的编辑器编辑 config.inc.php,然后将 pw 粘贴到这一行:
. . .
$cfg['blowfish_secret'] = 'STRINGOFTHIRTYTWORANDOMCHARACTERS'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
. . .
vim /etc/apache2/conf-available/phpmyadmin-custom.conf
- 将以下内容粘贴到之前的命令中:
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>
- 使用
:wq
、运行以下命令保存上一个
a2enconf phpmyadmin-custom && systemctl restart apache2 && mysql
- 将
your_password_here
替换为您自己的密码。
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password_here';
systemctl restart mysql
现在应该可以了。
补充说明:
要只允许您查看 phpMyAdmin,请尝试:
<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>
我的服务器配置:
Particular
Command
Output
OS
# lsb_release -a
Ubuntu 18.04.5 LTS
PHP
# php -v
PHP 8.0.3
Apache
# apache2 -v
Apache/2.4.29 (Ubuntu)
MySQL
# mysql --version
mysql Ver 14.14 Distrib 5.7.33
我通过修改这两个文件解决了这个问题:
# nano /usr/share/php/Symfony/Component/DependencyInjection/ContainerBuilder.php
$service = null === $r->getConstructor() ? $r->newInstance() : $r->newInstanceArgs($arguments);
到
$service = null === $r->getConstructor() ? $r->newInstance() : $r->newInstanceArgs(array_values($arguments));
另一个文件CoreExtension.php
# nano -l /usr/share/php/Twig/Extension/CoreExtension.php
if (isset($object->$item) || \array_key_exists((string) $item, $object)) {
到
if (isset($object->$item) || array_key_exists((string) $item, json_decode(json_encode($object), true))) {
..
最后重启服务器
..
# service apache2 restart
如果您有类似 array and string offset access syntax with curly braces is no longer supported phpmyadmin
的错误 - 原因可能是您有旧版本的 Linux/Ubuntu 和旧版本的 phpMyAdmin,但新版本的 PHP 8+。使用这些命令解决问题:
apt --yes install php-mbstring php8.0-gettext
apt --yes purge phpmyadmin
rm -rf /usr/share/phpmyadmin
mkdir /usr/share/phpmyadmin
cd /tmp
wget https://files.phpmyadmin.net/phpMyAdmin/5.1.1/phpMyAdmin-5.1.1-all-languages.zip
unzip /tmp/phpMyAdmin-5.1.1-all-languages.zip
cp -a /tmp/phpMyAdmin-5.1.1-all-languages/* /usr/share/phpmyadmin
rm -rf /tmp/phpMyAdmin-5.1.1-all-languages.zip
rm -rf /tmp/phpMyAdmin-5.1.1-all-languages/
要创建符号链接,请使用命令:
注意:/var/www/mysite.com/public_html/
是一个示例,将您的路径粘贴到服务器上的站点文件
ln -s /usr/share/phpmyadmin /var/www/mysite.com/public_html/phpmyadmin
可选。如果您想使用登录名和密码保护 phpMyAdmin 文件夹作为 HTTP 基本身份验证 - 使用命令:
apt --yes install apache2-utils
htpasswd -c /var/www/mysite.com/public_html/.htpasswd-phpmyadmin yourlogingoeshere
#enter your password
最后,在您的网站配置中添加 Nginx 的额外设置
[...]
#phpmyadmin
location /phpmyadmin/ {
auth_basic "Restricted";
auth_basic_user_file /var/www/mysite.com/public_html/.htpasswd-phpmyadmin;
}
别忘了重启Nginx service nginx restart
我想我要添加一个简短的说明 - 如果您偶然或有意安装了多个版本的 PHP,则有可能 PHP 版本没有拥有所有必要的模块。要确定您的活动版本,请在命令行(终端)执行:
php -v
它将return当前激活的版本。在我的例子中,这是 v8.1 但我之前安装了 8.0
版本
为了快速解决这个问题,我只是像这样重新安装了必要的软件包:
sudo apt install php8.1 php8.1-cli php8.1-common php8.1-curl php8.1-gd php8.1-intl php8.1-mbstring php8.1-mysql php8.1-opcache php8.1-readline php8.1-xml php8.1-xsl php8.1-zip php8.1-bz2 libapache2-mod-php8.1 -y
版本:
- OS
lsb_release -a
: Ubuntu 18.04.5 LTS - PHP
php -v
: 8.0.1 - 阿帕奇
apache2 -v
:2.4.29 (Ubuntu) - MySQL
mysql --version
: mysql Ver 14.14 Distrib 5.7.32
问题:
我正在尝试使用以下 article 安装 LAMP Stack。但是,我在从浏览器访问 phpmyadmin
时收到 HTTP 500 Error
。
并使用以下命令安装了 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] [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\nStack trace:\n#0 /usr/share/php/php-php-
gettext/gettext.inc(181): mb_convert_encoding()\n#1 /usr/share/php/php-
php-gettext/gettext.inc(278): _encode()\n#2 /usr/share/php/php-php-
gettext/gettext.inc(285): _gettext()\n#3
/usr/share/phpmyadmin/libraries/sanitizing.lib.php(179): __()\n#4
/usr/share/phpmyadmin/libraries/Message.php(607): PMA_sanitize()\n#5
/usr/share/phpmyadmin/libraries/Message.php(672):
PMA\libraries\Message::decodeBB()\n#6
/usr/share/phpmyadmin/libraries/Error.php(220): PMA\libraries\Message-
>getMessage()\n#7 /usr/share/phpmyadmin/libraries/ErrorHandler.php(193):
PMA\libraries\Error->getHash()\n#8
/usr/share/phpmyadmin/libraries/ErrorHandler.php(156):
PMA\libraries\ErrorHandler->addError()\n#9 [internal function]:
PMA\libraries\ErrorHandler->handleError()\n#10
/usr/share/phpmyadmin/libraries/session.inc.php(133): ini_set()\n#11
/usr/share/phpmyadmin/libraries/common.inc.php(280): require('...')\n#12
/usr/share/phpmyadmin/index.php(13): require_once('...')\n#13 {main}\n
thrown in /usr/share/php/php-php-gettext/gettext.inc on line 181
- 我通过使用
[ ]
删除 - 运行下面的命令
sudo phpenmod mbstring
{ }
解决了 数组和字符串偏移访问语法错误
重要:
如果您将 phpMyAdmin 暴露给 public 或需要更新 phpMyAdmin 版本的功能,请更改版本号以获得更高的安全性。
This was taken from a chat. Some things might be inaccurate, but this solved the OP's problem
使用以下教程安装 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 && unzip phpMyAdmin-5.1.0-rc1-all-languages.zip &&
cd phpMyAdmin-5.1.0-rc1-all-languages
apt install pwgen -y
- 记下此命令的输出,我将其称为 pw
pwgen -s 32 1
cp config.sample.inc.php config.inc.php
- 用最喜欢的编辑器编辑 config.inc.php,然后将 pw 粘贴到这一行:
. . .
$cfg['blowfish_secret'] = 'STRINGOFTHIRTYTWORANDOMCHARACTERS'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
. . .
vim /etc/apache2/conf-available/phpmyadmin-custom.conf
- 将以下内容粘贴到之前的命令中:
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>
- 使用
:wq
、运行以下命令保存上一个
a2enconf phpmyadmin-custom && systemctl restart apache2 && mysql
- 将
your_password_here
替换为您自己的密码。
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password_here';
systemctl restart mysql
现在应该可以了。
补充说明:
要只允许您查看 phpMyAdmin,请尝试:
<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>
我的服务器配置:
Particular | Command | Output |
---|---|---|
OS | # lsb_release -a | Ubuntu 18.04.5 LTS |
PHP | # php -v | PHP 8.0.3 |
Apache | # apache2 -v | Apache/2.4.29 (Ubuntu) |
MySQL | # mysql --version | mysql Ver 14.14 Distrib 5.7.33 |
我通过修改这两个文件解决了这个问题:
# nano /usr/share/php/Symfony/Component/DependencyInjection/ContainerBuilder.php
$service = null === $r->getConstructor() ? $r->newInstance() : $r->newInstanceArgs($arguments);
到
$service = null === $r->getConstructor() ? $r->newInstance() : $r->newInstanceArgs(array_values($arguments));
另一个文件CoreExtension.php
# nano -l /usr/share/php/Twig/Extension/CoreExtension.php
if (isset($object->$item) || \array_key_exists((string) $item, $object)) {
到
if (isset($object->$item) || array_key_exists((string) $item, json_decode(json_encode($object), true))) {
.. 最后重启服务器 ..
# service apache2 restart
如果您有类似 array and string offset access syntax with curly braces is no longer supported phpmyadmin
的错误 - 原因可能是您有旧版本的 Linux/Ubuntu 和旧版本的 phpMyAdmin,但新版本的 PHP 8+。使用这些命令解决问题:
apt --yes install php-mbstring php8.0-gettext
apt --yes purge phpmyadmin
rm -rf /usr/share/phpmyadmin
mkdir /usr/share/phpmyadmin
cd /tmp
wget https://files.phpmyadmin.net/phpMyAdmin/5.1.1/phpMyAdmin-5.1.1-all-languages.zip
unzip /tmp/phpMyAdmin-5.1.1-all-languages.zip
cp -a /tmp/phpMyAdmin-5.1.1-all-languages/* /usr/share/phpmyadmin
rm -rf /tmp/phpMyAdmin-5.1.1-all-languages.zip
rm -rf /tmp/phpMyAdmin-5.1.1-all-languages/
要创建符号链接,请使用命令:
注意:/var/www/mysite.com/public_html/
是一个示例,将您的路径粘贴到服务器上的站点文件
ln -s /usr/share/phpmyadmin /var/www/mysite.com/public_html/phpmyadmin
可选。如果您想使用登录名和密码保护 phpMyAdmin 文件夹作为 HTTP 基本身份验证 - 使用命令:
apt --yes install apache2-utils
htpasswd -c /var/www/mysite.com/public_html/.htpasswd-phpmyadmin yourlogingoeshere
#enter your password
最后,在您的网站配置中添加 Nginx 的额外设置
[...]
#phpmyadmin
location /phpmyadmin/ {
auth_basic "Restricted";
auth_basic_user_file /var/www/mysite.com/public_html/.htpasswd-phpmyadmin;
}
别忘了重启Nginx service nginx restart
我想我要添加一个简短的说明 - 如果您偶然或有意安装了多个版本的 PHP,则有可能 PHP 版本没有拥有所有必要的模块。要确定您的活动版本,请在命令行(终端)执行:
php -v
它将return当前激活的版本。在我的例子中,这是 v8.1 但我之前安装了 8.0
版本为了快速解决这个问题,我只是像这样重新安装了必要的软件包:
sudo apt install php8.1 php8.1-cli php8.1-common php8.1-curl php8.1-gd php8.1-intl php8.1-mbstring php8.1-mysql php8.1-opcache php8.1-readline php8.1-xml php8.1-xsl php8.1-zip php8.1-bz2 libapache2-mod-php8.1 -y