検索
ホームページバックエンド開発PHPチュートリアルPHP 拡張機能と埋め込み -- リソース データ型 2_PHP チュートリアル

リソース変数に格納される複雑なデータ型は、多くの場合、初期化中にメモリ割り当て、CPU 時間、またはネットワーク通信を必要とします。ただし、リクエスト間のデータベース接続などのリソースの保持には耐久性が必要です。リソースの耐久性は考慮する必要がある要素です。
まずメモリ割り当ての問題を見てみましょう: PHP を使用する場合は、malloc の再利用バージョンである emalloc を使用することを好みます。ただし、リクエスト間に永続的なリソースが存在する必要があります。ファイル ハンドル クラス リソースの場合、ファイル名を保存する要件を追加する場合は、次のコードをヘッダー ファイルに追加する必要があります。

typedef struct _php_sample_descriptor_data {
    char *filename;
    FILE *fp;
} php_sample_descriptor_data;
は、この構造を使用してファイル名とファイル ハンドルのリソースを保存し、異なるリクエスト間でリソースを共有できるようにします。
同様に、ソース ファイルにも対応する変更を加えます。
static void php_sample_descriptor_dtor( //这个是进行资源回收的回调函数,定义在资源的初始化处。
                    zend_rsrc_list_entry *rsrc TSRMLS_DC)
{
    php_sample_descriptor_data *fdata =
                (php_sample_descriptor_data*)rsrc->ptr;
    fclose(fdata->fp);
    efree(fdata->filename);
    efree(fdata);
}
この静的関数はリソースをリサイクルするために使用され、リソースの初期化時に指定されたコールバックを必要とします。
変更されたファイルを開く関数を実行するには、リソースにスペースを割り当てる操作を追加する必要があります。 れーれー
ファイル書き込み関数 fwrite も変更する必要があります。 れーれー
Sample_fclose 関数は実際のリソースを操作しないため、何も変更する必要はありません。次の関数は、リソースから元のファイル名を取得できます。 れーれー

メモリ割り当てが完了した後は、永続性を維持する必要があるため、遅延破棄にする必要があります。
非永続リソースの場合、リソース ID を格納する変数が設定解除されるかスコープから外れると、それらは EG (regulator_list) から削除されます。 EGで使用されるインデックス(persistent_list)はkey-value型であり、リクエスト終了時に要素は自動的に削除されません。 zend_hash_del() が呼び出された場合、またはスレッド/プロセスが完全にシャットダウンされた場合にのみ削除されます。 EG (persistent_list) にも dtor メソッドがありますが、これは zend_register_list_descructors_ex() の 2 番目のパラメータです。一般に、非永続リソースと永続リソースは 2 種類として登録されますが、1 つに結合される場合もあります。次に、sample.c に永続リソース タイプを追加します。 れーれー
以下の fopen 関数は、永続リソース タイプと非永続リソース タイプの両方と互換性があります。 れーれー
非永続リソースの場合、数値インデックスが指定され、リクエスト依存のリストに保存されます。 永続リソースの場合、キー値タイプを指定すると、後続のリクエストでハッシュキーを取得できます。次に、リソースを永続リストに追加します。永続リソースがスコープ外になると、EG (regulator_list) のデストラクターは le_sample_descriptro_persist の registerlist デストラクターをチェックします。 NULL であることが判明した場合、操作は実行されません。これにより、永続的なリソースが解放されなくなります。リソースが EG (persistent_list) から削除されると、スレッド プロセスが終了するか、意図的に削除されます。この時点で、永続的なデストラクターを探します。

リソースが永続的として適用される理由は、他のリクエストで再利用できるようにするためです。 永続的なリソースを再利用したい場合は、hash_key を使用する必要があります。sample_fopen が呼び出されると、関数は要求されたファイル名とモードを使用して hash_key を再作成し、persistent_list での検索を試みます。 れーれー すべての拡張機能は同じハッシュ形式を使用してリソースを保存するため、名前付けが重要であることに注意してください。一般に、拡張機能とリソース タイプの名前はプレフィックスとして使用されます。


リソースの空き状況を確認する:
ファイルなどのリソースは長期間開いておくことができますが、リモート ネットワーク リソースなどのリソースは、リクエスト間で長期間使用されないと問題が発生します。したがって、永続リソースを使用する前に、まず可用性を判断する必要があります。 れーれー









