2017-02-10 4 views
1

Je voudrais détecter PDF corrompu en utilisant PHP. J'ai pu déterminer que sur pdf non corrompu j'ai l'étiquette "%% EOF" à la fin du dossier. J'ai également vérifié pour cette étiquette sur corrompu et il n'apparaît pas.Verifier corrompu PDF en utilisant PHP

J'ai eu l'idée de vérifier automatiquement la validité de mon fichier PDF avant de le télécharger sur mon serveur.

<?php 
 
$file = file('good.pdf'); 
 

 
$endfile= $file[count($file) - 1]; 
 

 
echo gettype($endfile),"\n"; 
 
echo $endfile,"\n"; 
 

 
?>

-je obtenir ce résultat

string %%EOF

Pour l'instant, tout semble bien se passer, mais j'ai un problème lorsque l'on compare les résultats.

J'ai testé ce code

<?php 
 
$file = file('good.pdf'); 
 
$endfile= $file[count($file) - 1]; 
 
$n="%%EOF"; 
 

 
echo $endfile; 
 
echo $n; 
 

 
if ($endfile === $n) { 
 
    echo "good"; 
 

 
} else { 
 
    echo "corrupted"; 
 
} 
 

 
?>

Je reçois ce résultat

%%EOF %%EOF corrupted

Je sais que ENDFILE $ et n $ sont str mais quand je veux le comparer, je n'ai jamais l'égalité/match. J'ai aussi essayé avec == mais le résultat est le même.

J'ai aussi essayé comme ça:

<?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"; 
 
} 
 

 
?>

mais j'obtenir ce résultat:

%%EOF %%EOF 1 corrupted

Il m'a donné la même résultat avec ===.

J'ai seulement testé avec un pdf fonctionnant et non corrompu. Savez-vous pourquoi cela ne fonctionne pas? Peut-être que vous avez d'autres méthodes utilisant php pour vérifier si le pdf n'est pas corrompu avant de le télécharger automatiquement sur mon serveur?

+0

Donc vous définissez un PDF pour être valide car il a un marqueur %% EOF ?! C'est assez étrange car un seul fichier texte avec ce contenu serait traité comme un PDF valide pour vous ... Vous devez aller plus loin dans le format de fichier pour vérifier la validité d'un fichier PDF. –

+0

J'ai choisi cette méthode en fonction du pdf que j'ai généré. Quand j'ai analysé tout mon pdf corrompu, le marqueur EOF n'a jamais été atteint. – Rflow

Répondre

2

Lecture http://php.net/manual/en/function.file.php:

Renvoie le fichier dans un tableau. Chaque élément du tableau correspond à une ligne dans le fichier, avec le retour à la ligne toujours attaché. Vous devez supprimer les nouvelles lignes pour les comparer correctement.

Vous devez faire quelque chose comme:

<?php 
$file = file('good.pdf'); 
$endfile= trim($file[count($file) - 1]); 
$n="%%EOF"; 


if ($endfile === $n) { 
    echo "good"; 

} else { 
    echo "corrupted"; 
} 
+0

Merci pour votre réponse. Je l'ai essayé et ça fonctionne très bien;) – Rflow

2

J'ai testé ce moi-même et a remarqué quelque chose:

php > echo $endfile; 
%%EOF 
php > echo strlen($endfile); 
6 

Ressemble 5 caractères, mais il est en fait 6. Il y a une nouvelle ligne à la fin:

php > var_dump($endfile == "%%EOF"); 
php shell code:1: 
bool(false) 
php > var_dump($endfile == "%%EOF\n"); 
php shell code:1: 
bool(true) 

Alors soit comparer w $n="%%EOF\n"; ou trim($endfile); d'abord pour supprimer la ligne de fin.

+0

Merci pour votre réponse. Le problème est résolu. Merci pour les explications. – Rflow