2012-12-31 4 views
0

J'ai un script php que j'utilise pour convertir une image téléchargée en moitié c'est qualité afin que je puisse économiser de l'espace sur le serveur, mais ça ne marche pas Je suis nouveau sur PHP alors j'espère aide-moi là où je vais mal.php png qualité d'image 50%

if(isset($_FILES['t1']['name'])){ 
    $file = rand(0, 10000000).$_FILES['t1']['name']; 
    if (move_uploaded_file($_FILES['t1']['tmp_name'], $file)) { 
     if($fp = fopen($file,"rb", 0)) 
     { 
      $picture = fread($fp,filesize($file)); 
      fclose($fp); 
      $img = imagecreatefrompng($file); 
      imagepng($img, $file, 6); //6 quality setting 
      imagedestroy($img); 
      $tag1 = '<img src="'.$file.'" alt="" class="default" />'; 
//unlink($file); 
echo "<script>$(document).ready(function() {var write = $('.item:nth-child(1)').html();localStorage.item1Pantry = write;});</script>";  
     } 
    } 


} 

Répondre

2

Le format PNG est la compression sans perte. Lorsque vous définissez la "qualité" sur 6, vous utilisez vraiment une méthode de compression médiocre, qui occupe probablement plus d'espace. Utilisez 9 pour obtenir la compression la plus élevée (au prix d'une légère augmentation de l'utilisation du processeur, ce qui est à peine perceptible à moins que vous n'effectuiez un traitement par lots).

Vous pouvez également regarder dans Yahoo!'s image compression, pour plus d'optimisations sans perte.

De même, vous ne devriez vraiment pas permettre aux utilisateurs de spécifier des noms de fichiers, même en partie. Vous ne seriez pas trop heureux si quelqu'un a téléchargé remote_control_script.php. Ne faites jamais confiance à ce que les utilisateurs téléchargent.

+0

+1 Pour raison de sécurité! –

+0

Existe-t-il un moyen de forcer les utilisateurs à télécharger des fichiers PNG? – Blynn

+0

@Blynn, Non. Tout ce que vous pouvez faire est de détecter plus tard le type de fichier côté serveur (en examinant réellement les données du fichier, pas seulement en regardant l'extension!). Même alors, il y a eu des vulnérabilités connues dans les bibliothèques d'images dans le passé. Nommez vos fichiers dans l'ordre des numéros séquentiels ou quelque chose, sans extensions de nom de fichier, en dehors de la racine du document Web. Servez-les avec un script PHP qui récupère les données du fichier à partir d'une base de données. Ensuite, vous pouvez même les retourner avec un nom de fichier suggéré avec ce que l'utilisateur avait à l'origine si vous le souhaitez, tout en empêchant l'exécution côté serveur. – Brad