如何编写一个独立的PHP扩展
独立的 PHP 扩展可以独立于 PHP 源码之外进行分发。要创建一个这样的扩展,需要准备好两样东西:
-
配置文件 (config.m4)
-
你的模块源码
接下来我们来描述一下如果创建这些文件并组合起来。
准备好系统工具
想要扩展能够在系统上编译并成功运行,需要准备转以下工具:
-
GNU autoconf
-
GNU automake
-
GNU libtool
-
GNU m4
以上这些都可以从 ftp://ftp.gnu.org/pub/gnu/ 获取。
注:以上这些都是类 Unix 环境下才能使用的工具。
改装一个已经存在的扩展
为了显示出创建一个独立的扩展是很容易的事情,我们先将一个已经内嵌到 PHP 的扩展改成独立扩展。安装 PHP 并且执行以下命令:
$ mkdir /tmp/newext
$ cd /tmp/newext
现在你已经有了一个空目录。我们将 mysql 扩展目录下的文件复制过来:
$ cp -rp php-4.0.X/ext/mysql/* .
# 注:看来这篇 README 真的需要更新一下了
# PHP7 中已经移除了 mysql 扩展部分
到这里扩展就完成了,执行:
$ phpize
现在你可以独立存放这个目录下的文件到任何地方,这个扩展可以完全独立存在了。
用户在编译时需要使用以下命令:
$ ./configure
[--with-php-config=/path/to/php-config]
[--with-mysql=MYSQL-DIR]
$ make install
这样 MySQL 模块就可以使用内嵌的 MySQL 客户端库或者已安装的位于 MySQL 目录中的 MySQL。
注:意思是说想要编写 PHP 扩展,你既需要已经安装了 PHP,也需要下载一份 PHP 源码。
定义一个新扩展
我们给示例扩展命名为 “foobar”。
新扩展包含两个资源文件:foo.c 和 bar.c还有一些头文件,但这些不只重要)。
示例扩展不引用任何外部的库这点很重要,因为这样用户就不需要特别指定一些编译选项了)。
LTLIBRARY_SOURCES
选项用于指定资源文件的名字,你可以有任意数量的资源文件。
注:上面说的是 Makefile.in 文件中的配置选项,可以参考 xdebug。
修改 m4 后缀的配置文件
m4 配置文件可以指定一些额外的检查。对于一个独立扩展来说,你只需要做一些宏调用即可。
PHP_ARG_ENABLE(foobar,whether to enable foobar,
[ --enable-foobar Enable foobar])
if test "$PHP_FOOBAR" != "no"; then
PHP_NEW_EXTENSION(foobar, foo.c bar.c, $ext_shared)
fi
PHP_ARG_ENABLE
会自动设置好正确的变量以保证扩展能够被 PHP_NEW_EXTENSION
以共享模式启动。
PHP_NEW_EXTENSION
的第一个参数是扩展的名称,第二个参数是资源文件。第三个参数 $ext_shared
是由 PHP_ARG_ENABLE/WITH
为 PHP_NEW_EXTENSION
设定的。
请始终使用 PHP_ARG_ENABLE
或 PHP_ARG_WITH
进行设置。即使你不打算发布你的 PHP 模块,这些设置也可以保证让你的模块和 PHP 主模块的接口保持一体。
注:PHP_ARG_ENABLE
和 PHP_ARG_WITH
应该是用于定义模块是动态扩展还是静态编译进 PHP 中,就跟编译 PHP 时使用的 --enable-xxx
和 --with-xxx
一样。
创建资源文件
ext_skel
可以为你的 PHP 模块创建一些通用的代码,你也可以编写一些基本函数定义和 C 代码来处理函数的参数。具体信息可以查看 READNE.EXT_SKEL。
不要担心没有范例,PHP 中有很多模块供你参考,选择一个简单的点开始,添加你自己的代码。
注:ext_skel
可以生成好基本模块需要的资源文件和配置文件,不需要自己创建。
修改自定义模块
将 config.m4 文件和资源文件放到同一个目录中,然后执行 phpize
PHP 4.0 以上的版本编译 PHP 的时候都安装了 phpize)。
如果你的 phpize 不在系统环境变量中,你需要指定绝对路径,例如:
$ /php/bin/phpize
这个命令会自动复制必需的构建文件到当前目录并根据 config.m4 创建配置文件。
通过以上的步骤,你已经有了一个独立的扩展了。
安装扩展
扩展可以通过以下命令编译安装:
$ ./configure
[--with-php-config=/path/to/php-config]
$ make install
给模块添加共享支持
有时候独立扩展需要是共享的已供其他模块加载。接下来我会解释如何给已经创建好的 foo 模块添加共享支持。
#ifdef COMPILE_DL_FOO
ZEND_GET_MODULE(foo)
#endif
这一段讲的上面都提到过了,这里只是又强调了一下。
PECL 网站约定
如果你打算发布你的扩展到 PECL 的网站,需要考虑以下几点:
#define PHP_FOO_VERSION "1.2.3"

로드 밸런싱은 세션 관리에 영향을 미치지 만 세션 복제, 세션 끈적임 및 중앙 집중식 세션 스토리지로 해결할 수 있습니다. 1. 세션 복제 복사 서버 간의 세션 데이터. 2. 세션 끈은 사용자 요청을 동일한 서버로 안내합니다. 3. 중앙 집중식 세션 스토리지는 Redis와 같은 독립 서버를 사용하여 세션 데이터를 저장하여 데이터 공유를 보장합니다.

SessionLockingIsateChniqueSureDureauser의 SessionLockingSsessionRemainSexclusivetoOneuseratatime.itiscrucialforpreptingdatacorruptionandsecurityBreachesInmulti-userApplications.sessionLockingSogingSompletEdusingserVerver-sidelockingMegynisms, unrasprantlockinj

PHP 세션의 대안에는 쿠키, 토큰 기반 인증, 데이터베이스 기반 세션 및 Redis/Memcached가 포함됩니다. 1. Cookies는 클라이언트에 데이터를 저장하여 세션을 관리합니다. 이는 단순하지만 보안이 적습니다. 2. Token 기반 인증은 토큰을 사용하여 사용자를 확인합니다. 이는 매우 안전하지만 추가 논리가 필요합니다. 3. Database 기반 세션은 데이터베이스에 데이터를 저장하여 확장 성이 좋지만 성능에 영향을 줄 수 있습니다. 4. Redis/Memcached는 분산 캐시를 사용하여 성능 및 확장 성을 향상하지만 추가 일치가 필요합니다.

SessionHijacking은 사용자의 SessionID를 얻음으로써 사용자를 가장하는 공격자를 말합니다. 예방 방법은 다음과 같습니다. 1) HTTPS를 사용한 의사 소통 암호화; 2) SessionID의 출처를 확인; 3) 보안 세션 생성 알고리즘 사용; 4) 정기적으로 SessionID를 업데이트합니다.

이 기사는 PHP에 대해 설명하고, 전체 형식, 웹 개발의 주요 용도, Python 및 Java와의 비교 및 초보자를위한 학습 용이성을 자세히 설명합니다.

PHP는 유효성 검사, 소독 및 보안 데이터베이스 상호 작용을 통해 보안을 보장하면서 $ \ _ post 및 $ \ _를 사용하여 데이터 양식 데이터를 처리합니다.

이 기사는 PHP와 ASP.NET을 비교하여 대규모 웹 응용 프로그램, 성능 차이 및 보안 기능에 대한 적합성에 중점을 둡니다. 둘 다 대규모 프로젝트에서는 실용적이지만 PHP는 오픈 소스 및 플랫폼 독립적이며 ASP.NET,

PHP의 사례 감도는 다양합니다. 함수는 무감각하고 변수와 클래스는 민감합니다. 모범 사례에는 일관된 이름 지정 및 비교를위한 사례 감수 기능 사용이 포함됩니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

Dreamweaver Mac版
시각적 웹 개발 도구

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

드림위버 CS6
시각적 웹 개발 도구
