【问题标题】:"Access denied" error on 'rename' call when uploading files in Symfony在 Symfony 中上传文件时,“重命名”调用出现“访问被拒绝”错误
【发布时间】:2012-10-05 09:06:40
【问题描述】:

我正在 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 Warning : rename (../app/cache/dev , ../app/cache/dev_old ) : Access Denied . (Code : 5) 有关,但不太确定它是否与在另一个上下文中发生的相同。不过,我也确实遇到了此链接中描述的问题。

提前致谢。

【问题讨论】:

  • 我也有同样的问题。 :-(

标签: file-upload symfony


【解决方案1】:

我最近也遇到了同样的问题。我不太清楚为什么会出现问题,但问题出在 Doctrine 尝试生成代理类的过程中的一个步骤。

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

【讨论】:

【解决方案2】:

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

Doctrine Ticket with more detailed info

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

【讨论】:

  • 有解决方案的人吗?我在这篇文章中看到它在 Doctrine 2.5 中得到修复,但是当我运行它时(在 Symfony 2.6.1 上)我仍然得到错误。也许更新 Symfony,或者什么?
  • 同意。它说已修复 2.5,但我仍然在 XAMPP 和 Windows 10 x64 中的 Doctrine 2.5.4 上得到这个... :(
  • 拒绝投票,因为该链接不再在线。答案应该完全在 SO 上。
  • 链接已损坏:/
【解决方案3】:

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

【讨论】:

  • 这只是对厂商的临时修复,不知道学说会不会很快考虑这个更新
猜你喜欢
  • 2019-10-11
  • 2023-03-14
  • 2012-03-06
  • 1970-01-01
  • 2012-08-30
  • 1970-01-01
  • 2022-08-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多