[RESOLU] Le format de fichier n'est pas pris en charge...

Eléphanteau du PHP | 33 Messages

05 sept. 2014, 08:06

Bonjour,

J'ai un site, sous WebAcappela (http://www.usmef.marc-beuvain.com) où les visiteurs ont la possibilité de télécharger des photos.
Jusque récemment, tout fonctionnait correctement, mais depuis hier où j'ai ajouté de nouvelles pages, les fichiers téléchargés sont "corrompus"

Si vous souhaitez essayer: http://usmef.marc-beuvain.com/grp_hnsc14.html choisissez une image et "télécharger"

Ce que je ne comprends pas, c'est pourquoi les anciennes pages qui fonctionnaient bien, ne fonctionne maintenant plus.

Voici le code pour télécharger les images:

Code : Tout sélectionner

<?php include '../../sqlconnectUS.php'; $PictSel=$_POST["select"]; $NumPict = substr($PictSel, 4, 2); // Si on n'arrive pas à se connecter, afficher la raison $mysql_link = mysql_connect($sql_host, $sql_login, $sql_password) or die("Erreur à la connexion : ".mysql_error()); if (!$mysql_link){ die('Could not connect: ' . mysql_error()); } // Connexion MySQL mysql_select_db($sql_bdd_compteurs, $mysql_link); // Filemane correspond à l'evenement à incrementer CmpDwnld $req_augmenterdownload = "UPDATE " . $sql_bdd_table_compteurs." SET NbDwnd = (NbDwnd+1), P" .$NumPict." = (P".$NumPict."+1) WHERE FileN='HNSC14';"; // maintenant on exécute la requête mysql_query($req_augmenterdownload) or die($req_augmenterdownload.'<br />'.mysql_error()); if (isset($_POST["select"])) { $filename=$_POST["select"]; // Envoi du fichier header('Content-Transfer-Encoding: none'); header('Content-Type: application/octetstream; name="'.$filename.'"'); header('Content-Disposition: attachment; filename="'.$filename.'"'); header('Content-length: '.filesize($filename)); header("Pragma: no-cache"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public"); header("Expires: 0"); @readfile($filename) OR die(); exit(); } ?>
Ceci dit, ce code fonctionnait très bien et n'a pas été changé.

Auriez-vous une idée?

Milles mercis! ;)

ViPHP
xTG
ViPHP | 7331 Messages

05 sept. 2014, 10:14

Demandes à ton hébergeur s'il y a eu des changements dans la configuration du serveur.

Eléphanteau du PHP | 33 Messages

05 sept. 2014, 16:35

C'était déjà fait, voici sa réponse.
Bonjour,

Je dois avouer que je suis un peu bloqué dans ma réponse.
Je constate bien le problème mais aucun mécanisme n'a été modifié qui puisse avoir ce type de comportement. On dirait qu'un autre type de données est "mixé" avec le .jpg

Pas d'antivirus sortant sur les images téléchargées

Cordialement
Donc pas très avancé!

Eléphanteau du PHP | 46 Messages

05 sept. 2014, 16:49

Voilà ce que j'utilise moi pour forcer le téléchargement. Ça ressemble un peu au tien mais bon moi je l'utilise depuis quelques années ^^

Tentes ce code et tiens moi au courant :
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=\"" . basename($path) . "\"");
readfile($path); // do the double-download-dance (dirty but worky)
Kal747
---
Envie de faire des rencontres gratuites ? Essayez mon site de rencontre
A la recherche d'une maison ou d'un appartement ? Trouvez le meilleur prix sur annonces immobilières

Eléphanteau du PHP | 33 Messages

06 sept. 2014, 11:58

Salut,

Merci Kal747, j'ai essayé mais ça n'a malheureusement rien changé!

Eléphanteau du PHP | 46 Messages

06 sept. 2014, 12:13

Dans ce cas là tu dois avoir une erreur PHP avant ton header.

Testes ceci :

Laisse juste
if (isset($_POST["select"]))
{
   $filename=$_POST["select"];
         // Envoi du fichier
         header('Content-Transfer-Encoding: none');
         header('Content-Type: application/octetstream; name="'.$filename.'"');
         header('Content-Disposition: attachment; filename="'.$filename.'"');
         header('Content-length: '.filesize($filename));
         header("Pragma: no-cache"); 
         header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public"); 
         header("Expires: 0"); 
         @readfile($filename) OR die();
            exit();      
}
Et met le reste en commentaire.

Tiens moi au courant
Kal747
---
Envie de faire des rencontres gratuites ? Essayez mon site de rencontre
A la recherche d'une maison ou d'un appartement ? Trouvez le meilleur prix sur annonces immobilières

Eléphanteau du PHP | 33 Messages

06 sept. 2014, 12:22

Ce qui est surprenant, c'est que si je lis une image directement sur le serveuŕ du style:

http://www.marc-beuvain.com/XXX/Images/ ... IMG_01.jpg

