当我想在我的浏览器上运行phpMyAdmin时,会显示此错误:
Fatal error: Call to undefined function __() in /usr/share/phpMyAdmin/libraries/core.lib.php on line 229
Call Stack
# Time Memory Function Location
1 0.0010 344984 {main}( ) ../index.php:0
2 0.0026 502720 require_once( '/usr/share/phpMyAdmin/libraries/common.inc.php' ) ../index.php:12
3 0.0285 3836408 require( '/usr/share/phpMyAdmin/libraries/session.inc.php' ) ../common.inc.php:344
4 0.0288 3846488 PMA_fatalError( ) ../session.inc.php:97
我使用Fedora 17和PHP 5.5.7。
解决问题的任何想法?
答案 0 :(得分:34)
检查您的会话目录是否可由Web服务器进程写入。
最好的方法是创建自己的phpinfo文件;在任何Web可访问文件夹中创建一个文件(您可以将其称为test.php或phpinfo.php或任何您喜欢的文件),其中包含以下内容:
<?php
phpinfo();
?>
在浏览器中打开该文件(http://localhost/test.php
或类似文件),然后查找第session.save_path
行。那是你的会话文件夹;确保权限合适,看看是否有帮助。
答案 1 :(得分:29)
我刚刚设置了CentOS 7并尝试了phpmyadmin并遇到了同样的问题。希望这有帮助
我为sessions目录设置了正确的权限并重新启动了apache,甚至禁用了SELinux但显示了相同的错误
我没有安装php-mbstring - 一旦我这样做了,它就有效了
sudo yum install php-mbstring
检查phpmyadmin的要求
答案 2 :(得分:8)
对于Debian用户:(我最终在这个帖子中作为Debian用户)我读了@naveen的答案,看来我没有安装php-mbstring,安装它解决了我的问题:
sudo apt-get install php-mbstring
答案 3 :(得分:2)
就像其他用户说的那样...... 我正在使用PHP7运行Debian 8并遇到了问题,所以只需安装;
sudo service apache2 restart
然后重新启动Apache服务;
display:flex
然后phpmyadmin运行正常。
答案 4 :(得分:1)
检查您的PHP扩展是否已加载。当mysql或mysqli扩展无法加载时,结果将是这个错误(这是非常令人困惑的)。要检查扩展是否正确加载,请查看PHP函数phpinfo()的输出 - 所有加载的扩展都列在那里。
答案 5 :(得分:1)
如果您出于某种原因使用其他用户,例如当有httpd-itk
(RHEL / CentOS / Fedora)或apache2-mpm-itk
(Debian / Ubuntu)并且您的主要用户不是apache
或www-data
时,请执行以下操作:
sudo usermod -a -G apache youruser
或
sudo usermod -a -G www-data youruser
取决于您的发行版,然后phpMyAdmin将起作用。
答案 6 :(得分:1)
对我而言,错误发生在/usr/share/phpMyAdmin/libraries/sanitizing.lib.php
。
我在this advice之后增加了php错误报告
并通过在前面添加//
来评论sanitizing.lib.php中的违规行。
然后错误更具描述性:Fatal error: require_once(): Failed opening required '/usr/share/php/php-gettext/gettext.inc' (include_path='.') in /usr/share/phpmyadmin/libraries/common.inc.php on line 477
我注意到我以某种方式丢失了 php-gettext debian软件包,但安装完成后,phpMyAdmin再次运行。
答案 7 :(得分:1)
在我的情况下,这个错误是间歇性的,我安装了phpMyAdmin并且运行良好多年。在这里阅读答案,似乎错误可能与会话有关。
在Ubuntu 16.04上,PHP会话位于:/var/lib/php/sessions
看起来像:
$ sudo ls -al /var/lib/php/sessions/
total 128
drwx-wx-wt 2 root root 73728 Mar 4 14:09 .
drwxr-xr-x 4 root root 4096 Mar 8 2017 ..
-rw------- 1 www-data www-data 67 Mar 4 14:05 sess_dvg6vo1k1s1c0353rjk09g9vu1
-rw------- 1 www-data www-data 67 Mar 4 13:49 sess_e4ha0gl4f7gukku1o2uc4h5rs2
-rw------- 1 www-data www-data 67 Mar 4 14:05 sess_qhbve6k4a7svu6pk0lk568jgt0
-rw------- 1 www-data www-data 67 Mar 4 13:49 sess_sh48e898i7ad14oidsph08in10
-rw------- 1 www-data www-data 30044 Mar 4 14:04 sess_uvumc2341dvtfikl27kpile46pmfbon1
(列表中的最后一个对我来说看起来很“有趣”。)
我首先尝试重新启动apache2
,但会话显然仍然存在。所以我刚刚删除了它们。 (不知道清除它们的另一种方法。)刷新浏览器后,显示phpMyAdmin登录,一切都按预期工作。
答案 8 :(得分:1)
在我的情况下,使用 CentOS 7 下的 php-fpm ,这就是@Issac指出的原因,并且可以通过以下方式解决:
mkdir -p /var/lib/php/session
chown -R apache:apache /var/lib/php
然后解决了。
只需创建会话文件夹,我认为此直接解决方案可以在这种情况下使用。
警告:在执行此操作之前,请确保检查
/var/lib/php
文件夹是否存在,并检查php-fpm
进程使用的是哪个用户。如果您在php-fpm进程中没有使用任何人,请为/var/lib/php/session
设置777权限可以很好地工作。
答案 9 :(得分:0)
我在config.inc.php中解析错误后遇到了这个问题。不幸的是,phpMyAdmin在读取配置文件时设置了error_reporting(0)
。打开library / Config.class.php,搜索$old_error_reporting = error_reporting(0);
并将其替换为$old_error_reporting = error_reporting(E_ALL);
以查看发生了什么。当然,出于安全原因,您以后应该还原此更改。