générer un fichier excel en php sous apache

générer un fichier excel en php sous apache - PHP - Programmation

Marsh Posté le 20-05-2005 à 16:07:15    

Bonjour,
 
J'arrive à générer un fichier excel en php, je test tout sous easyphp, ça marche.
Mais voilà maintenant on a installé apache, mysql... sur le serveur
et là plus rien ne marche. A la place d'avoir un fichier excel j'ai une belle
page blanche!  :wahoo:  
Je ne sais pas si cela vient de la configuration d'apache ou de mon script php.
(Je génere le fichier .xls avec writeexcel)
 
Merci de vos réponses  :pt1cable: je commence à plus savoir quoi faire!

Reply

Marsh Posté le 20-05-2005 à 16:07:15   

Reply

Marsh Posté le 20-05-2005 à 16:33:10    

même pas un msg d'erreur ?
essaye de mettre error_reporting(E_ALL); au début de ton script, on y verra peut être plus clair

Reply

Marsh Posté le 20-05-2005 à 16:41:34    

oui j'ai une erreur!
il me dit : 2047

Reply

Marsh Posté le 20-05-2005 à 19:44:22    

tikyoka a écrit :

oui j'ai une erreur!
il me dit : 2047


tu mets  
<?
error_reporting(E_ALL);  
?>
pas
 
<? echo E_ALL; ?>

Reply

Marsh Posté le 23-05-2005 à 10:04:55    

alors sous easyphp j'ai plein d'erreur dans writeexcel
mais bizarement l'appli marche!
et avec apache il ne m'indique aucune erreur et l'appli  
ne fonctionne pas.

Reply

Marsh Posté le 23-05-2005 à 10:06:17    

tikyoka a écrit :

alors sous easyphp j'ai plein d'erreur dans writeexcel
mais bizarement l'appli marche!
et avec apache il ne m'indique aucune erreur et l'appli  
ne fonctionne pas.


 
EasyPHP utilise APACHE.
 
 
 

Reply

Marsh Posté le 23-05-2005 à 10:51:52    

dans le fichier mime type j'ai bien :
application/vnd.ms-excel  xls
Y a t'il quelque chose à configurer dans apache
pour qu'il lance l'application excel?
Ou quel code faut-t'il rajouter pour ouvrir excel  
dans le navigateur?

Reply

Marsh Posté le 23-05-2005 à 11:44:35    

svp aidez-moi

Reply

Marsh Posté le 23-05-2005 à 11:45:32    

tikyoka a écrit :

svp aidez-moi


si tu veux qu'on t'aide va falloir nous aider avant :
- messages d'erreurs ?
- bout de code ?

Reply

Marsh Posté le 23-05-2005 à 11:59:51    

soju a écrit :

si tu veux qu'on t'aide va falloir nous aider avant :
- messages d'erreurs ?
- bout de code ?


 
Voilà le code :

