ereg Vs preg_match

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : ereg Vs preg_match

Re: ereg Vs preg_match

par moogli » 06 sept. 2012, 15:00

la le truc c'est clairement de trouver le bon masque, et il y a quelques différences entre les expressions régulières POSIX (erg) et les PRCE (preg_*).

sinon de rien ;)


peux tu cliquer sur le bouton résolu en haut de la page mici :mrgreen:


@+

Re: ereg Vs preg_match

par macplus » 06 sept. 2012, 09:21

oui, ca fonctionne à nouveau.
Je vais passer à la suite, mais je reviendrai sur le sujet car j'aimerai quand même comprendre pourquoi le preg_match ne fonctionne pas (ne renvoie rien en fait).

Merci à vous 2 pour votre patience :D

Re: ereg Vs preg_match

par moogli » 05 sept. 2012, 20:15

l'extension
<?php
$fichier_name = 'monfichier.php';
$extension_fichier = strrchr($fichier_name, '.');
?>
donne
string '.php' (length=4)
après tu peux virer le point si besoin :) (avec substr)

quand aux reste on peux t'aider, mais faut le script.

ce genre de message d'erreur est du à une chaine de caractère qui n'est pas entouré de ' ou de "

genre $_GET[truc] au lieu de $_GET['lieu'] :mrgreen:


@+

Re: ereg Vs preg_match

par macplus » 05 sept. 2012, 16:14

tout d'abord merci à vous 2 de m'épauler si gentillement !

pour essayer de faire les choses dans l'ordre:
Ce script est un script édité il y a plusieurs années (pas par moi)
Je n'en maitrise malheureusement clairement pas tout le code.

je viens d'activer le rapport d'erreur qui me donne ceci:
Notice: Use of undefined constant upload - assumed 'upload' in /patatipatata/upload/index.php on line 43

Notice: Undefined variable: a in /patatipatata/upload/index.php on line 43
alors qu'avec ereg tout fonctionnait sans aucun problème.
Je pense effectivement vu l'ensemble de la fonction que le script a cet endroit vérifie que l'extension est valide.
$elts(j'imagine) ressort l'extension, ça me semble assez logique.
Je vais essayer ta méthode et j'espere que ca va marcher car j'ai mon équipe qui me tombe dessus là :?

Merci à toi

Re: ereg Vs preg_match

par moogli » 05 sept. 2012, 15:31

sans debuggage on ne peux pas t'aider.

il faut savoir :
- ce que tu passe comme argument à la fonction
- ce que tu souhaite obtenir
- que contient $elts avec le preg_match ?
- est ce que niveau de rapport d'erreur est bien à E_ALL ? (error_reporting(E_ALL) en première ligne)


si c'est "l'extension" du fichier tu peux l'avoir plus simplement avecstrrchr et substr

pour finir un peu de lecture explique moi le debuggage :)

@+

Re: ereg Vs preg_match

par macplus » 05 sept. 2012, 15:21

Bonjour,
J'ai fait la modif, merci a toi.
malheureusement, ça ne fonctionne pas mieux.
Pas de message d'erreur, mais pas d'upload non plus.

Quelle différence entre ereg et preg_match pourrait occasioner ce disfonctionnement?

Merci

Re: ereg Vs preg_match

par Ryle » 05 sept. 2012, 15:11

Et comme ceci ?
preg_match("/\.([^.]*)$/", $fichier_name, $elts);
$ en dehors de la parenthèses puisque non capturable et suppression du \ puisque entre crochets on indique directement les caractères
Nota : le i(gnoreCase) sert à rien puisque l'expression ne contient ni minuscules, ni majuscules

Re: ereg Vs preg_match

par macplus » 05 sept. 2012, 14:31

J'ai donc fait ceci:
function FileChecking($fichier_name, $fichier_size){

	global $strErrorExtension;
	global $strErrorFilesize;
	global $taille_max;
	global $fileExtensionsAllowed;

   preg_match("/\.([^\.]*$)/i", $fichier_name, $elts);
   $extension_fichier=$elts[1];

   if(!in_array($extension_fichier, $fileExtensionsAllowed)){
	
	   foreach($fileExtensionsAllowed as $ext){
	       $str_ext .= ".$ext ";
      }

	   echo $strErrorExtension." ".$str_ext."<br><br>";
      logError("Bad File extension ($extension_fichier) ");
      makeReturn();
      signMTA();

   }
   else {
   echo "erreur 01";
   }

   if($fichier_size > $taille_max){
	   echo $strErrorFilesize."<br><br>";
	   logError("File Size ($fichier_size) ");
      makeReturn();
      signMTA();

   }
   else {
   echo "erreur 02";
   }
}
les 2 echo s'affichent.
Je ne comprends pas pourquoi avec ereg ça marchait sans aucun souci et la avec preg_match plus du tout #-o

Re: ereg Vs preg_match

par moogli » 05 sept. 2012, 14:06

vire les exit et toutes les redirections.

Ajoute des else aux if afin de suivre le chemin emprunté.

tu peux aussi utiliser un debugguer


@+

Re: ereg Vs preg_match

par macplus » 05 sept. 2012, 10:32

bonjour Moogli!
Alors j'ai bien essayé de mettre les délimiteurs, ce qui fait que je n'ai plus le message d'erreur correspondant, mais mon script semble s'arrêter sans message.
Il s'agit d'un script d'upload.
Ca fait longtemps que je ne m'y suis pas collé et j'ai un peu de mal.
voici la fonction complète:
function FileChecking($fichier_name, $fichier_size){

	global $strErrorExtension;
	global $strErrorFilesize;
	global $taille_max;
	global $fileExtensionsAllowed;

   [color=#FF0000]preg_match("/\.([^\.]*$)/i", $fichier_name, $elts);
   $extension_fichier=$elts[1];[/color]   if(!in_array($extension_fichier, $fileExtensionsAllowed)){
	
	   foreach($fileExtensionsAllowed as $ext){
	       $str_ext .= ".$ext ";
      }

	   echo $strErrorExtension." ".$str_ext."<br><br>";
      logError("Bad File extension ($extension_fichier) ");
      makeReturn();
      signMTA();
      exit;
   }

   if($fichier_size > $taille_max){
	   echo $strErrorFilesize."<br><br>";
	   logError("File Size ($fichier_size) ");
      makeReturn();
      signMTA();
      exit;
   }
}

Re: ereg Vs preg_match

par moogli » 05 sept. 2012, 09:30

salut,


la doc de la fonction ereg t'indique ceci http://fr2.php.net/manual/fr/reference. ... .posix.php


@+

ereg Vs preg_match

par macplus » 05 sept. 2012, 09:07

J'avais mis au point il y a quelques années un script d'upload et pour vérifier mon nom de fichier j'utilisais ceci:
ereg("\.([^\.]*$)", $fichier_name, $elts);
$extension_fichier=$elts[1];
Bon du coup maintenant avec les maj de php, la fonction est obsolète, mais je n'arrive pas à faire l'équivalent avec preg_match.

Si vous pouviez m'aider un ch'tit coup, ce serait gentil