【问题标题】:Verifiy corrupted PDF using PHP使用 PHP 验证损坏的 PDF
【发布时间】:2017-06-29 01:13:13
【问题描述】:

我想使用 PHP 检测损坏的 PDF。我已经能够确定在未损坏的 pdf 上我在文件末尾有标签“%%EOF”。我还检查了这个标签是否损坏,它没有出现。

我的想法是在将 PDF 文件上传到我的服务器之前自动检查其有效性。

<?php
$file = file('good.pdf');

$endfile= $file[count($file) - 1];

echo gettype($endfile),"\n";
echo $endfile,"\n";

?>

我得到了这个结果

string %%EOF 

目前,一切似乎都很好,但在比较结果时我遇到了问题。

我测试了这段代码

<?php
$file = file('good.pdf');
$endfile= $file[count($file) - 1];
$n="%%EOF";

echo $endfile;
echo $n;

if ($endfile === $n) {
    echo "good";

} else {
    echo "corrupted";
}

?>

我得到了这个结果

%%EOF %%EOF corrupted

我知道 $endfile 和 $n 是字符串,但是当我想比较它时,我从来没有得到相等/匹配。我也试过 == 但结果是一样的。

我也试过这样:

<?php
$file = file('good.pdf');
$endfile= $file[count($file) - 1];
$var1val = $endfile;
$var2val = "%%EOF";
echo $var2val;
echo $var1val;
$n = strcmp($var1val,$var2val); // 0 mean that they are the same
echo $n;
if ($n == 0) {
    echo "good";

} else {
    echo "corrupted";
}

?>

但我得到了这个结果:

%%EOF %%EOF 1 corrupted

它给了我与 === 相同的结果。

我只测试了一个正常工作且未损坏的 pdf。你知道为什么这不起作用吗?也许您有其他方法使用 php 在我自动将其上传到我的服务器之前检查 pdf 是否未损坏?

【问题讨论】:

  • 所以你定义一个 PDF 是有效的,因为它有一个 %%EOF 标记?!这有点奇怪,因为包含此内容的单个文本文件会被视为对您来说是有效的 PDF……您必须更深入地研究文件格式以检查 PDF 文件的有效性。
  • 我根据生成的 pdf 选择了这种方法。当我分析所有损坏的 pdf 时,从未到达 EOF 标记。

标签: php pdf corrupt


【解决方案1】:

阅读http://php.net/manual/en/function.file.php

以数组形式返回文件。数组的每个元素对应于文件中的一行,仍然附加换行符。您需要删除换行符才能正确比较。

您需要执行以下操作:

<?php
$file = file('good.pdf');
$endfile= trim($file[count($file) - 1]);
$n="%%EOF";


if ($endfile === $n) {
    echo "good";

} else {
    echo "corrupted";
}

【讨论】:

  • 感谢您的回答。我试过了,它工作得很好;)
【解决方案2】:

我自己对此进行了测试并注意到了一些事情:

php > echo $endfile;
%%EOF
php > echo strlen($endfile);
6

看似5个字符,其实是6个。末尾有换行符:

php > var_dump($endfile == "%%EOF");
php shell code:1:
bool(false)
php > var_dump($endfile == "%%EOF\n");
php shell code:1:
bool(true)

所以要么先与$n="%%EOF\n";trim($endfile); 比较以删除结束线。

【讨论】:

  • 感谢您的回答。问题已经解决了。感谢您的解释。
猜你喜欢
  • 2013-11-25
  • 1970-01-01
  • 2015-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-24
  • 2019-06-26
相关资源
最近更新 更多