Code :
  1. <?php
  2. error_reporting(E_ALL);
  3. //on recupere les infos dans la bdd
  4. include_once("FonctBdd.php" );
  5. $Id=RetourneIdManif($_POST["sManif"]);
  6. include("Variables.php" );
  7. $con=mysql_connect($host,$user,$pass) or die ("connexion impossible a la base de donn&eacute;e" );
  8. mysql_select_db($bdd);
  9. $result=mysql_query("select civilite,nom,prenom,compl_adresse,adresse,code_postal,ville,societe,fonction from ".$prefix."_PERSONNALITE a, ".$prefix."_ADRESSE b, ".$prefix."_LISTE_MANIF c, ".$prefix."_FONCTION d where id_manif='$Id' and c.id_adresse=b.id_adresse and c.id_p=a.id_p and a.id_fonction=d.id_fonction" );
  10. if(mysql_num_rows($result)>0) { //Si au moins une ligne est retournée
  11. require_once "../writeexcel/class.writeexcel_workbook.inc.php";
  12. require_once "../writeexcel/class.writeexcel_worksheet.inc.php";
  13. $fname = tempnam("/tmp", "publipostage.xls" );
  14. $workbook =& new writeexcel_workbook($fname);
  15. $worksheet =& $workbook->addworksheet('Adresses des personnes');
  16. $text_format =& $workbook->addformat(array(color=>'blue', size=>10, font=>'Comic Sans MS', text_h_align=>2));
  17. $worksheet->write('A1', "Civilité", $text_format);
  18. $worksheet->write('B1', "Nom", $text_format);
  19. $worksheet->write('C1', "Prénom", $text_format);
  20. $worksheet->write('D1', "Complément_adresse", $text_format);
  21. $worksheet->write('E1', "Adresse", $text_format);
  22. $worksheet->write('F1', "Code_Postal", $text_format);
  23. $worksheet->write('G1', "Ville", $text_format);
  24. $worksheet->write('H1', "Organisme", $text_format);
  25. $worksheet->write('I1', "Fonction", $text_format);
  26. $i=2;
  27. while (($ligne=mysql_fetch_row($result))!=false){
  28.  $worksheet->write('A'.$i, $ligne[0]);
  29.  $worksheet->write('B'.$i, $ligne[1]);
  30.  $worksheet->write('C'.$i, $ligne[2]);
  31.  $worksheet->write('D'.$i, $ligne[3]);
  32.  $worksheet->write('E'.$i, $ligne[4]);
  33.  $worksheet->write('F'.$i, $ligne[5]);
  34.  $worksheet->write('G'.$i, $ligne[6]);
  35.  $worksheet->write('H'.$i, $ligne[7]);
  36.  $worksheet->write('I'.$i, $ligne[8]);
  37.  $i++;
  38. }
  39. $workbook->close();
  40. header("Content-Type: application/x-msexcel" );
  41. $fh=fopen($fname, "rb" );
  42. fpassthru($fh);
  43. unlink($fname);
  44. }
  45. else { //si la requête ne retourne rien
  46. echo "&nbsp;Il n&#39;y a aucune personne associ&eacute;e avec cette manifestation.";
  47. echo "<br><br><form>&nbsp;<button name='b' type='button'value='retour' onClick='history.back()'>retour</button>
  48.  </form>";
  49. }
  50. ?>


 
et quand aux erreurs ce sont que des notice du genre :
Notice: The call_user_method_array() function is deprecated, use the call_user_func variety with the array(&$obj, "method" ) syntax instead in c:\program files\easyphp\www\vip\writeexcel\class.writeexcel_format.inc.php on line 113

Reply

Marsh Posté le 23-05-2005 à 11:59:51   

Reply

Marsh Posté le 23-05-2005 à 15:09:30    

alors avez vous une piste svp?

Reply

Marsh Posté le 23-05-2005 à 15:19:54    

recapitulons :
- avec easyphp tu as les notices et l'appli marche ? (bizarre car si ya des notices, ton header ne fonctionnera pas...)
- avec apache sans easyphp tu as une page blanche ? (même avec error_reporting(E_ALL); ???)
 
c'est bien ça ?

Reply

Marsh Posté le 23-05-2005 à 15:36:17    

oui c'est bien ça!
apparemment ça plante au moment des :
require_once "../writeexcel/class.writeexcel_workbook.inc.php";
require_once "../writeexcel/class.writeexcel_worksheet.inc.php";
 
Peut être que la classe writeexcel n'est pas compatible
avec php5? Car ça marche avec php4.2...

Reply

Marsh Posté le 23-05-2005 à 15:59:16    

forcemment... je pensais depuis le début que tu utilisais la même version de php...

Reply

Marsh Posté le 23-05-2005 à 16:47:57    

Mon problème c'est donc que je ne sais pas avec quelle
méthode générer un fichier excel en utilisant php5.
J'ai testé avec les méthodes writeexcel et COM.
Je ne sais pas ce qui est le plus approprié? :heink:  

Reply

Marsh Posté le 23-05-2005 à 16:57:18    

t'as essayé avec http://pear.php.net/package/Spreadsheet_Excel_Writer/ ? (je ne sais pas si compatible php5)

Reply

Marsh Posté le 24-05-2005 à 09:50:56    

oui c'est compatible

Reply

Marsh Posté le 24-05-2005 à 11:18:09    

Merci de votre aide.
Mais je ne trouve pas vraiment de doc pour utiliser
spreadsheet_excel_writer. Avez vous un fichier exemple?

Reply

Marsh Posté le 24-05-2005 à 12:05:00    

quelqu'un a-t'il déjà utilisé la classe spreadsheet_excel_writer pour générer un fichier excel?
Pourriez-vous me donner des indices svp?
(Je suis sous windows et php 5)

Reply

Marsh Posté le 24-05-2005 à 13:42:53    

tikyoka a écrit :

Mais je ne trouve pas vraiment de doc pour utiliser

http://pear.php.net/manual/en/pack [...] writer.php

Reply

Marsh Posté le 24-05-2005 à 14:58:24    

