Processus WinWord ne se ferme pas

Processus WinWord ne se ferme pas - PHP - Programmation

Marsh Posté le 06-04-2006 à 15:31:03    

Bonjour,
 
j'ai ce code qui me permet d'ouvrir un document Word, de modifier des champs dans celui-ci par des variables récupérées dans une base de données, d'enregistrer le document, et ensuite grace à un header de l'affiché sur le client
 
$type = $_POST['type'];      // on récupére le type du contrat type
     
$filename = "$path_contrat_type/$type";      // Adresse du contrat
     
// pas de limite de temps
set_time_limit(0);
 
// Pas de paramétres requis
$empty = new VARIANT();
 
// Chargement de la librairie
com_load_typelib('Word.Application');
     
// Création de l'object
$word = new COM('word.application') or die('Word n\'est pas installé');
 
echo "Veuillez patientez... Chargement de Word\n";
 
     
$word->Visible = 0;
     
// Ouvre le document
$word->Documents->Open($filename);
     
// Remplacement des variables
$word->Selection->GoTo(wdGoToBookmark,$empty,$empty,'SNCF_ENT_ETAB');
$word->Selection->TypeText($nom);
 
$word->Selection->GoTo(wdGoToBookmark,$empty,$empty,'SNCF_ENT_TELFAX');
$word->Selection->TypeText($tel_fax);
 
... // etc..    
 
$output_devis = "$path_contrat/$num_devis.doc";      // Fichier doc temporaire
     
$word->Documents[1]->SaveAs($output_devis);
$word->Documents[1]->Close();      // Fermer et liberer la mémoire
$word->Documents->Close();
$word->Quit($empty,$empty,$empty);
$word->Release();
$word = null;
unset($word);
 
 
Tout marche niquel, mais le processur WinWord continu de tourner sur le serveur, et à chaque lancement, un processus WinWord suplémentaire est crée, et n'est pas fermé
 
On m'as dit d'enlever com_load_typelib('Word.Application');  mais si j'enléve cette ligne, les champs ne sont remplacés et les variables sont toutes ajoutées audébut du document Word!!  :cry:  :heink:  
 
Help please :D


Message édité par LouyZ le 06-04-2006 à 15:31:30
Reply

Marsh Posté le 06-04-2006 à 15:31:03   

Reply

Marsh Posté le 06-04-2006 à 18:39:47    

J'ai écrit un code presque identique, c'est marrant.
... Mais, j'ai eu le même problème, et ce n'était pas drôle.
 
Je l'ai finalement résolu en enlevant com_load_typelib('Word.Application');
et en ajoutant com.autoregister_typelib = true dans PHP.INI.
 
C'était avec PHP4.3.3. Cependant, je ne sais pas si ça marche aussi avec une version plus récente (et d'ailleurs, cela m'intéresserait de le savoir).

Reply

Marsh Posté le 06-04-2006 à 19:20:28    

olivthill a écrit :

J'ai écrit un code presque identique, c'est marrant.
... Mais, j'ai eu le même problème, et ce n'était pas drôle.
 
Je l'ai finalement résolu en enlevant com_load_typelib('Word.Application');
et en ajoutant com.autoregister_typelib = true dans PHP.INI.
 
C'était avec PHP4.3.3. Cependant, je ne sais pas si ça marche aussi avec une version plus récente (et d'ailleurs, cela m'intéresserait de le savoir).


 
Bah écoute je test ca dès demain au taf et j'te dit quoi :)
Merci!

Reply

Marsh Posté le 06-04-2006 à 19:23:28    

sinon un kill sur winword.exe ????

Reply

Marsh Posté le 07-04-2006 à 07:58:23    

Et la tu te fais detruire par tes clients, qui avaient un courrier word en cours de modification :o

Reply

Marsh Posté le 07-04-2006 à 07:59:11    

Ca marche le com.autoregister_typelib = true dans PHP.INI :)
 
Merciiii !!


Message édité par LouyZ le 07-04-2006 à 08:11:09
Reply

Marsh Posté le 07-04-2006 à 08:12:18    

Sebastien a écrit :

Et la tu te fais detruire par tes clients, qui avaient un courrier word en cours de modification :o


 
Oui faut mieu évité lol!

Reply

Marsh Posté le 07-04-2006 à 10:03:51    

Sebastien a écrit :

Et la tu te fais detruire par tes clients, qui avaient un courrier word en cours de modification :o


 
Ah vi, mais je pensais que word était ouvert sur le serveur donc bon :/
en plus j'y aurait été a la bourrin,
lorsque tu ouvres word tu recupère un pid, puis tu kill via le pid. :D
hummm koi ke cette solution est trop bourrin

Reply

Marsh Posté le 07-04-2006 à 10:20:14    

ben si, word est ouvert sur le serveur puisque c'est un script php...

Reply

Marsh Posté le 07-04-2006 à 19:20:23    

Vi c'est sur le serveur, mais si deux gars ouvrent des devis à très peu d'intervalle ca risquera de blatter je pense! De toute ca marche la solution de olivthill! ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed