4

我正在尝试将pdf文件转换为文本文件。当我通过终端运行命令时,它工作正常,但是当尝试通过它执行它时PHP它不起作用。

从过去四个小时开始,我就陷入了这种情况,在谷歌上花了很多时间,但没有可用的解决方案。任何机构都可以解决这个问题吗?

文件所有者 - 没有人

shell_exec('/usr/bin/pdftotext /opt/lampp/htdocs/foldername/filename.pdf');

谁能提供任何有用的解决方案?

我还尝试将usr文件夹所有权从root更改为nobody,并为文件夹及其上下文提供777权限。

4

5 回答 5

5

您运行 pdftotext 的命令不正确。

应该有第二个参数告诉 pdftotext 写入特定文件或只使用破折号“-”写入标准输出,除非您实际上希望程序创建一个文件名为 pdf 的文本文件(这需要写入/opt/lampp/.../ 文件夹中的权限)

这至少对于pdftotext version 0.12.4

"pdftotext 读取 PDF 文件,PDF-file,并写入一个文本文件,text-file。如果未指定 text-file,pdftotext 将 file.pdf 转换为 file.txt。如果text -file是'-',则文本被发送到标准输出。”

因此,您的问题的解决方案只需在文件名后添加一个破折号,如下所示:

<?php
$pdftext = shell_exec('/usr/bin/pdftotext /opt/lampp/htdocs/foldername/filename.pdf -');
echo $pdftext;

前提是二进制文件存在并且 PHP 被允许使用 shell_exec 并且你有权限并且 pdf 文件存在并且你有权限。

于 2013-02-02T10:59:50.550 回答
2

如何测试是否允许 PHP system() 函数?并且出于安全原因没有关闭

function isAvailable($func) {
    if (ini_get('safe_mode')) return false;
    $disabled = ini_get('disable_functions');
    if ($disabled) {
        $disabled = explode(',', $disabled);
        $disabled = array_map('trim', $disabled);
        return !in_array($func, $disabled);
    }
    return true;
}

您可能需要检查isAvailable('shell_exec') 在共享主机上此功能是否可能被禁用。

如果它没有被禁用,请检查 Apache 日志,这就是你所能做的。

于 2013-01-25T12:41:42.837 回答
2

尝试 exec 并确保在您的 php.ini 文件中关闭安全模式,例如 safe_mode = Off

exec('/usr/bin/pdftotext /opt/lampp/htdocs/foldername/filename.pdf')

还在终端中运行此 cmd 以检查软件是否正常工作

于 2013-02-03T00:38:33.470 回答
1

这通常是许多网络服务器禁用的功能,您可以检查:

var_dump(ini_get('disable_functions')); // not available if shell_exec disabled
var_dump(ini_get('safe_mode')); // not available if true
于 2013-01-25T12:38:54.893 回答
0

由于您正在运行 Linux,因此您可能拥有权限问题

  1. 检查您的文件是否归 apache 所有。

    chown apache apache file.php

  2. 检查您的文件是否有权限

    chmod 644 文件.php

  3. 也许还要检查您的 sudoers 文件
    Sudoers ManPage

于 2013-02-04T08:55:42.000 回答