Debian11+WordPress环境下PHP-XPDF获取PDF路径失败求助
解决PHP-XPDF读取WordPress上传PDF的路径与权限问题
一、路径问题修正
- PHP-XPDF不支持直接传入URL,必须使用本地绝对路径,直接放弃URL方式即可。
- 使用本地路径时注意:
- 必须用绝对路径,避免相对路径(WordPress上传文件目录固定,硬编码绝对路径或用WP内置函数获取更可靠)
- 先验证路径有效性,在调用PHP-XPDF前加代码排查:
$pdfPath = '/var/www/html/wp-content/uploads/2023/06/document.pdf'; if (!file_exists($pdfPath)) { die("文件不存在"); } if (!is_readable($pdfPath)) { die("文件不可读"); }
二、权限与二进制路径排查
你遇到的执行错误大概率是两个核心问题:
pdftotext二进制路径配置错误:
你在shell里执行的是pdftotext命令,但PHP配置里写的是/usr/bin/xpdf,这是错误的。先查pdftotext实际路径:which pdftotext把输出的路径(比如
/usr/bin/pdftotext)替换到PHP配置的pdftotext.binaries字段中。临时目录与执行权限:
- 错误信息显示PHP-XPDF会把临时文件写到
/tmp,确保www-data对/tmp有读写权限,默认权限是1777,若被修改则恢复:sudo chmod 1777 /tmp - 检查AppArmor限制:Debian可能限制www-data执行外部命令,执行
sudo aa-status查看规则,若有apache2/php-fpm的限制,需添加允许访问/usr/bin/pdftotext和上传目录的规则。
- 错误信息显示PHP-XPDF会把临时文件写到
三、修正后的PHP-XPDF测试脚本
<?php require __DIR__ . '/vendor/autoload.php'; $logger = null; // 用WP内置函数获取上传目录更稳妥(主题/插件环境下) $upload_dir = wp_upload_dir(); $pdfPath = $upload_dir['basedir'] . '/2023/06/document.pdf'; // 先验证文件 if (!file_exists($pdfPath) || !is_readable($pdfPath)) { die("无效的PDF文件路径"); } $pdfToText = XPDF\PdfToText::create([ 'pdftotext.binaries' => '/usr/bin/pdftotext', // 替换为实际路径 'pdftotext.timeout' => 30, ], $logger); try { $text = $pdfToText->getText($pdfPath); $clean_txt = preg_replace('/[^\00-\255]+/u', '', $text); var_dump($clean_txt); } catch (Exception $e) { echo "错误:" . $e->getMessage(); }
四、WordPress环境额外注意
- 避免硬编码路径,用
wp_upload_dir()获取上传目录的绝对路径,适配不同WP配置 - 检查PHP的
open_basedir限制,确保允许访问上传目录和/tmp,修改php.ini:open_basedir = /var/www/html/:/tmp/
内容的提问来源于stack exchange,提问作者weezle
相关产品推荐
相关产品推荐

