search
HomeBackend DevelopmentPHP TutorialWindows中筹建PHP扩展开发环境

Windows中搭建PHP扩展开发环境

一、提前准备

下载并安装VS2008
下载PHP5.4.5程序:
NTS下载
TS下载
其中php二进制包分为VC6、VC8、VC9及TS和NTS版本。
VC6、VC8、VC9分别对应VC6、VC2005、VC2008
TS表示(Thread Safe),当以ISAPI(IIS SERVER)允许时,因为是单进程中执行多线程,为避免内存泄漏和共享变量安全,建议使用TS版本。
当以FAST_CGI等以单一进程来执行,这样就无需进行线程的安全检查。

下载PHP5.4.5源码
下载PHP-SDK
下载MSYS,它包括Windows下linux编译器的实现
下载deps

下面的配置基础,以f:\php_stdio文件夹为基础

二、编译PHP

首先下载php-sdk,先下载较新的php-sdk-binary-tools-20110915.zip,解压到

f:\php_stdio\php-sdk

目录下。注意,解压后,这个目录下应该有bin和script子目录。

开一个cmd窗口,切换到f:\php_stdio\php-sdk目录下,运行vcvarsall.bat来设置好编译环境变量。

VS2008安装路径\VC\vcvarsall.bat

这里vcvarsall.bat的具体目录要根据你自己的安装位置而定。

接着,进入在cmd窗口里继续运行以下命令:

bin\phpsdk_setvars.bat

bin\phpsdk_buildtree.bat php54dev

这样,在f:\php_stdio\php-sdk目录下又多了一个php54dev目录。

接着继续将deps解压到

f:\php_stdio\php-sdk\php54dev\vc9\x86\

目录下。原来这个目录下的deps目录下的所有子目录均是空目录,解压后,应该复制进很多必要的模块/扩展所需的库文件。

接下来,将PHP-5.4.5源码目录复制一份到

f:\php_stdio\php-sdk\php54dev\vc9\x86\

目录下。进入php源码目录

cd f:\php_stdio\php-sdk\php54dev\vc9\x86\php-5.4.5

运行

buildconf

然后就可以先试着编译php了。最开始,一般编译尽可能少的模块,先让核心能正常编译出来:

configure --disable-all --enable-cli


      这一步的主要目的是生成config.w32.h,如果需要生成PHP,可以继续执行


nmake clean; nmake
php5.4最核心部分及一个命令行工具就编译出来了。nmake clean是为了避免遗留编译中间结果文件带来干扰。

三、创建新扩展my_fopen

PHP扩展的基础结构相同,为方便开发PHP提供了ext_skel和ext_skel_win32.php分别是linux、windows下的扩展骨架搭建工具。
此次讲的是Windows中搭建PHP扩展开发环境,所以使用的是ext_skel_win32.php。用它生成的新扩展骨架,可以直接用VS打开。

上图是ext_skel_win32.php支持的参数
常用的主要是--extname和--proto:
extname:指定扩展的名称
proto:为了便于快速构建函数骨架,可以创建一个文件,并写入各函数的定义。

cd f:\php_stdio\php-sdk\php54dev\vc9\x86\php-5.4.5\extphp ext_skel_win32.php --extname=my_fopen

出现上述执行结果,表示新扩展骨架生成成功,现在打开f:\php_stdio\php-sdk\php54dev\vc9\x86\php-5.4.5\ext可以看到my_fopen文件夹。进入my_fopen可以看到my_fopen.dsp,它就是VS的项目文件。
现在可以开发你想要的扩展程序了。


四、编译、使用扩展

目前新建的扩展中并未创建任何函数接口,但默认的扩展为我们提供了一个测试的函数接口,
默认函数的命名规则是:confirm_[extname]_compiled
函数接口:tring confirm_[extname]_compiled(string)

1.用VS打开my_fopen.dsp
2.设置项目属性-》配置属性-》C/C++-》代码生成,设置运行库:多线程 DLL (/MD)
3.设置项目属性-》配置:切换到Release_TS

4.设置项目属性-》配置属性-》C/C++-》高级,设置编译为:编译为 C 代码 (/TC)
5.设置项目属性-》配置属性-》链接器》常规,设置输出文件:Release_TS/php_my_fopen.dll。
如果不设置,当编译生成扩展后,找起来会比较麻烦。所以这项设置不是必须的。
6.设置项目属性-》配置属性-》链接器》常规,增加附加库目录:F:\php_work\php-5.4.5\dev
如果不设置此选项,编译时会报:无法打开输入文件“php5ts.lib”

7.最后按F5,执行编译。会生成php_my_fopen.dll

成功1个,表示dll生成成功。

