cassandre morales Posted February 21, 2011 Share Posted February 21, 2011 Bonjour à tous,Je cherche à uploader des fichiers de tous types via la personnalisation de produit côté client : tiff, ai, pdf, docx, xls...J'ai rajouté la ligne $types = array('image/gif', 'image/jpg', 'image/jpeg', 'image/pjpeg', 'image/png', 'image/tiff, 'image/x-png','application/pdf'); dans la fonction isPicture du fichier images.inc.php.Mais rien n'y fait, j'ai toujours un message d'erreur et mon fichier ne s'uploade pas. Quelqu'un aurait-il une idée ?Je tiens à préciser qu'il ne me faut pas d'upload de zip mais vraiment de ai, psd, eps....Merci ! Link to comment Share on other sites More sharing options...
coeos.pro Posted February 21, 2011 Share Posted February 21, 2011 Bonjour, avez vous vidé le cache smarty ? Link to comment Share on other sites More sharing options...
Broceliande Posted February 21, 2011 Share Posted February 21, 2011 Cassandre, if (!$types) $types = array('image/gif', 'image/jpg', 'image/jpeg', 'image/pjpeg', 'image/png', 'image/x-png'); Tes modifs ne sont prises en compte que si $types n'est pas spécifié lors de l'appel de fonction : if (!$types) .Dans ce cas il te faudra remplacer l'appel effectué dans le code appelant qui doit être du genre isPicture($file, $une_liste_de_types) par isPicture($file,null) ou encore par isPicture($file,$ta_propre_liste_de_types) C'est sûrement bien le code appelant qu'il faut modifier et non la classe images.inc.php Link to comment Share on other sites More sharing options...
cassandre morales Posted February 22, 2011 Author Share Posted February 22, 2011 Merci pour vos réponses.J'ai modifié la fonction comme tu m'as conseillé mais cela ne marche pas, ma page product devient blanche....J'ai modifié la fonction dans images.inc.php, c'est le seul endroit où j'ai trouvé isPicture....Voici le code,e je ne comprends pas trop... merci function isPicture($file, NULL) { /* Detect mime content type */ $mimeType = false; if (!$types) $types = array('image/gif', 'image/jpg', 'image/jpeg', 'image/pjpeg', 'image/png', 'image/x-png','application/pdf'); /* Try 4 different methods to determine the mime type */ if (function_exists('finfo_open')) { $const = defined('FILEINFO_MIME_TYPE') ? FILEINFO_MIME_TYPE : FILEINFO_MIME; $finfo = finfo_open($const); $mimeType = finfo_file($finfo, $file['tmp_name']); finfo_close($finfo); } elseif (function_exists('mime_content_type')) $mimeType = mime_content_type($file['tmp_name']); elseif (function_exists('exec')) { $mimeType = trim(exec('file -b --mime-type '.escapeshellarg($file['tmp_name']))); if (!$mimeType) $mimeType = trim(exec('file --mime '.escapeshellarg($file['tmp_name']))); if (!$mimeType) $mimeType = trim(exec('file -bi '.escapeshellarg($file['tmp_name']))); } if (empty($mimeType) OR $mimeType == 'regular file') $mimeType = $file['type']; /* For each allowed MIME type, we are looking for it inside the current MIME type */ foreach ($types AS $type) if (strstr($mimeType, $type)) return true; return false; } Link to comment Share on other sites More sharing options...
Yannkee Posted February 22, 2011 Share Posted February 22, 2011 Visiblement, tu n'as pas modifie le code de la fonction function isPicture($file, NULL){ /* Detect mime content type */ $mimeType = false; if (!$types) $types = array('image/gif', 'image/jpg', 'image/jpeg', 'image/pjpeg', 'image/png', 'image/x-png','application/pdf'); C'est la qu'il faut que tu rajoutes tes types mime. Link to comment Share on other sites More sharing options...
cassandre morales Posted February 22, 2011 Author Share Posted February 22, 2011 J'ai juste rajouté pdf d'abord pour voir mais çà ne marche pas c'est pour çà que je n'ai pas rajouté les autres.... je suis bloqué.. Link to comment Share on other sites More sharing options...
Yannkee Posted February 22, 2011 Share Posted February 22, 2011 pardon, je n'avais pas vu le 'application/pdf' je m'etais focalise sur eps et ai...Je vais regarder j'avais bricole le script pour un client.C'est quoi le message d'erreur que tu recois ? Link to comment Share on other sites More sharing options...
cassandre morales Posted February 22, 2011 Author Share Posted February 22, 2011 Ah oui çà serait super gentil ! Le message est soit "fichiers autorisés jpg, gif, png" ou "erreur de transfert".En fait je pense qu'il faut que je vire le test au niveau du mimetype mais il ne faudrait pas que les gens puissent uploader des fichiers .exe maléfiques !Je sais que c'est au niveau du type qu'il faut que je fasse quelque chose mais chaque fois çà plante argh ! Link to comment Share on other sites More sharing options...
Yannkee Posted February 22, 2011 Share Posted February 22, 2011 Bon a priori (desole c'est un peu vieux cette modif et j'ai pas assez commente visiblement ), c'est plutot au niveau du fichier product.php et de la fonction function pictureUpload(Product $product, Cart $cart)Voila ce que j'ai function pictureUpload(Product $product, Cart $cart) { global $errors; if (!$fieldIds = $product->getCustomizationFieldIds()) return false; $authorizedFileFields = array(); foreach ($fieldIds AS $fieldId) if ($fieldId['type'] == _CUSTOMIZE_FILE_) $authorizedFileFields[intval($fieldId['id_customization_field'])] = 'file'.intval($fieldId['id_customization_field']); $indexes = array_flip($authorizedFileFields); foreach ($_FILES AS $fieldName => $file) if (in_array($fieldName, $authorizedFileFields) AND isset($file['tmp_name']) AND !empty($file['tmp_name'])) { $fileName = md5(uniqid(rand(), true)); if (($error = checkImage($file, intval(Configuration::get('PS_PRODUCT_PICTURE_MAX_SIZE')))) && (!isZIP($file)) && (!isPDF($file)) ){ $errors[] = $error; return false; } if (!$tmpName = tempnam(_PS_TMP_IMG_DIR_, 'PS') OR !move_uploaded_file($file['tmp_name'], $tmpName)) { return false; } if (isPDF($file)) { $fileName = "P" . $fileName; if (!copy($tmpName, _PS_PROD_PIC_DIR_.$fileName)) { $errors[] = Tools::displayError('An error occurred during the file upload.'); return false; } $oldfile = './img/pdf.jpg'; } elseif (isZIP($file)) { $fileName = "Z" . $fileName; if (!copy($tmpName, _PS_PROD_PIC_DIR_.$fileName)) { $errors[] = Tools::displayError('An error occurred during the file upload.'); return false; } $oldfile = './img/zip.jpg'; } else { $fileName = "J" . $fileName; if (!imageResize($tmpName, _PS_PROD_PIC_DIR_.$fileName)) { $errors[] = Tools::displayError('An error occurred during the image upload.'); return false; } $oldfile = $tmpName; } if (!imageResize($oldfile, _PS_PROD_PIC_DIR_.$fileName.'_small', intval(Configuration::get('PS_PRODUCT_PICTURE_WIDTH')), intval(Configuration::get('PS_PRODUCT_PICTURE_HEIGHT')))) { $errors[] = Tools::displayError('An error occurred during the image upload.'); return false; } if (!chmod(_PS_PROD_PIC_DIR_.$fileName, 0777) OR !chmod(_PS_PROD_PIC_DIR_.$fileName.'_small', 0777)) { $errors[] = Tools::displayError('An error occurred during the image upload.'); return false; } $cart->addPictureToProduct(intval($product->id), $indexes[$fieldName], $fileName); unlink($tmpName); } return true; } Donc il faut que tu rajoutes tes mime ici Link to comment Share on other sites More sharing options...
cassandre morales Posted February 22, 2011 Author Share Posted February 22, 2011 j'ai remplacé ma fonction avec la tienne, je n'ai plus d'erreurs mais une page blanche Link to comment Share on other sites More sharing options...
Yannkee Posted February 22, 2011 Share Posted February 22, 2011 lol, peut-etre la version du core, ne fais pas un bete copier-coller, adapte a la fonction avec sa nouvelle forme. (et active le error_display de php pour voir l'erreur eventuellement) Link to comment Share on other sites More sharing options...
cassandre morales Posted February 22, 2011 Author Share Posted February 22, 2011 oui t'inquiète j'ai pas copié-coller bêtement !la page s'affiche mais quand j'uploade, bam page blanche... Link to comment Share on other sites More sharing options...
Yannkee Posted February 22, 2011 Share Posted February 22, 2011 oui t’inquiète j’ai pas copié-coller bêtement ! pardon j'ai ete presomptueux.De toute facon, je pense que c'est la qu'il faut que tu cherches, tu peux poster la fonction que tu as la ? Link to comment Share on other sites More sharing options...
cassandre morales Posted February 22, 2011 Author Share Posted February 22, 2011 Voici la fonction telle qu'elle est sans mes modifs : function pictureUpload(Product $product, Cart $cart) { global $errors; if (!$fieldIds = $product->getCustomizationFieldIds()) return false; $authorizedFileFields = array(); foreach ($fieldIds AS $fieldId) if ($fieldId['type'] == _CUSTOMIZE_FILE_) $authorizedFileFields[intval($fieldId['id_customization_field'])] = 'file'.intval($fieldId['id_customization_field']); $indexes = array_flip($authorizedFileFields); foreach ($_FILES AS $fieldName => $file) if (in_array($fieldName, $authorizedFileFields) AND isset($file['tmp_name']) AND !empty($file['tmp_name'])) { $fileName = md5(uniqid(rand(), true)); if ($error = checkImage($file, intval(Configuration::get('PS_PRODUCT_PICTURE_MAX_SIZE')))) $errors[] = $error; if (!$tmpName = tempnam(_PS_TMP_IMG_DIR_, 'PS') OR !move_uploaded_file($file['tmp_name'], $tmpName)) return false; elseif (!imageResize($tmpName, _PS_PROD_PIC_DIR_.$fileName)) $errors[] = Tools::displayError('An error occurred during the image upload.'); elseif (!imageResize($tmpName, _PS_PROD_PIC_DIR_.$fileName.'_small', intval(Configuration::get('PS_PRODUCT_PICTURE_WIDTH')), intval(Configuration::get('PS_PRODUCT_PICTURE_HEIGHT')))) $errors[] = Tools::displayError('An error occurred during the image upload.'); elseif (!chmod(_PS_PROD_PIC_DIR_.$fileName, 0777) OR !chmod(_PS_PROD_PIC_DIR_.$fileName.'_small', 0777)) $errors[] = Tools::displayError('An error occurred during the image upload.'); else $cart->addPictureToProduct(intval($product->id), $indexes[$fieldName], $fileName); unlink($tmpName); } return true; } Link to comment Share on other sites More sharing options...
Yannkee Posted February 22, 2011 Share Posted February 22, 2011 Il faut que tu cherches a quoi correspond le tableau $authorizedFileFields et que tu ajoutes tes mime types. Link to comment Share on other sites More sharing options...
cassandre morales Posted February 22, 2011 Author Share Posted February 22, 2011 Je crois que c'est le tableau $files envoyé par la fonction dans images.inc.php, argh je tourne en rond ! Link to comment Share on other sites More sharing options...
abatonime Posted March 27, 2011 Share Posted March 27, 2011 Salut,Finalement tu sais quel fichier et fonction il faut modifier? Link to comment Share on other sites More sharing options...
Asenar Posted March 27, 2011 Share Posted March 27, 2011 Bonjour,Ne vaudrait-il pas mieux créer un nouveau type de personnalisation plutôt que modifier l'existant, ce serait peut être plus simple (avec un module par exemple, comme ça le marchand pourrait même choisir quel(s) type(s) de fichiers), non ? Par contre coté sécurité il faudra faire attention!Ah, et en relisant le fil, je vois que pour les cas pdf xls, doc ça ne marchera pas car ce ne sont pas des images, et la fonction teste la taille des images (et donc la dimension (longueurXlargeur) d'un fichier .doc c'est difficile ).Un risque plus important que le maléfique .exe, ce serait un fichier avec du code php ! Donc il faut vraiment être très attentif (par exemple interdire que les fichiers envoyés soit lus ou exécutés (une image c'est pas grave mais un script ... ) ... Le mieux serait d'ailleurs que le dossier d'upload ne soit pas accessible du web, c'est à dire avant la racine. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now