shell_exec无法转换pdftotext

时间:2013-01-25 12:35:04

标签: php linux shell cakephp pdf

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

我在最后四个小时陷入困境,在谷歌花了很多时间,但没有可用的解决方案。任何机构都可以解决这个问题吗?

文件所有者 - 没人

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

任何人都可以提供任何有用的解决方案吗?

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

5 个答案:

答案 0 :(得分:5)

运行pdftotext的命令不正确。

应该有第二个参数告诉pdftotext写入特定文件或只是使用短划线“ - ”写入stdout,除非你真的希望程序创建一个文件名为pdf的文本文件(这个需要在/opt/lampp/.../文件夹中写入权限)

pdftotext version 0.12.4

至少属实
  

“Pdftotext读取PDF文件,PDF文件,并写入文本文件文本文件。如果未指定 text-file ,pdftotext将转换文件。 PDF格式   到file.txt。如果 text-file 是' - ',则文本将发送到stdout。“

因此,您的问题的解决方案只是在文件名之后添加一个短划线,如下所示:

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

如果存在二进制文件且允许PHP使用shell_exec并且您具有权限并且pdf文件存在并且您具有权限。

答案 1 :(得分:2)

来自how to test if PHP system() function is allowed? and not turned off for security reasons

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日志,这就是你所能做的一切。

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:1)

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

var_dump(ini_get('disable_functions')); // not available if shell_exec disabled
var_dump(ini_get('safe_mode')); // not available if true

答案 4 :(得分:0)

由于您运行的是Linux,因此可能存在权限问题

  1. 检查您的文件是否由apache拥有。

    chown apache apache file.php

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

    chmod 644 file.php

  3. 也许检查你的sudoers文件以及 Sudoers ManPage