From 9ca99762f9e41dec12be28b346f6fb71f72d85a5 Mon Sep 17 00:00:00 2001 From: Andrew Coulton Date: Wed, 3 Dec 2014 13:58:23 +0000 Subject: [PATCH] Prevent APC causing random fatal errors [fixes #264] Update the phar stub to prevent APC attempting to run the composer classes through the opcode cache on supported APC versions to avoid the random fatal "duplicate class" errors at runtime as reported in #264. Prior to APC version 3.0.12 this was a PHP_INI_SYSTEM directive, so output a warning instead. --- src/Composer/Compiler.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/Composer/Compiler.php b/src/Composer/Compiler.php index b1b3725c6..e410c1878 100644 --- a/src/Composer/Compiler.php +++ b/src/Composer/Compiler.php @@ -212,6 +212,16 @@ class Compiler * the license that is located at the bottom of this file. */ +// Avoid APC causing random fatal errors per https://github.com/composer/composer/issues/264 +if (extension_loaded('apc') && ini_get('apc.enable_cli') && ini_get('apc.cache_by_default')) { + if (version_compare(phpversion('apc'), '3.0.12', '>=')) { + ini_set('apc.cache_by_default', 0); + } else { + fwrite(STDERR, 'Warning: APC <= 3.0.12 may cause fatal errors when running composer commands.'.PHP_EOL); + fwrite(STDERR, 'Update APC, or set apc.enable_cli or apc.cache_by_default to 0 in your php.ini.'.PHP_EOL); + } +} + Phar::mapPhar('composer.phar'); EOF;