PHP源码编译php为 nts (非线程安全)的方法

好吧其实这个办法已经在 https://blog.526net.com/?p=2950 这篇文章里写了,但是为了方便其他遇到这个问题的朋友查询,只好单独写个标题勾引一下你们。

目前网上流传的PHP编译默认都是ts的,其实很简单只要在生成配置文件的时候加几个代码就好。

PHP源码也需要编译成nts的,(建议直接下载一份编译好的:http://windows.php.net/downloads/releases/

重新生成配置文件:configure –enable-cli –disable-zts

PHP 扩展开发环境以及PHP编译:https://blog.526net.com/?p=2914

参考资料:http://stackoverflow.com/questions/10084493/compiling-a-php-extension-as-non-thread-safe

 

Got it! I hope this can help those compiling php extensions on windows in the future. What I have done is based on: https://wiki.php.net/internals/windows/stepbystepbuild

Note: I read an answer on this site that said compiling PHP extensions by itself on windows is unsupported. Based on my experiments yesterday, it seems to be a lot of work as well, so I am using the PHP build process.

The best way is to use the PHP build process.

Install Visual C++ Express 2008 (any version will do, but express is free) and Windows SDK 6.1 (note that we want the 6.1 version not anything older or newer).
Install the SVN client tools if you haven’t done so and restart for your PATH variable to take effect.
Get the PHP SDK binary tools and extract it to C:\php-sdk.
Start the CMD Shell under Microsoft Windows SDK v6.1 in your start menu and run cd C:\php-sdk.
Run setenv /x86 /xp /release this creates a 32-bit release. You can use /x64 to build a 64-bit release (I have not tried this).
run bin\phpsdk_setvars.bat
run bin\phpsdk_buildtree.bat php53dev
Download the PHP source code and extract it to C:\php-sdk\php53dev\vc9\x86 so that you end up with C:\php-sdk\php53dev\vc9\x86\php5.3-xyz
Download the latest deps and extract everything to C:\php-sdk\php53dev\vc9\x86. You may be prompted to overwrite any existing folders, so press yes.
run cd C:\php-sdk\php53dev\vc9\x86
Check out the latest version of your extension from the svn repository: svn co http://svn.php.net/repository/pecl/imagick/trunk pecl/imagick I am checking out imagick here.
Install any dependencies. In my case, I need to install ImageMagick, so I downloaded the latest recommended windows binary. You will need to restart after installation to update your PATH variable, but you can do this after you have compiled. Make sure you install the C/C++ headers and includes as well.
Copy the contents of the includes directory from the ImageMagick install directory to C:\php-sdk\php53dev\vc9\x86\deps\include.
Copy the contents of the lib directory from the ImageMagick install directory to C:\php-sdk\php53dev\vc9\x86\deps\lib
Now, let’s build: run cd C:\php-sdk\php53dev\vc9\x86\php5.3-xyz then buildconf then configure –help. Look at the help properly. It will show you all config flags and any avaliable extensions to enabled. In my case, since I added imagick, I had an option called –with-imagick
Run config: configure –enable-cli –with-imagick=shared –disable-zts If you want to build a non-thread-safe binary use –disable-zts, otherwise remove that configuration flag. I am not sure why, but sometimes extensions use the –with-myextension flag and sometimes –enable-myextension, so check configure –help for the flag to use. If you add =shared after the extension flag, it will be compiled as a separate DLL, which si what we want.
Compile: run nmake then nmake snap.
Done 🙂 Check C:\php-sdk\php53dev\vc9\x86\php-5.3.10\Release (non-thread-safe) or C:\php-sdk\php53dev\vc9\x86\php-5.3.10\Release_TS (thread-safe). Your compiled binaries should be in there. The compiled extensions (pecl), should be in a ZIP file similiar to pecl-5.3.10-nts-Win32-VC9-x86.zip. Open this file and extract the extensio DLL to your ext folder in your PHP installation.
Enable the PHP extension and restart your webserver. Run phpinfo() and check that the extension is enabled.
If the extension does not work properly, make sure you reboot to update your PATH variable. In my case, I need to have the imagemagick install directory in my PATH variable.
???
Profit!

发表评论

您的电子邮箱地址不会被公开。