2014-10-13 1 views
4

Я пытаюсь определить, можно ли использовать MySQL, встроенный в PHP, в среду Windows 7. The PHP manual указывает, что расширение MySQLi имеет возможность запускать и останавливать встроенный сервер MySQL.Компиляция PHP с MySQLi, встроенная в Windows 7

Однако распределенные сборки для Windows с помощью PHP.net, похоже, не включены. Мои поисковые запросы в Интернете показали мне этот вопрос: Compiling PHP with --enable-embedded-mysqli and --with-mysqli, который, как представляется, указывает, что если я скомпилирую PHP, я могу включить встроенные команды сервера MySQL.

Хотя я могу успешно построить ванильный PHP, я, похоже, не могу получить buildconf, чтобы предоставить configure с опцией --enable-embedded-mysqli. Может кто-нибудь мне помочь?

+0

С тех пор я определил, что 'buildconf' использует файлы' config.w32', чтобы найти его варианты (я считаю). Для расширения MySLQi 'config.m4' (используется для построения в системе на основе Unix) определяет параметр «--enable-embedded-mysqli», который позволяет вам скомпилировать PHP с встроенным сервером MySLQ, однако версия Windows файла 'config.w32' не задайте этот параметр. Похоже, мои альтернативы - либо узнать больше о создании расширений в целом и «исправить» проблему, либо понять, что PHP на Windows просто не поддерживает встроенный MySQL. , , – Sylvain

ответ

1

ИТАК после обширных исследований и тестирования я нашел решение

Компиляция 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 из источника, чтобы установить эту переменную во время компиляции.

Смежные вопросы