Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: PHP, PDO и MySQL
Форумы портала PHP.SU » Серверное администрирование » Администрирование Windows » PHP, PDO и MySQL

Страниц (1): [1]
 

1. EuGen - 30 Сентября, 2010 - 09:25:53 - перейти к сообщению
Тему хочу посвятить решению проблемы по использованию PDO в сборках php для MS Win.
Так как на просторах Сети да и в собственной практике такой вопрос встает нередко, опишу решение некоторых проблем.
Сразу оговорюсь, что манипуляции с тем или иным объектом выполнялись на:
* Win XP SP2
* Apache 2.2
* MySQL 5.1
* PHP 5.2.14
Итак, первая из них - веб-сервер не стартует при попытке подключить PDO в php.ini. То есть "программа выполила недоспутимую операцию". И так далее. Не спешим закрывать окно ошибки и просматриваем детали. Если модуль, вызвавший сбой - это php_pdo_mysql.dll - то это, скорее всего, тот случай, который я описываю. В этом случае необходимо убедиться, что версия php совпадает с версией для этого php_pdo_mysql.dll (лежит он как правило в папке ext того каталога куда установлен PHP). Также я обнаружил удивительную вещь - собранный установщик для Windows с php.net (что_то_там.msi) - по крайней мере для версии 5.2 на некоторых сборках Win XP устанавливает "поврежденные" расширения php. Как например - php_pdo_mysql.dll. В этом случае используйте не инсталлер, а архив (его нужно просто распаковать в нужную папку и вуаля - php имеется). С архивом php у меня проблем не наблюдалось, так что я думаю, что его всегда можно использовать для решения этой проблемы.
Проблема вторая - PDO вызывает опять же "падение" сервера, но уже при попытке загрузить страницу, использующую объекты PDO. В этом случае смотрим - используются ли запросы вроде

Хотя применить описанное ниже решение можно в любом случае. Итак, для устранения ошибки можно попытаться сделать следующее:
- Открыть шестнадцатеричный редактор (если нет, то его всегда можно скачать, например здесь)
- Открыть в нём этот самый php_pdo_mysql.dll
- Найти оффсет (смещение) 0x000024d5
- Найти по этому смещению байты 83 C3 50 и заменить их на 83 C3 54
- Сохранить файл
Должен отметить, что смещение 0x000024d5 может несколько отличаться от того, которое будет у вас, так как версии php могут отличаться. У меня это было так. Однако поищите байты 83 C3 50 - скорее всего, нужное смещение будет отличаться незначительно (например, мое было 0x000024d0)
После этого в моем случае все стало отрабатывать как надо.
Существует так же проблема с libmysql.dll. А именно - если у вас в переменной PATH присутствует путь до mysql то php может "пытаться" использовать этот libmysql.dll оттуда вместо того, чтобы использовать собственную библиотеку. Решением может послужить удаление MySQL из переменной PATH операционной системы.

Надеюсь, представленное решение такой простой, казалось бы, проблемы, как подключение PDO. будет вам полезно.
2. Haron - 26 Апреля, 2011 - 11:10:51 - перейти к сообщению
Странно... У меня та же сборка php, и php_pdo_mysql.dll - нормально работает. (Под него биллинг написан). Единственный момент - ось Windows 2003 Server. Апач и мускул - те же.

Таки в оси дело?
3. EuGen - 26 Апреля, 2011 - 11:16:51 - перейти к сообщению
Проблема может быть как в ОС, так и в минор-версиях, скажем, Apache/PHP или конкретной библиотеки.
Сейчас я попросту перестал использовать Windows для веб-разработки, чтобы уже более никогда не возвращаться к таким способам решения проблем.
4. EuGen - 07 Июля, 2012 - 18:54:39 - перейти к сообщению
Искал в Google ответ на этот вопрос. Нашел свой же ответ. Время, однако. Прикрепил.

 

Powered by ExBB FM 1.0 RC1