Page 1 sur 2
Le format de fichier n'est pas pris en charge...
Posté : 05 sept. 2014, 08:06
par AleMatt
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!

Re: Le format de fichier n'est pas pris en charge...
Posté : 05 sept. 2014, 10:14
par xTG
Demandes à ton hébergeur s'il y a eu des changements dans la configuration du serveur.
Re: Le format de fichier n'est pas pris en charge...
Posté : 05 sept. 2014, 16:35
par AleMatt
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é!
Re: Le format de fichier n'est pas pris en charge...
Posté : 05 sept. 2014, 16:49
par Kal747
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)
Re: Le format de fichier n'est pas pris en charge...
Posté : 06 sept. 2014, 11:58
par AleMatt
Salut,
Merci Kal747, j'ai essayé mais ça n'a malheureusement rien changé!
Re: Le format de fichier n'est pas pris en charge...
Posté : 06 sept. 2014, 12:13
par Kal747
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
Re: Le format de fichier n'est pas pris en charge...
Posté : 06 sept. 2014, 12:22
par AleMatt
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?
Re: Le format de fichier n'est pas pris en charge...
Posté : 06 sept. 2014, 12:27
par AleMatt
Merci Kal, je vais essayé, mais la partie SQL fonctionne très bien! Enfin, je vais essayé pour voir!

Re: Le format de fichier n'est pas pris en charge...
Posté : 06 sept. 2014, 14:56
par sirakawa
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();
}
Re: Le format de fichier n'est pas pris en charge...
Posté : 06 sept. 2014, 16:38
par AleMatt
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!??
Re: Le format de fichier n'est pas pris en charge...
Posté : 06 sept. 2014, 16:54
par Kal747
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.
Re: Le format de fichier n'est pas pris en charge...
Posté : 06 sept. 2014, 17:07
par sirakawa
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....
Re: Le format de fichier n'est pas pris en charge...
Posté : 06 sept. 2014, 17:16
par Kal747
La fonction readfile est une fonction de PHP de base...
Re: Le format de fichier n'est pas pris en charge...
Posté : 06 sept. 2014, 17:32
par sirakawa
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;
}
}
Re: Le format de fichier n'est pas pris en charge...
Posté : 06 sept. 2014, 18:45
par AleMatt
Merci Sirakawa, ça marche nickel,
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!