You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP调用shell_exec执行pdftotext提示command not found错误如何解决

问题原因
  • PATH环境变量不匹配:本地终端能正常执行pdftotext是因为当前登录用户的PATH环境变量包含了该命令的安装路径,但PHP运行时(通常依附于web服务器如Apache/Nginx,或者php-fpm进程)的运行用户(常见为www-data、apache、nobody等)的PATH环境变量未包含pdftotext的安装目录,系统无法定位到命令二进制文件。
  • 非全局安装pdftotext:如果pdftotext是个人用户目录下私有安装的,未部署到系统全局路径,web运行用户没有权限读取个人目录下的二进制文件,也会触发找不到命令的错误。
  • chroot运行环境限制:如果PHP配置了chroot隔离运行,chroot环境内没有同步放入pdftotext的二进制文件和依赖的系统库,也会无法找到命令。
解决思路
  1. 优先使用绝对路径调用命令
    首先在终端执行which pdftotext获取命令的绝对路径,比如返回结果为/usr/bin/pdftotext,直接把代码里的命令替换为绝对路径即可解决90%的该类问题,修改后的代码示例:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$url = 'https://testdomain.com/sample.pdf';
$contents = file_get_contents($url);
file_put_contents('delta_file.pdf', $contents);
// 替换为你实际查询到的pdftotext绝对路径
echo shell_exec("/usr/bin/pdftotext -layout delta_file.pdf text_contents.txt 2>&1");
  1. 修复权限问题
    如果替换绝对路径后仍报错,先给pdftotext二进制文件添加全局执行权限:chmod +x /usr/bin/pdftotext(替换为你实际的路径),同时确认PHP运行用户对当前项目目录有读写权限,保证可以读取PDF、生成txt文件。
  2. 配置PHP运行环境的PATH变量
    如果不想每次都写绝对路径,针对php-fpm环境可以编辑对应的池配置文件(通常为/etc/php/[版本号]/fpm/pool.d/www.conf),添加如下配置后重启php-fpm服务即可:
env[PATH] = /usr/local/bin:/usr/bin:/bin
  1. 排查chroot环境
    如果PHP运行在chroot隔离环境中,需要将pdftotext的二进制文件、依赖的所有.so动态库都同步拷贝到chroot目录对应的路径下。
辅助排查命令

你可以在PHP代码中执行以下命令快速定位问题:

  • 查看PHP运行环境的PATH配置:echo shell_exec("echo \$PATH 2>&1");
  • 尝试在PHP环境中定位pdftotext:echo shell_exec("whereis pdftotext 2>&1");

内容的提问来源于stack exchange,提问作者Biju P Dais

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 11:36:03