2014-12-18 4 views
3

Сервер работает с RHEL 7 и PHP 5.4.16. Когда я пытаюсь открыть/PhpMyAdmin в моем браузере, я дал ошибку:phpMyAdmin Неустранимая ошибка: вызов неопределенной функции __()

Fatal error: Call to undefined function __() in /usr/share/phpMyAdmin/libraries/core.lib.php on line 242

Call Stack 
# Time Memory Function Location 
1 0.0008 348000 {main}() ../index.php:0 
2 0.0018 503144 require_once('/usr/share/phpMyAdmin/libraries/common.inc.php') ../index.php:12 
3 0.0252 4224464 PMA_Config->__construct() ../common.inc.php:304 
4 0.0252 4224712 PMA_Config->load() ../Config.class.php:100 
5 0.0265 4309888 PMA_Config->checkConfigSource() ../Config.class.php:849 
6 0.0265 4311088 PMA_fatalError() ../Config.class.php:1169 

Я считаю, что я установил все необходимые библиотеки и апач имеет соответствующие разрешения для сессии. save_path, которые были проблемами предыдущих раз, когда задавался этот вопрос. См.: Call to undefined function __() error - phpMyAdmin

Может ли кто-нибудь дать мне подсказку, основанную на этом стеке вызовов? Вот функции из линий, что ссылки трассировки стека, с соответствующей строки, написанной в левом поле:

core.lib.php в строке 242:

/** 
    * displays the given error message on phpMyAdmin error page in foreign language, 
    * ends script execution and closes session 
    * 
    * loads language file if not loaded already 
    * 
    * @param string  $error_message the error message or named error message 
    * @param string|array $message_args arguments applied to $error_message 
    * @param boolean  $delete_session whether to delete session cookie 
    * 
    * @return void 
    */ 
    function PMA_fatalError(
     $error_message, $message_args = null, $delete_session = true 
    ) { 
    /* Use format string if applicable */ 
    if (is_string($message_args)) { 
     $error_message = sprintf($error_message, $message_args); 
    } elseif (is_array($message_args)) { 
     $error_message = vsprintf($error_message, $message_args); 
    } 

    if ($GLOBALS['is_ajax_request']) { 
     $response = PMA_Response::getInstance(); 
     $response->isSuccess(false); 
     $response->addJSON('message', PMA_Message::error($error_message)); 
    } else { 
     $error_message = strtr($error_message, array('<br />' => '[br]')); 

     /* Load gettext for fatal errors */ 
     if (!function_exists('__')) { 
      // It is possible that PMA_fatalError() is called before including 
      // vendor_config.php which defines GETTEXT_INC. See bug #4557 
      if (defined(GETTEXT_INC)) { 
       include_once GETTEXT_INC; 
      } else { 
       include_once './libraries/php-gettext/gettext.inc'; 
      } 
     } 

     // these variables are used in the included file libraries/error.inc.php 
242 $error_header = __('Error'); 
     $lang = $GLOBALS['available_languages'][$GLOBALS['lang']][1]; 
     $dir = $GLOBALS['text_dir']; 

     // on fatal errors it cannot hurt to always delete the current session 
     if ($delete_session 
      && isset($GLOBALS['session_name']) 
      && isset($_COOKIE[$GLOBALS['session_name']]) 
     ) { 
      $GLOBALS['PMA_Config']->removeCookie($GLOBALS['session_name']); 
     } 

     // Displays the error message 
     include './libraries/error.inc.php'; 
    } 
    if (! defined('TESTSUITE')) { 
     exit; 
    } 
    } 

common.inc.php в строке 304:

304 $GLOBALS['PMA_Config'] = new PMA_Config(CONFIG_FILE); 
    if (!defined('PMA_MINIMUM_COMMON')) { 
     $GLOBALS['PMA_Config']->checkPmaAbsoluteUri(); 
    } 

Config.class.php по строке 100:

/** 
    * constructor 
    * 
    * @param string $source source to read config from 
    */ 
    function __construct($source = null) 
    { 
     $this->settings = array(); 

     // functions need to refresh in case of config file changed goes in 
     // PMA_Config::load() 
100 $this->load($source); 

     // other settings, independent from config file, comes in 
     $this->checkSystem(); 

     $this->isHttps(); 

     $this->base_settings = $this->settings; 
    } 

Config.class.php в строке 849:

