PHP 拡張機能開発入門チュートリアル、PHP 拡張機能入門チュートリアル_PHP チュートリアル
PHP拡張機能開発入門チュートリアル、PHP拡張機能入門チュートリアル
PHP拡張機能の開発
私は、この一連のブログ投稿で PHP 拡張機能の開発について学んだことと洞察を要約し、Linux システムで PHP 拡張機能を開発するために知っておくべき最も基本的な知識を簡単かつ明確に説明するつもりです。レベルが低いので間違いがあるかもしれませんがご指摘ください。
準備
まず、PHP ソース コードのコピーを取得し (Github からチェックアウトするか、公式 Web サイトから最新の安定バージョンをダウンロードできます)、コンパイルします。コンパイルを高速化するには、余分な拡張機能をすべて無効にすること (--disable-all オプションを使用) をお勧めしますが、デバッグ (--enable-debug オプションを使用) とスレッド セーフ (--enable-maintainer を使用) をオンにすることをお勧めします。 -zts)、ただし、拡張機能を公開するときにデバッグをオフにし、状況に応じてスレッド セーフをオンにするかどうかを選択する必要があります:
$ ./buildconf --force
$ ./configure --disable-all --enable-debug --enable-maintainer-zts
$メイク
--prefix オプション (または make install) は必須ではないため、指定しなかったことに注意してください。 PHP を正常にコンパイルするには、いくつかの依存関係パッケージをインストールする必要がある場合がありますので、出力情報に注意してください。
コンパイルされた PHP 実行可能プログラムは、ソース コードの sapi ディレクトリにあります。将来的には、主に cli (コマンド ライン インターフェイス) 環境を使用することになります。 :
$ alias php-dev=/usr/local/src/php-5.6.5/sapi/cli/php
便利なコマンドライン オプションがいくつかあります:
php-dev -h # ヘルプ情報を出力します
php-dev -v # バージョン情報を出力します
php-dev --ini #設定情報を出力する
php-dev -m #ロードされたモジュール情報を出力します
php-dev -i # phpinfo
php-dev -r
#コード内でコードを実行します
拡張スケルトン
PHP のすべての公式拡張機能はソース コードの ext ディレクトリにあり、独自の拡張機能もこのディレクトリに配置できます。このディレクトリには、PHP 拡張機能のスケルトンを生成するために使用される ext_skel という名前のシェル スクリプトがあることに注意してください。このスクリプトを使用すると、PHP 拡張機能をすばやく作成できます。
次に拡張機能を完成させましょう。 myext ディレクトリに入り、config.m4 構成ファイルを編集し、PHP_ARG_ENABLE マクロ関数を見つけて、前の dnl コメント (合計 3 行) を削除します。ソース コードのルート ディレクトリに戻り、buildconf、configure、make コマンドを再実行します。
$ ./configure --help grep myext | --enable-myext myext サポートを有効にする
$ ./configure --disable-all --enable-myext --enable-debug --enable-maintainer-zts
$メイク
コードの大部分はすでにコンパイルされているため、このコンパイルは非常に高速になるはずです。 PHP には拡張機能をコンパイルする別の方法 (拡張機能を .so ファイルにコンパイルする動的リンクを使用する) がありますが、拡張機能を開発する場合は静的コンパイルを使用することをお勧めします。これにより、構成ファイルに拡張機能をロードする必要がなくなるためです。
すべてがうまくいけば、最初の拡張機能を実行する準備が整います:
$ php-dev -r 'echoconfirm_myext_compiled("myext") "n";'
おめでとうございます! ext/myext/config.m4 が正常に変更されました。モジュール myext が PHP にコンパイルされました。
最初のコマンドは、拡張機能がロードされたことを示しています。 2 番目のコマンドは、ext_skel 拡張スケルトンによって自動的に作成された関数を実行します。もちろん、この関数には意味はありませんが、この関数を hello world に簡単に適用できます。
拡張機能を手動で作成する
ほとんどのチュートリアルでは、ext_skel 拡張スケルトンをプロトタイプとして使用して、拡張機能の開発を説明します。もちろん、このアプローチは非常に便利で高速です。しかし、私は個人的には拡張機能を純粋に手作業で開発することを好みます。なぜなら、あらゆる詳細を理解するのが簡単だからです。
拡張機能を手動で作成するには、まず ext ディレクトリに入り、拡張機能ディレクトリ myext2 を作成します。いくつかのファイルが必要です: config.m4、myext2.c、php_myext2.h。
まず、構成ファイル config.m4 を書きましょう:
PHP_ARG_ENABLE(myext2, myext2 サポートを有効にするかどうか,
[ --enable-myext2 myext2 サポートを有効にする])
if テスト "PHP_MYEXT2" != "no" then
PHP_NEW_EXTENSION(myext2, myext2.c, $ext_shared)
ふぃ
config.m4 は、実際には autoconf プログラムによって使用される構成ファイルです。Autoconf は autotools ツールボックスの重要なコンポーネントです。 autoconf の使用法を完全に紹介するには長い時間がかかりますが、幸いなことに、ここでの使用法は非常に簡単です。
PHP_ARG_ENABLE は、autoconf 用に PHP によって定義されたマクロ関数です。Myext2 はその最初のパラメータであり、最後の 2 つのパラメータは make と configure が実行されるときの表示にのみ使用されるため、必要なものを自由に記述できます。 [ ] は、autoconf 構文の二重引用符のように機能し、文字列をラップするために使用されます (2 番目のパラメーターにはスペースが含まれていますが、角括弧で囲む必要はないことに注意してください)。拡張機能がデフォルトでオンであるかオフであるかを示すために使用される 4 番目のパラメーターもあります (デフォルトは no)。
次の 3 行は、実際には PHP_MYEXT2 拡張モジュールが有効になっているかどうかを判断するためのシェル構文です。拡張モジュールが有効になっている場合 (--enable-myext2)、$PHP_MYEXT2 変数の値は no ではないため、PHP_NEW_EXTENSION マクロが実行されます。このマクロ関数は、autoconf 用に PHP によって定義された拡張構文でもあります。最初のパラメーターは拡張機能の名前でもあり、2 番目のパラメーターは拡張機能によってコンパイルされる C ファイルです。複数ある場合は、それらを順番に書き留めます。スペースで区切ります); 3 つのパラメータは $ext_shared に固定されます。
次に、php_myext2.h ヘッダー ファイルを作成します。このファイルの名前は、PHP 拡張機能の仕様である php_extension.h です。
#PHP_MYEXT2_H を定義します
extern zend_module_entry myext2_module_entry;
#define phpext_myext2_ptr &myext2_module_entry
/* プロトタイプ */
PHP_FUNCTION(こんにちは);
さらに、拡張バージョン番号と関数プロトタイプを識別するマクロも定義しました (PHP_FUNCTION マクロを通じて、PHP_FUNCTION マクロ関数のパラメーターは、後でこの関数を実装します)。
最後に、myext2.c ファイルの実装を見てみましょう:
#include "php.h"
#include "php_myext2.h"
/* {{{ myext2_functions[]
*
* ユーザーに表示されるすべての関数は、myext2_functions[] にエントリが必要です。
*/
static const zend_function_entry myext2_functions[] = {
PHP_FE(こんにちは、 NULL)
PHP_FE_END
};
/* }}} */
/* {{{ myext2_module_entry
*/
zend_module_entry myext2_module_entry = {
STANDARD_MODULE_HEADER、
"myext2", /* モジュール名 */
myext2_functions, /* モジュール関数 */
NULL, /* モジュールの初期化 */
NULL, /* モジュールのシャットダウン */
NULL, /* 初期化リクエスト */
NULL, /* シャットダウンのリクエスト */
NULL, /* phpinfo */
PHP_MYEXT2_VERSION, /* モジュールのバージョン */
STANDARD_MODULE_PROPERTIES
};
/* }}} */
#ifdef COMPILE_DL_MYEXT2
ZEND_GET_MODULE(myext2)
#endif
/* {{{ proto void hello()
「hello world!」を印刷します。 */
PHP_FUNCTION(こんにちは)
{
php_printf("hello world!n");
}
/* }}} */
展の骨組みを下回って構築された .c ファイルが公開されました。私たちの .c 文書は非常に簡潔であり、これらは最も基本的な展に対して十分に満たされています。
上記のコードは単純で明確であり、大部分の注釈はすでに明らかにされています。1. php.h は必須であり、stdio.h、stdlib.h などの、今後使用するほとんどの標準ファイルが含まれています。
2.myext2_functions は、外部に公開する関数で構成される構造体の数値群を定義し、各要素は PHP_FE 宏によって指定されます。情報 (ここでは単に NULL を使用しています)、最後の要素は PHP_FE_END である必要があります。 注意してください。外部に公開される使用する関数はそれぞれ、この構造体の数値グループ内で定義されている必要があります。 3.myext2_module_entry は私たちのモジュール情報を受け取りました。これは構造体であり、プロパティの大部分がコメントを通じてすでに説明されています。 注意中の 5 つの関数は、私たち全員が単に NULL に設定されており、その後の博覧会でそれぞれの使用法について説明します。 4.ZEND_GET_MODULE(myext2) 関数の数は ifdef に含まれるため、それが使用されるかどうかは状況に応じて決まります。 。
5. 最後に実行コードは hello 関数を実装しましたが、これは非常に単純で、php_printf を使用して hello world! を出力します。
6.注釈の {{{ と }}} は、vim などのブラウザを便利にするために使用されており、注釈もこのように記述しています。
ここでは、PHP_FE、PHP_FE_END、PHP_FUNCTION などのいくつかの宏を対象としていますが、これらの宏を後続のブログに完全に含めることができるため、これらの宏を認識することが最も適切です。
注意我们毪各文件の命名、变量的命名、空格および缩进、および注释等都必常规范的、従順规范、可用我们编写的代コードおよびPHP本体の代コード更加契約,我们推也荐你このような設定を使用して、PHP 展を公開します。
最終、编译运行我们的扩展:
复制代码
代码如下:
$ ./buildconf --force
$ php-dev -r 'hello();'
ハローワールド!

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。
