PrinceXML - Aufruf von proc_open schlägt fehl

SYS83

Mitglied
Hallo,

ich habe hier auf unserem Windows 2003 SB Edition-Server (mit IIS 6.0) die PHP Version 5.2.11 installiert und versuche nun kläglich mit http://www.princexml.com den Inhalt einer PHP-Variablen (enhält HTML-Code) in eine PDF "zu drucken".

Die PHP-Klasse von Prince (http://www.princexml.com/download/accessories/) scheint arbeiten zu wollen, aber sobald es zum Aufruf von proc_open() innerhalb der Klasse kommt, fliegt mir eine Warning und ein Error um die Ohren:

Warning: proc_open() [function.proc-open]: CreateProcess failed, error code - 0 in [...]\prince.php on line 329

Fatal error: Uncaught exception 'Exception' with message 'Failed to execute C:\Programme\Prince\Engine\bin\prince.exe --server --input=html - -o "N:\Temp\Output.pdf"' in [...]\prince.php:347


Prince ist auf dem Windows-Server unter "C:\Programme\Prince" installiert. Der Pfad zur EXE lautet: "C:\Programme\Prince\Engine\bin\prince.exe".

Der Code zum Aufruf lautet bei uns:
PHP:
include_once("tools/prince.php");
$prince = new prince("C:\Programme\Prince\Engine\bin\prince.exe");
$prince->setHTML(true);
$prince->convert_string_to_file($html,"N:\Temp\Output.pdf");

Die Warning wird in der prince.php ausgelöst, wie man sieht. In der Nähe von Zeile 347 steht in der prince.php folgendes:
PHP:
    private function convert_internal_string_to_file($pathAndArgs, $xmlString, &$msgs)
    {
	$descriptorspec = array(
			    0 => array("pipe", "r"),
			    1 => array("pipe", "w"),
			    2 => array("pipe", "w")
			    );

	$process = proc_open($pathAndArgs, $descriptorspec, $pipes);

	if (is_resource($process))
	{
	    fwrite($pipes[0], $xmlString);
	    fclose($pipes[0]);
	    fclose($pipes[1]);

	    $result = $this->readMessages($pipes[2], $msgs);

	    fclose($pipes[2]);
	
	    proc_close($process);

	    return ($result == 'success');
	}
	else
	{
	    throw new Exception("Failed to execute $pathAndArgs");
	}
    }


Anscheinend hat PHP ein Problem beim Starten des Prozesses, denn ein is_readable() auf den Pfad der EXE liefert true.
Ich habe natürlich bei PrinceXML im Forum geschaut und gegoogelt, wie man dieses Problem in den Griff bekommt, aber ohne Erfolg.

Was ich schon versucht habe:
  • safe_mode ON? Nein, ist auf "OFF"
  • Ausführrechte für CMD.exe? Fehlten, habs für IUSR_[...] auf "Listen,Lesen,Ausführen" gesetzt
  • Leserechte für "C:\Windows\" und "C:\Windows\system32\" auf "Auflisten,Lesen" gesetzt
  • Rechte für IUSR_[...] bei "N:\Temp\" auf "Listen,Lesen,Lesen & Ändern, Schreiben" gesetzt.

Wo liegt hier nur das Problem? Wäre nett, wenn jemand eine Lösung parat hätte.
 
Zurück