globe: proc_open() und Daten an STDIN schicken

n'abend,

ich versuche gerade aus einem PHP-Script ein LaTeX-Dokument mittels pdflatex nach PDF konvertieren zu lassen. Da das Tex-Gedöns vom Script erstellt wurde, wollte ich das direkt an pdflatex pipen und nicht erst in eine Datei schreiben, welche ich pdflatex dann wieder als Argument übergebe.

Im Wesentlichen habe folgendes versucht:

$env = array( 'PATH' => '$PATH:/usr/bin:/usr/local/bin:/usr/texbin:/opt/local/bin' );  
$fd = array(  
  array( 'pipe', 'r' ), // STDIN  
  array( 'pipe', 'w' ), // STDOUT  
  array( 'pipe', 'w' ), // STDERR  
);  
$pipes = array();  
$s = proc_open( '/usr/texbin/pdflatex -output-directory="/tmp/" -jobname="pdftest" -interaction=batchmode', $fd, $pipes, '/tmp/', $env );  
fwrite( $pipes[0], $latex );  
fflush( $pipes[0] );  
fclose( $pipes[0] );

erzeugt mir im Protokoll (/tmp/pdftest.log) die folgende Info:

**\documentclass[11pt]{amsart}  
! Emergency stop.  
<*> \documentclass[11pt]{amsart}  
  
*** (job aborted, no legal \end found)

Soweit so schlecht.

Was passiert denn, wenn man das ganze umbaut?
$s = proc_open( '/bin/cat > /tmp/transfer.tex; /usr/texbin/pdflatex -output-directory="/tmp/" -jobname="pdftest" -interaction=batchmode transfer.tex', $fd, $pipes, '/tmp/', $env );
=> Und Voila, ich bekomme das gewünschte Resultat unter /tmp/pdftest.pdf zu sehen.

Was passiert denn, wenn man das ganze umbaut?
$s = proc_open( '/bin/cat | /usr/texbin/pdflatex -output-directory="/tmp/" -jobname="pdftest" -interaction=batchmode', $fd, $pipes, '/tmp/', $env );
=> Wieder der selbe Fehler wie beim ersten Versuch.

Nach 'ner #selfhtml Session mit dedlfix sind auch Spielereien wie usleep() an allen möglichen Ecken ausprobiert worden - ohne Erfolg.

Hat da mal jemand 'ne Idee wo das Problem liegen könnte?

weiterhin schönen abend...

--
#selfhtml hat ein Forum?
sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
  1. Hallo globe,

    was wird an Fehlern in $pipes[2] ausgegeben? Welche PHP-version nutzt Du (CGI/CLI/apachehandler, Versionsnummer)?

    Gruß aus Berlin!
    eddi

    1. n'abend,

      was wird an Fehlern in $pipes[2] ausgegeben?

      $pipes[2] hab ich mir (sicherheitshalber) in eine Datei leiten lassen. Und die ist leer. Es wurden also gar keine Fehler gemeldet. Andernfalls hätte ich ja auch eine Idee gehabt wonach ich ggf. hätte suchen müssen. :/

      Welche PHP-version nutzt Du (CGI/CLI/apachehandler, Versionsnummer)?

      Mac OS X 10.6.1 (Snow Leopard)
      PHP 5.3.0
      Apache 2.2.13 (Unix) DAV/2
      mod_php5

      weiterhin schönen abend...

      --
      #selfhtml hat ein Forum?
      sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
      1. Re:

        Einen Mac habe ich nicht zum testen, aber hast Du Dich mit binary_pipes im letzten Parameter von proc_open() ausprobiert? (Das wäre dann aber auch schon alles, was mir einfiele. ;(

        Gruß aus Berlin!
        eddi

        1. n'abend,

          Einen Mac habe ich nicht zum testen, aber hast Du Dich mit binary_pipes im letzten Parameter von proc_open() ausprobiert? (Das wäre dann aber auch schon alles, was mir einfiele. ;(

          Mit binary_pipes meinst du "rb" respektive "wb"? dann ja. sprichst du von etwas anderem, dann nein.

          weiterhin schönen abend...

          --
          #selfhtml hat ein Forum?
          sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
          1. Re:

            Mit binary_pipes meinst du "rb" respektive "wb"? dann ja. sprichst du von etwas anderem, dann nein.

            binary_pipes ist eine Flag im letzten Parameter-Array, was optional bei proc_open() angegeben werden kann. Im Manual ist das $other_options.

            Gruß aus Berlin!
            eddi

            1. n'abend,

              binary_pipes ist eine Flag im letzten Parameter-Array, was optional bei proc_open() angegeben werden kann. Im Manual ist das $other_options.

              RTFM! :)
              leider habt auch die binary_pipes Option keine Auswirkung.

              Ich habe die Vorgehensweise zwischenzeitlich komplett geändert, weshalb ich keine Lösung zum Pipe-Problem mehr brauche. Sollten wir das weiterverfolgen, wäre das aus akademischen Gründen resp. für die "User Contributed Notes" in proc_open().

              weiterhin schönen abend...

              --
              #selfhtml hat ein Forum?
              sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|