http://www.bkjia.com/PHPjc/762935.html

tru​​ehttp://www.bkjia.com/PHPjc/762935.html技術記事リソース変数に格納される複雑なデータ型は、多くの場合、初期化中にメモリ割り当て、CPU 時間、またはネットワーク通信を必要とします。ただし、リクエスト間のデータベース接続などのリソースは保持します...
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
どのデータをPHPセッションに保存できますか?どのデータをPHPセッションに保存できますか?May 02, 2025 am 12:17 AM

phpssionscanStorestrings、numbers、arrays、andobjects.1.strings:textdatalikeusernames.2.numbers:integersorfloatsforcounters.3.arrays:listslikeshoppingcarts.4.objects:complextructuresthataresialized。

どのようにPHPセッションを開始しますか?どのようにPHPセッションを開始しますか?May 02, 2025 am 12:16 AM

tostartaphpsession、outsession_start()atthescript'sbeginning.1)placeitbe foreanyouttosetthesscookie.2)usesionsionsionsionserdatalikelogintatussorshoppingcarts.3)再生セッションインドストップレベントフィックスアタック

セッションの再生とは何ですか?また、セキュリティをどのように改善しますか?セッションの再生とは何ですか?また、セキュリティをどのように改善しますか?May 02, 2025 am 12:15 AM

セッション再生とは、新しいセッションIDを生成し、セッション固定攻撃の場合にユーザーが機密操作を実行するときに古いIDを無効にすることを指します。実装の手順には次のものが含まれます。1。感度操作を検出、2。新しいセッションIDを生成する、3。古いセッションIDを破壊し、4。ユーザー側のセッション情報を更新します。

PHPセッションを使用する際のパフォーマンスの考慮事項は何ですか?PHPセッションを使用する際のパフォーマンスの考慮事項は何ですか?May 02, 2025 am 12:11 AM

PHPセッションは、アプリケーションのパフォーマンスに大きな影響を与えます。最適化方法には以下が含まれます。1。データベースを使用してセッションデータを保存して応答速度を向上させます。 2。セッションデータの使用を削減し、必要な情報のみを保存します。 3.非ブロッキングセッションプロセッサを使用して、同時実行機能を改善します。 4.セッションの有効期限を調整して、ユーザーエクスペリエンスとサーバーの負担のバランスを取ります。 5.永続的なセッションを使用して、データの読み取り時間と書き込み時間を減らします。

PHPセッションはCookieとどのように異なりますか?PHPセッションはCookieとどのように異なりますか?May 02, 2025 am 12:03 AM

phpsesionsareserver-side、whilecookiesareclient-side.1)Sessionsionsionsoredataontheserver、aremoresecure.2)cookiesstoredataontheclient、cookiestoresecure、andlimitedinsizeisize.sesionsionsionivationivationivationivationivationivationivationivate

PHPはユーザーのセッションをどのように識別しますか?PHPはユーザーのセッションをどのように識別しますか?May 01, 2025 am 12:23 AM

phpidentifiesauser'ssessionsingsinssessionCookiesIds.1)whensession_start()iscalled、phpgeneratesauniquesidstoredsored incoookienadphpsessidontheuser'sbrowser.2)thisidallowsphptortorieSessiondatadata fromthata

PHPセッションを保護するためのベストプラクティスは何ですか?PHPセッションを保護するためのベストプラクティスは何ですか?May 01, 2025 am 12:22 AM

PHPセッションのセキュリティは、次の測定を通じて達成できます。1。session_regenerate_id()を使用して、ユーザーがログインまたは重要な操作である場合にセッションIDを再生します。 2. HTTPSプロトコルを介して送信セッションIDを暗号化します。 3。Session_Save_Path()を使用して、セッションデータを保存し、権限を正しく設定するためのSecure Directoryを指定します。

PHPセッションファイルはデフォルトで保存されていますか?PHPセッションファイルはデフォルトで保存されていますか?May 01, 2025 am 12:15 AM

phpsessionFilesToredInthededirectoryspecifiedBysession.save_path、通常/tmponunix-likesystemsorc:\ windows \ temponwindows.tocustomizethis:1)uesession_save_path()tosetaCustomdirectory、ensuringit'swritadistradistradistradistradistra

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 Mac版

SublimeText3 Mac版

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

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SublimeText3 中国語版

SublimeText3 中国語版

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

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール