Php Symfony缓存文件夹中的临时文件

Php Symfony缓存文件夹中的临时文件,php,windows,iis,symfony1,Php,Windows,Iis,Symfony1,我在一些生产机器上使用Windows(IIS和FastCGI PHP)。自从一个SF项目更新到1.3.x之后,我注意到一些奇怪的问题。服务器正在“收集”应用程序配置缓存文件夹中的临时文件。它们的名称类似于con1718.tmp,并且始终包含自动加载配置缓存。tmp文件不是为每个请求生成的,但我每半小时左右就会有1到2个新文件。如果应用程序运行了几天/几个月,则会有很多临时文件(兆字节) 计算机详细信息:-Windows Server 2008-IIS 7-ZendServer?使用PHP5.2.

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

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

SF 1.3.3项目


你知道问题出在哪里吗?

'con1718.tmp'看起来像是使用PHP函数生成的临时文件名:

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

我在symfony源代码中使用grep来查找此类调用,但没有发现任何tempnam()与“con”的用法。可能是您正在使用的插件之一?

'con1718.tmp'看起来像是使用PHP函数生成的临时文件名:

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

我在symfony源代码中使用grep来查找此类调用,但没有发现任何tempnam()与“con”的用法。可能是您正在使用的插件之一?

您是否有可能正在运行PHP的Windows缓存扩展(Web平台安装程序2.0中的PHP 5.2的Windows缓存扩展1.1)?我注意到,虽然这个包试图模仿广泛使用的APCPHP加速器的行为,但它确实消耗了大量资源,并做了一些奇怪的事情,特别是在奇怪的地方写文件。我还没有将symfony和它混合在一起,但在接下来的几周内会这样做。否则,我的规格与你的相当接近


可能不是完整的答案,但是如果安装了,那么禁用它并重试如何?

您是否有可能正在运行PHP的Windows缓存扩展插件(Web平台安装程序2.0中的PHP 5.2的Windows缓存扩展插件1.1)?我注意到,虽然这个包试图模仿广泛使用的APCPHP加速器的行为,但它确实消耗了大量资源,并做了一些奇怪的事情,特别是在奇怪的地方写文件。我还没有将symfony和它混合在一起,但在接下来的几周内会这样做。否则,我的规格与你的相当接近


可能不是完整的答案,但如果安装了,禁用它并重试如何?

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

     }

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

     }

您知道在Windows上删除文件实际上需要单独的权限吗?检查相应的用户是否确实具有临时目录的删除权限。是的,我知道这一点。我甚至给了用户关于目录(Symfony的缓存文件夹和所有子文件夹)的所有权限。有趣的是,这个问题只会偶尔出现(不可复制),而不是每次请求都会出现:-(您知道吗,在Windows上,删除文件实际上需要单独的权限?请检查相应的用户是否确实拥有临时目录的删除权限。是的,我知道这一点。我甚至授予了用户有关目录(Symfony的缓存文件夹和所有子文件夹)的所有权限).有趣的是,这个问题只会偶尔出现(不可复制),并非每次请求都会出现:-(tempnam没有在我使用的任何插件中使用。但我在sfConfigCache.php中找到了它。但是为什么它有时失败是它自己的奇迹…tempnam没有在我使用的任何插件中使用。但是我在sfConfigCache.php中找到了它。但是为什么它有时失败是它自己的奇迹…我正在使用APC。windows缓存扩展没有安装。我已经禁用了APC。)有一段时间,但这没有帮助。我正在使用APC。windows缓存扩展未安装。我已禁用APC一段时间,但这没有帮助。好的,所以复制可能有问题。你可以尝试用我刚才在回答中输入的代码替换这段代码,并检查日志文件以查看发生了什么。好的,所以这可能是个问题你可以试着把这段代码替换成我刚才在答案中输入的代码,然后检查你的日志文件看看发生了什么。