Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/01/2007, 10h23   #1
Membre éclairé
 
Avatar de johweb
 
Inscription : décembre 2003
Messages : 332
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : décembre 2003
Messages : 332
Points : 316
Points : 316
Par défaut Remplacement rapide dans un fichier texte (RTF)

Bonjour à tous,

J'ai un modèle de fichier texte (en rtf pour conserver la mise en page demandée par le client) dans lequel je dois remplacer des balises par des valeurs qui me sont propres.
Pour mon cas, j'ouvre un fichier vierge, je parcours mon modèle avec fgets et j'écris dans mon fichier vierge avec fwrite (en remplaçant mes balises).

Ce code fonctionne très bien et semble assez rapide.

Mais un nouveau modèle m'a été donné avec une image en entête et pied de page. Le fichier source fait 8Mo... Le temps de recréer mon nouveau document semble interminable (une trentaine de secondes... soit beaucoup trop pour le client final...)
Quelqu'un connaitrait-il une autre méthode à appliquer pour un gain de temps sur le traitement ?

Merci !!!
johweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2007, 11h25   #2
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
Je suppose déjà que tu ne peux pas utiliser un autre format que le RTF, n'est ce pas ?

Si il s'agit d'un problème d'un temps d'attente trop long pour le visiteur, tu pourrais peut être t'orienter vers une interface avec une barre de défilement qui indique où en est le déroulement du l'opération.
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2007, 11h32   #3
Invité de passage
 
Inscription : novembre 2006
Messages : 20
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : novembre 2006
Messages : 20
Points : 3
Points : 3
Si l'image est assez simple transforme la en gif avec le moins de couleurs possible pour la taille sans que cela soit trop flagrant .

En espérant que ça ne soit pas une photo :]
Prenthès est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2007, 11h45   #4
Membre éclairé
 
Avatar de johweb
 
Inscription : décembre 2003
Messages : 332
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : décembre 2003
Messages : 332
Points : 316
Points : 316
Il s'agit d'une "espèce" de fusion word. Le client me fournit ses modèles et veut conserver le format word. Le rtf me semblait plus indiqué pour travailler facilement le contenu...
Pour les images, une collègue a tenté une optimisation, mais ce n'est guère flagrant...
La barre de progression est une bonne idée en soit, mais malheureusement pas applicable chez ce client... (pourtant cela m'aurait bien arrangé... !! )
johweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2007, 11h50   #5
Invité de passage
 
Inscription : novembre 2006
Messages : 20
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : novembre 2006
Messages : 20
Points : 3
Points : 3
Jm'en vais te l'optimiser moi, ton image !
je t'envoie un mp :]
Prenthès est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2007, 11h58   #6
Membre éclairé
 
Avatar de johweb
 
Inscription : décembre 2003
Messages : 332
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : décembre 2003
Messages : 332
Points : 316
Points : 316
Citation:
Envoyé par Prenthès
Jm'en vais te l'optimiser moi, ton image !
je t'envoie un mp :]
Comme répondu sur le mp, c'est très gentil de ta part, mais je laisse le soin de le faire à ma collègue graphiste.
Même si ta solution aurait pu nous dépanner sur le moment, mon client devrait m'envoyer PLEIN de modèles (c'est lié à son fonctionnement) donc je préfererai trouver une optimisation de mon traitement php... ^^
johweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2007, 12h03   #7
Invité de passage
 
Inscription : novembre 2006
Messages : 20
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : novembre 2006
Messages : 20
Points : 3
Points : 3
Et si on met un lien hypertexte vers l'image stoquée sur un serveur à part qui serait plus rapide, ça ne marche pas ^o) ? Je ne sais pas du tout comment ça fonctionne dans le rtf les fichiers incorporés..
Prenthès est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2007, 12h35   #8
Membre éclairé
 
Avatar de johweb
 
Inscription : décembre 2003
Messages : 332
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : décembre 2003
Messages : 332
Points : 316
Points : 316
Mouais... J'ai pas envie non plus de me taper tous les modèles du client à la paluche... J'aimerai que le client soit indépendant un fois mon module livré...

