【问题标题】:Call to undefined function __() error - phpMyAdmin调用未定义函数 __() 错误 - 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

标签: php 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);,看看发生了什么。当然,出于安全原因,您应该稍后恢复此更改。

            【讨论】:

              猜你喜欢
              • 2017-01-06
              • 2015-02-16
              • 2016-11-30
              • 1970-01-01
              • 2015-02-13
              • 2017-03-24
              • 1970-01-01
              • 2015-02-04
              相关资源
              最近更新 更多