2012-12-31 5 views
0

업로드 된 이미지를 절반으로 변환하여 서버 공간을 절약 할 수 있도록 PHP 스크립트가 있습니다. 작동하지 않습니다. PHP에 익숙하지 않으므로 다른 사람이 할 수 있습니다. 내가 잘못 가고있는 곳에서 도와주세요.php png 이미지 품질 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>";  
     } 
    } 


} 

답변

2

PNG는 무손실 압축입니다. "quality"를 6으로 설정하면, 평범한 압축 방법을 사용하고 있으며, 아마도 더 많은 공간을 차지할 것입니다. 가장 높은 압축률을 위해 9를 사용하십시오 (CPU 사용량이 약간 더 많이 들지만 배치 처리를하지 않는 한 눈에 띄지 않습니다).

손실없는 최적화를 위해 Yahoo!'s image compression도 볼 수 있습니다.

또한 사용자가 부분적으로 파일 이름을 지정할 수 없도록해야합니다. 누군가 remote_control_script.php을 업로드하면 너무 기뻐하지 않을 것입니다. 사용자가 업로드 한 것을 절대 신뢰하지 마세요.

+0

+1 보안 경고! –

+0

사용자가 PNG 파일을 업로드하도록 강제 할 수있는 방법이 있습니까? – Blynn

+0

@ Blynn, 아니요. 나중에 파일 형식을 서버 측에서 감지 할 수 있습니다 (확장명 만 보는 것이 아니라 파일 데이터를 실제로 검사하여 수행 할 수 있습니다). 그때도 과거에는 이미지 라이브러리에 알려진 취약점이있었습니다. 웹 문서 루트 외부에 파일 이름 확장자없이 일련 번호 또는 파일 이름을 지정합니다. 데이터베이스에서 파일 데이터를 가져 오는 PHP 스크립트로 서비스하십시오. 그런 다음 서버 측 실행을 방지하면서 원할 경우 사용자가 원래 가진 것과 함께 제안 된 파일 이름으로 파일을 반환 할 수도 있습니다. – Brad