最初の便利な PHP 拡張機能
PHP 拡張機能を開発するための C/C++
PHP 開発者にとっては、非常に複雑で学ぶべきことがたくさんあると感じています。もちろん、PHP 拡張機能の開発も習得しなければならないスキルです。ここで偉大な鳥に敬意を表します。兄(ラルエンス)〜
今日開発する最初の機能拡張です。その主な機能は、ログを記録するときにログの前に日付部分を生成することです
<code>#即使当前的时间,年-月-日 时:分:秒 时间戳.微妙数 [2015-05-19 20:39:32 1432039172.968199]</code>
php拡張機能の前置き
最初に「スケルトン」を生成します:
<code>1. 进入php源码src/ext目录下面 2. 运行./ext_skel --extname=mytest 3. 进入src/ext/mytest/目录 4. 在编写扩展的时候要先修改下config.me文件的10-12行,去掉前面的dnl注释,这个网上一搜一大把。</code>
ヘッダファイル内 php_mttest.hで、書き込むPHP拡張関数の名前を宣言
<code>PHP_FUNCTION(get_log_title); #PHP_FUNCTION是PHP内核中声明的一个宏 #define PHP_FUNCTION ZEND_FUNCTION //在文件src/main/php.h : 347行 #define ZEND_FUNCTION(name) ZEND_NAMED_FUNCTION(ZEND_FN(name)) //文件src/Zend/zend_API.h : 68行 #define ZEND_FN(name) zif_##name //文件src/Zend/zend_API.h : 65行 #define ZEND_NAMED_FUNCTION(name) void name(INTERNAL_FUNCTION_PARAMETERS) //文件src/Zend/zend_API.h : 67行 #define INTERNAL_FUNCTION_PARAMETERS int ht, zval *return_value, zval **return_value_ptr, zval *this_ptr, int return_value_used TSRMLS_DC //src/Zend/zend.h : 290行</code>
上記の宣言関数マクロを展開すると、
<code>void zif_get_log_title( int ht, zval *return_value, zval **return_value_ptr, zval *this_ptr, int return_value_used TSRMLS_DC)</code>
zend_function_entry宣言にget_log_title関数の宣言を追加mytest.c には
<code>const zend_function_entry logs_functions[] = { PHP_FE(confirm_logs_compiled, NULL) /* For testing, remove later. */ PHP_FE(get_log_title, NULL) PHP_FE_END /* Must be the last line in logs_functions[] */ }; #编写函数 PHP_FUNCTION(get_log_title) { struct timeval tv; time_t rawtime; struct tm *timeinfo; char *formatinfo; time(&rawtime); timeinfo = localtime(&rawtime); gettimeofday(&tv, NULL); spprintf(&formatinfo, 0, "[%4d-%02d-%02d %d:%d:%d %d.%d]", 1900 + timeinfo->tm_year, 1 + timeinfo->tm_mon, timeinfo->tm_mday, timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec, tv.tv_sec, tv.tv_usec); RETURN_STRING(formatinfo, 1); }</code>
ここで参照するマクロもあります RETURN_STRING
<code>#define RETURN_STRING(s, duplicate) { RETVAL_STRING(s, duplicate); return; } //文件src/Zend/zend_API.h : 635行 #define RETVAL_STRING(s, duplicate) ZVAL_STRING(return_value, s, duplicate) //文件src/Zend/zend_API.h : 623行 #define ZVAL_STRING(z, s, duplicate) do { \ //文件src/Zend/zend_API.h : 577-583行,这个的作用其实是给一个string类型zval变量赋值 const char *__s=(s); \ zval *__z = (z); \ Z_STRLEN_P(__z) = strlen(__s); \ //设置zval字符串长度 Z_STRVAL_P(__z) = (duplicate?estrndup(__s, Z_STRLEN_P(__z)):(char*)__s);\ //设置zval字符串的值 Z_TYPE_P(__z) = IS_STRING; \ //设置zval字符串的类型为字符串 } while (0)</code>
したがって、RETURN_STRING(formatinfo, 1) は次のように展開されます:
<code>do { const char *__s=(formatinfo); zval *__z = (return_value); //这里面的return_value估计是内核定义的,类似 zval *return_value; (*__z).value.str.len = strlrn(__s); //等价于__z->value.str.len (*__z).value.str.val = (1?estrndup(__s, (*__z).value.str.len):(char*)__s); (*__z).type = 6; }</code>
コンパイルしてテスト
<code>编译的时候需要安装好的php,比如我的php安装在/usr/local/php/目录下面 cd mytest; //今日刚才编写的函数扩展目录 /usr/local/php/bin/phpize //运行phpize,生成configure文件 ./configure --with-php-config=/usr/local/php/bin/php-config //configure,后面的--with-php-config会生成so文件到安装好的扩展目录,当然也可以不用加,声称之后手动copy过去 make //有错误的话修正 make install //运行之后会提示类似下面的内容 #Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/ #修改配置文件php.ini添加extension = mytest.so #测试 php -r 'var_dump(log_get_title());'</code>
以下の内容を出力したら、おめでとうございますyour success
<code>[root@iforever logs]# php -r 'var_dump(get_log_title());' && date string(39) "[2015-05-19 22:52:29 1432047149.755613]" 2015年 05月 19日 星期二 22:52:29 CST</code>
5/19/2015 10:54:38 PM
この記事の著作権は著者 ifforever (luluyrt@163.com) に帰属し、転載後のいかなる形式の転載も禁止されています。記事、著者、および元のテキストリンクは、記事ページのわかりやすい位置に提供されなければなりません。そうでない場合は、法的責任を追及する権利が留保されます。
上記では、いくつかの側面を含めて最初の便利な PHP 拡張機能を紹介しましたが、PHP チュートリアルに興味のある友人に役立つことを願っています。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
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 にアップグレードする方法について説明します。

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

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

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

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

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