Jump to content

[HELP!] cache_index.php


Recommended Posts

Bonjour,

 

Cela fait deux fois que je me fais réveiller en pleine nuit pour une panne qui est la meme que la derniere fois.

Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ')' in /var/www/clients/client1/web2/web/cache/class_index.php on line 601

 'TaxRule' => 'override/classes/tax/TaxRule.php',
 'TaxRuleCore' => 'classes/tax/TaxRule.php',
 erride/classes/tax/TaxRulesGroup.php',
 'TaxRulesGroupCore' => 'classes/tax/TaxRulesGroup.php',
 'TaxRulesTaxManager' => 'override/classes/tax/TaxRulesTaxManager.php',
...
 'Zone' => 'override/classes/Zone.php',
 'ZoneCore' => 'classes/Zone.php',
); ?>asses/Zone.php',
); ?>

Quesqui peut provoquer ce genre de panne SVP.

Edited by 2FR3 (see edit history)
Link to comment
Share on other sites

  • 3 weeks later...

Petit up plz !

 

Je me demande : Si j’enlève le droit a l’écriture pour ne plus avoir le soucis, quesque je risque ? Pourquoi ce fichier a t'il besoin des droits en écriture ?

Link to comment
Share on other sites

La boutique a encore plantée. Les logs indiquent [error] mod_fcgid: process et nous avons parfois le proc qui s'affole a 100% avec php-cgi. Je ne sais pas si c'est lié ...

Link to comment
Share on other sites

Salut !

J'ai le meme probleme que moi et cela me rend fou !

 

As tu trouver une solution ?

 

Interdire led roit en ecriture est il possible pour ce fichier ?

 

Je ne sais pas quoi faire ma boutique est en 1.4.5.3

 

Cdt

Link to comment
Share on other sites

A vue d'oeil, c'est la méthode generateIndex dans classes/Autoload.php qui crée le fichier cache_index.php. Il faudrait logger les écritures de $content pour voir quand et pourquoi se produit le problème.

 

Normalement y a un regex qu'est censé prévenir l'écriture de lignes incorrectes, mais visiblement dans ton cas le test d'intégrité ne fonctionne pas.

 

// If the file content end with PHP tag, integrity of the file is ok
if (preg_match('#\?>\s*$#', file_get_contents($filename)))
 $integrity_is_ok = true;

Ce serait intéressant de voir pourquoi le regex laisse passer une ligne mal écrite.

 

 

Le $content est crée à partir des classes qui se trouvent dans ces dossiers :

 

$this->getClassesFromDir('classes/'),
$this->getClassesFromDir('override/classes/'),
$this->getClassesFromDir('controllers/'),
$this->getClassesFromDir('override/controllers/')

 

On peut soupçonner qu'à un moment une classe est mal écrite mais il faudrait savoir laquelle.

 

 

Aussi il faudrait voir si y a pas un module qui fait appel à cette méthode et qui pourrait fausser les choses. Ou encore si le fichier est modifié directement par un autre programme.

Edited by emily_d (see edit history)
Link to comment
Share on other sites

Merci beaucoup, cela donne deja une piste interessante.

La condition est respecter dans mon exemple

    // If the file content end with PHP tag, integrity of the file is ok
    if (preg_match('#\?>\s*$#', file_get_contents($filename)))
	 $integrity_is_ok = true;

Donc ca passe.

 

Après pour log un fichier particulier, tu t'y prends comment? Je connais les logs niveau serveur, qui donnent rien dans ce cas de figure, apache et php continuent a tourner tranquilou.

Link to comment
Share on other sites

Par logger, je veux juste dire qu'il faut sauvegarder dans un fichier le contenu de la valeur $content mais plus précisément les appels à $this->getClassesFromDir(…)

 

A priori, y a deux endroits où le contenu du fichier peut être corrompu :

Soit ici :

$classes = array_merge(
	$this->getClassesFromDir('classes/'),
	$this->getClassesFromDir('override/classes/'),
	$this->getClassesFromDir('controllers/'),
	$this->getClassesFromDir('override/controllers/')
);

 

Soit juste après :

 

$content = '<?php return '.var_export($classes, true).'; ?>';

 

var_export est une fonction système qui doit retourner du code PHP valide, j’ai donc dû mal à voir comment le fichier se corrompt.

 

Comme hypothèse je dirai qu’un fichier override contient du contenu qui fait ‘planter’ l’expression régulière qui se trouve dans ::getClassesFromDir. Le problème avec cette hypothèse, c’est qu’elle n’explique pas pourquoi le fichier class_index est correctement régénéré lorsqu’il est effacé. Mystère et boule de gomme.

Link to comment
Share on other sites

Franchement, je ne sais comment te remercier, en comparant l'autoload avec une 1.5.4.1 (mon client est en 1.5.3.1), je me suis aperçu de l'erreur. Maintenant, il n'est pas overidé, comment cela a pu ce passer ?

 

autoload.jpg

 

On va voir si nous avons résolu ma détresse, mais y'a pas de raison !

Link to comment
Share on other sites

J'ai ce problème de manière reccurente je suis en 1.5.3.1 mais je n'ose pas mettre à jour par peur de "bug", comment faire en sorte que ce probleme de se reproduise plus ? je ne 'ai pas trop compris ce qu'il faut modifier !

Link to comment
Share on other sites

Mettre le fichier cache_index.php en lecture seul resoudrais t il le pb ?

 

Tu peux essayer de commenter cette partie de generateIndex()

 


 else
 {
/*
  // Let's write index content in cache file
  // In order to be sure that this file is correctly written, a check is done on the file content
  $loop_protection = 0;
  do
  {
$integrity_is_ok = false;
file_put_contents($filename, $content, LOCK_EX);
if ($loop_protection++ > 10)
 break;
// If the file content end with PHP tag, integrity of the file is ok
if (preg_match('#\?>\s*$#', file_get_contents($filename)))
 $integrity_is_ok = true;
  }
  while (!$integrity_is_ok);
  if (!$integrity_is_ok)
  {
file_put_contents($filename, '<?php return array(); ?>', LOCK_EX);
// Cannot use PrestaShopException in this context
die('Your file '.$filename.' is corrupted. Please remove this file, a new one will be regenerated automatically');
  }
*/
 }

 

Ça devrait stopper la régénération de cache_index.php. Mais bon c'est un gros hack et ça ne résout rien.

Link to comment
Share on other sites

  • 4 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...