Current Location: Home> Latest Articles> Get the context parameters passed in the custom stream wrapper

Get the context parameters passed in the custom stream wrapper

M66 2025-06-02

In PHP, the stream_context_get_options function allows us to get all options for the current stream context. This is very useful for developing custom stream wrappers, as it allows us to read any parameters passed to the stream through the context.

This article will introduce in detail how to use the stream_context_get_options function to obtain the context parameters passed in a custom stream wrapper, and explain it through sample code.

1. What is stream wrapper and context?

In PHP, stream wrapper is the interface used by PHP to access stream resources. For example, common http , ftp and file protocols can all be accessed through the stream wrapper. The stream context is a set of parameters related to stream operations to affect the behavior of the stream. Context parameters may include information such as timeout, proxy server, etc.

2. Create a custom stream wrapper

Before we start, we create a simple custom stream wrapper. Custom stream wrapper allows us to handle arbitrary stream operations and pass custom parameters through context.

 class MyStreamWrapper {
    private $context;
    private $file;

    public function stream_open($path, $mode, $options, &$opened_path) {
        // Get the passed context
        $this->context = stream_context_get_options($this->context);
        echo "Stream open with context options:\n";
        print_r($this->context);
        return true;
    }

    public function stream_write($data) {
        // Actual write operation
        echo "Writing data: " . $data;
        return strlen($data);
    }

    public function stream_set_option($option, $arg1, $arg2) {
        return false;
    }

    public function stream_close() {
        echo "Stream closed.\n";
    }
}

// Register customwrapper
stream_wrapper_register("mystream", "MyStreamWrapper") or die("Failed to register protocol");

3. Use context parameters

We can pass parameters through stream context. Create a context through the stream_context_create function and pass it to our custom stream.

 $options = [
    "http" => [
        "header" => "User-Agent: CustomUserAgent",
        "timeout" => 60
    ]
];

$context = stream_context_create($options);

// Pass context when opening stream
$fp = fopen("mystream://some/path", "r", false, $context);

// Get context options
$context_options = stream_context_get_options($context);
echo "Context options:\n";
print_r($context_options);

In this example, we pass a configuration of the http context to a custom stream. In the stream_open method of the custom stream, we get these passed context parameters through stream_context_get_options .

4. Analyze and output context parameters

After we get context options, we can parse and process them. Here are how to parse and print the options passed to the context:

 // Get context options
$options = stream_context_get_options($context);
foreach ($options as $protocol => $params) {
    echo "Protocol: $protocol\n";
    foreach ($params as $key => $value) {
        echo "  $key => $value\n";
    }
}

5. Results output

After executing the above code, the output will be:

 Stream open with context options:
Array
(
    [http] => Array
        (
            [header] => User-Agent: CustomUserAgent
            [timeout] => 60
        )
)
Context options:
Protocol: http
  header => User-Agent: CustomUserAgent
  timeout => 60

6. Summary

Through the stream_context_get_options function, PHP allows us to obtain and manipulate the context parameters passed to the custom stream wrapper. This is very useful for applications that require custom streaming behavior. You can flexibly configure various options for streaming operations in this way to meet complex needs.