興味深いストリーム
PHP のよく言われる機能の 1 つは、ストリーム コンテキストです。このオプションのパラメーターは、ユーザー空間のほとんどのストリーム作成関連関数でも利用でき、一般化フレームワークとして機能します。特定のラッパーまたはストリーム実装との間で追加情報を渡すためのメソッドです。
各ストリームのコンテキストには、2 つの内部メッセージ タイプが含まれています。これらの値は、コンテキスト オプションです。コンテキスト内の 2 次元配列に配置され、通常はストリーム ラッパーの初期化動作を変更するために使用されます。コンテキスト パラメーターもあります。これはラッパーには認識されず、現在フロー内でイベント通知を行う方法を提供します。ラッパー層。
php_stream_context *php_stream_context_alloc(void);
この API 呼び出しを通じてコンテキストを作成できます。これにより、ストレージ領域が割り当てられ、コンテキストのオプションとパラメーターを保存するためのハッシュテーブルが初期化されます。また、クリーンアップされるリクエスト終了リソースとして自動的に登録されます。後で
オプションを設定します
コンテキストオプションを設定するための内部APIとユーザー空間APIは同等です:
int php_stream_context_set_option(php_stream_context *context, const char *wrappername, const char *optionname, zval *optionvalue);
ユーザー空間のプロトタイプは次のとおりです:
bool stream_context_set_option(resource $context, string $wrapper, string $optionname, mixed $value);
それらの唯一の違いは、ユーザー空間と内部で必要なデータ型です。次の例では、これら 2 つの API 呼び出しを使用して、組み込みラッパーを通じて HTTP リクエストを開始し、コンテキスト オプションを通じてそれをオーバーライドします。 user_agent 設定が変更されています。 .
php_stream *php_varstream_get_homepage(const char *alt_user_agent TSRMLS_DC) { php_stream_context *context; zval tmpval; context = php_stream_context_alloc(TSRMLS_C); ZVAL_STRING(&tmpval, alt_user_agent, 0); php_stream_context_set_option(context, "http", "user_agent", &tmpval); return php_stream_open_wrapper_ex("http://www.php.net", "rb", REPORT_ERRORS | ENFORCE_SAFE_MODE, NULL, context); }
トランスレーターによって使用されるphp-5.4.10のphp_stream_context_alloc()にはスレッドセーフティ制御が追加されているため、サンプルはそれに応じて変更されています。テストする際には注意してください
。 ここで、tmpval は永続的なストレージ領域を割り当てず、その文字列値はコピーによって設定されることに注意してください。 php_stream_context_set_option() は、受信した zval コンテンツを自動的にコピーします。 コンテキスト オプションを取得するために使用される API 呼び出しは、対応する設定 API のミラー イメージです。
int php_stream_context_get_option(php_stream_context *context, const char *wrappername, const char *optionname, zval ***optionvalue);前を思い出してください。コンテキスト オプションはネストされた HashTable に保存されます。HashTable から値を取得するときの一般的なアプローチは次のとおりです。 zval ** へのポインタを zend_hash_find() に渡します。 もちろん、php_stream_context_get_option() は zend_hash_find() の特別なプロキシであるため、セマンティクスは同じです。
これは、php_stream_context_get_option() を使用して user_agent を設定する単純な例です。 ) 組み込みの http ラッパーを使用します: zval **ua_zval;
char *user_agent = "PHP/5.1.0";
if (context &&
php_stream_context_get_option(context, "http",
"user_agent", &ua_zval) == SUCCESS &&
Z_TYPE_PP(ua_zval) == IS_STRING) {
user_agent = Z_STRVAL_PP(ua_zval);
}
この場合、ユーザー エージェント文字列の場合、max_redirects などの他のコンテキスト オプションは無意味であるため、文字列以外の値は破棄されます。 、数値が必要です。文字列の zval に数値を格納することは普遍的ではないため、設定を有効にするために型変換を実行する必要があります。
不幸的是这些变量是上下文拥有的, 因此它们不能直接转换; 而需要首先进行隔离再进行转换, 最终如果需要还要进行销毁:
long max_redirects = 20; zval **tmpzval; if (context && php_stream_context_get_option(context, "http", "max_redirects", &tmpzval) == SUCCESS) { if (Z_TYPE_PP(tmpzval) == IS_LONG) { max_redirects = Z_LVAL_PP(tmpzval); } else { zval copyval = **tmpzval; zval_copy_ctor(©val); convert_to_long(©val); max_redirects = Z_LVAL(copyval); zval_dtor(©val); } }
实际上, 在这个例子中, zval_dtor()并不是必须的. IS_LONG的变量并不需要zval容器之外的存储空间, 因此zval_dtor()实际上不会有真正的操作. 在这个例子中包含它是为了完整性考虑, 对于字符串, 数组, 对象, 资源以及未来可能的其他类型, 就需要这个调用了.
参数
虽然用户空间API中看起来参数和上下文选项是类似的, 但实际上在语言内部的php_stream_context结构体中它们被定义为不同的成员.
目前只支持一个上下文参数: 通知器. php_stream_context结构体中的这个元素可以指向下面的php_stream_notifier结构体:
typedef struct { php_stream_notification_func func; void (*dtor)(php_stream_notifier *notifier); void *ptr; int mask; size_t progress, progress_max; } php_stream_notifier;
当将一个php_stream_notifier结构体赋值给context->notifier时, 它将提供一个回调函数func, 在特定的流上发生下表中的PHP_STREAM_NOTIFY_*代码表示的事件时被触发. 每个事件将会对应下面第二张表中的PHP_STREAM_NOTIFY_SEVERITY_*的级别:
事件代码 |
含义 |
RESOLVE |
主机地址解析完成.多数基于套接字的包装器将在连接之前执行这个查询. |
CONNECT |
套接字流连接到远程资源完成. |
AUTH_REQUIRED |
要求されたリソースは利用できません、理由はアクセス制御と認証の欠落です |
MIME_TYPE_IS |
-タイプ利用できません |
FILE_SIZE_IS |
リモートリソースの現在利用可能なサイズ |
REDIRECT |
元の URL リクエストにより、別の場所 |
PROGRESS |
追加データの転送により、php_stream_notifier構造の進捗と(可能 ) progress_max要素が更新されました (進捗情報、CURLOPT_PROGRESSFUNCTIONのphpマニュアルcurl_setoptを参照してください) および CURLOPT_NOPROGRESS オプション) |
完了 |
ストリーム上で利用可能なデータはもうありません |
FAILURE |
リクエスト済みURLリソースが失敗したか不完全でした |
AUTH_RESULT |
リモートシステムが認可認証を処理しました |
セキュリティコード |
|
情報 |
情報更新.は1つに相当しますE_NOTICEError |
WARN |
小さなエラー状態.はE_WARNINGと同等ですエラー |
ERR |
割り込みエラー条件.は、E_ERRORerror. |

