Compilación PHP7 VS2015 (desarrollo extendido)

  • php7 requiere vc2015


Visual Studio 2015 Community Edition

PHP -sdk-binary-tools-20110915.zip ( http://windows.php.net/downloads/php-sdk/ download)
deps-7.0-vc14-x86 ( http: //windows.php .net / downloads / php-sdk / download)
php-7.0.2 ( http://php.net/downloads.php descargar)

 

primer paso

  • Descomprima el paquete binario de php-sdk-binary-tools, por ejemplo, lo descomprimo en mi carpeta D: \ vcmyprojects \ php-sdk, la estructura de directorio actual es la siguiente


D: \ vcmyprojects \ php-sdk
    --bin
    --script
    --share

 

Entonces, esto es que ha instalado Visual Studio 2015. Abra el símbolo del sistema del desarrollador VS2015. Tenga en cuenta que debe usar esto para compilar. El cmd normal no funciona y ha tomado muchos desvíos. . .

 

  •  #Entrar en el directorio

cd D: \ vcmyprojects \ php-sdk
  • #Establecer variables de entorno

bin \ phpsdk_setvars.bat
  • Edite el archivo c: \ php-sdk \ php-sdk-binary-tools \ bin \ phpsdk_buildtree.bat y
    agréguelo antes de GOTO EXIT

MD% _% \ vc14 \ x86 \ deps \ binMD% _% \ vc14 \ x86 \ deps \ libMD% _% \ vc14 \ x86 \ deps \ includeMD% _% \ vc14 \ x64 \ deps \ binMD% _% \ vc14 \ x64 \ deps \ libMD% _% \ vc14 \ x64 \ deps \ include
  • #Crear directorios php-sdk de uso común

bin \ phpsdk_buildtree.bat phpdev
  • Descomprima deps-7.0-vc14-x86.7z en la carpeta D: \ vcmyprojects \ php-sdk \ phpdev \ vc14 \ x86 \ deps para cubrir, dentro están todos los archivos de la biblioteca que necesitamos y algunas herramientas necesarias y así sucesivamente.

  • Instale cygwin, utilizo la última versión x86, la descargo e instalo en c: \ cygwin, por lo que no es necesario modificar ext_skel_win32.php

Compila e instala php

Volver al símbolo del sistema del desarrollador VS2015

  • # Ingrese a la carpeta del directorio de origen de php

cd D: \ vcmyprojects \ php-sdk \ phpdev \ vc11 \ x86 \ php-7.0.2buildconf

 

  • #Ver los comandos de expansión y compilación del cinturón

configure --help
  • Si no tiene php instalado, aquí está ahora para ayudarlo, puede compilar e instalar php primero

configurar --disable-all --enable-cli


Luego, verá Type'nmake 'para compilar PHP y luego compilar

hacer

El archivo php.exe se genera en la carpeta D: \ vcmyprojects \ php-sdk \ phpdev \ vc11 \ x86 \ php-7.0.2 \ Release_TS, y esta ruta se agrega a la variable de entorno para que se pueda usar el comando php en la línea de comando.

Desarrollar la primera extensión de PHP

  • Ingrese al directorio de extensión y genere una carpeta de extensión

cd D: \ vcmyprojects \ php-sdk \ phpdev \ vc11 \ x86 \ php-7.0.2 \ extphp ext_skel_win32.php --extname = raintest1


En este momento, podemos ver nuestro directorio raintest1 en D: \ vcmyprojects \ php-sdk \ phpdev \ vc11 \ x86 \ php-7.0.2 \ ext, abrir raintest1 \ php_raintest1.h,

Abra ext \ y verá una carpeta de prueba, esta es su extensión.

  •  Abra VS y seleccione "Archivo" - "Nuevo" - "Crear directorio a partir del código existente"

  • Elija C ++

  • Elija la ruta de la carpeta de extensión php aquí y asigne un nombre al proyecto

  • Seleccione "Usar visual studio", seleccione "Proyecto de biblioteca de vínculos dinámicos (DLL)" como el tipo de proyecto y, a continuación, pase de forma predeterminada al siguiente paso hasta su finalización.

  • Habrá muchos errores al principio, comenzaremos a configurar el proyecto.

  • Primero cambie la configuración de la solución del proyecto a Release

  • Propiedades del proyecto con el botón derecho del ratón, C / C ++, general, directorios de inclusión adicionales, editar

Agregue los siguientes directorios de código fuente php (el directorio real está sujeto al directorio del desarrollador):

E: \ php-xxx-srcE: \ php-xxx-src \ mainE: \ php-xxx-src \ TSRME: \ php-xxx-src \ Zend

Haga clic con el botón derecho en las propiedades del proyecto, C / C ++, preprocesador, definición del preprocesador, edite y agregue las siguientes variables:

ZEND_DEBUG = 0PHP_EXTENSIONPHP_WIN32ZEND_WIN32HAVE_XXX = 1COMPILE_DL_XXXZTS Tenga en cuenta que el XXX anterior debe cambiarse a una extensión en mayúsculas (si la extensión se llama tonyenc, cambie XXX a TONYENC), de lo contrario PHP no reconocerá la extensión. ZTS se usa para decirle al compilador que habilite la seguridad de subprocesos (si se elimina, no se habilita). Tenga en cuenta que si la seguridad de subprocesos está habilitada o no depende de C: \ php7-Win32-VC14-x64-ts descargado previamente, que también habilita la compilación de seguridad de subprocesos, por lo que la seguridad de subprocesos está habilitada aquí.

  • En la columna "Conector" - "Entrada" de la izquierda, en "Proyectos dependientes adicionales", agregue: C: \ php7-Win32-VC14-x64-ts \ dev \ php7ts.lib, que es la versión compilada descargada anteriormente Programa PHP.

  • Haga clic en Aceptar y luego seleccione "Generar" - "Generar solución" en el menú. Felicitaciones, el compilador informó un error: No se puede abrir el archivo de inclusión ../main/config.w32.h, luego cambie C: \ php7-Win32 -VC14 Copie -x64-ts \ win32 \ build \ config.w32.h.in a C: \ php7-Win32-VC14-x64-ts \ main \ config.w32.h (tenga en cuenta que no hay detrás), luego en config Agregue en .w32.h:

#define PHP_COMPILER_ID "VC14"

Esto indicará que la biblioteca en tiempo de ejecución es VC14, que coincide con el programa PHP compilado descargado anteriormente, y regenerará la solución para que pueda compilarse correctamente.

 

Prueba abierta.c

Encuentra este fragmento de código:

Copiar codigo

PHP_FUNCTION (confirm_test_compiled) 
{ 
    char * arg = NULL; 
    int arg_len, len; 
    char * strg; 

    if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC, "s", & arg, & arg_len) == FALLO) { 
        return; 
    } 

    len = spprintf (& strg, 0, "¡Felicitaciones! Ha modificado con éxito ext /%. 78s / config.m4. El módulo% .78s ahora está compilado en PHP.", "prueba", arg); 
    RETURN_STRINGL (strg, len, 0); 
}

Copiar codigo

Cambiar confirm_test_compiled a test_echo

Encuentra este fragmento de código:

const zend_function_entry test_functions [] = { 
    PHP_FE (confirm_test_compiled, NULL) / * Para probar, eliminar más tarde. * / 
    PHP_FE_END / * Debe ser la última línea en test_functions [] * / 
};

Cambie el confirm_test_compiled adentro a test_echo

Genere la solución, busque su propia extensión php phptest.dll en la carpeta Release del directorio raíz del proyecto, cópiela en la carpeta ext de php y configúrela en php.ini:

extensión = phptest.dll

Reinicie IIS, cree un nuevo sitio, cree un archivo test.php en él

<? php  
echo test_echo ("123");

Ejecutar para obtener el resultado:

Esta función test_echo es nuestra propia función personalizada También puede desarrollar sus propias extensiones para mejorar el rendimiento de PHP de acuerdo a sus necesidades.

Reimpreso en: https://my.oschina.net/colin86/blog/897008

Supongo que te gusta

Origin blog.csdn.net/an17822307871/article/details/112798421
Recomendado
Clasificación