autoloader for custom stream wrappers
Nobody has claimed this yet.
- Dominant language
- C
- Stars
- 40.4k
- Forks
- 8.1k
- Avg merge
- 2d 13h
- Merged PRs (30d)
- 96
Description
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
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by tracing unresolved stream protocols through file_get_contents(), fopen(), and copy(), and review how stream_wrapper_register() and stream_get_wrappers() currently handle registration. Define the callback behavior and its interaction with failed lookups, then verify that a wrapper registered by the callback allows the original file operation to complete.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- c, php
- Domain
- backend
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 30/100