Skip to content


Removed LOCK_EX for writing Proxy class file #312

wants to merge 1 commit into from

6 participants


LOCK_EX will not work on NFS and many other networked file systems.

Replaces #307

Doctrine member

@beberlei Did you want to merge this?


Is any chance to merge this ?
Working with Symfony2/doctrine on vagrant with nfs is impossible


Huh, LOCK_EX is there with a reason.


The best solution for configurable file locking is by using stream, e.g. "safe://path_to_proxies".

new Doctrine\ORM\Proxy\ProxyFactory($em, $proxyDir = 'safe://path_to_proxies');


LOCK_EX is not really required, since proxy classes should only be generated manually (except in a dev environment).


Dev environment is actually a pretty good reason: sometimes you have multiple concurrent requests being made (e.g. from an Ajax app), and you don't want one to corrupt another.

However, on further thought and some more testing, LOCK_EX is actually not sufficient: while this prevents a corrupt proxy file from being written to disk, it does not guarantee that a correct one will be read: require() does not use advisory locking.

This is a reason why I am experiencing:

PHP Fatal error:  Class 'Celtra\\Models\\Proxies\\__CG__\\Celtra\\Models\\Account' not found in .../server/vendor/doctrine/orm/lib/Doctrine/ORM/Proxy/ProxyFactory.php on line 102

I guess a new file would have to be written elsewhere and then atomically moved (rename()'d) into place. However, I'm not sure NFS supports overwriting rename().

Can you confirm?


Overwriting rename seems to work on NFS.


Would it be possible to change:

file_put_contents($fileName, $file, LOCK_EX);


$tmpFileName = $fileName . '.' . uniqid("", true);
file_put_contents($tmpFileName, $file);
rename($tmpFileName, $fileName);
@beberlei beberlei closed this
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Mar 29, 2012
  1. @hason
Showing with 1 addition and 1 deletion.
  1. +1 −1 lib/Doctrine/ORM/Proxy/ProxyFactory.php
2 lib/Doctrine/ORM/Proxy/ProxyFactory.php
@@ -189,7 +189,7 @@ private function _generateProxyClass(ClassMetadata $class, $fileName, $file)
throw ProxyException::proxyDirectoryNotWritable();
- file_put_contents($fileName, $file, LOCK_EX);
+ file_put_contents($fileName, $file);
Something went wrong with that request. Please try again.