2010-07-25 55 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