Echec rename d'un fichier du cache
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 :
Citation:
[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] (Symfony\\Component\\Filesystem\\Exception\\IOException(code: 0):
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:279)"} []
Le code provoquant l’exception est :
Code:
1 2 3 4 5 6 7 8 9 10 11
| 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
Echec rename d'un fichier du cache
Bonjour,
Merci pour la réponse.
Effectivement, il peut y avoir des pbs avec les noms très longs.
Mais dans ce cas, je ne suis pas sûr que ce soit la cause.
On demande à la fonction "rename" de renommer : "C:\inetpub\wwwroot\MonProjet\app\cache\dev\appEBF5.tmp"
en "C:\inetpub\wwwroot\MonProjet\app\cache\dev/appDevDebugProjectContainerUrlMatcher.php"
Ces noms ne me semblent pas excessivement longs.
Cdt
[2.x] Echec rename d'un fichier du cache
Bonjour,
Merci pour la réponse.
Je suis d'accord avec ces constats.
Le pb est que ce code est fourni par Symfony. Ce n'est pas du code applicatif.
Il n'est donc pas de mon ressort de modifier le code effectuant ce renommage.
Une migration de l'application en PHP 7 et Symfony 3 est prévue ces prochains mois.
Je verrai si la migration élimine ce pb. Il est possible que la fonction "rename" de PHP ait été améliorée en version 7.
Cdt.
Echec rename d’un fichier du cache
Bonjour,
L'application a été migrée en Symfony 3. Ce pb subsiste.
La migration en PHP 7 est prévue dans qq semaines.
Cdt
[3.x] Echec rename d'un fichier du cache
Bonjour,
Ce problème n'apparaît pas lorsqu'on utilise l'application Symfony en mode production au lieu du mode debug.
S'il venait à se reproduire en mode production, je le signalerai.
P.LEBRUN