簡體   English   中英

PHPMyAdmin 500 Apache 中的內部服務器錯誤,由於 PHP 版本

[英]PHPMyAdmin 500 Internal Server Error in Apache due to PHP Version

版本:

  • 操作系統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

問題:

我正在嘗試使用以下文章安裝 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 公開或需要較新 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 && unzip phpMyAdmin-5.1.0-rc1-all-languages.zip && 
cd phpMyAdmin-5.1.0-rc1-all-languages
apt install pwgen -y
  1. 記下該命令的output,我將其稱為pw
pwgen -s 32 1
cp config.sample.inc.php config.inc.php
  1. 用最喜歡的編輯器編輯 config.inc.php,並將密碼粘貼到這一行:
. . .
$cfg['blowfish_secret'] = 'STRINGOFTHIRTYTWORANDOMCHARACTERS'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
. . .
vim /etc/apache2/conf-available/phpmyadmin-custom.conf
  1. 將以下內容粘貼到之前的命令中:
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. 使用:wq保存上一個,運行以下命令
a2enconf phpmyadmin-custom && systemctl restart apache2 && mysql
  1. 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>

我的服務器配置:

特定 命令 Output
操作系統 # 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 但新版本的 Z2FEC392304A5C23BAC13888 使用這些命令來解決問題:

apt --yes install php-mbstring php8.1-gettext
apt --yes purge phpmyadmin
rm -rf /usr/share/phpmyadmin
mkdir /usr/share/phpmyadmin
cd /tmp
wget https://files.phpmyadmin.net/phpMyAdmin/5.2.0/phpMyAdmin-5.2.0-all-languages.zip
unzip /tmp/phpMyAdmin-5.2.0-all-languages.zip
cp -a /tmp/phpMyAdmin-5.2.0-all-languages/* /usr/share/phpmyadmin
rm -rf /tmp/phpMyAdmin-5.2.0-all-languages.zip
rm -rf /tmp/phpMyAdmin-5.2.0-all-languages/

要制作符號鏈接,請使用命令:

注意/var/www/mysite.com/public_html/是一個示例,將您的路徑粘貼到服務器上的站點文件

ln -s /usr/share/phpmyadmin /var/www/mysite.com/public_html/phpmyadmin

可選的。 如果您想使用登錄名和密碼作為 HTTP 基本身份驗證來保護 phpMyAdmin 文件夾 - 使用命令:

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

它將返回當前的活動版本。 就我而言,這是 v 8.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

我的修復是升級 phpmyadmin

這是一個易於遵循的指南:

https://devanswers.co/manually-upgrade-phpmyadmin/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM