代码之家  ›  专栏  ›  技术社区  ›  Timo Haberkern

symfony缓存文件夹中的临时文件

  •  1
  • Timo Haberkern  · 技术社区  · 16 年前

    我在一些生产机器上使用Windows(带有fastcgi-php的IIS)。自从一个SF项目更新到1.3.x之后,我注意到一些奇怪的问题。服务器正在应用程序的config cache文件夹中“收集”临时文件。它们的名称类似于con1718.tmp,并且始终包含自动加载配置缓存。tmp文件不是为每个请求生成的,但是我每半小时左右就有1或2个新文件。如果应用程序运行几天/几个月,则会有很多这些临时文件(以兆字节计)。

    计算机详细信息:-Windows Server 2008-IIS 7-ZendServer?用PHP5.2.11

    SF 1.3.3项目

    有什么问题吗?

    3 回复  |  直到 15 年前
        1
  •  1
  •   greg0ire    15 年前

    我检查了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 (!@rename($tmpFile, $cache))
         {
           if (copy($tmpFile, $cache))
           {
             unlink($tmpFile);
           }
    
         }
    

    这段代码应该在第354行的sfconfigcache.php中,您能检查一下您有这行吗?如果没有,请考虑更新或修补,如果是,则可以在取消链接之前记录$tmpfile,以查看是否有尝试取消链接这些文件。 若要添加更多信息日志,应改为尝试以下代码:

     if (!@rename($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);
       }
    
     }
    
        2
  •  0
  •   Jakub Zalas    15 年前

    “con1718.tmp”看起来像是用 tempnam PHP功能:

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

    我在symfony源上使用grep来查找此类调用,但在“con”中找不到任何tempnam()用法。也许这是你正在使用的插件之一?

        3
  •  0
  •   Raise    15 年前

    有没有可能你正在运行 PHP的Windows缓存扩展 ( 用于php 5.2的Windows缓存扩展1.1 在里面 Web平台安装程序2.0 )?我注意到当这个包裹试图模仿 空气污染指数 php加速器被广泛使用,它消耗了大量的资源并做了一些奇怪的事情,尤其是在奇怪的地方写文件。我还没有将symfony和它混合在一起,但在接下来的几周内我会这样做。否则,我的规格和你的很接近。

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