我检查了symfony的1.4和看到这个代码:
// Hack from Agavi (http://trac.agavi.org/changeset/3979)
// With php < 5.2.6 on win32, renaming to an already existing file doesn't work, but copy does,
// so we simply assume that when rename() fails that we are on win32 and try to use copy()
if ([email protected]($tmpFile, $cache))
{
if (copy($tmpFile, $cache))
{
unlink($tmpFile);
}
}
这段代码应该在sfConfigCache.php上线354,你可以检查你有这行?如果没有,请考虑更新或修补,如果是,则可以在取消链接之前记录$ tmpFile,以查看是否尝试解除链接这些文件。 要添加更多的信息日志,你应该试试这个代码,而不是:
if ([email protected]($tmpFile, $cache))
{
sfContext::getInstance()->getLogger()->info('attempt to renaming ' . $tmpFile . ' failed, trying copy');
if (copy($tmpFile, $cache))
{
sfContext::getInstance()->getLogger()->info('copy successful, now unlinking ' . $tmpFile);
unlink($tmpFile);
}
else
{
sfContext::getInstance()->getLogger()->err('probem with copy for file '.$tmpFile);
}
}
你知道,在Windows中,删除文件实际上需要一个单独的许可?检查相应的用户是否确实拥有临时目录的删除权限。 – Charles 2010-07-25 15:53:37
是的,我知道这一点。我甚至给了用户关于目录(缓存 - Symfony的文件夹和所有子文件夹)的所有权利。最好的部分是,这个问题只发生在有时(不可复制),而不是每一个请求:-( – Timo 2010-07-25 16:31:56