Merci pour la doc!
Je teste et voilà l'erreur qu'il me met :
 
Fatal error: Failed opening required 'PEAR.php' (include_path='.;C:\Program Files\EasyPHP\php\pear\Includes') in c:\program files\easyphp\www\vip\script\Spreadsheet\Excel\Writer.php on line 34
 
Je n'ai pas de fichier pear.php dans le package que j'ai dl.
et apparemment c'est pas le seul fichier qui me manque.
Alors savez-vous comment installer spreadsheet_excel_writer
sous windows?

Reply

Marsh Posté le 24-05-2005 à 15:08:42    

Reply

Marsh Posté le 25-05-2005 à 08:59:31    

Sinon tu peux utiliser les fichier excel au format csv...
C'est tout de même beaucoup plu simple nan?
http://www.asp-php.net/scripts/asp [...] _excel.php
http://odbcphp.free.fr/php-odbc.php?m=xls

Reply

Marsh Posté le 25-05-2005 à 09:10:00    

et comme ça tu plombera pas ton serveur avec l'imonde PEAR *lance sa bataille contre les moulins a vent*


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 25-05-2005 à 09:11:29    

mais Ouais CSV c'est impec!

Reply

Marsh Posté le 25-05-2005 à 09:17:20    

Spir a écrit :

mais Ouais CSV c'est impec!

lol, t'aurais pu le dire plus tôt !

Reply

Marsh Posté le 25-05-2005 à 09:19:04    

Bah désolé, je ne passe pas tout le temps ici.
Et puis je viens de m'y mettre (à la manipulation de fichier excel).

Reply

Marsh Posté le 25-05-2005 à 09:43:43    

Spreadsheet_Excel_Writer est parfait et simple d'utilisation
je le conseille vivement

Reply

Marsh Posté le 25-05-2005 à 09:44:22    

Spir a écrit :

Bah désolé, je ne passe pas tout le temps ici.

oups, desole je t'ai confondu avec tikyoka

Reply

Marsh Posté le 25-05-2005 à 09:45:04    

Mais nan le CSV c'est mieux.
Pas de souci de macro ou de virus si tu importe... Bien que là on parle de générer...

Reply

Marsh Posté le 26-05-2005 à 15:01:52    

Merci de votre aide. ;)  
 
J'ai finalement fait mon fichier en csv, c'est en effet ce qu'il y a de plus simple avec ph5!

Code :
  1. <?php
  2. //on recupere les infos dans la bdd
  3. include_once("FonctBdd.php" );
  4. $Id=RetourneIdManif($_POST["sManif"]);
  5. include("Variables.php" );
  6. $con=mysql_connect($host,$user,$pass) or die ("connexion impossible a la base de donn&eacute;e" );
  7. mysql_select_db($bdd);
  8. $result=mysql_query("select civilite,nom,prenom,compl_adresse,adresse,code_postal,ville,societe,fonction from ".$prefix."_PERSONNALITE a, ".$prefix."_ADRESSE b, ".$prefix."_LISTE_MANIF c, ".$prefix."_FONCTION d where id_manif='$Id' and c.id_adresse=b.id_adresse and c.id_p=a.id_p and a.id_fonction=d.id_fonction" );
  9. if(mysql_num_rows($result)>0) { //Si au moins une ligne est retournée
  10. $contenu='Civilité;Nom;Prenom;Complement adresse;Adresse;Code Postal;Ville;Organisme;Fonction'."\r\n";
  11. while (($ligne=mysql_fetch_row($result))!=false){
  12.  $contenu=$contenu.$ligne[0].';'.$ligne[1].';'.$ligne[2].';'.$ligne[3].';'.$ligne[4].';'.$ligne[5].';'.$ligne[6].';'.$ligne[7].';'.$ligne[8]."\r\n";
  13. }
  14. $file="fichier.csv";
  15. $fp=fopen($file,"w" ); // ouverture du fichier
  16. fputs($fp,$contenu); // enregistrement des données ds le fichier
  17. fclose($fp);
  18. header("Content-Type: application/force-download" );
  19. header("Content-Length: ".filesize($file));
  20. header("Content-Disposition: attachment; filename=".$file);
  21. readfile($file);
  22. unlink($file);
  23. }
  24. else { //si la requête ne retourne rien
  25. echo "&nbsp;Il n&#39;y a aucune personne associ&eacute;e avec cette manifestation.";
  26. echo "<br><br><form>&nbsp;<button name='b' type='button' value='retour' onClick='history.back()'>retour</button>
  27.  </form>";
  28. }
  29. ?>


 
