Chuyển đến nội dung chính

[PHP] How to compiled PHP 5.4 Extension in Windows

Trước khi thực hiện, bạn phải chắc là máy bạn đã cài visual studio 2008 & Windows SDK 6.1 (Windows SDK for Windows Server 2008 & .Net framework 3.5 (link tải)


- Download php_sdk và deps từ địa chỉ http://windows.php.net/downloads/php-sdk/
- Download mã nguồn PHP từ github: https://github.com/php/php-src/tree/PHP-5.4.35



Giải nén thư mục php-sdk, đặt vào biến môi trường để gõ cho tiện.Ví dụ tôi giải nén thư mục php-sdk tại ở E thì thêm đường dẫn E:\php-sdk\bin vào biến PATH.


Tạo thư mục C:\php
Từ start menu, chọn All Programs, tìm đến Microsoft Windows SDK 6.1, bật CMD Shell lên.
Gõ lệnh: 
cd C:\php
Tiếp đến gõ lệnh:
setenv /x86 /xp /release
 
Các tùy chọn: 
- x86: win32
- xp: chọn Windows XP là target
- release: Bản realease
 
Gõ lệnh: phpsdk_setvars.bat
Gõ tiếp: phpsdk_buildtree.bat phpdev
 
Vào thư mục C:\php, bạn sẽ thấy thư mục C:\php\phpdev
Bên trong sẽ có các thư mục vc6, vc8, vc9, copy vc9 -> vc11
trong mỗi thư mục sẽ có thư mục x86 hay x64.
 
Giải nén source code php vào thư mục C:\php\phpdev\vc9\x86
Giải nén toàn bộ thư mục deps vào C:\php\phpdev\vc9\x86
 
Có thể tải các extension từ pecl, tạo thư mục pecl ngang cấp với thư mục deps & thư mục php-src

Di chuyển đến thư mục php-src. Gõ lệnh buildconfig. Bạn sẽ gặp lỗi sau
Input Error: There is no script engine for file extension ".js".
 
 Edit file buildconfig.bat
cscript /nologo win32\build\buildconf.js %* 
thành 
cscript /nologo /e:jscript win32\build\buildconf.js %*

Gõ lại lệnh buildconfig ta được file configure.bat mới. Tiếp tục sửa file configure.bat, thêm tham số /e:jscript

Gõ lệnh configure --help để biết các extension hỗ tr

Gõ configure --enable-snapshot-build --disable-debug --enable-zts --enable-apache2-4handler --enable-apache2-2handler --enable-apache2filter --enable-apache2-2filter --disable-cgi --enable-cli --disable-crt-debug --disable-isapi --disable-nsapi --with-curl --without-ereg --enable-fileinfo --with-gd --without-t1lib --with-gettext --with-mhash --enable-mbstring --with-m
crypt --with-openssl --enable-apc --with-imagick --enable-pdo --with-xdebug=shared --with-pdo-mysql  --with-mysql --with-xmlrpc --with-mysqli



Sau đó gõ nmake snap.

Chờ chương trình compile xong, và kết quả bạn thu được là bản PHP nằm trong thư mục Release_TS

 Tham khảo: 
  1. https://wiki.php.net/internals/windows/stepbystepbuild
  2. http://www.bowu.org/php/build-php-from-source-with-pecl-extensions.html
  3. http://www.sitepoint.com/compiling-php-from-source-on-windows/  
 

Nhận xét

Bài đăng phổ biến từ blog này

unicode with python

str = "Quan h\u1ec7 t\u00ecnh d\u1ee5c v\u00e0 t\u1eadp t\u00ecnh d\u1ee5c c\u00f3 th\u1ec3 g\u00e2y \u0111au tim \u1edf m\u1ed9t s\u1ed1 ng\u01b0\u1eddi n\u1ebfu h\u1ecd kh\u00f4ng th\u01b0\u1eddng xuy\u00ean th\u1ef1c hi\u1ec7n hai ho\u1ea1t \u0111\u1ed9ng \u0111\u00f3" hic vo duoc cai chuoi nay ma ko biet lam the nao ca?? print u'\u1ec7' duoc chu "ệ" print len(u'\u1ec7') --> 1 print len(unicode('\u1ec7')) --> 6 vay la convert chuoi thanh unicode the nay moi ky tu lai la 1 ky tu unicode (1Byte) thu cheat the nay xem sao nhi??  code = '\u1ec7' print eval("u'{0}'".format(code)) --> ệ  su dung regular expression ta se print duoc chuoi dau bai ve dang tieng viet bt print re.sub(r"(\\u[a-z0-9]{4})", lambda m: eval("u'{0}'".format(m.group(1))), str) --> Quan hệ tình dục và tập tình dục có thể gây đau tim ở một số người nếu họ không thường xuyên thực hiện hai hoạ...

Lưu ý về vendored_frameworks khi project pod sử dụng nhiều thư viện binary

vendored_frameworks Khi bạn cần đóng framework private source code thì có thể cung cấp cho các dev khác thông qua trực tiếp file .framework hoặc .xcframework hoặc qua pod,... Nếu bạn chỉ muốn đính kèm 1 dynamic framework thì bạn chỉ cần khai báo trong podspec như sau: s.vendored_frameworks = 'Frameworks/MyFramework.xcframework' Khi project thư viện của bạn sử dụng nhiều hơn 1 framework thì sử dụng cú pháp sau  s.vendored_frameworks = ['Frameworks/LV24hCore.xcframework', 'Frameworks/Alamofire.xcframework', 'Frameworks/AlamofireImage.xcframework', 'Frameworks/CryptoSwift.xcframework', 'Frameworks/ObjectMapper.xcframework'] Lưu ý là viết dấu [ trên 1 dòng nhé,  nếu Style xuống dòng trông cho sạch đẹp thì sẽ không ăn nhé. Ví dụ mình viết như này thì test không thấy ăn. s.vendored_frameworks = [ 'Frameworks/LV24hCore.xcframework', 'Frameworks/Alamofire.xcframework', 'Frameworks/AlamofireImage.xcframework', ...