ライブラリを引用符で囲む必要はありません。次の方法でコマンドの出力をキャッチできます。
$commandString = '../wkhtmltopdf/wkhtmltopdf-i386 http://www.estiroad.com/export.php file.pdf 2>&1';
$output = shell_exec($commandString);
UNIXの2>&1
は、出力が通過することを意味します。1 は標準出力です。2 は標準エラーです。お役に立てれば。
またはウィンドウで
$commandString = '../wkhtmltopdf/wkhtmltopdf.exe http://www.estiroad.com/export.php file.pdf 2> output';
print $out ? $out : join("", file("output"));
パーミッションの問題から、Linux でプロダクション スクリプトを実行しているようです。本番サーバーに移動して実行します
$ uname -a
次のようなものが得られます。
Linux ora100 2.6.5-7.252-smp #1 SMP Tue Feb 14 11:11:04 UTC 2006 x86_64 x86_64 x86_64 GNU/Linux
x86_64 は、64 ビット CPU を実行していることを示唆しています。その場合は amd64 バージョンのバイナリをダウンロードし、そうでない場合は i386 バージョンをダウンロードします。どちらも次の URL から取得できます: http://code.google.com/p/wkhtmltopdf/downloads/list
Windows バイナリを保持します。設定ファイルはありますか?その場合は、環境に基づいてライブラリ パスを定数に割り当てるスイッチがあることを確認してください。
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
// this is windows server
define('WKHTML_LIB', "../wkhtmltopdf/wkhtmltopdf.exe");
} else {
// or the 64 bit binary?
define('WKHTML_LIB', "../wkhtmltopdf/wkhtmltopdf-i386");
}
次に、wkhtmltopdf を開始するコードを変更します。
$commandString = WKHTML_LIB' http://www.estiroad.com/export.php file.pdf 2> output';
print $out ? $out : join("", file("output"));