ホームページ  >  記事  >  バックエンド開発  >  PHPモジュール開発とは何ですか?簡単なPHPモジュール開発の紹介

PHPモジュール開発とは何ですか?簡単なPHPモジュール開発の紹介

伊谢尔伦
伊谢尔伦オリジナル
2017-06-22 13:30:214644ブラウズ

必要なシナリオによっては、特定のニーズを満たすために独自のローカル PHP 関数 を開発する必要があり、新しい関数は PHP モジュールに存在する必要があります。以下では、最も単純な PHP モジュール開発を紹介します。独自の Say_hello($arg) 関数を構築して hello world: $arg を出力します。

このドキュメントで紹介する PHP モジュールの開発は、Hello World を作成する程度のものです。なぜこれが行われるかについては、しばらく説明しません。その後の構造を詳しく紹介します。

Hello World レベルのモジュールは、いくつかの簡単な手順で完了できます:

モジュールインフラストラクチャを生成する

モジュールコードを変更し、say_hello 関数を追加する

コンパイルを変更する 設定ファイル

モジュール共有ライブラリを生成する

モジュールを有効にするための構成モジュール

モジュールをテストします

1. モジュールベースを生成します

PHP ソースコードディレクトリの下にある ext ディレクトリに入ります。
./ext_skel ––extname=sayhello を実行します (ここの「–」エンコーディングに問題があるため、直接コピーしないでください)
出力:

[root@myhost ext]# ./ext_skel ––extname=sayhello

sayhello ディレクトリの作成

基本ファイルの作成: config.m4 config.w32 .cvsignore Sayhello.c php_sayhello.h CREDITS EXPERIMENTAL testing/001.phpt Sayhello.php [done].

新しい拡張機能を使用するには、次のものが必要です。次の手順を実行します:

1. $ cd ..

2. $ vi ext/sayhello/config.m4

3. $ ./configure ––[with|enable] -sayhello

5. $ make

6. $ ./php -f ext/sayhello/sayhello.php

7. $ make

8. 手順 3-を繰り返します。 ext/sayhello/config.m4 に満足するまで 6 を実行し、

ステップ 6 で

モジュール

が PHP にコンパイルされていることを確認します。その後、

コードの作成を開始し、最後の 2 つのステップを必要に応じて繰り返します。

を参照してください。モジュールが生成されたことを示す出力を表示します。 生成されたモジュールによってどのファイルが生成されるかを見てみましょう:

-RW-R – R – Root Root 2103 APR 9 05:05 Config.m4 // 構成ファイルをコンパイルします

-RW- R – R —R – 1 root root 310 Apr 9 05:05 config.w32 //w32 コンパイル設定ファイル

-rw-r–r– 1 root root 8 Apr 9 05:05 クレジット //著者情報

- rw-r–r – 1 ルート root 0 Apr 9 05:05 EXPERIMENTAL //ベータ版情報識別

-rw-r–r– 1 ルート root 2755 Apr 9 05:05 php_sayhello.h //モジュール定義ヘッダー ファイル

-rw-r –r– 1 root root 5294 Apr 9 05:05 Sayhello.c //モジュール実装ファイル

-rw-r–r– 1 root root 508 Apr 9 05:05 Sayhello.php //php usedファイル

drwxr-xr-x 2 root root 4096 4 月 9 日 05:05 テスト’ s ’ s ’ s ’ s ’ t t t t t t t t t t t t t t t t t t t t t t t t t t y

2.say_hello() 関数を実装します

モジュールの php_sayhello.h ファイルを開き、php Say_hello() 用に用意された c 関数定義を追加します。

PHP_FUNCTION(say_hello); //php ソース コードは、慣れれば非常に便利です。追加したら、say_hello.c に PHP_FUNCTION (say_hello) の特定の実装を追加します。

PHP_FUNCTION(say_hello){
char *arg = NULL;
int arg_len;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) ==FAILURE) {  //获取php代码的输入参数,方式与scanf差不多
return;
}
zend_printf("hello world : %s",arg);
RETURN_STRINGL(arg, arg_len, 1);
}

実装コードが記述されたので、次のことも行う必要があります。この関数を PHP ローカル関数に登録するには、sayhello.c のsayhello_functions を変更する必要があります:

zend_function_entry sayhello_functions[] = {
PHP_FE(confirm_sayhello_compiled,    NULL)        /*
 For testing, remove later. */
PHP_FE(say_hello,    NULL)        //好,现在say_hello函数也注册了
{NULL, NULL, NULL}  
  /* Must be the last line in sayhello_functions[] */
};

3. コンパイル設定ファイルを変更します

config.m4 の前にある
コメント文字「dnl」を削除します。次の内容:

dnl PHP_ARG_ENABLE(sayhello、sayhello サポートを有効にするかどうか、

dnl コメントが整列していることを確認してください:

dnl [ --enable-sayhello Sayhello サポートを有効にする])

dnl PHP_SUBST(SAYHELLO_ SHARED_LIBADD)

4. モジュールをコンパイルし、共有ライブラリを生成します

ここで使用します。さらに、動的ライブラリモジュールの生成方法は、PHP への静的コンパイルよりもはるかに高速であり、

デバッグ

に便利です (動的ライブラリは PHP を使用してロードされません)後で説明するように、dl() 関数)。

sayhello モジュール フォルダーに入り (cd)、パス bin で php

install

phpize を実行します:

[root@myhostsayhello]# /opt/php_server/php/bin/phpize

次の設定:

PHP API バージョン: 20041225

Zend モジュール API 番号: 20060613

Zend 拡張 API 番号: 220060519

此时为模块编译的configure文件已经生成。继续生成Makefile文件:

[root@myhost sayhello]# ./configure –with-php-config=/opt/php_server/php/bin/php-config

……没问题的话是没有错误的

现在可以编译了:

make

代码没有问题的话不会有错的。

编译完,进行模块安装:

[root@myhost sayhello]# make install
Installing shared extensions:     /opt/php_server/php/lib/php/extensions/no-debug-non-zts-20060613/

显示模块已经安装至/php安装路径/extensions/no-debug-non-zts-20060613/ 路径下了。

5、配置模块,使其被加载

打开你的php.ini文件开始修改吧:

扩展路径设置:

修改extension_dir = “/php安装路径/lib/php/extensions/no-debug-non-zts-20060613″ //看看上述的模块安装路径就知道了

增加模块设置:

[sayhello]
extension=sayhello.so

ok 大功告成,重新启动你的php模块把。

6、测试模块

写以下php测试代码执行:

<?php
$a = say_hello("frank");
echo "<br>";
echo $a;
?>;

打开这个网页后显示:

hello world : frank
frank

成功运行,模块测试通过。

以上がPHPモジュール開発とは何ですか?簡単なPHPモジュール開発の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。