PHP开发入门1

Jun 23, 2016 pm 01:06 PM

    一直都想学习PHP扩展开发。每当看到那么多的C代码就会觉得无从下手。有一次也用也开发了一个hello world。但是还是不甚理解。

    最近,需要一个生成随机字符串的方法。觉得原生PHP生成的有些慢(主要是想试试是否可以学会写扩展)。于是乎就用zehphir写了一个扩展。

    阿西吧。速度比原生的还慢。之前也测试过zephir,这个貌似不加载PHP原生函数的时候还可以,一旦调用原生函数,速度就会一降再降。所以想学zephir的,还是把他当作一种代码加密方式。

    于是,还是考虑用C吧。那么怎么开发呢?

    百度,谷歌等搜索出来一大堆教程。有很多都说让先写个def文件。这个我第一次做的时候就是用的这种方法。不过这次死活没有找到def的编写教程。于是找教程。

    最终,我发现写扩展,主要就需要在几个地方添加定义,或添加功能即可。当然这里只是做个简单的函数而已。如何开发类,现在还没有看到,有资料的朋友可以提供一些。

     首先,ext_skel生成扩展代码。

./ext_skel --extname=phpext
Copy after login

然后,进入phpext目录,可以看到php_phpext.h和phpext.c。接下来首先打开php_phpext.h,找到如下代码

PHP_MINFO_FUNCTION(phpext);
Copy after login

在下面添加你想添加的函数,其中函数名称需要自定义一个英文字符串

PHP_FUNCTION(函数名称)
Copy after login

接下来打开phpext.c,找到如下代码。这里是PHP入口函数,需要告诉PHP你都有哪些函数。

const zend_function_entry ukey_functions[] = {}
Copy after login

在其中输入你刚才添加的PHP函数名称

 PHP_FE(函数名称, NULL)
Copy after login

下面就要放大招了。添加函数的功能。在phpext.c的最后添加功能

PHP_FUNCTION(函数名称){//这里填写功能if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &length) == FAILURE) //这里获取一个整形的  参数 。length需要前面定义,这里获取到的参数赋值给length{    RETURN_NULL();//返回null  }}
Copy after login


PHP 内置的返回函数

#define RETVAL_RESOURCE(l)				ZVAL_RESOURCE(return_value, l)#define RETVAL_BOOL(b)					ZVAL_BOOL(return_value, b)#define RETVAL_NULL() 					ZVAL_NULL(return_value)#define RETVAL_LONG(l) 					ZVAL_LONG(return_value, l)#define RETVAL_DOUBLE(d) 				ZVAL_DOUBLE(return_value, d)#define RETVAL_STRING(s, duplicate) 		ZVAL_STRING(return_value, s, duplicate)#define RETVAL_STRINGL(s, l, duplicate) 	ZVAL_STRINGL(return_value, s, l, duplicate)#define RETVAL_EMPTY_STRING() 			ZVAL_EMPTY_STRING(return_value)#define RETVAL_ZVAL(zv, copy, dtor)		ZVAL_ZVAL(return_value, zv, copy, dtor)#define RETVAL_FALSE  					ZVAL_BOOL(return_value, 0)#define RETVAL_TRUE   					ZVAL_BOOL(return_value, 1)#define RETURN_RESOURCE(l) 				{ RETVAL_RESOURCE(l); return; }#define RETURN_BOOL(b) 					{ RETVAL_BOOL(b); return; }#define RETURN_NULL() 					{ RETVAL_NULL(); return;}#define RETURN_LONG(l) 					{ RETVAL_LONG(l); return; }#define RETURN_DOUBLE(d) 				{ RETVAL_DOUBLE(d); return; }#define RETURN_STRING(s, duplicate) 	{ RETVAL_STRING(s, duplicate); return; }#define RETURN_STRINGL(s, l, duplicate) { RETVAL_STRINGL(s, l, duplicate); return; }#define RETURN_EMPTY_STRING() 			{ RETVAL_EMPTY_STRING(); return; }#define RETURN_ZVAL(zv, copy, dtor)		{ RETVAL_ZVAL(zv, copy, dtor); return; }#define RETURN_FALSE  					{ RETVAL_FALSE; return; }#define RETURN_TRUE   					{ RETVAL_TRUE; return; }
Copy after login

PHP 接收并格式化参数

b	Booleanl	Integer 整型d	Floating point 浮点型s	String 字符串r	Resource 资源a	Array 数组o	Object instance 对象O	Object instance of a specified type 特定类型的对象z	Non-specific zval 任意类型~Z	zval**类型f	表示函数、方法名称,PHP5.1里貌似木有... .
Copy after login


Statement of this Website
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

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

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Explain the concept of late static binding in PHP. Explain the concept of late static binding in PHP. Mar 21, 2025 pm 01:33 PM

Article discusses late static binding (LSB) in PHP, introduced in PHP 5.3, allowing runtime resolution of static method calls for more flexible inheritance.Main issue: LSB vs. traditional polymorphism; LSB's practical applications and potential perfo

Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Apr 05, 2025 am 12:04 AM

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

How does session hijacking work and how can you mitigate it in PHP? How does session hijacking work and how can you mitigate it in PHP? Apr 06, 2025 am 12:02 AM

Session hijacking can be achieved through the following steps: 1. Obtain the session ID, 2. Use the session ID, 3. Keep the session active. The methods to prevent session hijacking in PHP include: 1. Use the session_regenerate_id() function to regenerate the session ID, 2. Store session data through the database, 3. Ensure that all session data is transmitted through HTTPS.

Describe the SOLID principles and how they apply to PHP development. Describe the SOLID principles and how they apply to PHP development. Apr 03, 2025 am 12:04 AM

The application of SOLID principle in PHP development includes: 1. Single responsibility principle (SRP): Each class is responsible for only one function. 2. Open and close principle (OCP): Changes are achieved through extension rather than modification. 3. Lisch's Substitution Principle (LSP): Subclasses can replace base classes without affecting program accuracy. 4. Interface isolation principle (ISP): Use fine-grained interfaces to avoid dependencies and unused methods. 5. Dependency inversion principle (DIP): High and low-level modules rely on abstraction and are implemented through dependency injection.

How to automatically set permissions of unixsocket after system restart? How to automatically set permissions of unixsocket after system restart? Mar 31, 2025 pm 11:54 PM

How to automatically set the permissions of unixsocket after the system restarts. Every time the system restarts, we need to execute the following command to modify the permissions of unixsocket: sudo...

Explain late static binding in PHP (static::). Explain late static binding in PHP (static::). Apr 03, 2025 am 12:04 AM

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

How to debug CLI mode in PHPStorm? How to debug CLI mode in PHPStorm? Apr 01, 2025 pm 02:57 PM

How to debug CLI mode in PHPStorm? When developing with PHPStorm, sometimes we need to debug PHP in command line interface (CLI) mode...

See all articles