PHP dosya yükleme sorunları

3 Cevap php

Merhaba ben bir php komut dosyası kullanarak bir görüntü yüklemek için çalışıyorum. Ve neyin gerçekten garip ben sadece başka bir yerde script çalışıyor Internet Explorer'da aşağıdaki hatayı olsun:

Warning: move_uploaded_file(pictures/) [function.move-uploaded-file]: failed to open stream: Is a directory in /home/tntauto1/public_html/admin_add1.php on line 59

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpcJnHZE' to 'pictures/' in /home/tntauto1/public_html/admin_add1.php on line 59

Warning: copy() [function.copy]: The first argument to copy() function cannot be a directory in /home/tntauto1/public_html/admin_add1.php on line 60

İşte Script:

if(is_uploaded_file($_FILES['image']['tmp_name'])){
    if($_FILES['image']['type'] == 'image/jpeg'){
	    $original = 'original_'.$v_id.'.jpg';
	    $large = 'large_'.$v_id.'.jpg';
	    $small = 'small_'.$v_id.'.jpg';

    }elseif($_FILES['image']['type'] == 'image/gif'){
	    $original = 'original_'.$v_id.'.gif';
	    $large = 'large_'.$v_id.'.gif';
	    $small = 'small_'.$v_id.'.gif';
    }else{
	    $error = 'Error: The image could not be uploaded. It must be in .jpg, .jpeg or .gif format.';
    }
    if(move_uploaded_file($_FILES['image']['tmp_name'],'pictures/'.$large)){}
	    copy('pictures/'.$large,'pictures/'.$small);

    $imgsize = getimagesize('pictures/'.$large); //>>>>>>>>>>>>>>>>>>>>>>>>>>>>---- Resize to 480 X 360
    $width = $imgsize[0];
    $height = $imgsize[1];
    if(($width > 480) || ($height > 360)){//resize the image
	    $ratio = $width / $height;
	    if(100 / $ratio >= 80){//calculates if height of uploaded image is too large
		    $new_width = floor(360 * $ratio);
		    $new_height = 360;
	    }elseif(150 * $ratio > 100){// calculate if width of uploaded image is too large
		    $new_width = 480;
		    $new_height = floor(480 / $ratio);
	    }
	    if($_FILES['image']['type'] == 'image/jpeg'){
		    $img = imagecreatefromjpeg('pictures/'.$large);
		    $img_copy = imagecreatetruecolor($new_width,$new_height);
		    imagecopyresampled($img_copy,$img,0,0,0,0,$new_width,$new_height,$width,$height);
		    imagejpeg($img_copy,'pictures/'.$large,100);	
	    }
	    if($_FILES['image']['type'] == 'image/gif'){
		    $img = imagecreatefromjpeg('pictures/'.$large);
		    $img_copy = imagecreatetruecolor($new_width,$new_height);
		    imagecopyresampled($img_copy,$img,0,0,0,0,$new_width,$new_height,$width,$height);
		    imagejpeg($img_copy,'pictures/'.$large,100);	
	    }
    }

3 Cevap

if($_FILES['image']['type'] == 'image/jpeg'){

Tarayıcı tarafından gönderilen MIME türüne güvenmeyin.

IE (genellikle yanlış) JPEG için malzemeler image/pjpeg, bu nedenle bilinmeyen bir filetype tespit ve $ hata kuruyoruz Error: The image could not be uploaded. It must be in .jpg, .jpeg or .gif format. ...: david değindiğim gibi bu durumda senin sorunun ancak daha sonra yine küçük $ veya büyük $ set değil rağmen, yine de dosyayı taşımak için çalışın rağmen.

Ama daha fazla, tarayıcı sunulan tipi tamamen yanlış olması muhtemeldir. Sen yüklenen dosya veya ortam türünü uygun olması güven olamaz, bu yüzden bile onları kontrol zahmet etmeyin. Çağrı PHP görüntü olduğunu düşünüyor ne tür bulmak için getimagesize sonrası Bunun yerine, $imgsize[2] bakmak.

Genel kullanıcılardan görüntü yüklenenler kabul edilir ve eğer ... Eğer bir güvenlik sorunu var. Bu HTML etiketleri içeren geçerli bir GIF (veya başka bir filetype) oluşturmak için mükemmel mümkündür. Kanlı-aptal-IE kendi başına bir sayfa olarak GIF erişmek için birlikte geldiğinde o, HTML etiketleri algılar bunu yanlış olmalıdır söyledi Content-Type karar, ve dahil olmak üzere herhangi yerine, bir HTML sayfası olarak yorumlamak gerekir Daha sonra sitenizin güvenlik bağlamında yürütür orada JavaScript.

Eğer güvenilir bir kaynaktan gelen dosya yükleme izin var ve görüntü işleme değilseniz kendinizi (genellikle istenmeyen HTML kaldırma yan etkiye sahip olacaktır ki), genelde onları komut dosyası önlemek için farklı bir hostname görüntüleri hizmet için var sitenize.

if($FILES['image']['type'] == 'image/jpeg'){

Dosya yükleme verilerini tutan değişken olmalıdır $_FILES. $FILES boş (sadece kullanılır), değişken olduğundan, sizin $large değişken bir dizin pictures/ olduğu bir dosya taşıyorsanız o kadar da boş, PHP size söylediğim gibi. Bu doğrudur önce $error ayrıca IFS hiçbiri beri hata mesajı içermelidir.

Bu gibi hataları önlemenin bir yolu error_reporting E_ALL sizin $FILES değişken (bir yazım hatası) tanımlanmamış olması bir uyarı görüntülenir olurdu ayarlanmış ile geliştirmektir.

Büyük $ değeri yoktur, ya da sıfırlanır çünkü, bir dizin hareket edemez.