[php-src] Issue #11087: autoloader for custom stream wrappers
| From: | rbro | Date: | Sun, 16 Apr 2023 14:51:04 +0000 |
| Subject: | [php-src] Issue #11087: autoloader for custom stream wrappers | ||
| Groups: | php.bugs | ||
| Request: | Send a blank email to php-bugs+get-244212@lists.php.net to get a copy of this message | ||
Issue: https://github.com/php/php-src/issues/11087
Author: rbro
### Description
Would it be possible to add an autoloader/callback function if a call is made to a function using a
stream wrapper protocol that is not yet defined?
Currently, if you access a stream protocol not registered, a warning is logged 'Unable to find
the wrapper "abc" - did you forget to enable it when you configured PHP?'.
In the below example, since abc hasn't yet been registered with stream_wrapper_register(), the
new function stream_wrapper_autoload() would be called where abc would be registered and allow the
file_get_contents() call to complete.
```
<?php
stream_wrapper_autoload(function($protocol)
{
switch ($protocol)
{
case 'abc':
stream_wrapper_register('abc', 'abc');
break;
}
});
$a = file_get_contents('abc://file.txt');
?>
```
I am using the AWS S3 stream wrapper
(https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/s3-stream-wrapper.html). Using this
custom stream wrapper currently requires me either to:
- register the stream wrapper on every request even if it won't be used on the given request
- or register it before any call that would use it (file_get_contents, fopen, copy, etc).
- or add a wrapper function around file_get_contents and the other file functions to check first if
the stream wrapper is registered by calling stream_get_wrappers().
Having an autoload function would allow me to register the stream wrapper only when it's
needed.
Thank you for your help.
Ryan