ИТАК после обширных исследований и тестирования я нашел решение
Компиляция PHP на окнах зависит от config.w32 файлов, чтобы обеспечить настраиваемые и сделать файл необходимых инструкций для настройки и затем компилировать PHP. Вариант Unix - это файл config.m4.
Проблема заключается в том, что переменная Windows не имеет логики для активации встроенного сервера.
Оригинальный код (только часть интереса)
if (CHECK_LIB("libmysql.lib", "mysqli", PHP_MYSQLI) &&
CHECK_HEADER_ADD_INCLUDE("mysql.h", "CFLAGS_MYSQLI", PHP_MYSQLI +
"\\include;" + PHP_PHP_BUILD +
"\\include\\mysql;" + PHP_MYSQLI)) {
EXTENSION("mysqli", mysqli_source);
AC_DEFINE('HAVE_MYSQLILIB', 1, 'Have MySQLi library');
MESSAGE("\tlibmysql build");
PHP_INSTALL_HEADERS("ext/mysqli", "php_mysqli_structs.h");
} else {
WARNING("mysqli not enabled; libraries and headers not found");
PHP_MYSQLI = "no"
}
Вы должны изменить этот код, чтобы позволить серверу вложенной.
if (PHP_EMBEDDED_MYSQLI != "no") {
if (CHECK_LIB("libmysqld.lib", "mysqli", PHP_MYSQLI) &&
CHECK_HEADER_ADD_INCLUDE("mysql.h", "CFLAGS_MYSQLI", PHP_MYSQLI +
"\\include;" + PHP_PHP_BUILD +
"\\include\\mysql;" + PHP_MYSQLI)) {
EXTENSION("mysqli", mysqli_source);
AC_DEFINE('HAVE_MYSQLILIB', 1, 'Have MySQLi library');
MESSAGE("\tlibmysql build");
AC_DEFINE('HAVE_EMBEDDED_MYSQLI', 1, 'Embedded MySQL support enabled');
MESSAGE("\tEmbedded MySQL build");
PHP_INSTALL_HEADERS("ext/mysqli", "php_mysqli_structs.h");
} else {
WARNING("mysqli not enabled; libraries and headers not found");
PHP_MYSQLI = "no"
}
} else {
if (CHECK_LIB("libmysql.lib", "mysqli", PHP_MYSQLI) &&
CHECK_HEADER_ADD_INCLUDE("mysql.h", "CFLAGS_MYSQLI", PHP_MYSQLI +
"\\include;" + PHP_PHP_BUILD +
"\\include\\mysql;" + PHP_MYSQLI)) {
EXTENSION("mysqli", mysqli_source);
AC_DEFINE('HAVE_MYSQLILIB', 1, 'Have MySQLi library');
MESSAGE("\tlibmysql build");
PHP_INSTALL_HEADERS("ext/mysqli", "php_mysqli_structs.h");
} else {
WARNING("mysqli not enabled; libraries and headers not found");
PHP_MYSQLI = "no"
}
}
Кроме того, необходимо добавить следующую строку в верхней части файла прямо под линией ARG_WITH().
ARG_ENABLE("embedded-mysqli", "Enable the embedded mysqli server", "no");
Запуск buildconf
теперь будет производить файл конфигурационный с возможностью встраивания MySQLi и настройки.
configure --with-extra-includes=[path-to-mysql-dir\include] --with-extra-libs=[path-to-mysql-dir\lib] --without-mysqlnd --with-mysqli=shared,libmysqldclient --enable-embedded-mysqli [other options here]
Теперь вы можете запустить nmake
и nmake snap
скомпилировать PHP :)
Вам нужно скопировать libmysqld.dll в C: \ MySQL \ PHP (или везде, где вы разместили PHP). Вы разрешаете php через php.ini, как обычно.
Причина создания PHP как общего модуля вместо статического модуля: nmake snap
сбой, так как он запускает PHP, чтобы упаковать дистрибутив php, если MySQLi была построена статически, теперь он будет искать свои зависимости mysql при запуске и терпеть неудачу молча (без ошибок), когда он их не находит.
Поместите конфигурационный файл mysql (my.ini) в один каталог выше php.exe. Это позволит вам указать настраиваемые каталоги, чтобы связать PHP с вашей сборкой mysql. Используйте группу [embedded], а не [mysqld], чтобы пройти по конфигурациям.
Единственное, что могло бы улучшить это решение, было бы, если бы я мог найти способ разместить файл my.ini в том же каталоге, что и PHP. Я попытаюсь создать MySQL из источника, чтобы установить эту переменную во время компиляции.
С тех пор я определил, что 'buildconf' использует файлы' config.w32', чтобы найти его варианты (я считаю). Для расширения MySLQi 'config.m4' (используется для построения в системе на основе Unix) определяет параметр «--enable-embedded-mysqli», который позволяет вам скомпилировать PHP с встроенным сервером MySLQ, однако версия Windows файла 'config.w32' не задайте этот параметр. Похоже, мои альтернативы - либо узнать больше о создании расширений в целом и «исправить» проблему, либо понять, что PHP на Windows просто не поддерживает встроенный MySQL. , , – Sylvain