Hagen: Ghostscritp drängelt sich vor HTML

Moin,

konvertiere in meinem Script bilddateien versch. formate zu kleinen jpegs um sie als vorschau darzustellen. Da für nutze ich ImageMagick über

PHP-Quellcode:

<?php
exec("convert.....
?>

->das klappt prima.
Nehme ich nun ein PDF(ghostscript ist installiert), und konvertiere über:

Quellcode:

exec("convert  scan/".$entry." thumbnails/".$file[0].".jpg ",$error);

bricht die Darstellung der seite ab, ich bekomme den html code als text zurück.Z.Bsp:

Quellcode:

**** This file had errors that were repaired or ignored.
   **** The file was produced by:
   **** >>>> Avision NetDeliver C5540MFP <<<<
   **** Please notify the author of the software that produced this
   **** file that it does not conform to Adobe's published PDF
   **** specification.

**** Warning: stream operator not terminated by valid EOL.
   **** Warning: stream operator not terminated by valid EOL.

**** This file had errors that were repaired or ignored.
   **** The file was produced by:
   **** >>>> Avision NetDeliver C5540MFP <<<<
   **** Please notify the author of the software that produced this
   **** file that it does not conform to Adobe's published PDF
   **** specification.

X-Powered-By: PHP/5.1.2
Content-type: text/html

<html>
<head>
<title>Vorschau</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<script language="JavaScript" type="text/javascript">
USW......

Die Jpg werden aber korrekt erzeugt. Hat jem ne idee wie ich es schaffe die pdf ´s zu konvertieren und trotzdem meine PHP seite korrekt dargestellt bekomme??
Meine Idee war die konvertierung in eine andere php datei zu verlagern und von dieser die konvertierung ausführen zu lassen, hab aber ehrlich gesagt keine ideee wie ich das anstellen soll, da ich auch noch den jeweiligen namen der pdf files übergeben muss!!!
Am Besten wäre alledings wenn jemand ne idee hat wie man dies blöden meldungen von ghostscript ausstellen kann!!!*G*
Achja die PDF Dateien SIND NICHT KAPUTT!!!

MFG Hagen

  1. Hi,

    Am Besten wäre alledings wenn jemand ne idee hat wie man dies blöden meldungen von ghostscript ausstellen kann!!!*G*

    Keine Ahnung, aber Bildschirmausgaben lassen sich abfangen (http://php.net/ob_start). Schlimmstenfalls also den Müll einsammeln, entsorgen und das nunmehr recycelte Material dem Browser wieder zuführen ... ;)

    Gruß, Cybaer

    --
    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
    1. Hi Cybaer,

      »»(http://php.net/ob_start). Schlimmstenfalls also den Müll
      »»einsammeln, entsorgen und das nunmehr recycelte Material dem
      »»Browser wieder zuführen ... ;)
      Habs nach deinem Tipp mal so probiert:

      ob_start();
      exec("convert scan/".$entry." thumbnails/".$file[0].".jpg ");
      ob_end_flush();

      Leider lässt sich Ghostscript dadurch nicht an der ausgabe hindern...!

      MFG Hagen

      1. ÄHM KORREKTUR:
        Habs nach deinem Tipp, mal so probiert:

        ob_start();
        exec("convert scan/".$entry." thumbnails/".$file[0].".jpg ");
        ob_end_clean();

        Leider lässt sich Ghostscript dadurch nicht an der ausgabe hindern...!

        MFG Hagen

        1. Hi,

          exec("convert scan/".$entry." thumbnails/".$file[0].".jpg ");
          Leider lässt sich Ghostscript dadurch nicht an der ausgabe hindern...!

          /* Programm ausfuehren und Statuscode sowie Standard- & Error-Output zurueck 051017 */  
          function shell($command,$return='all') {  
           $result=NULL;  
           if($proc=popen('('.escapeshellcmd($command).')2>&1','r')) {  
            $output='';  
            while(!feof($proc)) { $output.=fgets($proc,1000); }  
            $code=pclose($proc);  
            $output=trim($output);  
            switch(strtolower($return)) {  
             case ('code'): $result=$code; break;  
             case ('output'): $result=$output; break;  
             default: $result=array('code'=>$code,'output'=>$output);  
            }  
           }  
           return $result;  
          }
          

          Das sollte den Fehleroutput einfangen ...

          Gruß, Cybaer

          --
          Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
          1. Danke für deine Mühe... aber was machst du da,*G* versteh nur Bahnhof und wie soll ich das in mein script einbinden????
            so sieht es jetzt bei mir aus:

            elseif($file[1]=="pdf")
            {
            exec("convert scan/".$entry." thumbnails/".$file[0].".jpg ");
            }

            MFG Hagen

            /* Programm ausfuehren und Statuscode sowie Standard- & Error-Output zurueck 051017 */

            function shell($command,$return='all') {
            $result=NULL;
            if($proc=popen('('.escapeshellcmd($command).')2>&1','r')) {
              $output='';
              while(!feof($proc)) { $output.=fgets($proc,1000); }
              $code=pclose($proc);
              $output=trim($output);
              switch(strtolower($return)) {
               case ('code'): $result=$code; break;
               case ('output'): $result=$output; break;
               default: $result=array('code'=>$code,'output'=>$output);
              }
            }
            return $result;
            }

            
            >   
            > Das sollte den Fehleroutput einfangen ...  
            >   
            >   
            > Gruß, Cybaer  
            > 
            
            1. Hi,

              Danke für deine Mühe... aber was machst du da,*G* versteh nur Bahnhof und wie soll ich das in mein script einbinden????

              Gepostete Funktion shell() in dein Programm kopieren, und exex(...) einfach durch shell(...) ersetzen.

              Wenn Du die Ausgabe von GS benötigst, kannst Du auch $output=shell(...); schreiben. $output ist dann ein Array, welches den Statuscode sowie die Ausgabe von GS enthält.

              Gruß, Cybaer

              --
              Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
              1. Ja verpipscht nochamal DAS GEHT DIE SCHEISE GEHT!!!!!...
                Cybaer Ich danke dir!!!
                Ich habe zwar keine Ahnung was zum teufel deine Funktion macht aber sie macht es gut!!!

                M super FG Hagen

                1. Hi,

                  Ich habe zwar keine Ahnung was zum teufel deine Funktion macht aber sie macht es gut!!!

                  LOL - s. http://php.net/popen! Der Kanal für die Standard-Fehler-Ausgabe (stderr) des übergebenen Kommandos wird umgeleitet und, zusammen mit der normalen Ausgabe, ausgelesen. Je nach 2. Paramter gibt shell() aber nur einen String mit dem Statuscode des gestarteten Prozesses zurück (shell(...,'code')), oder nur die komplette Ausgabe (shell(...,'output')), oder eben beides, dann halt in einem assoziativen Array ...

                  Gruß, Cybaer

                  --
                  Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
                  1. Ich habe selbstverständlich einen entsprechenden Kommentar
                    //Funktion von Cybaer @SLFHTML.org
                    in meinen Quelltext eingebunden....
                    dir wurde ein denkmal gesetzt*GGGGG*

                    MFG Danke für die Erklärung
                    Hagen

                    1. Hi,

                      Ich habe selbstverständlich einen entsprechenden Kommentar
                      //Funktion von Cybaer @SLFHTML.org

                      Bitte nicht so etwas mißverständliches! :-o Lieber cybaer@binon.net ;)

                      dir wurde ein denkmal gesetzt*GGGGG*

                      *g*

                      Gruß, Cybaer

                      --
                      Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
                      1. Moin Cybaer,
                        ich schon wieder,und zwar macht doch deine Fkt. so tolle sachen!
                        nun hab ich es mit pdfs probiert die mehrere Seiten haben so:

                        exec("convert -size 200x286 scan/".$entry."[1] -resize 200x286 thumbnails/".$file[0].".jpg ");

                        funzt es(augenmerk auf !!![1]!!!)
                        so:
                        shell("convert -size 200x286 scan/".$entry."[1] -resize 200x286 thumbnails/".$file[0].".jpg ");
                        macht er von allen seiten einen thumb, hast du ne idee woran das liegen könnte???

                        MFG Hagen

                        1. Hi,

                          hast du ne idee woran das liegen könnte???

                          Nein - drösel mal das Kommando auf!

                          shell() sichert das Kommando gegen "böse Buben" ab: escapeshellcmd($command)

                          Das sollte man mit Kommandos unbekannter Herkunft machen. Ersetz das "escapeshellcmd($command)" also einfach mal durch "$command"

                          Gruß, Cybaer

                          --
                          Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
                          1. Ok bin erst am Montag wieder auf Arbeit,aber trotzdem schonmal danke
                            MFG Hagen

                          2. Moin

                            Nein - drösel mal das Kommando auf!

                            shell() sichert das Kommando gegen "böse Buben" ab: escapeshellcmd($command)

                            Das sollte man mit Kommandos unbekannter Herkunft machen. Ersetz das "escapeshellcmd($command)" also einfach mal durch "$command"

                            so nun funzt es in 99% aller Fälle, so eigentlich mit jeder nur denkbaren .pdf außer mit der Siemens Telefonanlagenbeschreibung... naja man kann nicht alles haben*GGG*.
                            Nochmal Vielen dank.
                            MFG Hagen

      2. Hi,

        ob_start();
        exec("convert scan/".$entry." thumbnails/".$file[0].".jpg ");
        ob_end_flush();
        Leider lässt sich Ghostscript dadurch nicht an der ausgabe hindern...!

        Du öffnest den Ausgabepuffer, GS schreibt in den Puffer, Du schließt den Puffer und sendest den Inhalt. Was erwartest Du denn dann? =%-)

        Lies das Manual zur Ausgabepufferung auch *durch* (also nicht nur die ersten Wörter). Da findest Du auch, wie die den Puffer in ein Variable holen und ihn dann *ohne Ausgabe* schließen kannst.

        Lösche aus dem Wert dieser Variablen dann alles vor "<html" und geb sie aus! Fertig.

        Gruß, Cybaer

        --
        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
        1. Siehe KORREKTUR!!!*GGG*
          So wie ichs inner korrektur geschrieben hab, dürfte eigentlich nix ausgegeben werden??? oder seh ich das falsch wird aber trotzdem alles genauso ausgegeben!

          MFG Hagen