Browse Source

Explicitly check if a file has already been required before requiring it

Jonathan Eskew 10 years ago
parent
commit
61ed7a9547

+ 8 - 1
src/Composer/Autoload/AutoloadGenerator.php

@@ -605,7 +605,14 @@ METHOD_FOOTER;
 
 function composerRequire$suffix(\$file)
 {
-    require \$file;
+    static \$requiredFiles = array();
+    \$fileSignature = md5_file(\$file);
+
+    if (empty(\$requiredFiles[\$fileSignature])) {
+        require \$file;
+
+        \$requiredFiles[\$fileSignature] = true;
+    }
 }
 
 FOOTER;

+ 8 - 1
tests/Composer/Test/Autoload/Fixtures/autoload_real_files_by_dependency.php

@@ -51,5 +51,12 @@ class ComposerAutoloaderInitFilesAutoloadOrder
 
 function composerRequireFilesAutoloadOrder($file)
 {
-    require $file;
+    static $requiredFiles = array();
+    $fileSignature = md5_file($file);
+
+    if (empty($requiredFiles[$fileSignature])) {
+        require $file;
+
+        $requiredFiles[$fileSignature] = true;
+    }
 }

+ 8 - 1
tests/Composer/Test/Autoload/Fixtures/autoload_real_functions.php

@@ -51,5 +51,12 @@ class ComposerAutoloaderInitFilesAutoload
 
 function composerRequireFilesAutoload($file)
 {
-    require $file;
+    static $requiredFiles = array();
+    $fileSignature = md5_file($file);
+
+    if (empty($requiredFiles[$fileSignature])) {
+        require $file;
+
+        $requiredFiles[$fileSignature] = true;
+    }
 }

+ 8 - 1
tests/Composer/Test/Autoload/Fixtures/autoload_real_include_path.php

@@ -67,5 +67,12 @@ class ComposerAutoloaderInitIncludePath
 
 function composerRequireIncludePath($file)
 {
-    require $file;
+    static $requiredFiles = array();
+    $fileSignature = md5_file($file);
+
+    if (empty($requiredFiles[$fileSignature])) {
+        require $file;
+
+        $requiredFiles[$fileSignature] = true;
+    }
 }

+ 8 - 1
tests/Composer/Test/Autoload/Fixtures/autoload_real_target_dir.php

@@ -71,5 +71,12 @@ class ComposerAutoloaderInitTargetDir
 
 function composerRequireTargetDir($file)
 {
-    require $file;
+    static $requiredFiles = array();
+    $fileSignature = md5_file($file);
+
+    if (empty($requiredFiles[$fileSignature])) {
+        require $file;
+
+        $requiredFiles[$fileSignature] = true;
+    }
 }