Исправление ​​ошибки 500 в расширении MySQLi c Apache
Недавно мы обнаружили ошибку в расширении MySQLi для PHP, который вызывает ошибку сегментации в некоторых установках PHP, когда mysqli_result::fetch_fields функция используется.
Ошибка происходит на Linux серверах при использование следующего ПО:
PHP Версия: PHP 5.3.6
ОС: CentOS release 5.6 (Final)
Mysql Версия : 5.0.92-community
Ошибка проявляется так:
1. На №3 шаге процесса установки, процесс завершается, и пользователи перенаправляются на шаг №1.
2. На шаге №2 процесса обновления, Apache ошибка 500 возникает. В журналах ошибок вы можете увидеть, такие сообщения:
На некоторых серверах ошибка 500 маскируется под сообщение "Page Not Found" от SocialEngine.
3. Другие инструменты > Проверка зависимостей, возникает проблема как в шаге №2.
Исправление:
Если вы столкнулись с этой ошибкой при выполнении обновления, скачайте прилагается к данной статье, и извлеките его содержимое.
Далее, используя FTP клиент, загрузите файл в корневой каталог SocialEngine, перезапишите файл application/libraries/Engine/Sanity/Test/MysqlEngine.php.
Чтобы применить патч вручную, внести следующие изменения:
Откройте файл найдите строку №82, найдите строки кода, которые выглядят так:
Замените их на:
Ошибка происходит на Linux серверах при использование следующего ПО:
PHP Версия: PHP 5.3.6
ОС: CentOS release 5.6 (Final)
Mysql Версия : 5.0.92-community
Ошибка проявляется так:
1. На №3 шаге процесса установки, процесс завершается, и пользователи перенаправляются на шаг №1.
2. На шаге №2 процесса обновления, Apache ошибка 500 возникает. В журналах ошибок вы можете увидеть, такие сообщения:
Premature end of script headers: index.php, referer: http://domain.com/install/manage/select)
На некоторых серверах ошибка 500 маскируется под сообщение "Page Not Found" от SocialEngine.
3. Другие инструменты > Проверка зависимостей, возникает проблема как в шаге №2.
Исправление:
Если вы столкнулись с этой ошибкой при выполнении обновления, скачайте прилагается к данной статье, и извлеките его содержимое.
Далее, используя FTP клиент, загрузите файл в корневой каталог SocialEngine, перезапишите файл application/libraries/Engine/Sanity/Test/MysqlEngine.php.
Чтобы применить патч вручную, внести следующие изменения:
Откройте файл найдите строку №82, найдите строки кода, которые выглядят так:
// Try to list engines
try {
$data = $adapter->query('SHOW ENGINES')->fetchAll();
} catch( Exception $e ) {
return $this->_error('badAdapter');
}
Замените их на:
// Try to list engines
if( $adapter instanceof Zend_Db_Adapter_Mysqli ){
// Fixes MySQLI segfault in fetch_fields() with SHOW ENGINES
$connection = $adapter->getConnection();
$result = mysqli_query($connection, 'SHOW ENGINES');
if ( !$result instanceof MySQLi_STMT ){
return $this->_error('badAdapter');
}
$data = array();
while ( $row = $result->fetch_array() ){
$data[] = $row;
}
} else {
try {
$data = $adapter->query('SHOW ENGINES')->fetchAll();
} catch( Exception $e ) {
return $this->_error('badAdapter');
}
}