9

我正在 Win7/Apache 2.2/ZendStudio 环境中处理 Symfony 项目,但在上传文件时无法正常工作。

我的目标是让用户创建一个可以包含任意多个“文档”的新实体(基于http://symfony.com/doc/current/cookbook/doctrine/file_uploads.html上的文章)。我有一个表单类型,其中包含一个“集合”类型的字段(基于http://symfony.com/doc/current/cookbook/form/form_collections.html上的文章)。到现在为止还挺好。通过 jQuery,我可以添加任意多个表单作为子表单,效果很好。但是当我提交表单时,经常(但并非总是如此!)我得到以下异常:

Warning: rename(C:/Programming/Servers/Apache2.2/htdocs/Symfony/app/cache/dev/doctrine/orm/Proxies\__CG__MyMainBundleEntityRecruiter.php.507bf02e30df69.85090364,C:/Programming/Servers/Apache2.2/htdocs/Symfony/app/cache/dev/doctrine/orm/Proxies\__CG__MyMainBundleEntityLecture.php): Zugriff verweigert (code: 5) in C:\Programming\Servers\Apache2.2\htdocs\Symfony\vendor\doctrine\orm\lib\Doctrine\ORM\Proxy\ProxyFactory.php line 194

Zugriff verweigert是德语的拒绝访问。奇怪的是,这些文件似乎被重命名并保存在正确的位置。

为什么会出现此异常,它与我的环境有关吗?我该如何解决?我猜这个问题与Symfony 警告有关:rename (../app/cache/dev, ../app/cache/dev_old): Access Denied。(Code : 5),但不太确定它是否与在另一个上下文中发生的相同。不过,我也确实遇到了此链接中描述的问题。

提前致谢。

4

3 回答 3

7

我最近遇到了同样的问题。我真的不知道为什么会发生问题,但问题来自 Doctrine 尝试生成代理类的过程中的一个步骤。

在我的 config.yml 文件中,在 Doctrine 配置的 ORM 部分下,我将auto_generate_proxy_classesfrom的值更改%kernel.debug%false。自从进行更改以来,我已经使用它一段时间了,并且从那以后一直无法重现该问题。

于 2013-03-07T21:22:54.497 回答
4

在寻找相同的答案时发现了这个,这似乎是一个 Windows + Doctrine 问题。

包含更详细信息的教义票

TLDR:基本上代理正在尝试重命名仍在使用的文件,在 Linux 中有效,但并不总是在 Windows 上。

于 2013-11-10T11:33:37.490 回答
1

转到重命名文件的文件,然后将其替换为与 Windows 兼容的重命名功能

private function renameWindowsCompatible($oldfile,$newfile) {
    try {
        rename($oldfile,$newfile);
    } catch(\Exception $e) {
        if (copy($oldfile,$newfile)) {
            unlink($oldfile);
            return TRUE;
        }
        return FALSE;
    }
    return TRUE;
}
于 2016-10-18T01:25:57.667 回答