PHP 中的流上下文 - 它是啥?

Posted

技术标签:

【中文标题】PHP 中的流上下文 - 它是啥?【英文标题】:Stream context in PHP - what is it?PHP 中的流上下文 - 它是什么? 【发布时间】:2013-06-27 23:49:25 【问题描述】:

我已经搜索了几个小时,但我无法弄清楚 php 中的“流上下文”是什么。我正在尝试使用 API,它涉及使用此“流上下文”。

文档说:

上下文是一组参数和特定于包装器的选项,用于修改或增强流的行为。

    什么参数? “特定于包装器”的选项是什么意思? 什么流?

这是我正在谈论的代码:

// Encode the credentials and create the stream context.
$auth = base64_encode("$acctKey:$acctKey");
$data = array(
'http' => array(
'request_fulluri' => true,
// ignore_errors can help debug – remove for production. This option added in PHP 5.2.10
'ignore_errors' => true,
'header' => "Authorization: Basic $auth")
);
$context = stream_context_create($data);
// Get the response from Bing.
$response = file_get_contents($requestUri, 0, $context);

【问题讨论】:

您可以在这里找到一些解释:php.net/manual/en/stream.contexts.php 和php.net/manual/en/context.php 中的可用选项 是的,我读过它,并在开篇文章中引用了它。它没有解释这些概念,而是包括这两个链接。 "streams" 在 PHP 中是虚拟文件。任何并非源自磁盘上的物理文件的文件 API 数据读取都来自网络连接或虚拟资源。流只是映射到文件句柄的那些网络源。 谢谢,这对我有一点帮助,但我不明白这如何使文件成为“虚拟”,以及网络源映射到文件句柄是什么意思? 【参考方案1】:

我花了一些时间来理解 PHP 的流上下文选项和包装器。我写了一篇关于是什么帮助我最终将我的大脑包裹在how to understand PHP stream contexts options and wrappers 周围的文章。希望对你有帮助。

要正确处理即将到来的任何内容(流式数据),您将需要适当的代码来处理正在传递的不同类型的项目(数据类型)。处理每种不同数据类型的工具是“参数”。

“上下文”由正在传递(流式传输)的内容决定。因此,对于被“流式传输”(传递)的不同“上下文”(项目种类),“参数”(处理所需的工具)“数据类型”(项目种类)将会改变。

术语上下文只是指这样一个事实,即对于不同的数据类型,情况是独一无二的,具有自己的必需参数。

PHP 流包装器需要上下文才能知道处理数据类型需要哪些参数。

【讨论】:

(仅供参考,我删除了我对 URL 更改的过时评论。) 非常有帮助。谢谢!【参考方案2】:

    http、request_fulluri、ignore_errors、header都是参数。 它们改变了函数(在本例中为 file_get_contents)的工作方式。

    包装器特有的选项类似于“http”—— 你不会在文件系统文件流上使用它,因为它不适用。

    流是数据本身的传输,当 file_get_contents 打开连接、传输所有内容等时发生......

【讨论】:

谢谢,但我仍然没有得到#3。首先,流“是”数据的传输是什么意思。数据传输的哪一部分是流?其次,数据“本身”是什么意思? PHP 使用包装器来处理各种协议操作(无论是文件、http、ftp 等)。 PHP 流对象本质上是访问各种协议的底层代码 (php.net/manual/en/intro.stream.php)。流(本身无关紧要)本质上是数据从 A 点流向 B 点的管道(en.wikipedia.org/wiki/Byte_stream)。特别是在这种情况下,它是通过 HTTP 从 A 点到 Bing。【参考方案3】:

    修改流属性的上下文参数。

    这些选项特定于流使用的任何包装器。这些示例包括文件、所有不同的 php:// URI、HTTP 包装器(就像您使用 file_get_contents('http://example.com') 时一样——它与 file_get_contents('some-file.txt') 不同)

    任何流!

在这种情况下,流上下文被传递给file_get_contents,以告诉它将该授权标头和那些选项发送到允许file_get_contents 从HTTP URL 获取内容的包装器。

您可以找到 HTTP 上下文选项列表on the PHP website。

【讨论】:

但是这里的流是什么,它是如何成为“流”的?什么是上下文,参数修改的“上下文”又是什么? @user2537201 您阅读过文档吗? php.net/manual/pt_BR/stream.contexts.php @user2537201:这里的流是用于请求您传递的任何 URL file_get_contents 的 HTTP 流。上下文是保存参数以更改流的行为方式。它只是流的一组属性。 @hek2mgl 是的,事实上我引用了那个页面 @minitech 你说的 HTTP 流是什么意思?

以上是关于PHP 中的流上下文 - 它是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如果从过流上下文视图控制器呈现,则呈现视图控制器错误

Django 中的上下文是啥?

Android中的“上下文”是啥意思? [复制]

在 *ngFor 的情况下,是啥为 ngTemplate 提供了上下文?

Java中的上下文到底是啥? [复制]

Java中的上下文到底是啥? [复制]