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
Polyfill Apcu

Polyfill Apcu Laravel Package

symfony/polyfill-apcu

Symfony Polyfill for APCu: provides apcu_* functions and the APCuIterator class for projects relying on the legacy APC extension, enabling compatible caching APIs when APCu isn’t available or APC is used.

View on GitHub
Deep Wiki
Context7

Symfony polyfill backporting apcu_* functions to lower PHP versions

Frequently asked questions about Polyfill Apcu
How do I use symfony/polyfill-apcu with Laravel’s Cache facade for APCu storage?
Install the package via Composer (`composer require symfony/polyfill-apcu`), then configure your `config/cache.php` to use the `apcu` driver. The polyfill will automatically backport APCu functions if the extension isn’t available. Example: `'driver' => 'apcu', 'use_polyfill' => env('APCU_POLYFILL', false)`.
Will this work with Laravel 5.x or 6.x where APCu is hardcoded in config files?
Yes, the polyfill is ideal for Laravel 5.x–6.x apps relying on APCu (e.g., `session.driver = 'apcu'`). It preserves existing functionality while enabling migration to modern solutions like Redis. No code changes are needed—just install the package and configure it in `.env` or `config/cache.php`.
Can I restrict the polyfill to specific Laravel cache stores to avoid performance issues?
Absolutely. Configure the polyfill per store in `config/cache.php` by setting `'use_polyfill' => true` only for non-critical stores (e.g., sessions or config caching). Critical stores like `redis` or `database` can remain unaffected. Example: `'stores' => ['apcu' => ['driver' => 'apcu', 'use_polyfill' => env('APCU_POLYFILL', false)]]`.
What’s the performance impact of using this polyfill in production?
The polyfill introduces 5–50× latency for high-frequency operations (e.g., request caching). Mitigate this by disabling it for performance-sensitive stores or using environment-based routing (e.g., `env('APCU_POLYFILL', false)` in production). Monitor with Laravel Telescope or Blackfire to benchmark impact.
Does this polyfill support Laravel’s session driver for APCu?
Yes, it works seamlessly with Laravel’s session driver if configured to use APCu. Set `'driver' => 'apcu'` in `config/session.php` and ensure the polyfill is enabled via `.env` (e.g., `APCU_POLYFILL=true`). The polyfill backports the required `apcu_*` functions for session storage.
How do I test if the polyfill is working in Laravel?
Use Laravel’s testing tools to verify functionality. For example, mock the `Cache` facade: `Cache::shouldReceive('get')->once()->andReturn('test');`. The polyfill is also compatible with PHPUnit and can be tested by checking if `apcu_fetch` or `apcu_store` functions are available after installation.
Can I use this polyfill alongside Redis or Memcached in Laravel?
Yes, the polyfill is designed for incremental migration. Configure multiple cache stores in `config/cache.php` (e.g., `apcu`, `redis`, `database`) and enable the polyfill only for APCu-dependent stores. This allows you to phase out APCu gradually while maintaining compatibility.
What PHP versions does this polyfill support in Laravel?
The polyfill supports PHP 5.3.2–8.x, aligning with Laravel’s supported versions (5.8–10.x). It’s backward-compatible with legacy Laravel apps running on older PHP versions where APCu isn’t available.
Are there any serialization issues when using this polyfill with Laravel’s Cache?
Yes, complex objects (e.g., closures, resources, or Laravel collections) may fail to serialize. Mitigate this by auditing cached objects or falling back to file-based caching for problematic types. Use Laravel’s `serialize()`/`unserialize()` helpers or configure a secondary cache store for high-risk data.
How do I disable the polyfill in production if it’s causing issues?
Disable it via environment variables in `.env` (e.g., `APCU_POLYFILL=false`) or update `config/cache.php` to set `'use_polyfill' => false` for specific stores. For a phased rollout, use feature flags or environment-based routing to gradually replace the polyfill with native APCu or Redis.
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.
codraw/entity-migrator
codraw/doctrine-extra
codraw/aws-tool-kit
codraw/validator
codraw/workflow
codraw/open-api
codraw/cron-job
codraw/process
codraw/log
nexmo/api-specification
capell-app/block-library
axium/identity
cetria/laravel-dummy-models
cetria/reflection-helper
agropredict/sso-auth-bundle
evolvestudio/spam-protection
datacore/hub-sdk
develia/commons
cuci/prototurk-sdk
cuci/prototurk-sdk-symfony