2010-07-25 7 views
1

J'utilise Windows sur certaines machines de production (IIS avec FastCGI-PHP). Depuis la mise à jour d'un SF-Project à 1.3.x, je remarque quelques problèmes étranges. Le serveur "collecte" les fichiers temporaires dans le dossier config-cache des applications. Ils s'appellent con1718.tmp et contiennent toujours le cache autoload-config. Les fichiers tmp ne sont pas générés pour chaque requête mais j'ai 1 ou 2 nouveaux fichiers toutes les demi-heures environ. Si l'application fonctionne quelques jours/mois, il y a beaucoup de ces fichiers temporaires (mégaoctets).Fichiers temporaires dans le dossier Symfony-Cache

Machine-Détails: - Windows Server 2008 - IIS 7 - ZendServer? avec PHP 5.2.11

Projet avec SF

1.3.3

Toutes les idées que le problème peut être?

+0

Saviez-vous que sur Windows, la suppression d'un fichier nécessite en fait une autorisation séparée? Vérifiez que l'utilisateur approprié dispose effectivement de droits de suppression pour le répertoire temporaire. – Charles

+0

oui je le sais. J'ai même donné à l'utilisateur tous les droits sur le répertoire concernant (cache-dossier de Symfony et tous les sous-dossiers). La partie intéressante est que ce problème se produit parfois (non reproductible) et non à chaque requête :-( – Timo

Répondre

1

J'ai vérifié symfony 1.4 et a vu cela dans le code:

 // 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); 
     } 

    } 

Ce morceau de code doit être sfConfigCache.php sur la ligne 354, pourriez-vous vérifier que vous avez ces lignes? Si ce n'est pas le cas, pensez à mettre à jour ou correctif, et si oui, vous pouvez enregistrer $ tmpFile avant de le dissocier, juste pour voir s'il y a une tentative de dissocier ces fichiers ou non. Pour ajouter plus journal d'information, vous devriez essayer ce code à la place:

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

Oui, j'ai ces lignes.Je travaille avec SF 1.4.6 – Timo

+0

ok, donc c'est peut-être un problème de copie Vous pouvez essayer de remplacer ce morceau de code par celui que je viens de mettre dans ma réponse, et vérifiez vos fichiers journaux pour voir ce qui se passe. – greg0ire

0

« con1718.tmp » ressemble à un nom de fichier temporaire généré avec la fonction tempnam PHP:

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

je grep sur les sources de symfony pour trouver de tels appels, mais ne trouve pas l'utilisation tempnam() avec ' con '. Peut-être que c'est l'un des plugins que vous utilisez?

+0

tempnam n'est pas utilisé dans les plugins que j'utilise, mais je l'ai trouvé dans le fichier sfConfigCache.php. miracle de son propre ... – Timo

0

Toute chance que vous utilisez le cache de Windows Extension pour PHP (cache de Windows Extension 1.1 pour PHP 5.2 dans Web Platform Installer 2.0)? J'ai remarqué que pendant que ce paquet essayait de simuler le comportement de PHP Accelerator qui est largement utilisé, il consomme beaucoup de ressources et fait des choses étranges, en particulier des écritures de fichiers dans des endroits étranges. Je dois encore écraser symfony et ça ensemble, mais je le ferai dans les prochaines semaines. Sinon, mes spécifications correspondent à la vôtre de très près.

Pas une réponse complète peut-être, mais si est installé, pourquoi ne pas le désactiver et réessayer?

+0

J'utilise APC.L'extension de cache de Windows n'est pas installée.J'ai désactivé APC depuis un certain temps, mais cela n'a pas aidé – Timo

Questions connexes