【问题标题】:shell_exec not working not able to convert pdftotextshell_exec 不工作无法转换 pdftotext
【发布时间】:2013-01-09 10:11:16
【问题描述】:

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

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

文件所有者 - 没有人

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

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

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

【问题讨论】:

  • 当您从 PHP 文件执行 shell_exec 时,您是 apache 用户,也许 apache 在 /usr/bin/pdftotext 中没有权限?
  • 如果你通过exec 运行它并查看$output,你会得到什么?应该类似于:exec('/usr/bin/pdftotext /opt/lampp/htdocs/foldername/filename.pdf',$output = array()); var_dump($output);
  • 执行后返回NULL
  • 可能是权限被拒绝。
  • 你可以 chown apache /usr/bin/pdftotext/ 但在此之前,停止 apache,server httpd stop 然后 'su apache` 并检查命令

标签: php linux shell cakephp pdf


【解决方案1】:

您运行 pdftotext 的命令不正确。

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

pdftotext version 0.12.4 至少是这样

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

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

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

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

【讨论】:

    【解决方案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 日志,这就是你所能做的。

    【讨论】:

    • 他可以访问终端,我不认为这是共享主机
    • 对于我的 Dreamhost 帐户,我还拥有控制台访问权限。而且,它不是共享主机。这取决于...但是,即使是私人服务器,他也需要检查“php可以做什么?”。终端功能不相关。
    【解决方案3】:

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

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

    也可以在终端中运行这个 cmd 来检查软件是否正常运行

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

        由于您运行的是 Linux,您可能有权限问题

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

          chown apache apache 文件.php

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

          chmod 644 文件.php

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-05-27
          • 1970-01-01
          • 2012-07-23
          • 2016-04-11
          • 2018-02-16
          • 2018-02-07
          • 2014-05-23
          相关资源
          最近更新 更多