ホームページ  >  記事  >  バックエンド開発  >  C を使用して PHP 拡張機能をカスタマイズする方法

C を使用して PHP 拡張機能をカスタマイズする方法

WBOY
WBOYオリジナル
2016-06-13 13:02:10800ブラウズ

C を使用して PHP 拡張機能をカスタマイズする方法

コードの一部を暗号化および復号する必要があるため、PHP モジュールを拡張する必要があるため、単純な暗号化アルゴリズムを実装するために Base64 が使用されています。時間の制約があるため、ここでは主に PHP 拡張機能の実装方法の概要と記録を示します。暗号化アルゴリズムの具体的な実装は含まれません。時間があれば追加します。

1. 環境:
centos 5
php 5.1.6
autoconf 2.59
automake 1.96
libtool
bison
flex
re2c

2. モジュールを作成します
2.1 PHP ソース コード ディレクトリ拡張パッケージ ディレクトリに移動します
cd /usr/include/php/ext

2.2 itbeing という名前のフォルダーを作成します (ここでのモジュール名は itbeing と呼ばれます)
mkdir itbeing
cd itbeing

2.3 config.m4 ファイルを作成する config.m4 ファイルは、GNU autoconf 構文を使用して記述されます。このファイルの主な機能は、どの拡張構成オプションがサポートされているか、どの拡張ライブラリが必要かをシステム ビルド システムに伝えることです。その一部としてコンパイルする必要があるソース ファイル。

  1. PHP_ARG_ENABLE(つまり、
  2. ?? ?[「itbeing」拡張機能を有効にするかどうか]、
  3. ?? ?[? --enable-itbeing?])
  4. ?
  5. if test $PHP_ITBEING != "no" then
  6. ?? PHP_SUBST(ITBEING_SHARED_LIBADD)
  7. ?? ?PHP_NEW_EXTENSION(itbeing、itbeing.c、$ext_shared)
  8. フィ

2.4 php_itbeing.h ヘッダー ファイルを作成する

  1. #ifndef PHP_ITBEING_H
  2. /* 二重包含を防止 */
  3. #define PHP_ITBEING_H
  4. ?
  5. /* 拡張プロパティを定義します */
  6. #define PHP_ITBEING_EXTNAME "itbeing"
  7. #define PHP_ITBEING_EXTVER "1.0"
  8. ?
  9. /* インポート設定オプション
  10. ?*
  11. の外でビルドする場合
  12. ?* PHP ソースツリー */
  13. #ifdef HAVE_CONFIG_H
  14. #include "config.h"
  15. #endif
  16. ?
  17. /* PHP 標準ヘッダーを含めます */
  18. #include "php.h"
  19. /*
  20. ?* エントリポイントシンボル
  21. を定義します
  22. ?* Zend はこのモジュールをロードするときに使用します
  23. ?*/
  24. extern zend_module_entry itbeing_module_entry
  25. #define phpext_itbeing_ptr &itbeing_module_entry
  26. ?
  27. #endif /* PHP_ITBEING_H */

2.5 itbeing.c ファイルを作成する

  1. #include "php_itbeing.h"
  2. ?
  3. PHP_FUNCTION(itbeing_sayhi)
  4. {
  5. ?? 文字
  6. ??int 名前_長さ
  7. ?
  8. ?? ?if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s")
  9. ?? ?&name, &name_len)
  10. ??{
  11. ??
  12. ??}
  13. ?
  14. ?? ?php_printf("こんにちは");
  15. ?? ?PHPWRITE(名前, name_len);
  16. ???php_printf("!n");
  17. }
  18. ?
  19. static function_entry php_itbeing_functions[] = {
  20. ?? ?PHP_FE(itbeing_sayhi, NULL)
  21. ??{ NULL、NULL、NULL }
  22. };
  23. ?
  24. zend_module_entry itbeing_module_entry = {
  25. #if ZEND_MODULE_API_NO >= 20010901
  26. ???STANDARD_MODULE_HEADER、
  27. #endif
  28. ?? PHP_ITBEING_EXTNAME、
  29. ??php_itbeing_functions, /* 関数 */
  30. ?? ?NULL、/* ミニット */
  31. ?? ?NULL、/* MSHUTDOWN */
  32. ?? ?NULL、/* RINIT */
  33. ?? ?NULL、/* RSHUTDOWN */
  34. ?? ?NULL、/* MINFO */
  35. #if ZEND_MODULE_API_NO >= 20010901
  36. ?? PHP_ITBEING_EXTVER、
  37. #endif
  38. ??STANDARD_MODULE_PROPERTIES
  39. };
  40. ?
  41. #ifdef COMPILE_DL_ITBEING
  42. ZEND_GET_MODULE(それ自体)
  43. #endif
  44. 3. モジュールのコンパイル
  45. 3.1 phpize
  46. 3.2 ./config -enable-itbeing
3.3 make3.4 cp modules/itbeing.so /usr/lib/php/modules

3.5 vim /etc/php.ini add extension = itbeing.so

テスト: php -r “itbeing_sayhi('kokko')”
結果: こんにちは、こっこ

?

原文: http://www.kokkowon.com/archives/981

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