gpt4 book ai didi

php - 使用 PHP 检查 PDF 页数(在 Linux 中)

转载 作者:太空宇宙 更新时间:2023-11-04 10:49:51 28 4
gpt4 key购买 nike

我有一个网页,允许用户将文件上传到帐户文件夹。仅限 PDF 和 JPG 文件。我想计算每个上传的 PDF 中的页数,以将其显示给用户。

为此,我使用了 PDFINFO linux 库,它是 XPDF proyect 的一部分。这是二进制文件的手册页:http://linuxcommand.org/man_pages/pdfinfo1.html

您可以在此处下载包含二进制文件的 .zip:http://www.foolabs.com/xpdf/download.html

我的代码(完美运行,但昨天失败了):

function getNumPagesInPDF($document){
if(!file_exists($document))return null;
$cmd = "pdfinfo";
// Open the document
exec($cmd." '".$document."'", $output);

// Browse the data
$pagecount = 0;
foreach($output as $op){
// Extrac number of pages
if(preg_match("/Pages:\s*(\d+)/i", $op, $matches) === 1){
$pagecount = intval($matches[1]);
break;
}
}
return $pagecount;
}

我可以在 SSH 中运行该命令,它在服务器中运行。现在,此代码在 PHP 中不起作用,但没有任何更改代码。

啊!一点补充:我检查了 exec 在我的 PHP 中使用:

 function exec_enabled() {
$disabled = explode(',', ini_get('disable_functions'));
return !in_array('exec', $disabled);
}
if (exec_enabled()){
echo "exec funciona";
}

另一个补充:PHP 没有显示任何与此相关的错误,我已启用错误记录到日志文件(包括警告)。我的主机最近激活了 mod_security。

TASK1:试试$document变量:路径可以,相对于php代码文件放置的地方。路径存在,文件也存在。

任务 2:检查 $output 变量是否有任何东西:不,$output 数组是空的!为什么?看不懂。

任务 3:检查 $cmd。"'".$document."'":没问题,并将“结果”复制到 ssh 工作。我迷路了。

最佳答案

根据评论讨论,我们已经看到使用裸文件名运行二进制文件并不总是有效。这在控制台上和在像 exec() 这样的系统命令中一样真实。

当您在任一环境中运行 pdfinfo 时,系统将搜索环境变量 PATH 以发现在哪些目录中找到它。这个变量几乎总是不同的您的用户帐户和 Apache 环境,这就是为什么在以编程方式运行二进制文件时始终指定完全限定文件名很重要。

据我所知,exec() 不会将包含当前 PHP 脚本的文件夹视为当前工作目录。即使是这样,当前目录 . 也需要位于 Apache 用户的 PATH 中才能找到它。因此,我不确定为什么这曾经对您有用,但它强调了上述教训的重要性:始终使用完整路径。

您还应该从设置文件中读取路径,而不是在代码中硬连接它。当您从应用程序的本地、测试、暂存和实时环境迁移时,这将对您有所帮助,这些环境可能会将此二进制文件存储在不同的位置。

关于php - 使用 PHP 检查 PDF 页数(在 Linux 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31425606/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com