Table of Contents
In-depth understanding of the Streams tool in PHP and phpstreams
Home Backend Development PHP Tutorial In-depth understanding of the Streams tool in PHP, in-depth understanding of phpstreams_PHP tutorial

In-depth understanding of the Streams tool in PHP, in-depth understanding of phpstreams_PHP tutorial

Jul 13, 2016 am 09:47 AM
php streams

In-depth understanding of the Streams tool in PHP and phpstreams

Streams is a powerful tool provided by PHP. We often use it inadvertently. If we make good use of it, Will greatly improve the productivity of PHP. Harnessing the power of Streams will take your applications to the next level.

The following is a description of Streams in the PHP manual:

  • Streams was introduced in PHP version 4.3.0. It is used to unify the operation methods of files, networks, data compression and other types of files, and provides a set of common function interfaces for these types of file operations. In short, a stream is a resource object with streaming behavior. In other words, we can read and write to the stream in a linear manner. And you can use fseek() to jump to any position within the stream.

Each Streams object has a wrapper class, in which relevant code for handling special protocols and encodings can be added. Some commonly used packaging classes have been built into PHP, and we can also create and register custom packaging classes. We can even modify and enhance the wrapper class using existing context and filters.

Stream Basics

Stream can be referenced through ://. Among them, is the name of the packaging class, and the content in is specified by the syntax of the packaging class. The syntax of different packaging classes will be different.

PHP’s default packaging class is file://, which means that when we access the file system, we are actually using a stream. We can read the contents of the file in the following two ways, readfile('/path/to/somefile.txt') or readfile('file:///path/to/somefile.txt'). The methods are equivalent. If you use readfile('http://google.com/'), then PHP will select the HTTP stream wrapper class to operate.

As mentioned above, PHP provides many built-in wrapper classes, protocols and filters. According to the method described below, you can query the packaging classes supported by this machine:

<&#63;php
print_r(stream_get_transports());
print_r(stream_get_wrappers());
print_r(stream_get_filters());
Copy after login

The output on my machine is:

Array
(
  [0] => tcp
  [1] => udp
  [2] => unix
  [3] => udg
  [4] => ssl
  [5] => sslv3
  [6] => sslv2
  [7] => tls
)
Array
(
  [0] => https
  [1] => ftps
  [2] => compress.zlib
  [3] => compress.bzip2
  [4] => php
  [5] => file
  [6] => glob
  [7] => data
  [8] => http
  [9] => ftp
  [10] => zip
  [11] => phar
)
Array
(
  [0] => zlib.*
  [1] => bzip2.*
  [2] => convert.iconv.*
  [3] => string.rot13
  [4] => string.toupper
  [5] => string.tolower
  [6] => string.strip_tags
  [7] => convert.*
  [8] => consumed
  [9] => dechunk
  [10] => mcrypt.*
  [11] => mdecrypt.*
)
Copy after login

It provides a lot of functions. Does it look good?

In addition to the above built-in Streams, we can also write more third-party Streams for Amazon S3, MS Excel, Google Storage, Dropbox and even Twitter.

php:// packaging class

PHP has built-in wrapper classes for processing I/O streams in this language. It can be divided into several categories. The basic ones are php://stdin, php://stdout, and php://stderr. These three streams are mapped to default I/O resources respectively. At the same time, PHP also provides php://input, through which the raw body in the POST request can be accessed in a read-only manner. This is a very useful feature, especially when dealing with remote services that embed data payloads into POST requests.

Below we use the cURL tool to do a simple test:

curl -d "Hello World" -d "foo=bar&name=John" http://localhost/dev/streams/php_input.php
Copy after login

The test results using print_r($_POST) in PHP script are as follows:

Array
(
  [foo] => bar
  [name] => John
)
Copy after login

We note that the first item of data in the $_POST array cannot be accessed. But if we use readfile('php://input'), the result is different:

Hello World&foo=bar&name=John
Copy after login

PHP 5.1 adds two package transfer classes, php://memory and php://tempstream, for reading and writing temporary data. As the name of the wrapper class implies, this data is stored in memory or temporary files in the underlying system.

php://filter is a meta-packaging class used to add filter functionality to the stream. The filter will be enabled when opening a stream using readfile() or file_get_contents()/stream_get_contents(). Here is an example:

