Build a PHP extension development environment in Windows. 1. prepare to download and install the PHP5.4.5 program for VS2008 in advance: Download TS from the ETS. The php binary packages include VC6, VC8, VC9, TS, and CTS. VC6, VC8, and VC9 correspond to VC6, VC2005, and VC2008TS respectively (build a PHP extension development environment in Windows)
1. prepare to download and install the PHP5.4.5 program for VS2008 in advance: Download TS from the ETS
The php binary packages include VC6, VC8, VC9, TS, and ETS.
VC6, VC8, and VC9 correspond to VC6, VC2005, and VC2008 respectively.
TS indicates (Thread Safe). when ISAPI (iis server) is allowed, we recommend that you use the TS version to avoid memory leakage and shared variable security because multiple threads are executed in a single process.
When executed with a single process such as FAST_CGI, the thread security check is not required.
Download PHP5.4.5 source code download PHP-SDK download MSYS, it includes Windows linux compiler implementation download deps
The following configuration basics are based on the f: \ php_stdio folder.
2. compile PHP
Download php-sdk first, download the newer php-sdk-binary-tools-20151115.zip, and decompress it
F: \ php_stdio \ php-sdk
Directory. Note: After decompression, the bin and script sub-directories should exist in this directory.
Open a cmd window, switch to the f: \ php_stdio \ php-sdk directory, and run vcvarsall. bat to set the compiling environment variable.
VS2008 installation path \ VC \ vcvarsall. bat
The specific directory of vcvarsall. bat depends on your installation location.
Next, go to the cmd window and continue to run the following command:
Bin \ phpsdk_setvars.bat
Bin \ phpsdk_buildtree.bat php54dev
In this way, an additional php54dev directory is added to the f: \ php_stdio \ php-sdk directory.
Decompress deps
F: \ php_stdio \ php-sdk \ php54dev \ vc9 \ x86 \
Directory. All subdirectories in the deps directory under this directory are empty. after decompression, copy them to many necessary library files for modules/extensions.
Next, copy the PHP-5.4.5 source code directory
F: \ php_stdio \ php-sdk \ php54dev \ vc9 \ x86 \
Directory. Go to the php source code directory
Cd f: \ php_stdio \ php-sdk \ php54dev \ vc9 \ x86 \ php-5.4.5.
Run
Buildconf
Then you can compile php first. At the very beginning, we usually compile as few modules as possible so that the core can be compiled properly:
Configure -- disable-all -- enable-cli
The main purpose of this step is to generate config. w32.h. if you need to generate PHP, you can continue to execute
Nmake clean; the core part of nmakephp5.4 and a command line tool are compiled. Nmake clean is used to avoid interference caused by Legacy compilation intermediate result files.
3. the basic structure of the new extension my_fopenPHP is the same. to facilitate PHP Development, ext_skel and ext_skel_win32.php are extension skeleton building tools in linux and windows respectively. This article describes how to build a PHP extension development environment in Windows, so ext_skel_win32.php is used. The new extension skeleton generated by it can be opened directly with.
The parameters supported by ext_skel_win32.php are commonly used -- extname and -- proto: extname: specify the extension name proto: to facilitate quick building of the function skeleton, you can create a file, and write the definition of each function.
cd f:\php_stdio\php-sdk\php54dev\vc9\x86\php-5.4.5\extphp ext_skel_win32.php --extname=my_fopen
The execution result is displayed, indicating that the new extension skeleton is successfully generated. now open f: \ php_stdio \ php-sdk \ php54dev \ vc9 \ x86 \ php-5.4.5 \ ext to see the my_fopen folder. Enter my_fopen to view my_fopen.dsp, which is the project file of. Now you can develop the extension you want.
4. Compile and use Extensions. Currently, no function interfaces are created for new extensions. However, the default extension provides us with a test function interface. the default function naming rule is: confirm _ [extname] _ compiled function interface: tring confirm _ [extname] _ compiled (string)
1. use VS to open my_fopen.dsp2. set project properties-configure properties-C/C ++-code generation, set the runtime library: multi-thread DLL (/MD) 3. set project properties-> configuration: Switch to Release_TS
4. set project properties-configure properties-C/C ++-advanced, set compilation to: compile to C code (/TC) 5. set project properties-configure properties-linker general, set the output file: Release_TS/php_my_fopen.dll. If this parameter is not set, it will be difficult to find an extension after compilation and generation. Therefore, this setting is not required. 6. set project properties-configure properties-linker General, add additional Library Directory: F: \ php_work \ php-5.4.5 \ dev if this option is not set, the following message is reported during compilation: the input file "php5ts. lib"
7. press F5 to execute the compilation. Will generate php_my_fopen.dll
1 success indicates that the dll is successfully generated.
Now that the extension has been compiled successfully, use it in PHP. 8. copy php_my_fopen.dll to F: \ php_work \ php-5.4.5 \ ext under 8. turn on F: \ php_work \ php-5.4.5 \ php. ini, add extension = ext/php_my_fopen.dl9. create F: \ php_work \ test. php Echo confirm_my_fopen_compiled ("test ");
5. problems encountered during compilation of new extensions 1. fatal error C1902: The Program database manager does not match; check the installation
Mspdbsrv.exe or mspdbcore. dll is lost or their versions are different from those of mspdb80.dll. make sure the same versions of the three files are installed in the system.
Copy the three files in the \ Common7 \ IDE directory under the VC installation directory to the VC \ bin directory under the installation directory.
2 ../main/config. w32.h open failed
Config. w32.h is generated only after the PHP source code is configure.
3. the input file "php5ts. lib" cannot be opened"
Set C ++-> Advanced-> compile to C code (/TC) on the project property page, and choose linker-> Add the dev directory of the PHP binary package to the additional Library Directory.