8795 sujets

Développement web côté serveur, CMS

Bien le bonjour.
Je reviens vers vous car j'ai un petit souci avec une comparaison puis modification de string à l'intérieur d'une boucle foreach.

En effet, j'ai une string A qui doit être comparé à la ligne courante afin de savoir si elles sont identique et le cas échéant modifier la ligne courante pour lui ajouter un morceau en plus.

Le hic c'est que le script coupe après 30 sec d'activité, ce qui pour moi est normal car la comparaison ne devrait pas être aussi longue.

Voici mon code:

$user_config_regex = array('local_root' => "{local_root=/home/users_home}", 'rights' => 'write_enable=YES');

foreach($user_config_file as $current_line){
				if(preg_match($user_config_regex['local_root'],$current_line)){
					header("location:../pages/okconfig.php");
					exit;
				}else{
					header("location:../pages/noconfig.php");
					exit;
				}
			}


PS: Les accolades ici sont là pour délimiter le motif à trouver par preg_match.

J'ai essayer avec un preg_match_all, avec un strpos ou simplement avec $var1 === $var2 mais j'ai toujours le même souci, je ne comprend pas pourquoi le preg_match prend autant de temps alors que je lui demande simplement de comparait le motif de la ligne courante avec le motif patron.

Sachant que le fichier parsé ne fait que 6 lignes au maximum, ce comportement me parait un peu étrange:calim2:.

J'ai surement du encore oublier quelque chose, mais je ne vois pas trop quoi.:mouarf:
Modifié par DR I (02 Aug 2011 - 12:25)
Ouep, je me suis aperçue de ça juste avant de recevoir ton post Smiley cligne

En effet je suis dans une boucle foreach, dans laquelle je test si la ligne courante est correspondante, malheureusement, si elle ne l'est pas, le if vas etre faux et passer la main au else, qui lui, se charge de rediriger l'utilisateur.

Hors, comme le if est faux des le premier test, on sort du script directement, sans parcourir les lignes suivantes.

Donc j'ai testé avec le script suivant:

foreach($user_config_file as $current_line){
	
	if(preg_replace($user_config_regex['local_root'],"$user_config_regex['local_root'].'/'.$login",$current_line){
				
		header("location:../pages/okconfig.php");
		exit;
	}
}

header("location:../pages/noconfig.php");
exit;


et ça fonctionne, même si c'est pas très jolie et que des situations spécials intermédiaires peuvent s’immiscer, le principe est là.