Izin verilen MIME dosya tipleri ile PHP kodu yükleme sorunu

6 Cevap php

Ben bir dosya (resim) Ben upload ve görüntüleri yeniden boyutlandırmak için kullanabileceğiniz PHP upload script var ... O yüzden sadece jpg resimlere izin ve 1MB maksimum dosya boyutu vardır, basit bir MIME türü ve boyutu doğrulama kullanır.

Geçenlerde bir sorun keşfetti. Ben tu komut dosyasını kullanarak bir. Avi dosyayı karşıya çalıştığınızda, komut onun doğru MIME türü ve boyutu gibi dosyasını işler ve sonra sadece hiçbir şey, sadece herhangi bir hata iletisi olmadan geri yükleme formunda beni alır. (Bunun yerine bir "dosya çok büyük" mesajı gösteren).

I mean, if I try to upload a .gif or .txt or something else I get an error, as expected. If I try to upload any file bigger than 1MB I get an error, as expected. Only when I try to upload a .avi file with more than 1MB I dont get any kind of error..... Well, here the first par of the code:

// define a constant for the maximum upload size
define ('MAX_FILE_SIZE', 1024000);

if (array_key_exists('upload', $_POST)) {
// define constant for upload folder
define('UPLOAD_DIR', 'C:/Wamp/www/Version-1.4/posters_uploaded/');

// replace any spaces in original filename with underscores. At the same time, assign to a simpler variable
$file = str_replace(' ', '_', $_FILES['image']['name']);

// convert the maximum size to KB
$max = number_format(MAX_FILE_SIZE/1024, 1).'kb';
// create an array of permitted MIME types
$permitted = array('image/jpeg','image/pjpeg');
// begin by assuming the file is unacceptable
$sizeOK = false;
$typeOK = false;

// check that file is within the permitted size
if ($_FILES['image']['size'] > 0 && $_FILES['image']['size'] <= MAX_FILE_SIZE) {
	$sizeOK = true;
}
// check that file is of a permitted MIME type
foreach ($permitted as $type) {
	if ($type == $_FILES['image']['type']) {
		$typeOK = true;
	break;
	}
}

if ($sizeOK && $typeOK) {
	switch($_FILES['image']['error']) {
		case 0: // ...................

I'm just modifying a build PHP code so Im no expert... Any suggestions?? Thanks.

6 Cevap

John Rasch Yukarıda belirtildiği gibi, php.ini max_upload_filesize üzerindeki herhangi bir dosya hiç işlemez. böylece sizin için hatayı test etmek için hiç şansın yok. Eğer tarih değildi varsayalım ve eğer bunu doğrulamak zorunda.


şimdi ben senin senaryoyu anlamak daha iyi ben bu yapabilecekleriniz olduğunu düşünüyorum:

// at the top of your script
$upload_success = FALSE;


// when successfully detected upload
$upload_success = TRUE;



// if successful upload code is never run
$display_error = "File not uploaded, may be too large a file, "
.    "please upload less than 1MB"
;
print $display_error;


ana noktası olmak:

Sen her zaman derin bir komut çalıştırmak yerden daha bir seviyede kesilmiş olsun çünkü çok büyük yükleme dosyaları algılayamaz.

http://us3.php.net/manual/en/features.file-upload.common-pitfalls.php

Lütfen upload_max_filesize ini-ayarı çok düşük gibi görünüyor. Eğer böyle bir AVI video olarak çok büyük bir dosya upload zaman bu hata görüntülenmesine neden olur.

Metin dosyaları ve. Jpg görüntüleri ile hataları görüyorsanız nedeni bu dosyaların boyutu 1 MB'den daha büyük olduğundan, büyük olasılıkla, ancak upload_max_filesize ayar php.ini aşağıda.

echo ini_get("max_upload_filesize") değerini ing ve php.ini doğrudan dosya erişiminiz yoksa değer ne olduğunu görmek deneyin.

Ben de size mime türünü inanmıyorum öneririm. Bazen insanlar. Png veya. Jpg için yeniden adlandırıldı. Gif dosyası var, ya da kasıtlı olarak yanlış dosya upload olabilir. Bu geçerli jpeg görüntüleri olup olmadığını kontrol etmek getimagesize kullanın.

Dosyaları yüklerken php.ini de dikkat etmek gereken iki direktifler aslında olduğunu, unutmayın. Bir upload_max_filesize olan, ancak diğer post_max_size olduğunu. Genellikle, post_max_size azından eşit olmalı, ve upload_max_filesize, muhtemelen daha büyüktür. Ne olursa olsun size upload_max_filesize set ne, post_max_size daha büyük bir dosya yükleyemezsiniz.

Bir AVI dosyası size izin verilen dizideki listelenmiş mime türlerini maç olmayacak. Lütfen $ sizeOK ve $ typeOK kontrolleri yaptıktan sonra, tuttukları değerleri görmek için kontrol edin ve nasıl komut bu değerleri işler. Bu sizin script davranış anahtar tutabilir.

Bu çizginin üzerinde:

if ($_FILES['image']['size'] > 0 && $_FILES['image']['size'] <= MAX_FILE_SIZE) {
        $sizeOK = true;
}

Bu koyun:

echo '<pre>' . printr($_FILES) . </pre>;

Bu DOSYALAR dizinin içinde ne olduğunu size gösterecektir, ve hata ayıklama için bu oldukça basit yapmak gerekir. Betiğinize eklenen yukarıdaki hattı ile AVI yükleyerek deneyin.

MIME denetimi için $ _FILES ['resim'] ['type'] kullanılarak güvenilir değil, müşteri başlığında üs ve sahte olabilir. Gerçek içeriği hakkında MIME tabanını kontrol etmek fileinfo uzantısı bir göz atın.