Почему я должен скопировать libmysql.dll в каталог apache / bin, чтобы правильно загрузить расширение PHP? - PullRequest
0 голосов
/ 26 января 2009

Я на машине с Windows. Кажется, это не нужно, но когда я это делаю, все вдруг работает. Что-то не так с моим путем? Нужно ли что-то добавить к нему, чтобы избежать копирования DLL?

Ответы [ 2 ]

1 голос
/ 26 января 2009

Apache, как и любое приложение, будет считать, что файл находится в том же каталоге, что и путь к текущему каталогу (см. http://en.wikipedia.org/wiki/Working_directory)., если его там нет. Текущий рабочий каталог, как правило, тот же, что и httpd.exe (основной исполняемый файл), но на самом деле он может отличаться, если вы делаете что-то вроде C: \ Apache2> Bin \ httpd.exe

В этом случае текущим рабочим каталогом является C: \ Apache2, а не C: \ Apache2 \ bin.

Если файл там не найден, приложение естественным образом обходит переменную среды PATH. Переменная окружения PATH - это список путей (точка с запятой или запятая) для поиска файла.

Пуск -> Выполнить -> Введите «cmd.exe», а затем в командной строке введите «echo% PATH%», чтобы увидеть текущий путь, который у вас есть.

Наконец, если файл не найден, он просто выдаст ошибку.

В качестве подсказки вы можете отслеживать, какие файлы пытается загрузить приложение и откуда они их загружают, используя Process Monitor. http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx

Я использовал этот инструмент для решения проблем загрузки DLL в Apache и других приложениях. Просто добавьте фильтр для приложения, которое вы работаете, и пусть он только обнаруживает чтение файла.

1 голос
/ 26 января 2009

Я не знаю внутренностей MySQL и apache.

Моя мысль такова. Внутренняя часть вашего приложения использует libmysql.dll. И кажется, что путь не является правильным, поэтому он ищет в переменной окружения PATH. apache / bin будет в каталоге PATH. Так что это берет dll с этого пути. Если DLL не присутствует в этом пути, я думаю, что он не загружается и, следовательно, не удается.

РЕДАКТИРОВАТЬ: Добавлены решения, которые были добавлены в комментарии

  1. Попробуйте перезагрузить компьютер. У меня была такая же проблема с библиотекой mysqlpp. Путь указывал на mysql bin dir, но он все еще не мог найти libmysql.dll - Даниэль (26 января в 6:55)

  2. Возможно, Apache работает с учетными данными, отличными от ваших (почти наверняка так, если вы запускаете его как службу). Попробуйте поместить каталоги в путь SYSTEM , а не USER путь. - moocha (18 часов назад)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...