【发布时间】:2020-07-08 18:29:22
【问题描述】:
<?php // BISMILLAHIRRAHMANIRRAHEEM
error_reporting(E_ALL);
ini_set("display_errors", 1);
// tried the following with soffice, soffice.com, soffice.exe, soffice.bin
// MS-DOS: soffice, soffice.com, soffice.bin all work successufully and generate the pdf
$ex = "soffice.com --headless --convert-to html \"" . getcwd() . DIRECTORY_SEPARATOR . "sources" . DIRECTORY_SEPARATOR . "test.docx\" --outdir \"" . getcwd() . DIRECTORY_SEPARATOR . "results\"";// 2>&1";
chdir("C:\Program Files\LibreOffice\program");
echo $ex . "<br />";
exec($ex, $output);
//exec("mkdir rr", $output); // generates directory
//exec("dir soff*", $output);
//exec("a.bat", $output); // doesn't generate pdf
print_r($output);
?>
您好,我正在使用带有 Windows 7、PHP 5.6.39 的 IIS。我无法通过 PHP 调用 LibreOffice 将 docx 文档转换为 pdf。如果在 MS-DOS 窗口中执行,代码示例中到屏幕的命令输出有效,但在 php 的 exec() 或 shell_exec() 中无效。该文件夹似乎具有适当的权限,因为我的上传脚本和 exec("mkdir newdir") 正在工作。
exec("dir"); 还输出上述路径的目录列表,因此 DOS 导航命令似乎也能正常工作。
我想avoid the solution 让另一个用户。不优雅。这不应该是困难的 INSHAALLAH。
不工作是指exec() 没有生成文档,也没有生成任何输出/错误,这使得调试变得困难。
感谢您的宝贵时间。
- 更新: 经过一番摆弄,我意识到返回码是:-1073741515 谷歌结果显示它显然是文件 I/O 故障。 我下载的另一个执行类似操作的脚本也给出了相同的错误。所以要查原因。正如我之前所说,可以创建目录并上传文件,因为它具有权限。
在我发布的链接中,似乎需要创建新用户。 IIS是否有可能对该目录具有权限但没有PHP exec()?
- 在 Linux 上,它给了我错误代码
77,权限被拒绝?
【问题讨论】:
-
使用单引号,否则
\t将产生一个制表符 -
谢谢。我已经在需要的地方修复了它。但是,当执行
dir命令时,此代码确实会导致chdir()中提到的路径的目录列表。 -
您是否尝试将应用程序池标识设置为本地系统?如果它有效,那么您将应用程序池重新设置并使用进程监视器诊断权限问题
-
我使用了默认设置中的IUSR。
标签: php apache iis permissions exec