Verification de fichier jpeg entiers

cs_kaitennage Messages postés 1 Date d'inscription samedi 1 février 2003 Statut Membre Dernière intervention 14 août 2004 - 14 août 2004 à 14:37
defkrie Messages postés 435 Date d'inscription vendredi 20 septembre 2002 Statut Membre Dernière intervention 20 novembre 2004 - 14 août 2004 à 18:58
bonjour

J'utilise un script php qui lit une directory de fichiers jpeg
pour creer 2 composant une mini et une visu puis extrait des metas data-iptc le voici:

<?
require ("config.inc.php");
require("ftp.php");
require("conchita.php");
//require("purge.inc.php");
require("dreamfake.php");
/* connexion à la base de donnees ------------------------------------------- */
$db = mysql_connect("$host", "$login", "$password") or die("Impossible de se connecter : " . mysql_error());
mysql_select_db("$base",$db);

$rep2=opendir("minis/");
$rep=opendir("photos/");
$rep3=opendir("visu/");
//$rep4=opendir("meres/");

while ($nom=readdir($rep))
{
if (!ereg("^\.(jpg),^\.(JPEG),^\.(JPG),^\.(jpeg)",$nom) and (!file_exists("minis/$nom")and (!file_exists("visu/$nom"))))

{

$tb[]=$nom;
$nom2="photos/".$nom;

$handle = imagecreatefromjpeg($nom2);
$handle2 = imagecreatefromjpeg($nom2);

$x=imagesx($handle);
$y=imagesy($handle);

$x2=imagesx($handle2);
$y2=imagesy($handle2);

$k=$x/200;
$k2=$x2/400;

$y_dest=$y/$k;
$y_dest2=$y2/$k2;

$dst_img = imagecreatetruecolor(200,$y_dest);
$dst_img2 = imagecreatetruecolor(400,$y_dest2);

imagecopyresampled($dst_img, $handle, 0, 0, 0, 0, 200, $y_dest, $x, $y);
imagecopyresampled($dst_img2, $handle2, 0, 0, 0, 0, 400, $y_dest2, $x2, $y2);
imagejpeg($dst_img, "minis/$nom",100);
imagejpeg($dst_img2, "visu/$nom",100);
imagedestroy($handle);
imagedestroy($handle2);
imagedestroy($dst_img);
imagedestroy($dst_img2);
//copy($nom2,"meres/$nom");

foreach ($tb as $valeur)


/*extraction et lecture des champs iptc-----------------------------------------------*/

$size = GetImageSize("photos/$valeur",&$info);
if (isset($info["APP13"])) {
$iptc = iptcparse($info["APP13"]);}



if (is_array($iptc)) {
$result1["caption"] = $iptc["2#120"][0];
$result2["object_name"] = $iptc["2#005"][0];
$result3["urgency"] = $iptc["2#010"][0];
$result4["category"] = $iptc["2#015"][0];
$result5["supp_categories"] = $iptc["2#020"][0];
$result6["spec_instr"] = $iptc["2#040"][0];
$result7["release_date"] = $iptc["2#030"][0];
$result30["release_time"] = $iptc["2#035"][0];
$result8["by_line"] = $iptc["2#080"][0];
$result9["byline_title"] = $iptc["2#085"][0];
$result10["city"] = $iptc["2#090"][0];
$result11["state"] = $iptc["2#095"][0];
$result12["country"] = $iptc["2#101"][0];
$result13["otr"] = $iptc["2#103"][0];
$result14["headline"] = $iptc["2#105"][0];
$result15["credit"] = $iptc["2#110"][0];
$result16["source"] = $iptc["2#115"][0];
$result18["keywords"] = $iptc["2#025"][0];
$result19["caption_writer"] = $iptc["2#122"][0];
$result20["service"] = $iptc["1#030"][0];
$result21["date_created"] = $iptc["2#055"][0];
$result22["langue"] = $iptc["2#135"][0];
$result23["copyr"] = $iptc["2#116"][0];
$result24["time_created"] = $iptc["2#060"][0];
$result25["cpays"] = $iptc["2#100"][0];
$result26["cville"] = $iptc["2#240"][0];
$result32["logiciel"] = $iptc["2#065"][0];
$result33["version"] = $iptc["2#070"][0];
$result34["date_sent"] = $iptc["1#070"][0];
$result35["time_sent"] = $iptc["1#080"][0];

$caption=$result1["caption"];
$supcat=$result5["supp_categories"];
$object_name=$result2["object_name"];
$category=$result4["category"];
$speinstr=$result6["spec_instr"];
$by_line= $result8["by_line"];
$byline_title=$result9["byline_title"];
$otr= $result13["otr"];
$headline=$result14["headline"];
$credit=$result15["credit"];
$source=$result16["source"];
$keyword=$result18["keywords"];
$capw=$result19["caption_writer"];
$service=$result20["service"];
$lng=$result22["langue"];
$copyr=$result23["copyr"];
$cpays=$result25["cpays"];
$cville=$result26["cville"];
$release_date=$result7["release_date"];
$release_time=$result30["release_time"];
$date_created=$result21["date_created"];
$time_created=$result24["time_created"];
$city=$result10["city"];
$date_sent=$result34["date_sent"];
$time_sent=$result35["time_sent"];


/* Formatage du texte pour base mysql----------*/

$caption=addslashes(stripslashes(trim($caption)));
$caption=addslashes(stripslashes(strtolower(trim($caption))));
$caption=htmlspecialchars($caption);
$caption=ucfirst($caption);


$city=addslashes(stripslashes(trim($city)));
$city=addslashes(stripslashes(strtoupper(trim($city))));
$city=htmlspecialchars($city);

$object_name=addslashes(stripslashes(strtoupper(trim($object_name))));
$object_name=addslashes(stripslashes(trim($object_name)));
$object_name=htmlspecialchars($object_name);


$keyword=htmlspecialchars($keyword);
$keyword=addslashes(stripslashes(trim($keyword)));


$headline=htmlspecialchars($headline);
$headline=addslashes(stripslashes(trim($headline)));

$capw=htmlspecialchars($capw);
$capw=addslashes(stripslashes(trim($capw)));


$supcat=htmlspecialchars($supcat);
$supcat=addslashes(stripslashes(trim($supcat)));


$speinstr=htmlspecialchars($speinstr);
$speinstr=addslashes(stripslashes(trim($speinstr)));



$source=strtoupper($source);



$state=$result11["state"];
$state=htmlspecialchars($state);
$state=addslashes(stripslashes(trim($state)));

$country=$result12["country"];
$country=htmlspecialchars($country);
$country=addslashes(stripslashes(trim($country)));

$urgency=$result3["urgency"];





/* envoie de la requete au serveur MYSQL ----------------------------------------*/

$sql=MYSQL_QUERY("INSERT INTO `iptc` (`Ref_pho`,`caption`,`object_name`,`urgency`,`category`,`supp_categories`,`spec_instr`,`release_date`,`by_line`,`byline_title`,`city`,`state`,`country`,`otr`,`headline`,`credit`,`source`,`keywords`,`caption_writer`,`service`,`date_created`,`langue`,`copyr`,`time_created`,`cpays`,`cville`,`nom_fich`,`time_created_gmt`,`release_time`,`release_time_gmt`,`date_sent`,`time_sent`)
VALUES ('', '$caption','$object_name','$urgency', '$category', ' $supcat', '$speinstr', '$release_date' , '$by_line', '$byline_title', '$city', '$state', '$country', '$otr', '$headline', '$credit', '$source', '$keyword', '$capw', '$service', '$date_created' , '$lng', '$copyr', '$time_created', '$cpays', '$cville','$valeur', '$time_created','$release_time','$release_time','$date_sent','$time_sent')");

mysql_query("DELETE FROM iptc where nom_fich='Thumbs.db'"); /* a cause de la grosse DAUBE Microsoft qui cree ce fichier pour ses miniatures---*/

}
}

}

/* fin de boucle *------------------------------*/

while ($nom=readdir($rep2))
{

if (file_exists("minis/$nom") and !file_exists("photos/$nom"))
{
unlink("minis/$nom");

}
}

while ($nom=readdir($rep3))
{

if (file_exists("visu/$nom") and !file_exists("photos/$nom"))
{

mysql_query("DELETE from iptc where nom_fich='$nom'");
unlink("visu/$nom");
}
}

MYSQL_CLOSE();

?>

Mais j'ai un petit probleme lorque qu'un fichier jpeg est corrompu
car il est traite quand meme et je voudrais savoir si il ya moyen
de verifier l'intergritee d'un fichier avec readfile ou fread
savoir si le fichier jpeg a une fin correcte ou pas

Merci

2 réponses

defkrie Messages postés 435 Date d'inscription vendredi 20 septembre 2002 Statut Membre Dernière intervention 20 novembre 2004
14 août 2004 à 18:55
avec readfile ou fread non à mon sens à moins que tu connait la taille exacte
fread sert à prendre tout le contenu mais pour les images cest inutilisable
il ya en php des librairies pour traiter les images et jpeg (par ex pour en creer ou modifer) peut etre qu'il existe une fonction pour voir s'il est corrumpu.
\-> Defkrie !?!
\->http://ndwc.fwhost.net/
0
defkrie Messages postés 435 Date d'inscription vendredi 20 septembre 2002 Statut Membre Dernière intervention 20 novembre 2004
14 août 2004 à 18:58
tout cre que tu peux faire avec eux ct

$taille_fichier=filesize("le_fichier.txt"); // Contient la taille du fichiet en octet $contenu_integral=fread($fp,$taille_fichier); // Contient le contenu intégral du fichier 


\-> Defkrie !?!
\->http://ndwc.fwhost.net/
0
Rejoignez-nous