2010-07-25 49 views
1

我在一些生产计算机上使用Windows(具有FastCGI-PHP的IIS)。自从一个SF-Project升级到1.3.x后,我注意到了一些奇怪的问题。服务器正在收集应用程序的config-cache文件夹中的Temp-Files。它们被命名为con1718.tmp并且始终包含autoload-config-cache。不会为每个请求生成tmp文件,但每隔半小时左右我就会有1或2个新文件。如果应用程序运行几天/几个月,则会有很多这样的Temp-Files(它们的兆字节)。Symfony-Cache文件夹中的临时文件

机器细节: - Windows Server 2008 - IIS 7 - ZendServer?用PHP 5.2.11

项目与SF 1.3.3

任何想法是什么问题可以吗?

+0

你知道,在Windows中,删除文件实际上需要一个单独的许可?检查相应的用户是否确实拥有临时目录的删除权限。 – Charles 2010-07-25 15:53:37

+0

是的,我知道这一点。我甚至给了用户关于目录(缓存 - Symfony的文件夹和所有子文件夹)的所有权利。最好的部分是,这个问题只发生在有时(不可复制),而不是每一个请求:-( – Timo 2010-07-25 16:31:56

回答

1

我检查了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); 
    } 

} 
+0

是的我有这些行我正在与SF 1.4.6。 – Timo 2010-08-23 18:37:10

+0

好的,所以也许这是一个复制问题,你可以尝试用我刚刚在我的答案中放置的代码替换这段代码,并检查日志文件以查看发生了什么。 – greg0ire 2010-08-23 18:57:24

0

“con1718.tmp”看起来像tempnam PHP函数生成的临时文件名:

tempnam('c:/tmp', 'con'); // produces something like c:\\tmp\con1234.tmp 

我用symfony的源grep来找到这样的电话,但没找到'的tempnam任何()的用法CON”。也许这是你使用的插件之一?

+0

tempnam没有用在我使用的任何插件中,但是我在sfConfigCache.php中找到它,但为什么它有时失败了奇迹它自己... – Timo 2010-08-19 07:48:48

0

你(在Web平台安装2.0的Windows缓存扩展1.1 PHP 5.2)运行的Windows缓存扩展为PHP任何机会呢?我注意到虽然这个软件包试图模仿PHP Accelerator被广泛使用的行为,但它确实消耗了大量资源并做了一些奇怪的事情,尤其是奇怪的文件写入。我还没有把symfony和它混在一起,但将在未来几周内这样做。否则,我的规格会与您的相匹配。

也许没有一个完整的答案,但如果它安装,如何禁用它并重试?

+0

我正在使用APC。未安装Windows缓存扩展。我禁用APC一段时间,但没有帮助。 – Timo 2010-08-23 18:38:07