下面的代码只在我的终端工作,但它不工作在我的localhost xampp Linux Unbuntu 20.04,shell_exec()和exec()都不工作。当我转到localhot时,它执行所有代码,但不执行它的两个函数。以下代码不执行。
// Add the --enable-local-file-access option to enable access to local files (HTML)
$wkhtmltopdfCommand = "wkhtmltopdf --enable-local-file-access {$outputHtmlPath} {$pdfOutputPath}";
shell_exec($wkhtmltopdfCommand);
我不知道我是否需要做些改变,但我需要一些建议。
2条答案
按热度按时间lp0sw83n1#
1)检查安全设置
您是否检查并比较了Web和CLI之间的
php.ini
设置?在脚本中,在开头添加以下内容:
运行页面并检查执行时应用的设置。您还将看到加载了哪些
php.ini
文件。问题是
shell_exec()
和exec()
可能出于安全原因而被禁用。这可以通过编辑PHP的 disable_functions 选项来更改。INI设置通常存储在
/etc/php/*
目录下的特定*.ini
文件中。所以你必须在那里寻找一些设置。你会发现一些 PHP 的c命令linei接口的INI设置(可能是/etc/php/8.2/cli/php.ini
)和一些其他的web服务器设置。这取决于 PHP 是如何从您的Web服务器上运行的。在我的例子中,我正在运行一个 NGINX 服务器,它在 FPM 上运行 PHP。因此,在这种情况下,INI文件是/etc/php/8.2/fpm/php.ini
。但是你也可以使用 CGI 或 Apache 模块运行 PHP。这就是为什么你应该在我建议的phpinfo()
调用的帮助下检查哪个INI文件被加载了。我的
/etc/php/8.2/cli/php.ini
文件将disable_functions
设置为空字符串,这意味着在命令行中没有限制。但是在我的 FPM 设置中,我有一个巨大的关键功能列表,这些功能被禁用以降低我的服务器被黑客攻击的风险。如果我将shell_exec
添加到禁用函数列表中,则无法从Web服务器调用它。这可能是你的情况。Apache configuration can also set some PHP settings,仅用于特定的虚拟主机。所以如果你在
php.ini
文件中找不到什么东西的话,可以看看它们。根据您的PHP设置,如果安装了 Suhosin 加固模块,您可能还需要检查safe_mode和suhosin.executor.*。
2)使用二进制文件的完整路径
当从Web服务器运行
shell_exec()
时,我认为在PATH
中找不到二进制文件是相当常见的。打开控制台并运行
这将输出二进制文件的完整路径。例如
/usr/bin/wkhtmltopdf
。现在将PHP代码替换为二进制文件的完整路径:
hs1ihplo2#
而不是
尝试
它应该能告诉你哪里出了问题