Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message
Stream Wrapper

Stream Wrapper Laravel Package

bcncommerce/stream-wrapper

Laravel package providing a custom PHP stream wrapper to transparently read/write resources via non-standard URIs. Useful for integrating external storage or services behind fopen/file_get_contents with a familiar filesystem-like API.

View on GitHub
Deep Wiki
Context7

Lightweight class which allows substitute PHP streams

Frequently asked questions about Stream Wrapper
Can I use this package to mock S3 or FTP streams in Laravel tests without replacing Laravel’s Storage facade?
Yes, this package lets you intercept `fopen()` or `file_get_contents()` calls for custom URIs (e.g., `custom://path`). It’s useful for testing legacy code that directly uses streams, but avoid mixing it with Laravel’s Storage facade, as conflicts may arise. For modern Laravel apps, consider Flysystem or Laravel’s built-in mocking tools instead.
How do I register a custom stream wrapper in Laravel 8+ without breaking the app?
Register it in a service provider’s `boot()` method using `StreamWrapper::register('myapp', MyCustomWrapper::class)`. However, this package is unmaintained and may fail on PHP 8.x. Test thoroughly in a non-production environment first. For Laravel 8+, prefer Symfony’s `StreamWrapper` or Laravel’s `StreamHandler` for better compatibility.
Will this package work with Laravel 9 or PHP 8.2, or should I avoid it?
The package was last updated in 2015 and lacks PHP 8.x support, so it may break or trigger deprecation warnings. If you must use it, test on your target PHP version first. For modern Laravel, alternatives like Flysystem or custom `StreamContext` handlers are safer choices.
Can I use this to intercept and log all file operations in a Laravel app?
Yes, you can extend the `Stream` class to log or transform streams during `fopen()`, `fread()`, or `fwrite()` calls. However, this adds overhead and risks resource leaks. For production, consider a dedicated logging layer or Laravel’s event system instead.
How do I mock `file_get_contents()` in PHPUnit tests with this package?
Register your custom wrapper before tests run (e.g., in `phpunit.xml` or a test trait). Use URIs like `custom://file.txt` in test code, and the wrapper will intercept calls. Example: `StreamWrapper::register('custom', MockStreamWrapper::class);` before assertions.
Does this package support HTTPS or custom stream contexts (e.g., `stream_context_create`)?
The package handles basic stream operations but may not fully support PHP’s `stream_context` options. If you need advanced features like SSL or custom headers, test thoroughly or implement them manually in your wrapper class.
Is there a modern alternative to this package for Laravel 8+?
Yes. For filesystem abstractions, use **league/flysystem** or Laravel’s built-in `Storage` facade. For custom stream logic, Symfony’s `StreamWrapper` or Laravel’s `StreamHandler` are better maintained. Avoid this package for new projects due to its age and lack of Laravel integration.
How do I handle errors or resource leaks if this package fails in production?
Wrap usage in try-catch blocks to handle stream errors gracefully. For critical paths, avoid this package entirely—it’s unmaintained and could introduce subtle bugs. If it fails, fall back to direct file operations or a reimplemented wrapper using Symfony’s `StreamWrapper`.
Can I use this to proxy streams to an external API (e.g., a legacy PHP app) in Laravel?
Technically yes, but it’s risky. You’d need to extend the `Stream` class to forward operations to an external endpoint. For production, consider a dedicated API client (e.g., Guzzle) or a microservice instead. This package lacks security updates and may not handle edge cases.
How do I ensure my custom stream wrapper doesn’t conflict with Laravel’s Filesystem?
Use a unique URI scheme (e.g., `myapp://`) and avoid overlapping with Laravel’s `storage:`, `public:`, or `cloud:` paths. Test in isolation by mocking only the streams your code directly calls (e.g., `fopen()`). If using Laravel’s Storage facade, stick to its abstractions instead.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
terminal42/code-quality-tools
codifyo/ts-generator-bundle
andydefer/laravel-cluster
testo/fiber
mintobit/jobqueue
a4sex/maintenance-bundle
a4sex/entity-date-update
a4sex/client-identifier
a4sex/base-utilites
a4sex/key-value-storage
a4sex/micro-status
chilldev/dependency-injection-extra
datinglibre/datinglibre-app-api
biberltd/corebundle
bricre/symfony-bundle-test
biberltd/logbundle
dominium/http-adapter-bundle
dominium/google-analytics
a4sex/auto-clean-entity
christhompsontldr/laravel-inky