[php-src] Issue #11087: autoloader for custom stream wrappers

From: 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

« previous php.bugs (#244212) next »