[Résolu][PHP] Problème sur une fonction avec un serveur UNIX
16 messages • Page 1 sur 2 • 1, 2
Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics
[Résolu][PHP] Problème sur une fonction avec un serveur UNIX
Bonjour,
J'ai un souci avec une fonction PHP.
J'utilise cette fonction dans plusieurs site et jusque là, aucun souci. Mon script PHP fonctionne aussi bien en local (avec Easy-PHP 1.7) que sur un hébergement avec serveur Linux ou IIS.
Je suis en train de développer un site qui sera sur un hébergement avec serveur Unix.
J'ai des messages d'erreur pour une bête fonction ereg() :
J'ai configuré Dreamweaver pour qu'il me fasse des sauts de ligne Unix dans mes scripts.
Si quelqu'un a eu des soucis similaires, ça serait bien de m'orienter.
Merci d'avance.
J'ai un souci avec une fonction PHP.
J'utilise cette fonction dans plusieurs site et jusque là, aucun souci. Mon script PHP fonctionne aussi bien en local (avec Easy-PHP 1.7) que sur un hébergement avec serveur Linux ou IIS.
Je suis en train de développer un site qui sera sur un hébergement avec serveur Unix.
J'ai des messages d'erreur pour une bête fonction ereg() :
alors que tout fonctionne bien en local...PHP Warning: ereg(): Invalid preceding regular expression in /hermes/data11/b648/toopy/sigmacom/library.inc.php on line 23
J'ai configuré Dreamweaver pour qu'il me fasse des sauts de ligne Unix dans mes scripts.
Si quelqu'un a eu des soucis similaires, ça serait bien de m'orienter.
Merci d'avance.
Dernière édition par Gaëtan R. le Lun Juil 05, 2004 23:46, édité 2 fois.
Oui, c'est exactement la même version en local qu'en distant, à savoir la 4.3.3.
C'est bizarre que ça puisse venir de la fonction puisque cela fonctionne très bien sur d'autres serveurs.
Voila la ligne incriminée :
C'est bizarre que ça puisse venir de la fonction puisque cela fonctionne très bien sur d'autres serveurs.
Voila la ligne incriminée :
while(ereg("{([^ ]{1,})}",$ligne,$tag)){
Personne qui pourrait m'aider ?
L'adresse du site en cours de développement : ht-tp://www.toopy.com/sigmacom
Les balise genre {references} ou {menu} sont remplacées par le contenu approprié de la base de données MySql.
L'adresse du site en cours de développement : ht-tp://www.toopy.com/sigmacom
Les balise genre {references} ou {menu} sont remplacées par le contenu approprié de la base de données MySql.
(je surveille les réponse de ce sujet donc j'oublierai pas de répondre ce coup ci
)
Que cherches tu à faire avec cette expression régulière au passage ?
Normalement, dans le 2° paramètre de la fonction, si tu veux récupérer le contenu de la parenthèse de capture, il faut utiliser \\n ou $n (n étant le numéro du masque de capture, n commençant à 1).
J'aurais déjà vu ça :
(si $1 marche pas en local, essaie "\\1" )
Que cherches tu à faire avec cette expression régulière au passage ?
Normalement, dans le 2° paramètre de la fonction, si tu veux récupérer le contenu de la parenthèse de capture, il faut utiliser \\n ou $n (n étant le numéro du masque de capture, n commençant à 1).
J'aurais déjà vu ça :
- Code: Tout sélectionner
while(ereg("{([^ ]+)}","$1",$tag)){
(si $1 marche pas en local, essaie "\\1" )
Je pense avoir saisi d'où pouvait venir mon problème, d'après http://didou.keliglia.com/php/phpman/in ... =ref.regex à propos des expressions régulières de type POSIX.
Donc, j'ai changé mon code en utilisant une expression régulière compatible Perl : preg_match().
Pour rappel, avant :
Une fois modifiée :
Seulement, ça ne fonctionne pas ; il y a un blocage dans la fonction.
Ça ne fonctionne pas, je pense, à cause des délimiteurs. Je recherche dans ma page tout ce qui est de la forme :
Si quelqu'un pouvait me donner un coup de main, ça serait vraiment bien parce que là je m'en sort vraiment pas.
Ces expressions rationnelles ne sont pas compatibles avec les données binaires. Les expressions PCRE le sont.
Donc, j'ai changé mon code en utilisant une expression régulière compatible Perl : preg_match().
Pour rappel, avant :
- Code: Tout sélectionner
ereg("{([^ ]{1,})}",$ligne,$tag)
Une fois modifiée :
- Code: Tout sélectionner
preg_match(("{([^ ]{1,})}",$ligne,$tag)
Seulement, ça ne fonctionne pas ; il y a un blocage dans la fonction.
Ça ne fonctionne pas, je pense, à cause des délimiteurs. Je recherche dans ma page tout ce qui est de la forme :
- Code: Tout sélectionner
{truc}
Si quelqu'un pouvait me donner un coup de main, ça serait vraiment bien parce que là je m'en sort vraiment pas.
On avance, on avance, merci Fred
Mais (eh oui, il y a un mais) c'est pas encore résolu
, ma fonction passe,ça me trouve ma valeur entre crochet mais ça la remplace par rien du tout.
Message d'erreur suivant dans mes logs...
Donc y'a forcément un truc qui passe pas quelque part... Allez, hop, j'y retourne
Mais (eh oui, il y a un mais) c'est pas encore résolu
Message d'erreur suivant dans mes logs...
- Code: Tout sélectionner
PHP Notice: Undefined offset: 1 in /hermes/data11/b648/toopy/test/library.php on line 9
PHP Notice: Undefined offset: 1 in /hermes/data11/b648/toopy/test/library.php on line 6
PHP Notice: Undefined offset: 1 in /hermes/data11/b648/toopy/test/library.php on line 9
PHP Notice: Undefined offset: 1 in /hermes/data11/b648/toopy/test/library.php on line 7
PHP Notice: Undefined offset: 1 in /hermes/data11/b648/toopy/test/library.php on line 6
Donc y'a forcément un truc qui passe pas quelque part... Allez, hop, j'y retourne
-

George Abitbol - WRInaute accro

- Messages: 1923
- Inscription: Ven Juin 06, 2003 7:57
Je ne sais pas quel traitement tu essayes de faire, mais si c'est un remplacement, utilise plutôt preg_replace()
Fred
Fred
Le remplacement se fait ensuite avec un str_replace() ; il y a un test si il y a quelque chose à mettre à remplacer sinon ça met rien.
Je ne perds pas espoir, est-ce que d'autres personnes travaillant sur serveur Unix et développant sur une plate forme windows auraient rencontrés des problèmes de ce type
Je travaille avec des sauts de ligne Unix (LF) configurés avec Dreamweaver et je fais mes upload en binaire. Si il y a d'autres choses à respecter...
Je ne perds pas espoir, est-ce que d'autres personnes travaillant sur serveur Unix et développant sur une plate forme windows auraient rencontrés des problèmes de ce type
Je travaille avec des sauts de ligne Unix (LF) configurés avec Dreamweaver et je fais mes upload en binaire. Si il y a d'autres choses à respecter...
-

George Abitbol - WRInaute accro

- Messages: 1923
- Inscription: Ven Juin 06, 2003 7:57
Gaëtan R. a écrit:Le remplacement se fait ensuite avec un str_replace() ; il y a un test si il y a quelque chose à mettre à remplacer sinon ça met rien.
Un peu lourd comme traitement, peut-être. Tu pourrais utiliser preg_replace() en combinaison avec l'option E (voir ici), qui interprète la chaîne de remplacement comme du code PHP. Tu peux donc y mettre une fonction perso qui ferait le test et renverrait selon les cas l'élément par lequel remplacer ton {...}
Exemple simplifié :
- Code: Tout sélectionner
<?php
function blabla($c) {
if ($c != '123') {
return 'chips';
}
else {
return '';
}
}
$chaine = 'ma chaine avec des {trucs} et des {bidules} partout ! {123}';
echo preg_replace('/\{([^}]+)\}/e', 'blabla($1)', $chaine);
?>
Bon, l'exemple est très con et donnera ma chaine avec des chips et des chips partout ! mais c'était juste pour te montrer le principe.
Pour le reste, je ne peux pas t'aider, je ne suis pas sous Windows.
Fred
En fait j'vais te filer une astuce pour améliorer la lisiblité de l'expression régulière :
Avec les # je trouve que ça passe mieux.
PS : sinon j'aurais donné la même solution, un preg_match + str_replace non C pas top
là tu fais tout en un coup.
- Code: Tout sélectionner
echo preg_replace("#\{([^}]+)\}#e"', "blabla('$1')", $chaine);
Avec les # je trouve que ça passe mieux.
PS : sinon j'aurais donné la même solution, un preg_match + str_replace non C pas top
Ta réponse est pas trop mal mais elle n'est pas sécurisé, et il suffit d'une seule double quote pour faire planter l'intégralité du système. Il faut convertir toutes les quotes (qu'elles soient doubles ou simples) avant de faire un traitement (ou effectuer un addslashes() mais là il y en aura à toutes les sauces et sur toutes les lignes).
Les regex c'est bien mais à consommer avec modération.
Ps : essaye de mettre dans ton texte une variable genre "$var" dans ton code php "$var='une valeur'", lance ta regex, tu risques fort d'être surpris
Les regex c'est bien mais à consommer avec modération.
Ps : essaye de mettre dans ton texte une variable genre "$var" dans ton code php "$var='une valeur'", lance ta regex, tu risques fort d'être surpris
16 messages • Page 1 sur 2 • 1, 2
Formation recommandée sur ce thème :
Formation Google Analytics : en 2 jours, apprenez comment exploiter l'essentiel des possibilités de l'outil de mesure d'audience de Google. Formation animée par Julien Coquet, expert certifié officiellement par Google Analytics.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
- Aperçu des différents types de redirection
- Ecrire un sitemap pour Google News
- X-Robots-Tag : directive pour bloquer les robots dans l'entête HTTP : explications
- Gérer l'entête HTTP en PHP
- Configurer les options de passage de Googlebot sur son site
- Référencement d'un forum phpBB
- Référencement : gestion des redirections par Yahoo
- Comment créer une page web en PHP
Consultez la description détaillée des produits ou services de Google suivants : Google Related Links, Google Web Accelerator
- Analyser la classe C de l'adresse IP
Cet outil vous permet de vérifier si plusieurs sites sont hébergés sur la même classe C (adresse IP du serveur).
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 3 invités





le forum