Bonjour,
Je suis en train de tester une application Symfony 2.8.22 avec PHP 5.6.26 sous Windows avec IIS.
J’affiche 10 pages de l’application dans 10 instances de navigateurs, ces pages affichent des données de suivi de process et sont rafraichies toutes les 3 minutes.
Je laisse les 10 pages dans cette situation pendant une longue durée (1 jour ou plus).
Après ce délai, plusieurs pages sont souvent en erreur avec l’erreur décrite ci-dessous.
Voici des extraits des traces :
[2017-09-26 02:32:47.669189] php.DEBUG: rename(C:\inetpub\wwwroot\MonProjet\app\cache\dev\appEBF5.tmp,C:\inetpub\wwwroot\MonProjet\app\cache\dev/appDevDebugProjectContainerUrlMatcher.php):
Accés refusé. (code: 5)
{"type":2,"file":"C:\inetpub\wwwroot\MonProjet\vendor\symfony\symfony\src\Symfony\Component\Filesystem\Filesystem.php","line":278,"level":28928} []
[2017-09-26 02:32:47.966006] request.CRITICAL: Uncaught PHP Exception Symfony\Component\Filesystem\Exception\IOException: "Cannot rename "C:\inetpub\wwwroot\MonProjet\app\cache\dev\appEBF5.tmp"
to "C:\inetpub\wwwroot\MonProjet\app\cache\dev/appDevDebugProjectContainerUrlMatcher.php"."
at C:\inetpub\wwwroot\MonProjet\vendor\symfony\symfony\src\Symfony\Component\Filesystem\Filesystem.php line 279
{"exception":"object"} []
Le code provoquant l’exception est :
public function rename($origin, $target, $overwrite = false)
{
// we check that target does not exist
if (!$overwrite && $this->isReadable($target)) {
throw new IOException(sprintf('Cannot rename because the target "%s" already exists.', $target), 0, null, $target);
}
if (true !== @rename($origin, $target)) {
throw new IOException(sprintf('Cannot rename "%s" to "%s".', $origin, $target), 0, null, $target);
}
}
Lig 278 : @rename($origin, $target)
Lig 279 = 2e throw
J’ai lu quelques articles qui donnent 2 pistes :
- la fonction PHP rename pourrait parfois mal fonctionner sous Windows
- IIS pourrait manquer de droits sur le dossier de l’application (ce dont je doute car certaines écritures fonctionnent)
Ce problème est-il connu ? Si oui, comment le résoudre ?
Merci