我有一堆使用刮板下載的PDF。這個刮板並沒有檢查文件是JPG還是PDF,因此默認情況下,所有這些文件都下載並以'.pdf'擴展名保存。所以,只是澄清批處理中的所有文件都是.pdf。但是,如果我嘗試通過服務器或本地打開它們(不是PDF而是JPG)的文件,我會遇到錯誤。檢查PDF是否實際上是一個帶有PHP的PDF
我的問題。有沒有辦法用PHP來檢查並看看這個文件是否是一個有效的PDF?我想通過一個循環來運行所有的URL來檢查這些文件。其中有數百個,它需要幾個小時的時間來檢查。
感謝
我有一堆使用刮板下載的PDF。這個刮板並沒有檢查文件是JPG還是PDF,因此默認情況下,所有這些文件都下載並以'.pdf'擴展名保存。所以,只是澄清批處理中的所有文件都是.pdf。但是,如果我嘗試通過服務器或本地打開它們(不是PDF而是JPG)的文件,我會遇到錯誤。檢查PDF是否實際上是一個帶有PHP的PDF
我的問題。有沒有辦法用PHP來檢查並看看這個文件是否是一個有效的PDF?我想通過一個循環來運行所有的URL來檢查這些文件。其中有數百個,它需要幾個小時的時間來檢查。
感謝
使用函數獲取MIME類型的文件:finfo_file()
if (function_exists('finfo_open')) {
$finfo = finfo_open(FILEINFO_MIME);
$mimetype = finfo_file($finfo, "PATH-TO-YOUR-FILE");
finfo_close($finfo);
echo $mimetype;
}
echo "<pre>";
print_r($mimetype);
echo "</pre>";
對於本地文件(PHP 5.3+):
$finfo = finfo_open(FILEINFO_MIME_TYPE);
foreach (glob("path/to/files") as $filename) {
if(finfo_file($finfo, $filename) === 'application/pdf') {
echo "'{$filename}' is a PDF" . PHP_EOL;
} else {
echo "'{$filename}' is not a PDF" . PHP_EOL;
}
}
finfo_close($finfo);
對於遠程文件:
$ch = curl_init();
$url = 'http://path.to/your.pdf';
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$results = split("\n", trim(curl_exec($ch)));
foreach($results as $line) {
if (strtok($line, ':') == 'Content-Type') {
$parts = explode(":", $line);
echo trim($parts[1]); // output: application/pdf
}
}
此腳本沒有輸出,我正在運行兼容的PHP版本。 –
如果PDF是在本地下載的(正如您所提到的),路徑是正確的並且存在'finfo'函數,這應該起作用。 – vonUbisch
@ smack-a-bro:你沒有在任何人的腳本上得到任何輸出,所以你做錯了什麼。打開錯誤報告並查看問題所在。 –
使用finfo_file()
功能
<?php
if (function_exists('finfo_open')) {
$mime = finfo_open(FILEINFO_MIME_TYPE);
$mime_type = finfo_file($mime, "FILE-PATH");
if($mime_type == "application/pdf")
echo "file is pdf";
else
echo "file is not pdf";
finfo_close($mime);
}
此腳本沒有輸出 –
嘗試編輯代碼 –
PDF與' 「%PDF」 開始' –
這個問題上的信息有點短。你可以分享你的嘗試,以及你遇到了什麼問題? –
我還沒有嘗試過任何東西,因爲所有的Google搜索都將我引導到類似的東西,但不是我所需要的東西。我覺得我的問題總結了我需要完美的東西。我有一堆是PDF文件。但是,其中一些PDF是被偶然保存爲PDF的JPG文件。我需要弄清楚哪些是哪些。 –