在php中运行exec,以便使用unoconv转换文件

在php中运行exec,以便使用unoconv转换文件,php,exec,unoconv,Php,Exec,Unoconv,我正在尝试使用php中的unoconv将HTML文件转换为RTF文件 我从php调用: ...... file_put_contents("/tmp/unoconv55b2862fea753.html", $content); $command = "unoconv -f rtf -o /tmp/unoconv55b2862fea753.rtf /tmp/unoconv55b2862fea753.html"; exec($command, $output);

我正在尝试使用php中的
unoconv
将HTML文件转换为RTF文件

我从php调用:


    ......
    file_put_contents("/tmp/unoconv55b2862fea753.html", $content);
    $command = "unoconv -f rtf -o /tmp/unoconv55b2862fea753.rtf /tmp/unoconv55b2862fea753.html";
    exec($command, $output);
    $converted = file_get_contents("/tmp/unoconv55b2862fea753.rtf");
问题是,
file\u put content
将保存.html,但由于某种原因,unoconv不会将转换后的文件保存到/tmp目录中

当我在控制台中直接在服务器上运行$command时,已创建转换的文件


你知道哪里会有问题吗?

问题可能在于PHP没有tmp目录的正确权限。
请尝试将转换后的文件保存到站点的根目录(或其中的子文件夹)中,并查看它是否成功转换。

问题可能在于PHP对tmp目录没有正确的权限。
尝试将转换后的文件保存到站点的根目录(或其中的子文件夹)中,查看转换是否成功。

在ubuntu服务器上配置unoconv以在apache(www data)用户下运行时 此解决方案基于:




分步指导
遵循以下步骤:
1.创建包含用户www数据的sudoers条目的新文件: sudo vi/etc/sudoers.d/www-data
2.将以下内容添加到新创建的文件并保存: www data ALL=NOPASSWD:/usr/bin/unoconv

3.在PHP exec()中,在ubuntu服务器上配置unoconv以在apache(www data)用户下运行时,请使用“sudo unoconv”

此解决方案基于:




分步指导
遵循以下步骤:
1.创建包含用户www数据的sudoers条目的新文件: sudo vi/etc/sudoers.d/www-data
2.将以下内容添加到新创建的文件并保存: www data ALL=NOPASSWD:/usr/bin/unoconv

3.在PHP exec()中,使用“sudo unoconv”

使用exec()的第三个参数来捕获unoconv的退出值,然后查看发生了什么。。。您只是假设它确实在工作。在调用之后,
$output
中有什么内容?输出是:array(0){},返回值是:251使用到unoconv的完整路径在设置到unoconv的完整路径后结果是相同的:/from cmd它的工作,from php exec()notuse exec()的第三个参数来捕获unoconv的退出值,然后查看发生了什么。。。您只是假设它确实在工作。在调用之后,
$output
中有什么内容?输出是:array(0){},返回值是:251使用unoconv的完整路径在设置unoconv的完整路径后,结果是相同的:/from cmd its working,from php exec()不,我认为这不会是问题,因为我使用sys_get_temp_dir()获得的/tmp文件夹;我认为这不是问题的第二个原因是,file\u put\u contents()工作正常,文件保存在那里。只是使用exec()函数执行命令不起作用:/相信我,仅仅因为您认为这可能不是问题,并不意味着它不会出现问题。我花了太多的时间思考“不可能是那样的……”。请记住,PHP是服务器上自己的用户,并且该用户正在运行unoconv命令。所有这些都失败了,我同意Marc B(上面)得到了同样的结果。我直接在站点的根文件夹中创建了rwxrwx文件夹。尝试使用exec()将生成的文件保存到该文件夹。文件夹为空。在那个之后,我直接从控制台执行了命令,并在那个里创建了生成的文件。我认为这不会有问题,因为我使用sys_get_temp_dir()获得了那个/tmp文件夹;我认为这不是问题的第二个原因是,file\u put\u contents()工作正常,文件保存在那里。只是使用exec()函数执行命令不起作用:/相信我,仅仅因为您认为这可能不是问题,并不意味着它不会出现问题。我花了太多的时间思考“不可能是那样的……”。请记住,PHP是服务器上自己的用户,并且该用户正在运行unoconv命令。所有这些都失败了,我同意Marc B(上面)得到了同样的结果。我直接在站点的根文件夹中创建了rwxrwx文件夹。尝试使用exec()将生成的文件保存到该文件夹。文件夹为空。之后,我直接从控制台执行命令并创建生成的文件,这是我在上面看到的最疯狂的答案之一。你疯了吗?告诉人们他们的www数据用户应该成为sudo,而不需要密码来做管理工作?这是我在网上看到的最疯狂的答案之一。你疯了吗?告诉人们他们的www数据用户应该成为sudo,而不需要密码来做管理工作?