2015-07-20 11 views
7

Ho un mucchio di PDF che sono stati scaricati utilizzando un raschietto. Questo raschietto non ha verificato se il file fosse un file JPG o PDF, quindi per impostazione predefinita tutti sono stati scaricati e salvati con l'estensione ".pdf". Quindi, solo per chiarire tutti i file nel batch sono .pdf. Tuttavia, se provo ad aprirli (i file che non sono PDF ma piuttosto JPG) tramite un server o localmente, sono colpito da un errore.Controllare se PDF è in realtà un PDF con PHP

La mia domanda. C'è un modo con PHP per controllare e vedere se questo file è un PDF valido? Mi piacerebbe eseguire tutti gli URL attraverso un ciclo per controllare questi file. Ce ne sono a centinaia e ci vorranno ore e ore per controllare.

Grazie

+3

PDF Iniziamo con ' "% PDF"' –

+0

Questa domanda è un po 'a corto di informazioni. Puoi condividere ciò che hai provato e quali problemi hai incontrato? –

+0

Non ho provato nulla perché tutte le ricerche su Google mi indirizzano verso qualcosa che è simile ma non quello di cui ho bisogno. Sento che la mia domanda riassume ciò di cui ho bisogno perfetto. Ho un sacco di file che sono PDF. Tuttavia, alcuni di questi PDF sono JPG che sono stati accidentalmente salvati come PDF. Devo capire quali sono quali. –

risposta

0

Ottenere il tipo MIME del file utilizzando la funzione: 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

Questo non mi dà output –

+0

Hai cambiato il percorso del file? – Pupil

+0

Sì, dirò che il server su cui vivono i file è diverso dallo script. Non sono sicuro se questo faccia la differenza. –

2

Per i file locali (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); 

Per i file remoti:

$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

Nessun output su questo script e sto eseguendo una versione PHP compatibile. –

+0

Se i PDF sono stati scaricati (come hai detto) localmente, il percorso è corretto e le funzioni 'finfo' sono presenti, questo dovrebbe funzionare. – vonUbisch

+0

@ smack-a-bro: non stai ottenendo alcun output sugli script di nessuno, quindi stai facendo qualcosa di sbagliato. Attiva la segnalazione degli errori e vedi qual è il problema. –

0

Usa finfo_file() funzione

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

Nessun output su questo script –

+0

prova codice modificato –