/** 
    * loads configuration from $source, usually the config file 
    * should be called on object creation 
    * 
    * @param string $source config file 
    * 
    * @return bool 
    */ 
    function load($source = null) 
    { 
     $this->loadDefaults(); 

     if (null !== $source) { 
      $this->setSource($source); 
     } 

     /** 
     * We check and set the font size at this point, to make the font size 
     * selector work also for users without a config.inc.php 
     */ 
     $this->checkFontsize(); 

     if (! $this->checkConfigSource()) { 
849  return false; 
     } 

Config.class.php в строке 1169:

 /** 
    * check config source 
    * 
    * @return boolean whether source is valid or not 
    */ 
    function checkConfigSource() 
    { 
     if (! $this->getSource()) { 
      // no configuration file set at all 
      return false; 
     } 

     if (! file_exists($this->getSource())) { 
      $this->source_mtime = 0; 
      return false; 
     } 

     if (! is_readable($this->getSource())) { 
      // manually check if file is readable 
      // might be bug #3059806 Supporting running from CIFS/Samba shares 

      $contents = false; 
      $handle = @fopen($this->getSource(), 'r'); 
      if ($handle !== false) { 
       $contents = @fread($handle, 1); // reading 1 byte is enough to test 
       @fclose($handle); 
      } 
      if ($contents === false) { 
       $this->source_mtime = 0; 
       PMA_fatalError(
        sprintf(
         function_exists('__') 
         ? __('Existing configuration file (%s) is not readable.') 
         : 'Existing configuration file (%s) is not readable.', 
         $this->getSource() 
        ) 
1169   ); 
       return false; 
      } 
     } 

     return true; 
    } 
+0

как аборты проверяют whar 'core.lib.php on line 242' is –

+0

Обновлено сообщение, чтобы включить функции строк, на которые ссылается стек вызовов. – Jim

ответ

9

Проблема заключалась в том, что неправильные разрешения для каталога /etc/phpMyAdmin. У пользователя веб-сервера apache были правильные разрешения для каталога session.save_path, но apache не смог прочитать из моего файла config.inc.php. Изменение владельца/etc/phpMyAdmin для пользователя apache и изменение разрешений на 755 решило проблему.

Глядя на checkConfigSource() функции в Config.class.php привело меня к мысли, что если проблема была с доступом к файлу конфигурации, то я получил бы ошибку 'Existing configuration file (%s) is not readable.' вместо Call to undefined function __() Кто-нибудь знает, почему это не так?

Это была довольно простая проблема/решение, но, если кто-то не предлагает иное, я думаю, что я оставлю его, поскольку эта точная проблема/решение не рассматривается в других обсуждениях ошибки Fatal error: Call to undefined function __() in /usr/share/phpMyAdmin/libraries/core.lib.php при попытке запустить phpMyAdmin после установки ,

+2

Большое спасибо. У меня была такая же проблема - с использованием CenOS 7 с пакетом phpmyadmin от EPEL (v4.9.3-1). Изменение прав /etc/phpMyAdmin/config.inc.php на 644 сделал трюк – Danyright

2

Если бы то же самое сообщение об ошибке от PHPMYADMIN :: FastCGI посланный в STDERR: «PHP сообщение: PHP Фатальная ошибка: Вызов неопределенной функции __() в /usr/share/phpMyAdmin/libraries/core.lib.php по строке 245" при чтении заголовка ответа от вышестоящего, клиента:

Solution, которая работала на моем Fedora 22 сервера x86_64 с помощью Nginx: смены владельца и идентификатора группы из корня: апач на файл/вар/Lib/php/session
to root: nginx
с использованием команды sudo chown -Rfv root:nginx /var/lib/php/session.

+0

спасибо! работал на меня на centos 7.2 nginx –

-2

Error "The connection was reset"
File: /usr/share/phpmyadmin/libraries/common.inc.php

поиск:

$GLOBALS['PMA_Config'] = new PMA_Config(CONFIG_FILE);<br> 

заменить:

$GLOBALS['PMA_Config'] = new PMA_Config(); 
+1

Ваш ответ не очень понятен –

0

Если PHPMyAdmin работает нормально, а потом вдруг перестает работать без причины с сообщением причудливой и бесполезных ошибок , вы можете попробовать удалить свои php-сессии.

rm -rf /var/lib/php/sessions/* 

Точное местоположение может отличаться в зависимости от операционной системы и версии, и это приведет к удалению всех активных сеансов, а не только ваш, но он может исправить некоторые «внезапно перестал работать» вопросы, когда вы ничего не изменили и его раньше работал.

0

Для меня это была другая проблема. Я дал 777 разрешений для phpMyAdmin forlder. Когда я изменил его на 755, он работал нормально.

Надеюсь, это поможет кому-то.

Смежные вопросы