使用PHP验证损坏的PDF

Rfl*_*low 1 php pdf corrupt

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

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

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

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

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

?>
Run Code Online (Sandbox Code Playgroud)

我得到这个结果

目前,一切似乎都还不错,但是比较结果时我遇到了一个问题。

我测试了这段代码

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

echo $endfile;
echo $n;

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

} else {
    echo "corrupted";
}

?>
Run Code Online (Sandbox Code Playgroud)

我得到这个结果

我知道$ 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";
}

?>
Run Code Online (Sandbox Code Playgroud)

但我得到这个结果:

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

我只测试了工作正常且没有损坏的pdf。您知道为什么这行不通吗?也许您有其他使用php的方法来检查pdf是否未损坏,然后再将其自动上传到服务器?

apo*_*fos 5

阅读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";
}
Run Code Online (Sandbox Code Playgroud)