"访问被拒绝"错误重命名'在Symfony上传文件时调用

时间:2012-10-15 11:37:22

标签: file-upload symfony

我正在使用Win7 / Apache 2.2 / ZendStudio环境中的Symfony项目,我在上传文件时遇到了一些麻烦。

我的目标是让用户创建一个可以包含任意多个“文档”的新实体(基于http://symfony.com/doc/current/cookbook/doctrine/file_uploads.html上的文章)。我有一个表单类型,其中包含一个类型为'collection'的字段(基于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 Warning : rename (../app/cache/dev , ../app/cache/dev_old ) : Access Denied . (Code : 5)有关,但不太确定它是否与在另一个上下文中发生的相同。不过,我也遇到了这个链接中描述的问题。

提前致谢。

3 个答案:

答案 0 :(得分:6)

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

Doctrine Ticket with more detailed info

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

答案 1 :(得分:5)

我最近遇到了同样的问题。我真的不太清楚问题发生的原因,但问题来自于Doctrine试图生成代理类的过程中的一个步骤。

在我的config.yml文件中,在Doctrine配置的ORM部分下,我将auto_generate_proxy_classes的值从%kernel.debug%更改为false。自从做出改变以来,我已经玩了一段时间,但从那时起就无法重现这个问题。

答案 2 :(得分:0)

转到重命名文件的文件,然后将其替换为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;
}