2015-07-20 14 views
7

Tôi có một loạt tệp PDF được tải xuống bằng cách sử dụng một cái scraper hay không. Scraper này không kiểm tra xem tệp có phải là JPG hay PDF hay không, vì vậy, theo mặc định, tất cả các tệp đều được tải xuống và lưu với phần mở rộng '.pdf'. Vì vậy, chỉ để làm rõ tất cả các tập tin trong lô là .pdf. Tuy nhiên, nếu tôi cố gắng mở chúng (Các tệp không phải PDF nhưng thay vì JPG) thông qua máy chủ hoặc cục bộ, tôi bị lỗi.Kiểm tra xem PDF có thực sự là một tệp PDF với PHP

Câu hỏi của tôi. Có cách nào với PHP để kiểm tra và xem liệu tệp này có phải là tệp PDF hợp lệ không? Tôi muốn chạy tất cả các URL thông qua một vòng lặp để kiểm tra các tệp này. Có hàng trăm người trong số họ và phải mất hàng giờ để kiểm tra.

Cảm ơn

+3

Bắt đầu bằng PDF với '"% PDF "' –

+0

Câu hỏi này hơi ngắn về thông tin. Bạn có thể chia sẻ những gì bạn đã thử và những vấn đề nào bạn gặp phải không? –

+0

Tôi chưa thử bất cứ điều gì bởi vì tất cả các tìm kiếm của Google đưa tôi đến một cái gì đó tương tự nhưng không phải những gì tôi cần. Tôi cảm thấy như câu hỏi của tôi tóm tắt những gì tôi cần hoàn hảo. Tôi có một loạt các tệp PDF. Tuy nhiên, một số tệp PDF đó là JPG đã vô tình lưu dưới dạng tệp PDF. Tôi cần phải tìm ra cái nào là cái nào. –

Trả lời

0

Nhận MIME loại tập tin sử dụng chức năng: 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

Điều này cho tôi không có đầu ra –

+0

Bạn đã thay đổi đường dẫn tệp chưa? – Pupil

+0

Có, tôi sẽ nói rằng máy chủ các tệp trực tiếp khác với tập lệnh. Không chắc chắn nếu điều này làm cho một sự khác biệt. –

2

Đối với tập tin địa phương (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); 

Đối với các file từ xa:

$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

Không có đầu ra trên tập lệnh này và tôi đang chạy một phiên bản PHP tương thích. –

+0

Nếu tệp PDF được tải xuống (như bạn đã đề cập) cục bộ, đường dẫn là chính xác và các hàm 'finfo' hiện diện, thao tác này sẽ hoạt động. – vonUbisch

+0

@ smack-a-bro: Bạn không nhận được bất kỳ đầu ra nào trên các tập lệnh của bất kỳ ai, vì vậy bạn đang làm điều gì sai. Bật báo cáo lỗi và xem vấn đề là gì. –

0

Sử dụng finfo_file() chức năng

<?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

Không có đầu ra trên tập lệnh này –

+0

thử mã đã chỉnh sửa –

Các vấn đề liên quan