From 92acd32410af75934671a408e5e5af0b2c97f607 Mon Sep 17 00:00:00 2001 From: Eric Clemmons Date: Thu, 20 Oct 2011 09:35:41 -0700 Subject: [PATCH 1/5] ProxyFactory creates proxy's parent structure if it doesn't exist --- lib/Doctrine/ORM/Proxy/ProxyFactory.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/Doctrine/ORM/Proxy/ProxyFactory.php b/lib/Doctrine/ORM/Proxy/ProxyFactory.php index 490c3a119..0bba4dabb 100644 --- a/lib/Doctrine/ORM/Proxy/ProxyFactory.php +++ b/lib/Doctrine/ORM/Proxy/ProxyFactory.php @@ -152,6 +152,11 @@ class ProxyFactory $file = str_replace($placeholders, $replacements, $file); + $parentDirectory = dirname($fileName); + if (! file_exists($parentDirectory)) { + mkdir($parentDirectory, 0, true); + } + file_put_contents($fileName, $file, LOCK_EX); } From fde9d122ccf0fa9fbec1a8e6bccc0189f9beb033 Mon Sep 17 00:00:00 2001 From: Eric Clemmons Date: Thu, 20 Oct 2011 13:33:20 -0700 Subject: [PATCH 2/5] ProxyFactory checks presence of directory with `is_dir` instead of `file_exists` --- lib/Doctrine/ORM/Proxy/ProxyFactory.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/Proxy/ProxyFactory.php b/lib/Doctrine/ORM/Proxy/ProxyFactory.php index 0bba4dabb..6ab28be3a 100644 --- a/lib/Doctrine/ORM/Proxy/ProxyFactory.php +++ b/lib/Doctrine/ORM/Proxy/ProxyFactory.php @@ -153,7 +153,7 @@ class ProxyFactory $file = str_replace($placeholders, $replacements, $file); $parentDirectory = dirname($fileName); - if (! file_exists($parentDirectory)) { + if (! is_dir($parentDirectory)) { mkdir($parentDirectory, 0, true); } From 99c1383ef566c6442191981e29e232724cc0cda4 Mon Sep 17 00:00:00 2001 From: Eric Clemmons Date: Mon, 24 Oct 2011 19:32:38 -0700 Subject: [PATCH 3/5] If proxy directory doesn't exist & cannot be created via mkdir, a ProxyException is thrown --- lib/Doctrine/ORM/Proxy/ProxyException.php | 4 ++++ lib/Doctrine/ORM/Proxy/ProxyFactory.php | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/Doctrine/ORM/Proxy/ProxyException.php b/lib/Doctrine/ORM/Proxy/ProxyException.php index 892dbebbb..29462780d 100644 --- a/lib/Doctrine/ORM/Proxy/ProxyException.php +++ b/lib/Doctrine/ORM/Proxy/ProxyException.php @@ -36,6 +36,10 @@ class ProxyException extends \Doctrine\ORM\ORMException { return new self("You must configure a proxy directory. See docs for details"); } + public static function proxyDirectoryNotWritable() { + return new self("Your proxy directory must be writable."); + } + public static function proxyNamespaceRequired() { return new self("You must configure a proxy namespace. See docs for details"); } diff --git a/lib/Doctrine/ORM/Proxy/ProxyFactory.php b/lib/Doctrine/ORM/Proxy/ProxyFactory.php index 6ab28be3a..9436bcb71 100644 --- a/lib/Doctrine/ORM/Proxy/ProxyFactory.php +++ b/lib/Doctrine/ORM/Proxy/ProxyFactory.php @@ -153,8 +153,8 @@ class ProxyFactory $file = str_replace($placeholders, $replacements, $file); $parentDirectory = dirname($fileName); - if (! is_dir($parentDirectory)) { - mkdir($parentDirectory, 0, true); + if (! is_dir($parentDirectory) && ! mkdir($parentDirectory, 0775, true)) { + throw ProxyException::proxyDirectoryNotWritable(); } file_put_contents($fileName, $file, LOCK_EX); From 48bf5022e4f67b0718f7b26ed00f89fec4d1cc17 Mon Sep 17 00:00:00 2001 From: Eric Clemmons Date: Mon, 24 Oct 2011 19:45:23 -0700 Subject: [PATCH 4/5] ProxyFactory always checks if directory is writable first --- lib/Doctrine/ORM/Proxy/ProxyFactory.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/Proxy/ProxyFactory.php b/lib/Doctrine/ORM/Proxy/ProxyFactory.php index 9436bcb71..aa53a0686 100644 --- a/lib/Doctrine/ORM/Proxy/ProxyFactory.php +++ b/lib/Doctrine/ORM/Proxy/ProxyFactory.php @@ -153,7 +153,12 @@ class ProxyFactory $file = str_replace($placeholders, $replacements, $file); $parentDirectory = dirname($fileName); - if (! is_dir($parentDirectory) && ! mkdir($parentDirectory, 0775, true)) { + + if (! is_dir($parentDirectory)) { + mkdir($parentDirectory, 0775, true); + } + + if ( ! is_writable($parentDirectory)) { throw ProxyException::proxyDirectoryNotWritable(); } From 5b64dbe1955e643f61957a1937b9710877d67002 Mon Sep 17 00:00:00 2001 From: Eric Clemmons Date: Tue, 25 Oct 2011 11:51:09 -0700 Subject: [PATCH 5/5] Added error suppression to mkdir in ProxyFactory See: Symfony\Component\HttpKernel\Kernel#buildContainre --- lib/Doctrine/ORM/Proxy/ProxyFactory.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/Doctrine/ORM/Proxy/ProxyFactory.php b/lib/Doctrine/ORM/Proxy/ProxyFactory.php index aa53a0686..18202e0f0 100644 --- a/lib/Doctrine/ORM/Proxy/ProxyFactory.php +++ b/lib/Doctrine/ORM/Proxy/ProxyFactory.php @@ -154,11 +154,11 @@ class ProxyFactory $parentDirectory = dirname($fileName); - if (! is_dir($parentDirectory)) { - mkdir($parentDirectory, 0775, true); - } - - if ( ! is_writable($parentDirectory)) { + if ( ! is_dir($parentDirectory)) { + if (false === @mkdir($parentDirectory, 0775, true)) { + throw ProxyException::proxyDirectoryNotWritable(); + } + } else if ( ! is_writable($parentDirectory)) { throw ProxyException::proxyDirectoryNotWritable(); }