Bon, oublions les images...

Revenons à la question première...
J'ouvre mon modèle et un document vierge. Je lit la ligne dans mon modèle, je remplace la valeur éventuelle, et je récris ma ligne dans mon document vierge...

N'y aurait-il pas une méthode de remplacement global avec un traitement plus rapide ?

(désolé pour le rejet des solutions sur l'image : je dois trouver une solution plus générale, que l'application puisse se débrouiller avec ce que lui founit le client sans passer la case hotline...)
johweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2007, 14h12   #9
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
Citation:
Envoyé par johweb
La barre de progression est une bonne idée en soit, mais malheureusement pas applicable chez ce client... (pourtant cela m'aurait bien arrangé... !! )
pourquoi ?
il y a juste besoin de JavaScript normalement
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2007, 14h26   #10
Membre éclairé
 
Avatar de johweb
 
Inscription : décembre 2003
Messages : 332
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : décembre 2003
Messages : 332
Points : 316
Points : 316
Ce n'est pas un problème technique pour moi... C'est juste que le client ne souhaite pas attendre 35 secondes pour le remplacement de 4 valeurs dans un fichier texte...... ^^
johweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2007, 16h13   #11
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
Citation:
Envoyé par johweb
Ce n'est pas un problème technique pour moi... C'est juste que le client ne souhaite pas attendre 35 secondes pour le remplacement de 4 valeurs dans un fichier texte...... ^^
ok donc comme le dit la règle "Il y a toujours une solution" voici une des dernières solutions : le client participe à l'achat d'un serveur 4 processeurs qui calculera son fichier dans la seconde.
Je caricature un peu (un "deux processeurs" suffit peut-être ) mais si le client ne mets pas les moyens il ne peut pas tout avoir
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2007, 20h52   #12
Membre habitué
 
Avatar de daniel61
 
Inscription : décembre 2006
Messages : 109
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 109
Points : 120
Points : 120
j'ai essayé le code suivant sur un fichier RTF de 9Meg, 5 remplacement et le temps de traitement est toujours inférieur à 2 secondes. même sur un serveur avec un celeron.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
  $serveur='http://localhost/';
  $remplacer=array('essai','Jean Marc','Dupond','1234568','12313216');
  $fichier='./input.rtf';
  $temps=time();
  if($id=fopen($fichier,'rb')) {
    $rtf_in=fread($id,filesize($fichier));
    fclose($id);
    echo strlen($rtf_in).'-';
    $rtf_out=preg_replace('#\$\$(\d)#e','$remplacer[\\1]',$rtf_in);
    if($id=fopen('./output.rtf','wb')) {
      fwrite($id,$rtf_out,strlen($rtf_out));
      fclose($id);
    }
    else echo 'écriture en échec-';
  }
  else echo 'ouverture en échec-';
  echo time()-$temps.' sec';
  echo '<hr><a href="'.$serveur.'output.rtf">télécharger</a> votre fichier';
le temps de téléchargement lui peut varier beaucoup... c'est peut-être le téléchargement le problème?
daniel61 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2007, 09h04   #13
Membre éclairé
 
Avatar de johweb
 
Inscription : décembre 2003
Messages : 332
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : décembre 2003
Messages : 332
Points : 316
Points : 316
Et c'est une bonne réponse de daniel61 !!!

Bon, ma technique (détaillée plus haut) était : j'ouvre mon fichier source, j'ouvre un fichier vierge, et je recopie ligne à ligne en faisant un str_replace de mes champs... Temps de traitement : 35 secondes.

Avec la technique de daniel61 : je copie mon fichier source et je fais un preg_replace avec deux tableaux (une liste de recherche et une liste de remplace) sur le fichier... Temps de traitement : entre 1 et 2 secondes...

Y'a pas photo... !!

Merci, merci, merci !!!
johweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h52.


 
 
 
 
Partenaires

Hébergement Web