php_PHP チュートリアルでのストリームの使用法
Java では、ストリームは非常に重要な概念です。
ストリームの概念は、UNIX のパイプの概念に由来します。 UNIX では、パイプは中断のないバイト ストリームであり、プログラムまたはプロセス間の通信を実装したり、周辺デバイスや外部ファイルなどの読み書きに使用されます。ストリームの方向に応じて、入力ストリームと出力ストリームに分割することができ、同時にバッファ ストリームなどの他のストリームを周囲に配置して、より多くのストリーム処理方法を取得できます。
PHP のストリームと Java のストリームは実際には同じ概念ですが、少し単純になっています。 PHP は主に Web 開発に使用されるため、「フロー」という概念が言及されることはほとんどありません。 Java の基盤がある場合は、PHP のストリームを理解するのが簡単になります。実際、SPL、例外、フィルターなど、PHP の多くの高度な機能はすべて Java の実装を参照しており、同じ概念と原則を持っています。
たとえば、以下は PHP SPL 標準ライブラリの使用法です (ディレクトリを走査し、一定の条件でファイルを検索します):
class RecursiveFileFilterIterator extends FilterIterator
{
RecursiveFileFilterIterator
/** * $path を指定し、対応するディレクトリ イテレータを生成します
*/
public function __construct($path)
{
parent::__construct(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)));
}
/**
*/
public function accept()
{
$item = $this->getInnerIterator();
if ($item->isFile() && in_array(pathinfo($item->) ; getFileName()、pathinfo_extension)、$ this-> ext))
//
foreach (new RecursiveFileFilterIterator('D:/history') as $item)
{
echo $item;
}
Java にも同じコードがあります:
コードは次のとおりです:
public class DirectoryContents
{
public static void main(String[] args) throws IOException
{
File f = new File("."); // 現在のディレクトリ
FilenameFilter textFilter = new FilenameFilter()
{
public boolean accept(File dir, String name)
{
String lowercaseName = name.toLowerCase();
if ( lowercaseName.endsWith(".txt"))
{
return true;
}
else
{
return false;
}
} }
};
File[] files = f.listFiles(textFilter);
for (ファイル file : files)
{
if (file.isDirectory())
{
System.out.print("directory:");
}
else
{
System.out.print(" ファイル: ");
}
System.out.println(file.getCanonicalPath());
}
}
}
この例は、PHP と Java の概念が多面的に同じであることを説明するものであり、理解するために非常に大きな助けとなります。一方、この例は次の点でも役立ちます。前述のフィルタ フロー フィルタも設計モードの 1 つです。
私たちは、最初にサンプルを通して、一連の関数の使用法を理解することができます。次はソケットを使用してデータを取得する例です:
'mail'=>'gonn@nowmagic.net',
'url'= >'http://www.nowmagic.net/',
'text'=>'欢迎访问简明现代魔法');
$data=http_build_query($post_);$fp = fsockopen("nowmagic.net", 80, $errno, $errstr, 5);
$out="POST http://nowmagic.net/news/1/comment HTTP/1.1rn";
$out.="ユーザーエージェント: Mozilla/ 5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13"."rn";
$out.="Content-type: application/x-www- form-urlencodedrn";
$out.="PHPSESSID=082b0cc33cc7e6df1f87502c456c3eb0rn";
$out.="Content-Length: " . strlen($data) 。 "rn";
$out.="接続: 近いnrn";
$out.=$data."rnrn";
fwrite($fp, $out);
{
echo fgets($fp, 1280);
}
fclose($fp);
ストリームの別の例を見てみましょう:
file_get_contents 関数は通常、ファイルの内容を読み取るために使用されますが、この関数はリモート URL を取得するためにも使用でき、curl と同様の役割を果たします。
$opts = array (
'http'=>array(
'method' => 'POST',
'header'=> "コンテンツ タイプ: application/x-www-form-urlencodedrn" .
"コンテンツの長さ: " . strlen($data) . "rn",
'content' =>
$context = stream_context_create($opts);file_get_contents('http://www.jb51.net/news', false, $context);
stream_context_create の詳細については、「PHP 関数の完了: stream_context_create() は POST/GET をシミュレートする」を参照してください。
上記の 2 つのストリーム シリーズ関数は、特定のプロトコルの入力ストリームと出力ストリームに作用するラッパーのようなストリームです。この種の使用法と概念は、実際には Java のストリームとあまり変わりません。たとえば、Java は次のように記述します:
フィルターフローの機能を見てみましょう:
/* rot13 フィルターを書き込みストリームに適用します */stream_filter_append($fp, "string.rot13", STREAM_FILTER_WRITE);
/* 書き込まれたデータは rot13 フィルターによって処理されます*/
rewind($fp);
/* 書き込まれたデータを読み取り、一意性は当然処理された文字です */
fclose($fp);
// 出力: Guvf vf n grfg
stream_filter_append の変数「string.rot13」がどこからともなく出てきたことに驚かれるかもしれません。これは実際には PHP の組み込みフィルターです。
次のメソッドを使用して、PHP 組み込みストリームを出力します:
[0] =>convert.iconv.*
[1] =>mcrypt.*
[2] => mdecrypt.*
[3] => string.toupper
[5] => string.strip_tags
[7] =>変換.*
[8] => 消費
[9] => デチャンク
[10] => bzip2.*
)
当然、独自のフィルターを定義することを考えますが、それは難しくありません。
$ bucket-> data = md5($ bucket-> data);
注: フィルター名はお好みに合わせて選択できます。
その後、カスタムフィルター「string.md5」を使用できるようになります。
このフィルターの書き方は少しわかりにくいように思えますが、実際には、php_user_filter クラスの構造と組み込みメソッドを確認するだけで理解できます。
フィルター ストリームに最も適しているのは、圧縮、エンコード、デコードなどを含むファイル形式の変換です。これらの「逸脱した」使用法に加えて、フィルター ストリームのより便利な場所の 1 つは、ソケットなどの関数のデバッグとログ記録です。開発中、ログ記録用のフィルター ストリームを登録します。たとえば、次の例:
コードをコピーします
コードは次のとおりです:
class md5_filter extends php_user_filter
{
$data="" ;while ( $bucket = stream_bucket_make_writeable($in))
_bucket_append($out, $bucket) ;}
call_user_func($this->params, $data);
return PSFS_PASS_ON;$callback = function($data)
次のように使用できます:
コードをコピーします
コードは次のとおりです:
stream_filter_prepend($fp, "string.md5", STREAM_FILTER_WRITE,$callback);
PHP のストリームシリーズ関数には、ラッパー クラス ストリーム streamWrapper という非常に重要なストリームもあります。ラッパー ストリームを使用すると、さまざまなタイプのプロトコルが同じインターフェイスを使用してデータを操作できるようになります。
http://www.bkjia.com/PHPjc/745822.html
本当
http://www.bkjia.com/PHPjc/745822.html
技術記事

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

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

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

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