18

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

文档说:

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

  1. 什么参数?
  2. 选项“特定于包装器”是什么意思?
  3. 什么流?

这是我正在谈论的代码:

// 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);
4

3 回答 3

9

我花了一些时间来理解 PHP 的流上下文选项和包装器。我写了一篇关于是什么帮助我最终围绕如何理解 PHP 流上下文选项和包装器的文章。我希望它有所帮助。

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

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

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

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

于 2015-03-31T01:40:39.613 回答
7
  1. 修改流属性的上下文参数。

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

  3. 任何流!

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

您可以在 PHP 网站上找到 HTTP 上下文选项列表。

于 2013-06-30T20:40:44.130 回答
1
  1. http、request_fulluri、ignore_errors、header 都是参数。它们改变了函数(在本例中为 file_get_contents)的工作方式。

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

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

于 2013-06-30T20:43:37.517 回答