<&#63;php
// Write encoded data
file_put_contents("php://filter/write=string.rot13/resource=file:///path/to/somefile.txt","Hello World");
 
// Read data and encode/decode
readfile("php://filter/read=string.toupper|string.rot13/resource=http://www.google.com");
Copy after login

In the first example, a filter is used to encode the data saved to disk. In the second example, two cascaded filters are used to read data from the remote URL. Using filters can bring extremely powerful functionality to your application.

Stream context

Context is a set of stream-related parameters or options. Use context to modify or enhance the behavior of the wrapper class. For example, using context to modify the HTTP wrapper is a commonly used usage scenario. In this way, we can complete some simple network operations without using the cURL tool. Here is an example:

<&#63;php
$opts = array(
 'http'=>array(
  'method'=>"POST",
  'header'=> "Auth: SecretAuthTokenrn" .
    "Content-type: application/x-www-form-urlencodedrn" .
       "Content-length: " . strlen("Hello World"),
  'content' => 'Hello World'
 )
);
$default = stream_context_get_default($opts);
readfile('http://localhost/dev/streams/php_input.php');
Copy after login

First define an options array, which is a two-digit array. The parameters can be accessed in the form of $array['wrapper']['option_name']. (Note that the context options in each wrapper class are different). Then call stream_context_get_default() to set these options. stream_context_get_default() will also return the default context as a result. After the setting is completed, then call readfile(), and the context just set will be used to capture the content.


In the above example, the content is embedded in the request body so that remote scripts can use php://input to read the content. At the same time, we can also use apache_request_headers() to get the header of the request, as shown below:

Array
(
  [Host] => localhost
  [Auth] => SecretAuthToken
  [Content-type] => application/x-www-form-urlencoded
  [Content-length] => 11
)
Copy after login

在上面的例子中是修改默认context的参数,当然我们也可以创建一个新的context,进行交替使用。

<&#63;php
$alternative = stream_context_create($other_opts);
readfile('http://localhost/dev/streams/php_input.php', false, $alternative);
Copy after login

结论

我们怎样在现实世界中驾驭stream的强大力量呢?使用stream能为我们的程序带来什么现实的好处? 正如前文介绍的那样,stream对所有文件系统相关的功能进行了抽象,所以我第一个想到的应用场景是使用虚拟文件系统的包装类来访问PaaS供应商提供的服务,比如说访问HeroKu或者AppFog,它们实际上都没有真正文件系统。 使用stream只要对我们的应用程序稍作修改,就可以将其移植到云端。 接下来--在我的下一篇文章中--我将介绍如何编写自定义的包装类以实现对特殊文件格式和编码格式的操作。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1026546.htmlTechArticle深入理解PHP中的Streams工具,深入理解phpstreams Streams 是PHP提供的一个强有力的工具,我们常常在不经意会使用到它,如果善加利用将大大提...
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

How To Set Up Visual Studio Code (VS Code) for PHP Development How To Set Up Visual Studio Code (VS Code) for PHP Development Dec 20, 2024 am 11:31 AM

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

7 PHP Functions I Regret I Didn't Know Before 7 PHP Functions I Regret I Didn't Know Before Nov 13, 2024 am 09:42 AM

If you are an experienced PHP developer, you might have the feeling that you’ve been there and done that already.You have developed a significant number of applications, debugged millions of lines of code, and tweaked a bunch of scripts to achieve op

How do you parse and process HTML/XML in PHP? How do you parse and process HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Apr 05, 2025 am 12:04 AM

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

PHP Program to Count Vowels in a String PHP Program to Count Vowels in a String Feb 07, 2025 pm 12:12 PM

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

Explain late static binding in PHP (static::). Explain late static binding in PHP (static::). Apr 03, 2025 am 12:04 AM

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

What are PHP magic methods (__construct, __destruct, __call, __get, __set, etc.) and provide use cases? What are PHP magic methods (__construct, __destruct, __call, __get, __set, etc.) and provide use cases? Apr 03, 2025 am 12:03 AM

What are the magic methods of PHP? PHP's magic methods include: 1.\_\_construct, used to initialize objects; 2.\_\_destruct, used to clean up resources; 3.\_\_call, handle non-existent method calls; 4.\_\_get, implement dynamic attribute access; 5.\_\_set, implement dynamic attribute settings. These methods are automatically called in certain situations, improving code flexibility and efficiency.

See all articles