我正在使用 CakePHP 构建一个 Web 应用程序,并使用 CakePdf 插件以及使用 wkhtmltopdf 二进制文件将 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
二进制文件。但是,如果我没有把它放在它./
之前,我仍然会收到错误消息。