Recherche et remplacement : timeout
Bonjour à tous.
Je vous explique la situation, je suis entrain de commencer à me faire un site perso et je voulais mettre quelques tutos mais je rnecontre un problème.
Voilà dans ma base de données j ai le tuto donc les explications sont en html mais quand je veuxmettre un bout de code je délimite par donc ca il n'y a pas de problème il me fait un encadré avec mon code mais j'ai un problème parce que je voudrais tester les mots que j'ai écrit pour ssavir lesquels sont des mots clés. donc je vais vous mettre mon code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
<?PHP
include("connexionBDD.txt");
$sql = "SELECT * FROM tutoriel WHERE langage='csharp' AND numTuto=$num";
$reponse = mysql_query($sql) OR DIE ("ERREUR : ".mysql_error()." <br /> sur la requete : <br /> $sql");
while ( $donnees = mysql_fetch_array($reponse))
{
?>
<fieldset>
<legend> <?PHP echo strtoupper($donnees['chapitre']); ?> </legend>
<?PHP
$texte = $donnees['contenu'];
$chaine = $texte;
// je regarde ou est le mot code
$pos = strpos($chaine, "[ code ]");
if ($TabFich = file("CSharp.txt"))
{
//je dis tant qu'il ya un [ code ] je fais :
while($pos != false)
{
// je récupère l'index du début du code
$indexD = strpos($texte,"[ code ]");
// je récupère l'index de fin du code
$indexF = strpos($texte,"[/ code ]") + 7;
// je récupère une sous chaine ne contenant que le code
$chaine = substr($texte, $indexD, ($indexF-$indexD));
$chaine = str_replace("[ code ]", "<table border=\"0\" width=\"80%\" align=\"center\" ><tr bgcolor=\"#FFFFFF\"> <td><font size=\"2\" face=\"Verdana\" color=\"#007F0E\"><b> Code C#: </b></font> </td> </tr><tr bgcolor=\"#D1FFC9\"><td><font size=\"2\" face=\"Verdana\" color=\"#000000\">",$chaine);
$chaine = str_replace("[/ code ]", "</td></tr></table>",$chaine);
// là j essaye de récupérer le mot
$j=0;
while ($j < strlen($chaine))
{
$mot="";
// tant que j < mon code && que le caractére à l indice j est un espace je passe au suivant
while($j < strlen($chaine) && substr($chaine, $j, 1) == " ")
{
$j++;
}
// tant qu'il y a des caracteres dans ma chaine je le mets dans mot
while(substr($chaine, $j, 1) != " ")
{
$mot.= substr($chaine, $j, 1);
$j++;
}
// je ressors avec un mot
for($i = 0; $i < count($TabFich); $i++)
{
// je regarde si le mot que je récupère est égal au mot de mon fichier
if ( $mot == Trim($TabFich[$i]))
{
$m = $j;
// la je remplace le mot dans la chaine par ts des vides ( il n'y a pas de fonctions remove?)
for($k = 0; $k < strlen($mot); $k++)
{
$chaine = substr_replace($chaine,"", $m);
$m++;
}
// je mets le mot avec la colorisation syntaxique adéquate
$chaine = substr_replace($chaine,"<font size=\"2\" face=\"Verdana\" color=\"#005DFF\">".Trim($TabFich[$i])."</font>", $j);
}
}
$j++;
}
// quand j ai fini je remplace la partie contenant mon code par mes modifications
$partieTexte = substr($texte, $indexD, $indexF-$indexD);
$texte = str_replace($partieTexte, $chaine, $texte);
// je passe au code suivant
$pos = strpos($texte, "[ code ]");
}
}
echo $texte;
?>
</fieldset>
<?PHP
}
mysql_close();
?> |
Mais comme vous devez vous en douter (vu que je suis là) cela ne fonctionne pas... Il me met :
Citation:
Fatal error: Maximum execution time of 30 seconds exceeded in C:\wamp\www\version5\tutoCSharp.php on line 165
La ligne 165 c'est : (je l ai mise en gras dans le code)
Citation:
while(substr($chaine, $j, 1) != " ")
Portant en essaynt en mettant un "die" à la sortie de mon tant que il m'affiche bien la première valeur donc j'imagine que mon code est trop long à l'exécution ??
Si quelqu'un a une idée je suis preneur.
Bonne journée à tous et merci d'avance