调用未定义函数 __() 错误 - 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) 并且您的主要用户不是apache
或www-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的主要内容,如果未能解决你的问题,请参考以下文章
未捕获的错误:调用未定义的函数 sqlsrv_connect()
终端中的“架构 x86_64 的未定义符号”,但 xcode 中没有错误