PHP7拡張機能開発でHello Wordを実装する方法

小云云
リリース: 2023-03-19 14:38:01
オリジナル
1802 人が閲覧しました

この記事では、主に PHP7 拡張機能開発の具体的な手順と関連する操作テクニックを例の形で分析します。これには、PHP の基礎となるソース コードの変更とコンパイルが含まれます。必要な方は参考にしていただければ幸いです。

ここでは PHP7 に基づいて、PHP 拡張機能を最初から作成する方法を説明します。この記事では、拡張機能を作成する基本的な手順を中心に説明します。例では以下の関数を実装します:


<?php
echo say();
?>
ログイン後にコピー

出力内容:


$ php ./test.php
$ hello word
ログイン後にコピー

拡張機能にsayメソッドを実装し、sayメソッド呼び出し後、hello wordを出力します。

ステップ 1: コードの生成

PHP は、基本コード ext_skel を生成するツールを提供します。このツールは、PHP ソース コードの ./ext ディレクトリにあります。


$ cd php_src/ext/
$ ./ext_skel --extname=say
ログイン後にコピー

extname パラメーターの値は拡張機能の名前です。 ext_skelコマンドを実行すると、カレントディレクトリに同じ拡張子のディレクトリが生成されます。

2 番目のステップは、config.m4 設定ファイルを変更することです

config.m4 の機能は、phpize ツールと連携して設定ファイルを生成することです。構成ファイルは環境の検出に使用されます。拡張機能のコンパイルと実行に必要な環境が満たされているかどうかを確認してください。次に、config.m4 ファイルの変更を開始します。


$ cd ./say
$ vim ./config.m4
ログイン後にコピー

config.m4 ファイルを開くと、この段落のテキストが表示されます。


dnl If your extension references something external, use with:
dnl PHP_ARG_WITH(say, for say support,
dnl Make sure that the comment is aligned:
dnl [ --with-say       Include say support])
dnl Otherwise use enable:
dnl PHP_ARG_ENABLE(say, whether to enable say support,
dnl Make sure that the comment is aligned:
dnl [ --enable-say      Enable say support])
ログイン後にコピー

ここで、dnl は注釈記号です。上記のコードは、作成した拡張機能が他の拡張機能または lib ライブラリに依存している場合、PHP_ARG_WITH 関連コードのコメントを削除する必要があることを示しています。それ以外の場合は、PHP_ARG_ENABLE 関連のコード セグメントのコメントを削除します。私たちが作成する拡張機能は、他の拡張機能や lib ライブラリに依存する必要はありません。したがって、PHP_ARG_ENABLEの前にあるコメントを削除します。コメントを削除した後のコードは次のとおりです:


dnl If your extension references something external, use with:
 dnl PHP_ARG_WITH(say, for say support,
 dnl Make sure that the comment is aligned:
 dnl [ --with-say       Include say support])
 dnl Otherwise use enable:
 PHP_ARG_ENABLE(say, whether to enable say support,
 Make sure that the comment is aligned:
 [ --enable-say      Enable say support])
ログイン後にコピー

3 番目のステップは、コード

を実装し、say.c ファイルを変更することです。 Say メソッドを実装します。
PHP_FUNCTION(confirm_say_compiled) を見つけてその上に次のコードを追加します: PHP_FUNCTION(confirm_say_compiled),在其上面增加如下代码:


PHP_FUNCTION(say)
{
    zend_string *strg;
    strg = strpprintf(0, "hello word");
    RETURN_STR(strg);
}
ログイン後にコピー

找到 PHP_FE(confirm_say_compiled, 在上面增加如下代码:


PHP_FE(say, NULL)
ログイン後にコピー

修改后的代码如下:


const zend_function_entry say_functions[] = {
   PHP_FE(say, NULL)    /* For testing, remove later. */
   PHP_FE(confirm_say_compiled,  NULL)    /* For testing, remove later. */
   PHP_FE_END /* Must be the last line in say_functions[] */
 };
 /* }}} */
ログイン後にコピー

第四步,编译安装

编译扩展的步骤如下:


$ phpize
$ ./configure
$ make && make install
ログイン後にコピー

修改php.ini文件,增加如下代码:


[say]
extension = say.so
ログイン後にコピー

然后执行,php -m

rrreee PHP_FE(confirm_say_compiled) を見つけてその上に次のコードを追加します:

rrreee

変更されたコードは次のとおりです:

rrreee

4 番目のステップ、コンパイルとインストール

拡張機能をコンパイルする手順は次のとおりです:

rrreee
php.ini を変更しますファイルを開き、次のコードを追加します:

🎜🎜 🎜rrreee🎜次に、php -m コマンドを実行します。出力に、🎜🎜🎜🎜という単語が表示されます。5 番目のステップは、テストを呼び出すことです。 🎜🎜🎜 スクリプトを自分で作成し、出力内容が期待どおりであるかどうかを確認します。🎜🎜PHP7 の新機能の紹介🎜🎜🎜🎜 🎜🎜🎜php7のパフォーマンステスト環境の構築方法🎜🎜 🎜🎜🎜

以上がPHP7拡張機能開発でHello Wordを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート