调用未定义函数 __() 错误 - phpMyAdmin

Posted

技术标签:

【中文标题】调用未定义函数 __() 错误 - phpMyAdmin【英文标题】:Call to undefined function __() error - phpMyAdmin 【发布时间】:2014-02-10 04:41:38 【问题描述】:

当我想在我的浏览器上运行 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。

有解决问题的想法吗?

【问题讨论】:

你是如何安装 phpmyadmin 的? yum --enablerepo=remi install phpmyadmin 【参考方案1】:

检查您的会话目录是否可被网络服务器进程写入。

最好的方法是创建自己的 phpinfo 文件;在任何网络可访问的文件夹中创建一个包含以下内容的文件(您可以将其命名为 test.php 或 phpinfo.php 或任何您喜欢的名称):

<?php
phpinfo();
?>

在浏览器中打开该文件(http://localhost/test.php 或类似文件)并查找行 session.save_path。那是您的会话文件夹;确保权限合适,看看是否有帮助。

More information 来自一个类似的帖子。

【讨论】:

感谢艾萨克,我在使用 nginx 时遇到了同样的问题,并用 - chown root:nginx session 进行了更改 那个未定义的函数实际上是phpmyadmin中core.lib.php文件的错误。堆栈调用显示它在 PMA_fatalError 中失败。 这得到了会话目录的正确权限。例如,我有 CentOS,我的会话目录位于 /var/lib/php/session。我的情况是,我解决了这个问题,将所有者更改为 apache:sudo chown -R apache:apache /var/lib/php/session 谢谢!你为我节省了很多时间! 谢谢。 2 天后.. 找到了完美的解决方案【参考方案2】:

我刚刚设置了 CentOS 7 并尝试了 phpmyadmin 并且遇到了同样的问题。希望这会有所帮助

我为会话目录设置了正确的权限并重新启动了 apache,甚至禁用了 SELinux,但显示相同的错误

我没有安装 php-mbstring - 一旦我这样做了,它就起作用了

sudo yum install php-mbstring

检查 phpmyadmin 的要求

【讨论】:

是的。我只需要在yum install phpmyadmin 之后重新启动我的 PHP。 谢谢@naveen!我根据您的回答为 Debian 用户添加了一个答案。 它对我有用,但就我而言,我使用的是:apt-get install php7.0-mbstring【参考方案3】:

检查您的 PHP 扩展是否已加载。当 mysql 或 mysqli 扩展加载失败时,结果将正是这个错误(这很令人困惑)。要检查您的扩展是否正确加载,请查看 PHP 函数 phpinfo() 的输出 - 所有已加载的扩展都列在此处。

【讨论】:

【参考方案4】:

如果您出于某种原因使用其他用户,例如当拥有httpd-itk (RHEL/CentOS/Fedora) 或apache2-mpm-itk (Debian/Ubuntu) 并且您的主要用户不是apachewww-data 时,请执行以下操作:

sudo usermod -a -G apache youruser

sudo usermod -a -G www-data youruser

根据您的发行版,phpMyAdmin 将起作用。

【讨论】:

【参考方案5】:

对我来说,错误出现在/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 再次工作。

【讨论】:

【参考方案6】:

对于 Debian 用户:(我最终以 Debian 用户身份进入此线程)我阅读了 @naveen 的答案,看来我没有安装 php-mbstring,安装它解决了我的问题问题:

sudo apt-get install php-mbstring

(安装php-mbstring后,别忘了重启Apache:)

sudo systemctl restart apache2

【讨论】:

同样在这里,我浏览了很多帖子说要更改权限,但这只是有帮助。我收到以下错误:致命错误:未捕获的错误:调用 /usr/share/phpmyadmin/libraries/core.lib.php:235 中的未定义函数 __() 我正在使用 Raspbian 每次都有效,安装 php-mbstring 后别忘了重启 apache【参考方案7】:

在我的情况下,这个错误是间歇性的,我已经安装了 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】:

和其他用户说的差不多…… 我正在使用 PHP7 运行 Debian 8 并遇到了问题,所以只需安装即可;

sudo apt-get install php7.0-mbstring

随后重启Apache服务;

sudo service apache2 restart

然后 phpmyadmin 运行良好。

【讨论】:

【参考方案9】:

在我使用 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进程使用nobody,给/var/lib/php/session设置777权限即可。

【讨论】:

谢谢你十多次。我缺少的步骤是 /var/lib/php/session 没有创建,并且 chmoding /var/lib/php 是不够的 - 它不是动态创建的。我使用的是 NGINX,而不是 apache,但显然它的工作原理是一样的。谢谢! 对不起,使用 nginx 作为用户的工作方式相同。应该尽量让下一个来的人更清楚。【参考方案10】:

我在 config.inc.php 中出现解析错误后遇到了这个问题。不幸的是,phpMyAdmin 在读取配置文件时设置了error_reporting(0)。打开libraries/Config.class.php,搜索$old_error_reporting = error_reporting(0);并将其替换为$old_error_reporting = error_reporting(E_ALL);,看看发生了什么。当然,出于安全原因,您应该稍后恢复此更改。

【讨论】:

以上是关于调用未定义函数 __() 错误 - phpMyAdmin的主要内容,如果未能解决你的问题,请参考以下文章

调用未定义函数 openssl_pkcs7_sign()

未捕获的错误:调用未定义的函数 sqlsrv_connect()

__doPostBack 未定义

终端中的“架构 x86_64 的未定义符号”,但 xcode 中没有错误

致命错误:调用未定义的方法 Upload::do_upload()

php Mysqli 未定义函数