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
Я не знаю, куда идти дальше. Любая помощь приветствуется.
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
.
Проверка установленного расширения 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
Откуда вы звоните require_once(APATH.MAGEPATH.'/app/Mage.php');
?
Вы делаете это как другой пользователь?
Глядя на phpinfo()
, который вы опубликовали, у каждого пользователя есть свой php.ini
, поэтому я предполагаю, что везде, где вы пытаетесь включить Mage.php
, используется другой пользователь, с другим php.ini
, у которого не загружено расширение PDO.