検索
ホームページバックエンド開発PHPチュートリアルSAE に PHP ラッパーを適用する方法、wrappersae_PHP チュートリアル

SAE、wrappersae に PHP Wrapper を適用する方法

この記事では、SAE に PHP Wrapper を適用する方法について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:

1.PHPラッパーとは

PHP 4.3 以降、PHP では、ユーザーが stream_wrapper_register() を通じて URL スタイル プロトコルをカスタマイズできるようになりました。ユーザーが fopen() や copy() などのファイル システム関数を使用してカプセル化されたプロトコルを操作すると、PHP はプロトコルの登録時に提供されたクラス内の対応する関数を呼び出します。
PHP マニュアルには、VariableStream クラスを var:// プロトコルとして登録する例が記載されており、このプロトコルを通じて、ユーザーはファイル システム関数を使用してグローバル変数を直接読み書きできます。たとえば、ユーザーは「var://foo」を介して $GLOBALS['foo'] を読み書きできます。

2. SAE に PHP ラッパーが必要な理由

パフォーマンスとセキュリティ上の理由から、SAE プラットフォームではローカル ファイルの読み取りと書き込み、および外部データのキャプチャが無効になっています。したがって、同じことを行うために対応するサービスを提供します。

新しいサービスのインターフェースはPHP自体のインターフェースとは異なるため、当社のプラットフォーム専用に開発されたプログラムには確かに問題はありませんが、多数の既存プログラムやオープンソースプロジェクトは複雑な移行作業に直面することになります。 PHP Wrapper を使用してサービスのインターフェイスをカプセル化すると、ユーザーはプログラムを SAE プラットフォームに簡単に移行できるようになります。

3. PHPラッパーの書き方

PHP Wrapper を通じてプロトコルをカプセル化するには、まず、streamWrapper クラスを作成する必要があります。クラスの形式は次のとおりです。 リーリー

クラスの各メソッドの説明:

streamWrapper::__construct — コンストラクター、stream_open の前にのみ呼び出されます streamWrapper::dir_closedir — ディレクトリハンドルを閉じ、closedir() 関数に応答します
streamWrapper::dir_opendir — ディレクトリハンドルを開き、opendir() 関数に応答します
streamWrapper::dir_readdir — readdir() 関数に応答して、ディレクトリ ハンドルからエントリを読み取ります
streamWrapper::dir_rewinddir — ディレクトリハンドルを巻き戻し、rewinddir() 関数に応答します
streamWrapper::mkdir — ディレクトリを作成し、mkdir() 関数に応答します
streamWrapper::rename — ディレクトリまたはファイルの名前変更、rename() 関数に応答します
streamWrapper::rmdir — ディレクトリを削除し、rmdir() 関数に応答します
streamWrapper::stream_cast — 基本的なリソースを取得し、stream_select() 関数に応答します
streamWrapper::stream_close — リソースを閉じて fclose() 関数に応答します
streamWrapper::stream_eof — feof() 関数に応答して、ファイル ポインターが既にファイルの末尾にあるかどうかを確認します
streamWrapper::stream_flush — 出力キャッシュをクリアし、fflush() 関数に応答します
streamWrapper::stream_lock — ファイルのロックを参照し、flock() 関数に応答します
streamWrapper::stream_open — fopen() 関数に応答して、ファイルまたは URL をストリームとして開きます
streamWrapper::stream_read — ストリームからコンテンツを読み取り、fread()、fgets() 関数に応答します
streamWrapper::stream_seek — fseek() 関数に応答して、ストリーム内のポインターを検索します
streamWrapper::stream_set_option — ストリーム設定を変更する
streamWrapper::stream_stat — ファイルリソース情報を取得し、fstat() 関数に応答します
streamWrapper::stream_tell — ftell() 関数に応答して、ストリーム内のポインターの位置を取得します
streamWrapper::stream_write — fwrite()、fputs() 関数に応答して、コンテンツをストリームに書き込みます
streamWrapper::unlink — ファイルを削除し、unlink() 関数に応答します
streamWrapper::url_stat — ファイル情報を取得し、file_exists()、is_dir()、is_file()、filesize()、fileinode() などのすべての stat() 関連関数に応答します。
詳細な手順については、PHP マニュアルを参照してください: http://cn2.php.net/manual/en/class.streamwrapper.php

streamWrapper クラスを作成した後、stream_wrapper_register() を使用してこのクラスを Wrapper に登録すると、使用を開始できます。関数の使用方法は次のとおりです:

bool stream_wrapper_register ( string $protocol , string $classname [, int $flags = 0 ] )

例: リーリー

