我想使用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)
我得到这个结果
string %%EOF 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)
我得到这个结果
%%EOF %%EOF corruptedRun 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)
但我得到这个结果:
%%EOF %%EOF 1 corruptedRun Code Online (Sandbox Code Playgroud)
它给我===的相同结果。
我只测试了工作正常且没有损坏的pdf。您知道为什么这行不通吗?也许您有其他使用php的方法来检查pdf是否未损坏,然后再将其自动上传到服务器?
阅读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)
| 归档时间: |
|
| 查看次数: |
1431 次 |
| 最近记录: |