私はCakePHPでWebアプリを構築しており、wkhtmltopdfバイナリを使用するとともに、CakePdfプラグインを使用してPDF印刷機能を統合しました。
ローカルマシンで広範なテストを実行しましたが、コードは意図したとおりに機能し、PDFを印刷します。ただし、アプリを本番Webサーバーにアップロードすると、次のメッセージが表示されます。
警告(2):is_executable()[http://php.net/function.is-executable]:open_basedir制限が有効です。ファイル(/ usr / bin / wkhtmltopdf)が許可されたパス内にありません:(/ var / www / clients / client1 / web1 / web:/ var / www / clients / client1 / web1 / tmp:/ var / www /gravex.co.uk/web:/srv/www/gravex.co.uk/web:/usr/share/php5:/tmp:/usr/share/phpmyadmin:/etc/phpmyadmin:/var/lib/phpmyadmin )[APP / Plugin / CakePdf / Pdf / Engine / WkHtmlToPdfEngine.php、82行目]
wkhtmltopdfバイナリが見つからないか、実行可能ではありません:/ usr / bin / wkhtmltopdf
エラー:内部エラーが発生しました。スタックトレース
APP/Plugin/CakePdf/Pdf/Engine/WkHtmlToPdfEngine.php line 29 → WkHtmlToPdfEngine->_getCommand() APP/Plugin/CakePdf/Pdf/CakePdf.php line 234 → WkHtmlToPdfEngine->output() APP/Plugin/CakePdf/View/PdfView.php line 101 → CakePdf->output(string) CORE/Cake/Controller/Controller.php line 957 → PdfView->render(null, null) CORE/Cake/Routing/Dispatcher.php line 193 → Controller->render() CORE/Cake/Routing/Dispatcher.php line 161 → Dispatcher->_invoke(UsersController, CakeRequest, CakeResponse) APP/webroot/index.php line 96 → Dispatcher->dispatch(CakeRequest, CakeResponse)
CakePdfプラグインがwkhtmltopdfをロードするために使用するファイルを確認しました。そのパスは/usr/bin/wkhtmltopdf
、ローカルマシン上にあるものと同じです。wkhtmltopdfが同じ場所にあるかどうかを確認しました。wkhtmltopdfをインストールするとき、私は単にバイナリを抽出し、ローカルマシンと本番マシンの両方の上記の場所に配置しました。
これを修正するにはどうすればよいですか?
更新
stixのアドバイスに従って、open_basedirへのパスを追加しましたが、それでもこのエラーが発生します。その後、ターミナルで実行しようとしwkhtmltopdf
ましたが、「コマンドが見つかりません」というエラーが表示されました。これは、バイナリファイルが破損していることが判明しました。それで、私はバイナリの新しいバージョンをアップロードし、バイナリを使用し./wkhtmltopdf
て動作します。ただし、前に付けない./
と、エラーが発生します。