PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Искания и мытарства
EuGen Администратор
Отправлено: 30 Сентября, 2010 - 09:25:53
Post Id


Профессионал


Покинул форум
Сообщений всего: 9097
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Тему хочу посвятить решению проблемы по использованию 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. будет вам полезно.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Haron
Отправлено: 26 Апреля, 2011 - 11:10:51
Post Id



Частый гость


Покинул форум
Сообщений всего: 197
Дата рег-ции: Июнь 2010  
Откуда: Оттуда


Помог: 5 раз(а)




Странно... У меня та же сборка php, и php_pdo_mysql.dll - нормально работает. (Под него биллинг написан). Единственный момент - ось Windows 2003 Server. Апач и мускул - те же.

Таки в оси дело?


-----
И чё?
 
 Top
EuGen Администратор
Отправлено: 26 Апреля, 2011 - 11:16:51
Post Id


Профессионал


Покинул форум
Сообщений всего: 9097
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Проблема может быть как в ОС, так и в минор-версиях, скажем, Apache/PHP или конкретной библиотеки.
Сейчас я попросту перестал использовать Windows для веб-разработки, чтобы уже более никогда не возвращаться к таким способам решения проблем.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
EuGen Администратор
Отправлено: 07 Июля, 2012 - 18:54:39
Post Id


Профессионал


Покинул форум
Сообщений всего: 9097
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Искал в Google ответ на этот вопрос. Нашел свой же ответ. Время, однако. Прикрепил.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Администрирование Windows »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB