2008-11-07 8 views
2

J'ai un script CGI qui produit un fichier .pdf à partir de la page HTML. Mon problème est que lorsqu'il est lancé à partir du navigateur Web, il n'y a pas de création du document .pdf.Comment lancer HTMLDOC à partir d'un script CGI?

Ce que je l'ai fait jusqu'à présent:

  • paramètres chmod définis ci-dessus recommandé (777)
  • testé la sortie normale sur le fichier à partir du script, qui fonctionne très bien
  • lors de l'exécution localement sur le serveur à partir de la ligne de commande, le script .cgi fonctionne

Pourquoi le script ne fonctionne-t-il pas lorsqu'il est exécuté à partir du navigateur Web?

#!/usr/bin/perl 
use LWP::Simple; 
use HTML::HTMLDoc; 
use CGI; 
print "Content-type: text/html\n\n"; 
print "<html><head><title>test</title></head>"; 
print "<body>"; 

my $htmldoc->set_html_content(qq~<html><body>A PDF file</body></html>~); 
my $pdf = $htmldoc->generate_pdf() or die($!); 
$pdf->to_file('/var/www/tom.pdf'); 
print "</body></html>"; 

Répondre

1

Où envoyez-vous le fichier généré au navigateur?

Notez que vous ne pouvez pas intégrer de PDF en HTML; vous devez soit

  • placer le fichier dans un endroit où votre serveur Web livrera et envoyer un lien vers le fichier dans le navigateur
  • ou définir le type de contenu à application/pdf et juste retourner le dossier (sans Balises HTML autour d'elle).
1

La cause la plupart du temps probable est que /var/www est pas accessible en écriture au processus apache (ou tout autre serveur Web que vous utilisez), donc si vous l'exécutez à partir de la ligne de commande - avec les autorisations de votre utilisateur - il réussit, mais quand Appelé à partir d'un navigateur Web, le serveur Web l'exécute avec ses propres autorisations (très limitées), puis l'écriture échoue.

Vous devez d'abord vérifier le code retour de la méthode to_file pour voir si l'écriture a réussi et, deuxièmement, écrire dans un répertoire où le serveur Web est autorisé à écrire, par exemple /var/tmp.

Questions connexes