ET BIEN ÇA MARCHE TRÈS BIEN! :(

Donc cela ne peut pas venir du serveur, n'est ce pas?

Eléphanteau du PHP | 33 Messages

06 sept. 2014, 12:27

Merci Kal, je vais essayé, mais la partie SQL fonctionne très bien! Enfin, je vais essayé pour voir! ;)

Mammouth du PHP | 2278 Messages

06 sept. 2014, 14:56

Du basique pour voir sans modifier trop ton code:
if (isset($_POST["select"]))
{
   $filename=$_POST["select"];
print "$filename"; // histoire de voir
         // Envoi "du fichier
         header('Content-Transfer-Encoding: none');
         header('Content-Type: application/octetstream; name="'.$filename.'"');
         header('Content-Disposition: attachment; filename="'.$filename.'"');
         header('Content-length: '.filesize($filename));
         header("Pragma: no-cache"); 
         header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public"); 
         header("Expires: 0"); 
readfile($filename) OR die(); //enlever le @ pour voir ce qu'il raconte
            exit();      
} 
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 33 Messages

06 sept. 2014, 16:38

Salut et merci,

Toujours pas de changement.

Je vous mets le code appelant, histoire d'être sûr qu'il soit correcte:
<form name="Choice" method="post" action="envoi_image_HNSC14.php">
<body bgcolor="#FFFFFF"> 

<table cellspacing="2">
<tr>
<td>
			<select name="select">
			<option Value="IMG_01.jpg">Photo N:01</option>
			<option Value="IMG_02.jpg">Photo N:02</option>
			<option Value="IMG_03.jpg">Photo N:03</option>			
			<option Value="IMG_04.jpg">Photo N:04</option>
			<option Value="IMG_05.jpg">Photo N:05</option>
			<option Value="IMG_06.jpg">Photo N:06</option>
			<option Value="IMG_07.jpg">Photo N:07</option>
			<option Value="IMG_08.jpg">Photo N:08</option>
			<option Value="IMG_09.jpg">Photo N:09</option>
			<option Value="IMG_10.jpg">Photo N:10</option>
			<option Value="IMG_11.jpg">Photo N:11</option>
			<option Value="IMG_12.jpg">Photo N:12</option>
			<option Value="IMG_13.jpg">Photo N:13</option>

			</select>
</td>				
</tr>	
<tr>
<td>			
<input type="submit"style="background-color: #33FF66; color: #000000; border: 1 solid #ffffff" name="valider" value="Telecharger"> 
</td>
</tr>
</table>
		
</body> 
			 
</form>
En outre, le print "$filename"; n'a aucune action, on ne voit rien de plus!??

Eléphanteau du PHP | 46 Messages

06 sept. 2014, 16:54

Donnes moi le retour d'un var_dump($_POST) ?

Ce qui m’étonne c'est que le fichier se télécharge quand même et est assez gros.
Kal747
---
Envie de faire des rencontres gratuites ? Essayez mon site de rencontre
A la recherche d'une maison ou d'un appartement ? Trouvez le meilleur prix sur annonces immobilières

Mammouth du PHP | 2278 Messages

06 sept. 2014, 17:07

Problème vu et reproduit par moi (Linux, Opera firefox).
Gimp ne peut pas ouvrir le fichier et dit:
Not a JPEG file: starts with 0x49 0x4d (I majuscule et M majuscule)

Ca doit être la fonction readfile qui fait des siennes. Essaie de dénicher son code. Peut-être quelqu'un y comprendra quelque chose....
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 46 Messages

06 sept. 2014, 17:16

La fonction readfile est une fonction de PHP de base...
Kal747
---
Envie de faire des rencontres gratuites ? Essayez mon site de rencontre
A la recherche d'une maison ou d'un appartement ? Trouvez le meilleur prix sur annonces immobilières

Mammouth du PHP | 2278 Messages

06 sept. 2014, 17:32

Voici ta fonction et une fonction issue des contributions à la doc de PHP (pas testé par moi):
print "$filename"; // histoire de voir
// Envoi "du fichier
header('Content-Transfer-Encoding: none'); //différent
header('Content-Type: application/octetstream; name="'.$filename.'"'); //différent
header('Content-Disposition: attachment; filename="'.$filename.'"'); //différent
header('Content-length: '.filesize($filename));
header("Pragma: no-cache"); //différent
header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public"); //différent
header("Expires: 0");
readfile($filename) OR die(); //enlever le @ pour voir ce qu'il raconte
exit();


function DownloadFile($file) { // $file = include path
if(file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}

}
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 33 Messages

06 sept. 2014, 18:45

Merci Sirakawa, ça marche nickel, :D

Voir:
http://www.usmef.marc-beuvain.com/grp_hnsc14.html
<?php

if (isset($_POST["select"]))
{
   $file=$_POST["select"];
if(file_exists($file)) 
{
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}    		
}		
?>
Merci aussi à toi Kal474, c'est sympa d'avoir pris le temps de t’intéresser à mon soucis! ;)

Mais alors en langage simple, d'où vient le problème!