Mais j'ai encore une question? eh oui encore! :bounce:  
Je crée ce fichier csv pour du publipostage et je suis obligé de le transformer en .xls
manuellement pour qu'il soit utilisable avec la fonction publipostage de word.
Je souhaiterai donc que le fichier csv soit enregistrer en .xls directement.
Quelqu'un a une idée? :??:

Reply

Marsh Posté le 26-05-2005 à 15:07:07    

tikyoka a écrit :

Je souhaiterai donc que le fichier csv soit enregistrer en .xls directement.

on tourne en rond...  :whistle:  
sinon le publipostage se fait aussi avec du cvs

Reply

Marsh Posté le 27-05-2005 à 10:38:52    

Salut,
J'ai un probleme avec les objets com sous PHP 4.3, le serveur appache plante a chaque fois que je fais une invocation,j'ai activé la gestion du com dans le PHP.ini mais ca plante toujours?
Vous savez d'ou vient le pobleme?

Reply

Marsh Posté le 27-05-2005 à 11:10:08    

Essai peut etre en rajoutant WinNT:// devant le nom de l'application :
$domainObject = new COM("WinNT://Domain" );
 
http://www.zend.com/php5/articles/php5-dotnet.php

Reply

Marsh Posté le 27-05-2005 à 11:14:40    

Pour mon pb j'ai trouvé une solution :
J'ai remplacé $file="fichier.csv";  par $file="fichier.xls"
et dans $contenu, à la place d'écrire des ";" dans le fichier
je met des tabulations "\t"   :p

Reply

Marsh Posté le 27-05-2005 à 11:57:28    

esox_ch a écrit :

et comme ça tu plombera pas ton serveur avec l'imonde PEAR *lance sa bataille contre les moulins a vent*


 
N'empeche esox, pear est une bonne chose je trouve, le problème c'est que ca n'est pas inclut dans php ...
 
Pour moi c'est une facon de centraliser des fonctions utiles, et d'en faire profiter les développeurs php :)


---------------
http://www.alsacreations.com , http://www.openweb.eu.org. Mon CV : http://cv.roane-irkana.net/. Exemple à ne surtout pas suivre : www.worldinternet.be
Reply

Marsh Posté le 27-05-2005 à 12:08:38    

tikyoka a écrit :

Pour mon pb j'ai trouvé une solution :
J'ai remplacé $file="fichier.csv";  par $file="fichier.xls"
et dans $contenu, à la place d'écrire des ";" dans le fichier
je met des tabulations "\t"   :p


Merci tikyoka j'ai essayé ce bout de code mais il freeze apache :(

Code :
  1. <?php
  2. $domainObject = new COM("WinNT://Domain" );
  3. while ($obj = $domainObject->Next()) {
  4.   echo $obj->Name . "<br>";
  5. }
  6. ?>

Reply

Marsh Posté le 27-05-2005 à 13:20:25    

tikyoka a écrit :

Pour mon pb j'ai trouvé une solution :
J'ai remplacé $file="fichier.csv";  par $file="fichier.xls"
et dans $contenu, à la place d'écrire des ";" dans le fichier
je met des tabulations "\t"   :p


Astucieu et intéressant!

Reply

Marsh Posté le 30-05-2005 à 11:45:18    

Salut le forum,
 
j' ai le script suivant tout simple pour me permettre de tester :
 
<?  
 
//démarage de word
$word = new COM("word.application" ) or die("Impossible d'ouvrir Word" );
 
//Activation
$word->Visible = 1;
 
//ouverture d'un document vide
$word->Documents->add();
 
//Ecriture dans le document
$word->Selection->TypeText("Ceci est un test" );
$word->Documents[1]->SaveAs("Fichier_inutile.doc" );
 
//Fermeture de word
$word->Quit();
 
//Libération de l'objet
$word->Release();
$word = null;
 
?>
 
J'ai installé EasyPhp. Qd je lance ce script, j'ai un message d'erreur proveant d'apache.exe qui me signale une erreur dans la mémoire.  
 
Comment je pourrais résoudre ce probleme ?
 
Merci de votre aide.

Reply

Marsh Posté le 31-05-2005 à 11:42:20    

Bonjour tous le monde,
 
personne ne peut m'aider?
Il suffit peut etre juste d'une petite modifications dans la configuration ??
 
Si quelqu'un peut m'aider ce serait sympa.
 
Merci d'avance ...

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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