まだ人気があるのは、使いやすさ、柔軟性、強力なエコシステムです。 1)使いやすさとシンプルな構文により、初心者にとって最初の選択肢になります。 2)Web開発、HTTP要求とデータベースとの優れた相互作用と密接に統合されています。 3)巨大なエコシステムは、豊富なツールとライブラリを提供します。 4)アクティブなコミュニティとオープンソースの性質は、それらを新しいニーズとテクノロジーの傾向に適応させます。

PHPとPythonはどちらも、Web開発、データ処理、自動化タスクで広く使用されている高レベルのプログラミング言語です。 1.PHPは、ダイナミックウェブサイトとコンテンツ管理システムの構築によく使用されますが、PythonはWebフレームワークとデータサイエンスの構築に使用されることがよくあります。 2.PHPはエコーを使用してコンテンツを出力し、Pythonは印刷を使用します。 3.両方ともオブジェクト指向プログラミングをサポートしますが、構文とキーワードは異なります。 4。PHPは弱いタイプの変換をサポートしますが、Pythonはより厳しくなります。 5. PHPパフォーマンスの最適化には、Opcacheおよび非同期プログラミングの使用が含まれますが、PythonはCprofileおよび非同期プログラミングを使用します。

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPは、多数のWebサイトとアプリケーションをサポートし、フレームワークを通じて開発ニーズに適応するため、近代化プロセスで依然として重要です。 1.PHP7はパフォーマンスを向上させ、新機能を紹介します。 2。Laravel、Symfony、Codeigniterなどの最新のフレームワークは、開発を簡素化し、コードの品質を向上させます。 3.パフォーマンスの最適化とベストプラクティスは、アプリケーションの効率をさらに改善します。

phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

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

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

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

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール
