
Imp
Actif-
Compteur de contenus
24 -
Inscrit(e) le
-
Dernière visite
Réputation sur la communauté
0 Neutre-
Tout d'abord je te remercie Sarc, avec beaucoup de retard, pour ta réponse Alors j'ai testé les trois méthodes avec un fichier contenant 10 000 fois la ligne "c'est <i>toto</i> le héros et <i>tata</i> la belle" (test en local sur un ordi peu puissant avec PHP 5) méthode 1 #!/usr/bin/php <? $texte = file_get_contents("/home/moi/test.txt"); if(preg_match_all("|<i>([^<]*)</i>|",$texte,$out,PREG_SET_ORDER )) { if(is_array($out)) { foreach($out as $tab_ch) { $tag=$tab_ch[0]; $mot=$tab_ch[1]; $mot_remplace=str_replace(array("o","a"),"i",$mot); $tag_remplace=str_replace($mot,$mot_remplace,$tag); $texte=str_replace($tag,$tag_remplace,$texte); } } } ?> time : real 1m50.537s user 1m28.810s sys 0m11.309s méthode 2 #!/usr/bin/php <? $texte = file_get_contents("/home/moi/test.txt"); $texte = preg_replace("#(<i>.+?</i>)#e", "(str_replace(array('o','a'),'i', '$1'))",$texte); ?> time : real 0m0.688s user 0m0.644s sys 0m0.028s méthode 3 #!/usr/bin/php <? $texte = file_get_contents("/home/moi/test.txt"); function remplace($texte) { return str_replace(array('o','a'),'i', $texte[1]); } $texte = preg_replace_callback("#(<i>.+?</i>)#", remplace, $texte); ?> time : real 0m0.245s user 0m0.220s sys 0m0.024s Donc la différence est assez nette : avec la première méthode, j'avais le temps d'aller boire un café, la seconde avec preg_replace et le modificateur e est deux à trois fois plus lente que la troisième avec preg_replace_callback. Concernant le deuxième exemple, avec preg_replace, j'obtiens un résultat un peu plus rapide avec "preg_replace('@[ao]@', 'i', ..." au lien de "str_replace(array('o','a'), 'i'" Donc au final la dernière avec preg_replace_callback est bien le mieux, merci sarc !
-
Bon finalement je suis arrivé à avoir le bon résultat (et sans passer par un fichier) : <?php $c = curl_init($url); curl_setopt($c, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($c, CURLOPT_HEADER, 1); curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); $headers = curl_exec($c); curl_close($c); preg_match('/.*^Set-Cookie: ([^;]+)/sm',$headers,$cookie); $c = curl_init($url); curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); curl_setopt($c, CURLOPT_COOKIE, $cookie[1]); $page = curl_exec($c); curl_close($c); ?> Si je reprends le shell_exec avec une syntaxe condensée et en utilisant un tube au lieu d'un fichier, ça peut se résumer à ça : $page=shell_exec("curl -sLD - $url | curl -sb - $url"); Vu qu'il faut écrire dix fois plus de code en "pur" php, je crois que je vais en rester à shell_exec. Le but est de me fabriquer mes propres flux rss.
-
Le premier sert à créer le fichier cookies.txt dont la deuxième commande à besoin pour que je récupère le bon contenu. Mais c'est vrai que je pourrais faire la même chose en une fois : $page=shell_exec('curl -D '.$cookies.' -L "'.$url.'"; curl -s -b '.$cookies.' -L "'.$url.'"'); Le problème ? Bah je trouve ça compliqué. Déjà pour trouver les options vraiment équivalentes. L'option -b ne semble pas correspondre exactement à CURLOPT_COOKIEFILE , car avec le code suivant : <?php $url="http://www.canalplus.fr/c-humour/pid2053-c-encore-de-rire.html?catId=682"; $cookies="/tmp/cookies.txt"; $a = curl_init ($url); $header_file = fopen ($cookies, "w"); curl_setopt ($a, CURLOPT_WRITEHEADER, $header_file); curl_setopt($a, CURLOPT_FOLLOWLOCATION, 1); curl_exec ($a); curl_close($a); $b = curl_init ($url); curl_setopt($b, CURLOPT_COOKIEFILE, $cookies); curl_setopt($b, CURLOPT_FOLLOWLOCATION, 1); $page = curl_exec($b); curl_close($b); ?> le fichier cookies.txt (qui en fait contient les entêtes HTTP) est correct (identique qu'avec -D), mais apparemment ce n'est pas bien exploité comme avec -b car je n'obtiens pas le bon résultat (normalement le contenu de $page doit-être la page de la vidéo de stéphane Guillon, et quand ce n'est pas bon, c'est Thomas Ngijol) Je vais plutôt regarder du côté de cookie-jar...
-
Bonjour J'ai besoin d'utiliser curl ou wget pour récupérer le contenu d'un page web dans une variable (à cause d'une histoire de cookie) Pour l'instant j'utilise ceci (qui fonctionne bien) : <?php $url="http://www.canalplus.fr/c-humour/pid2053-c-encore-de-rire.html?catId=682"; $cookies="/tmp/cookies.txt"; shell_exec('curl -D '.$cookies.' -L "'.$url.'"'); $page=shell_exec('curl -s -b '.$cookies.' -L "'.$url.'"'); ?> Mais j'ai du mal à faire l'équivalent en code purement PHP (qui m'a l'air bien plus compliqué !!), sans passer par shell. http://fr.php.net/curl Est-ce que quelqu'un pourrait m'aider à le faire ? Sinon est-ce qu'il y a une réelle différence en terme de rapidité en passant par shell_exec ou ça n'a guère d'importance ? Merci d'avance
-
FCKeditor : remplacer "<font" par "<span style"
Imp a répondu à Imp - Forum : Systèmes de publication
Salut Je remonte ce vieux sujet car que j'ai mis à jour FCKeditor à la version 2.5 (sortie il y a environ 2 semaines seulement) et maintenant il y possibilité de ne plus avoir de balises <font> (c'est d'ailleurs paramétré comme cela par défaut, mais ça peut se changer). Donc c'est parfait ! J'en profite pour remercier Dudu de sa réponse. Je ne sais pas si je ne l'avais pas vu à l'époque ou si j'avais oublié de répondre, désolé ! -
Merci pour l'explication Dan. Sinon j'ai trouvé une solution (un peu par hasard...) pour mon premier exemple. Ça va bien en utilisant le modificateur "e" Donc ceci fonctionne : $titre="hello {5}"; $d[5]="world"; echo preg_replace('/{([0-9]+)}/e', '$d[\\1]', $titre); De même en remplaçant le \\1 par $1, ça marche aussi. En revanche si j'enlève les simple quotes ou que je mets à la place de double quotes, ça ne va plus. Ça me laisse un peu perplexe. Infos sur le modificateur "e" :
-
voici un autre exemple, sans preg_replace Avec le code suivant ; $d[2]="salut"; $n="2"; echo $d[$n]; ça fonctionne parfaitement. J'obtiens bien "salut" en revanche celui-ci ne fonctionne pas du tout : $d[2]="salut"; function essai($n) { return $d[$n]; } echo essai(2); rien du tout... Bizarre ou logique ?
-
Bonjour ! Soit les variables suivantes : $titre="hello {5}"; $d[5]="world"; je voudrais remplacer le "{n}" (ici n=5) par "$d[n]" en utilisant preg_replace ou ereg_replace... mais sans succès Avec echo preg_replace("/{([0-9]+)}/", $d[$1], $titre); ou echo preg_replace("/{([0-9]+)}/", $d[\\1], $titre); j'aimerais bien obtenir mon "hello world" :-( ! Est-ce qu'il y aurait un truc ?
-
Merci beaucoup klerthis, c'est ce qu'il me fallait
-
Resalut, Est-ce au moins possible ? Par exemple : $texte = "c'est <i>toto</i> le héros" Est-ce qu'il y a un moyen de remplacer tous les "o" par des "i", mais seulement entre <i> et </i> de sorte que le résultat soit "c'est <i>titi</i> le héros" Y aurait-il un moyen ? Merci d'avance
-
Bonjour, Je voudrais remplacer toutes les virgules par des virgules suivies d'un saut de ligne (str_replace(",", ",\n", $texte);) Mais ceci non dans tout $texte, mais seulement pour ce qui se trouve entre les balises <pre> et </pre> de ce $texte Et là je galère... Merci à qui me donnera un peu d'aide
-
merci beaucoup Leonick, j'ai pigé le principe et ça marche impecc !
-
Bonjour, Je souhaite pouvoir répurérer un lien dans le code source des pages Dailymotion, lien qui varie donc selon les page. Voici un exemple, c'est le premier lien ici : so.addVariable("url", "http%3A%2F%2Fwww.dailymotion.com%2Fget%2F802%2F320x240%2Fflv%2F675988.flv%3Fkey%3Dff24801b6edf5ced2ebb87e58e22815e128b3e9"); so.addVariable("prevURL", "http://www.dailymotion.com/search/mandriva/video/xhz24_linux-kde-35-demonstration"); Le lien qui m'intéresse commence toujours pareil (http%3A%2F%2Fwww.dailymotion.com%2Fget%2F), j'arrive donc facilement à la cibler le début avec Eregi, mais là où ça ne va plus, c'est pour délimiter la fin ! Impossible de le faire arrêter au guillement ou à la parenthèse. Et si je mets cela $lien = eregi("http%3A%2F%2Fwww.dailymotion.com%2Fget%2F(.+)so.addVariable",$page,$regs); ça ne s'arrête même pas au "so.addVariable" mais ça ajoute toute la ligne ! Merci d'avance.
-
Bonjour, FCKeditor n'est pas un CMS mais comme il est notamment utilisé par des CMS et que je ne savais pas trop où poster, allons y : Y a t'il un moyen, un fichier à modifier, pour qu'au lieu d'utiser la balise <font> ça insère directement un <span style"">. Je sais qu'on peut récupérer ça par PHP, mais je voudrais le faire directement. J'ai un peu fouillé les fichiers mais en vain ! Merci d'avance.
-
Merci.. j'ai un peu honte car je ne savais même pas qu'on pouvait ainsi mettre plusieurs paramètres de tri !