SAE プラットフォームはローカル ファイルへの書き込み操作をサポートしていないため、ファイルをローカルに書き込む必要がある Smarty などの一部のオープン ソース プロジェクトは SAE プラットフォームで直接使用できません。saemc Wrapper を使用すると、ユーザーは Smarty テンプレートを MC に保存してコンパイルできます。これにより、Smarty を SAE プラットフォームに簡単に移行できます。

添付ファイルには、SAE 上の Memcache Wrapper の実装コードが提供されています。この添付ファイルをテスト用にダウンロードできます。

テストする前に、ローカルでポート 22222 を使用して Memcached サービスを開始する必要があります:

リーリー

次に、次のコードを使用してテストします:

リーリー

テストページの出力結果:

リーリー

私たちが提供する Memcache Wrapper は、ディレクトリ操作と Memcache のタイムアウトの一部のメソッドを実装していません。PHP マニュアルを参照してディレクトリ操作を実装するか、コンテキストを通じてこの Wrapper が Memcache のタイムアウトをサポートするようにすることができます。

さらに、次のアドレスにアクセスすると、SAE Stdlib の sae_include のソース コードを表示できます。これには、Storage サービス用にカプセル化した saestor Wrapper と、Fetchurl サービスを再カプセル化する http Wrapper の実装も含まれています。

http://stdlib.sinaapp.com/?f=sae_include.function.php

4. Wrapperを書く際の注意点

1. コンストラクター

streamWrapper クラスは非常に特殊で、そのコンストラクターは毎回呼び出されるものではありません。これは、file_get_contents() を使用する場合など、操作によって stream_open 関連の操作がトリガーされた場合にのみ呼び出されます。また、操作によってストリームと関係のない関数がトリガーされる場合 (file_exists が url_stat メソッドをトリガーする場合など)、この時点ではコンストラクターは呼び出されません。

2. 実装を読む

Wrapper には Position や Seek などの概念がありますが、多くのサービスは実際にすべてのデータを stream_open 中に一度に読み取って属性に入れることができ、将来的には Seek や Tell 中に属性を直接操作できるようになります。内部に保存されているデータは問題ありません。

3. 追加の書き込み実装

すべてのデータを一度に書き込み、追加書き込み機能 (Memcache など) をサポートしていないサービスが多数あります。そのため、Wrapper で独自に追加書き込みを実装する必要があります。値全体を一度に読み取り、読み取った内容の後に書き込む必要のあるデータを追加して、一度に書き戻すことができます。

ただし、この追加書き込み実装のパフォーマンスは、特にコンテンツのサイズが大きい場合に比較的低下します。そのため、すべてのコンテンツを一度に読み取ると多くのリソースが消費されるため、一部のサービスでは追加のサポートを放棄する必要があります。書く。

4. url_statの実装

streamWrapperクラスの実装で難しいのはurl_statの実装です。ファイルのメタ情報を照会する is_writable や is_readable などの関数が正しく動作するには、url_stat が正しく実装されている必要があります。

そして、仮想デバイス用にこれらの値を偽装する必要があります。 mcを例として、いくつかの参考データを提供します:

url_stat は、次の内容を含む 13 個の項目に分割された配列を返す必要があります:

dev デバイス番号 - 0 を書き込むだけです;
ino i ノード番号 - 0 を書き込むだけです
モード ファイル モード - これはファイルの権限制御シンボルであり、後で詳しく説明します
nlink リンク - 0 と書くだけです;
uid uid - Linux では posix_get_uid を使用して取得できます。Windows では 0 です。 gid gid - Linux では posix_get_gid を使用して取得できます。Windows では 0 です。 rdev デバイス タイプ - i ノード デバイスの場合は値を持ちます。 サイズ - ファイルサイズ
atime - 最終読み取り時刻の形式は Unix タイムスタンプです。 mtime - 最終書き込み時間
ctime - 作成時間
blksize - ファイルシステム IO のブロックサイズはゼロを書き込むだけです;
ブロック - 割り当てられた 512 バイトのブロックの数はゼロを書き込みます


mode の値は正しく記述する必要があります:
ファイルの場合、その値は次のとおりです:

0100000 + ファイル権限 (0100000 + 0777 など)。

ディレクトリの場合、その値は次のとおりです:

040000 + ディレクトリ権限 (0400000 + 0777 など)。

5.統計キャッシュについて

