2015-07-20 77 views
7

我有一堆使用刮板下載的PDF。這個刮板並沒有檢查文件是JPG還是PDF,因此默認情況下,所有這些文件都下載並以'.pdf'擴展名保存。所以,只是澄清批處理中的所有文件都是.pdf。但是,如果我嘗試通過服務器或本地打開它們(不是PDF而是JPG)的文件,我會遇到錯誤。檢查PDF是否實際上是一個帶有PHP的PDF

我的問題。有沒有辦法用PHP來檢查並看看這個文件是否是一個有效的PDF?我想通過一個循環來運行所有的URL來檢查這些文件。其中有數百個,它需要幾個小時的時間來檢查。

感謝

+3

PDF與' 「%PDF」 開始' –

+0

這個問題上的信息有點短。你可以分享你的嘗試,以及你遇到了什麼問題? –

+0

我還沒有嘗試過任何東西,因爲所有的Google搜索都將我引導到類似的東西,但不是我所需要的東西。我覺得我的問題總結了我需要完美的東西。我有一堆是PDF文件。但是,其中一些PDF是被偶然保存爲PDF的JPG文件。我需要弄清楚哪些是哪些。 –

回答

0

使用函數獲取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>"; 
+0

這給我沒有輸出 –

+0

你有沒有改變文件路徑? – Pupil

+0

是的,我會說文件所在的服務器與腳本不同。不知道這是否有所作爲。 –

2

對於本地文件(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 
    } 
} 
+0

此腳本沒有輸出,我正在運行兼容的PHP版本。 –

+0

如果PDF是在本地下載的(正如您所提到的),路徑是正確的並且存在'finfo'函數,這應該起作用。 – vonUbisch

+0

@ smack-a-bro:你沒有在任何人的腳本上得到任何輸出,所以你做錯了什麼。打開錯誤報告並查看問題所在。 –

0

使用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); 
} 
+0

此腳本沒有輸出 –

+0

嘗試編輯代碼 –