现在扩展已经编译成功,接下来是在PHP中使用它。
8.拷贝php_my_fopen.dll至F:\php_work\php-5.4.5\ext下
8.打开F:\php_work\php-5.4.5\php.ini,添加extension=ext/php_my_fopen.dll
9.新建F:\php_work\test.php
echo confirm_my_fopen_compiled("test");

五、编译新扩展遇到的问题

1.fatal error C1902: 程序数据库管理器不匹配;请检查安装
mspdbsrv.exe 或 mspdbcore.dll 丢失或者其版本和 mspdb80.dll 的版本不同,确定这三个文件的相同版本安装在系统里。
在VC安装目录下的\Common7\IDE 目录下拷贝这三个文件到 安装目录下的VC\bin下即可

2. ../main/config.w32.h打开失败
PHP源码进行configure后才会产生config.w32.h

3.无法打开输入文件“php5ts.lib”
设置工程属性页中的C++->高级->编译为改为编译为C代码(/TC),链接器->附加库目录加一项PHP二进制包的dev目录。
Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
PHP's Purpose: Building Dynamic WebsitesPHP's Purpose: Building Dynamic WebsitesApr 15, 2025 am 12:18 AM

PHP is used to build dynamic websites, and its core functions include: 1. Generate dynamic content and generate web pages in real time by connecting with the database; 2. Process user interaction and form submissions, verify inputs and respond to operations; 3. Manage sessions and user authentication to provide a personalized experience; 4. Optimize performance and follow best practices to improve website efficiency and security.

PHP: Handling Databases and Server-Side LogicPHP: Handling Databases and Server-Side LogicApr 15, 2025 am 12:15 AM

PHP uses MySQLi and PDO extensions to interact in database operations and server-side logic processing, and processes server-side logic through functions such as session management. 1) Use MySQLi or PDO to connect to the database and execute SQL queries. 2) Handle HTTP requests and user status through session management and other functions. 3) Use transactions to ensure the atomicity of database operations. 4) Prevent SQL injection, use exception handling and closing connections for debugging. 5) Optimize performance through indexing and cache, write highly readable code and perform error handling.

How do you prevent SQL Injection in PHP? (Prepared statements, PDO)How do you prevent SQL Injection in PHP? (Prepared statements, PDO)Apr 15, 2025 am 12:15 AM

Using preprocessing statements and PDO in PHP can effectively prevent SQL injection attacks. 1) Use PDO to connect to the database and set the error mode. 2) Create preprocessing statements through the prepare method and pass data using placeholders and execute methods. 3) Process query results and ensure the security and performance of the code.

PHP and Python: Code Examples and ComparisonPHP and Python: Code Examples and ComparisonApr 15, 2025 am 12:07 AM

PHP and Python have their own advantages and disadvantages, and the choice depends on project needs and personal preferences. 1.PHP is suitable for rapid development and maintenance of large-scale web applications. 2. Python dominates the field of data science and machine learning.

PHP in Action: Real-World Examples and ApplicationsPHP in Action: Real-World Examples and ApplicationsApr 14, 2025 am 12:19 AM

PHP is widely used in e-commerce, content management systems and API development. 1) E-commerce: used for shopping cart function and payment processing. 2) Content management system: used for dynamic content generation and user management. 3) API development: used for RESTful API development and API security. Through performance optimization and best practices, the efficiency and maintainability of PHP applications are improved.

PHP: Creating Interactive Web Content with EasePHP: Creating Interactive Web Content with EaseApr 14, 2025 am 12:15 AM

PHP makes it easy to create interactive web content. 1) Dynamically generate content by embedding HTML and display it in real time based on user input or database data. 2) Process form submission and generate dynamic output to ensure that htmlspecialchars is used to prevent XSS. 3) Use MySQL to create a user registration system, and use password_hash and preprocessing statements to enhance security. Mastering these techniques will improve the efficiency of web development.

PHP and Python: Comparing Two Popular Programming LanguagesPHP and Python: Comparing Two Popular Programming LanguagesApr 14, 2025 am 12:13 AM

PHP and Python each have their own advantages, and choose according to project requirements. 1.PHP is suitable for web development, especially for rapid development and maintenance of websites. 2. Python is suitable for data science, machine learning and artificial intelligence, with concise syntax and suitable for beginners.

The Enduring Relevance of PHP: Is It Still Alive?The Enduring Relevance of PHP: Is It Still Alive?Apr 14, 2025 am 12:12 AM

PHP is still dynamic and still occupies an important position in the field of modern programming. 1) PHP's simplicity and powerful community support make it widely used in web development; 2) Its flexibility and stability make it outstanding in handling web forms, database operations and file processing; 3) PHP is constantly evolving and optimizing, suitable for beginners and experienced developers.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: How To Unlock Everything In MyRise
1 months agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.

Dreamweaver Mac version

Dreamweaver Mac version

Visual web development tools

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.