PHP は、同じページの実行中にファイルのメタ情報をキャッシュします。 PHP ドキュメントの clearstatcache() メソッドの説明によると、stat()、lstat()、file_exists()、is_writable()、is_readable()、is_executable()、is_file()、is_dir()、is_link を使用する場合()、filectime()、fileatime()、filemtime()、fileinode()、filegroup()、fileowner()、filesize()、filetype()、または fileperms() メソッドを使用してファイル情報をクエリします。PHP は改善のためにキャッシュします。パフォーマンス。 unlink() を実行すると、clearstatcache() メソッドを使用してこのキャッシュをクリアできます。統計キャッシュは自動的にクリアされます。

実際、PHP はローカル ファイルに対してリンク解除、名前変更、および rmdir 操作が実行された場合にのみ統計キャッシュをクリアしますが、リンク解除、名前変更、および rmdir 操作が他のラッパーを通じて実行された場合には統計キャッシュをクリアしません。したがって、ラッパーを作成するときは、unlink およびその他のメソッドの clearstatcache() を使用して統計キャッシュを自分でクリアする必要があります。


ここをクリックして添付ファイルをダウンロードしてください。


さらに PHP 関連のコンテンツに興味のある読者は、このサイトの特別なトピックをチェックしてください: 「PHP Curl の使用法の概要」、「PHP ソケットの使用法の概要」、「PHP ネットワーク プログラミング スキルの概要」、「PHP 基本構文の入門チュートリアル」、 「php操作」オフィス文書スキルまとめ(word、excel、access、ppt含む)」、「php日時使い方まとめ」、「phpオブジェクト指向プログラミング入門講座」、「php文字列(ストリング)使い方まとめ」、 「php+mysql 「データベース操作チュートリアル入門」と「PHP における一般的なデータベース操作スキルのまとめ」

この記事が PHP プログラミングのすべての人に役立つことを願っています。

www.bkjia.com本当http://www.bkjia.com/PHPjc/1125234.html技術記事 SAE、wrappersae に PHP Wrapper を適用する方法 この記事では、SAE に PHP Wrapper を適用する方法について説明します。参考のために皆さんと共有してください。詳細は次のとおりです: 1. PHP Wrapper とは何ですか...
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
アクション中のPHP:実際の例とアプリケーションアクション中のPHP:実際の例とアプリケーションApr 14, 2025 am 12:19 AM

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHP:インタラクティブなWebコンテンツを簡単に作成しますPHP:インタラクティブなWebコンテンツを簡単に作成しますApr 14, 2025 am 12:15 AM

PHPにより、インタラクティブなWebコンテンツを簡単に作成できます。 1)HTMLを埋め込んでコンテンツを動的に生成し、ユーザー入力またはデータベースデータに基づいてリアルタイムで表示します。 2)プロセスフォームの提出と動的出力を生成して、XSSを防ぐためにHTMLSPECIALCHARSを使用していることを確認します。 3)MySQLを使用してユーザー登録システムを作成し、Password_HashおよびPreprocessingステートメントを使用してセキュリティを強化します。これらの手法を習得すると、Web開発の効率が向上します。

PHPとPython:2つの一般的なプログラミング言語を比較しますPHPとPython:2つの一般的なプログラミング言語を比較しますApr 14, 2025 am 12:13 AM

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHPの永続的な関連性:それはまだ生きていますか?PHPの永続的な関連性:それはまだ生きていますか?Apr 14, 2025 am 12:12 AM

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。

PHPの現在のステータス:Web開発動向を見てくださいPHPの現在のステータス:Web開発動向を見てくださいApr 13, 2025 am 12:20 AM

PHPは、現代のWeb開発、特にコンテンツ管理とeコマースプラットフォームで依然として重要です。 1)PHPには、LaravelやSymfonyなどの豊富なエコシステムと強力なフレームワークサポートがあります。 2)パフォーマンスの最適化は、Opcacheとnginxを通じて達成できます。 3)PHP8.0は、パフォーマンスを改善するためにJITコンパイラを導入します。 4)クラウドネイティブアプリケーションは、DockerおよびKubernetesを介して展開され、柔軟性とスケーラビリティを向上させます。

PHP対その他の言語:比較PHP対その他の言語:比較Apr 13, 2025 am 12:19 AM

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHP対Python:コア機能と機能PHP対Python:コア機能と機能Apr 13, 2025 am 12:16 AM

PHPとPythonにはそれぞれ独自の利点があり、さまざまなシナリオに適しています。 1.PHPはWeb開発に適しており、組み込みのWebサーバーとRich Functionライブラリを提供します。 2。Pythonは、簡潔な構文と強力な標準ライブラリを備えたデータサイエンスと機械学習に適しています。選択するときは、プロジェクトの要件に基づいて決定する必要があります。

PHP:Web開発の重要な言語PHP:Web開発の重要な言語Apr 13, 2025 am 12:08 AM

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境