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:这里的流是用于请求您传递的任何 URLfile_get_contents
的 HTTP 流。上下文是保存参数以更改流的行为方式。它只是流的一组属性。
@hek2mgl 是的,事实上我引用了那个页面
@minitech 你说的 HTTP 流是什么意思?以上是关于PHP 中的流上下文 - 它是啥?的主要内容,如果未能解决你的问题,请参考以下文章