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

SAE に PHP ラッパーを適用する方法、wrappersae_PHP チュートリアル

Jul 12, 2016 am 08:53 AM
php wrapper

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 までご連絡ください。

ホット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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

この章では、CakePHP の環境変数、一般設定、データベース設定、電子メール設定について理解します。

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

この章では、ルーティングに関連する次のトピックを学習します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

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

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

See all articles