PDO отлично загружается в Magento, но не во внешней CMS


У меня проблема, похожая на https://stackoverflow.com/questions/2386575/the-pdo-extension-is-required-for-this-adapter-but-the-extension-is-not-loaded но не то же самое.

Установка Magento работает нормально, но когда я пытаюсь запустить:

require_once(APATH.MAGEPATH.'/app/Mage.php');
umask(0);
Mage::app();

В каталоге за пределами Magento я получаю сообщение об ошибке:

Fatal error: Uncaught exception 'Zend_Db_Adapter_Exception' with message 'The PDO extension is required for this adapter but the extension is not loaded' in
/home/inzana/public_html/Store/lib/Zend/Db/Adapter/Pdo/Abstract.php:342 
Stack trace: #0 /home/inzana/public_html/Store/lib/Zend/Db/Adapter/Abstract.php(247): Zend_Db_Adapter_Pdo_Abstract->setFetchMode(2) 
#1 /home/inzana/public_html/Store/app/code/core/Mage/Core/Model/Resource.php(165): Zend_Db_Adapter_Abstract->__construct(Array) 
#2 /home/inzana/public_html/Store/app/code/core/Mage/Core/Model/Resource.php(110): Mage_Core_Model_Resource->_newConnection('pdo_mysql', Object(Mage_Core_Model_Config_Element)) 
#3 /home/inzana/public_html/Store/app/code/core/Mage/Core/Model/Resource/Db/Abstract.php(320): Mage_Core_Model_Resource->getConnection('core_write') 
#4 /home/inzana/public_html/Store/app/code/core/Mage/Core/Model/Resource/Db/Abstract.php(350): Mage_Core_Model_Resource_Db_Abstract->_getConnection('write') 
#5 /home/inzana/public_html/Store/app/code/core/Mage/Core/Model/R in /home/inzana/public_html/Store/lib/Zend/Db/Adapter/Pdo/Abstract.php on line 342

Я запускаю phpinfo(INFO_GENERAL); затем следует код, который вызывает ошибку на этой странице: http://inzanaranch.com/test

Локальный файл php.ini включает в себя:

extension=pdo.so
extension=pdo_sqlite.so
extension=sqlite.so
extension=pdo_mysql.so

Я не знаю, куда идти дальше. Любая помощь приветствуется.

Author: Community, 2013-03-13

3 answers

Если вы сомневаетесь, добавьте временное ведение журнала. В вашей среде есть что-то, что либо отключает PDO, либо на вашем пути есть другой двоичный файл PHP, когда вы его запускаете.

Во-первых, убедитесь, что вы используете PHP, как вы думаете, выполнив следующее из командной строки.

$ which php

Это подскажет вам, какой PHP находится на вашем пути.

Затем откройте lib/Zend/Db/Adapter/Pdo/Abstract.php и найдите местоположение исключения

if (!extension_loaded('pdo')) {
    /**
     * @see Zend_Db_Adapter_Exception
     */
    #require_once 'Zend/Db/Adapter/Exception.php';
    throw new Zend_Db_Adapter_Exception('The PDO extension is required for this adapter but the extension is not loaded');
}

Затем добавьте запись какого-нибудь бедняка перед исключением (не забывайте, что это здесь, вы захотите удалить это).

ob_start();
phpinfo();
echo "\n--------------------------------------------------\n";
print_r($_SERVER);
$message = ob_end_clean();
file_put_contents('/tmp/no-pdo.log',"\n",FILE_APPEND);

throw new Zend_Db_Adapter_Exception('The PDO extension is required for this adapter but the extension is not loaded');

Запустите свой сценарий.

Скопируйте /tmp/no-pdo.log в свой домашний каталог, а затем удалите его и свой код регистрации. no-pdo.log будет содержать вашу информацию о PHP в момент возникновения ошибки . Это позволит вам отследить проблему, которая, скорее всего, является мошенническим файлом php.ini.

 4
Author: Alan Storm, 2013-03-14 01:53:24

Проверка установленного расширения pdo или нет

echo 'Checking pdo extension installed or not';
echo '<pre/>';
extension_loaded ('PDO' ); // returns boolean

//или

extension_loaded('pdo_mysql');

//или получить все расширения и выполнить поиск определенного

print_r(get_loaded_extensions());  exit();

Если установлен, то отобразите в массиве результатов печати, как показано ниже

[41] => PDO    [42] => pdo_sqlite    [43] => pdo_mysql
 1
Author: krishna singh, 2014-09-30 13:51:12

Откуда вы звоните require_once(APATH.MAGEPATH.'/app/Mage.php');?
Вы делаете это как другой пользователь?

Глядя на phpinfo(), который вы опубликовали, у каждого пользователя есть свой php.ini, поэтому я предполагаю, что везде, где вы пытаетесь включить Mage.php, используется другой пользователь, с другим php.ini, у которого не загружено расширение PDO.

 0
Author: Ben Lessani - Sonassi, 2013-03-13 17:33:02