我想使用PHP檢測已損壞的PDF。我已經能夠確定沒有損壞的PDF文件末尾有標籤「%% EOF」。我也檢查了這個標籤損壞,並沒有出現。使用PHP驗證已損壞的PDF
我的想法是在上載到我的服務器之前自動檢查我的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標記從未到達。 – Rflow