. Mp3 Arayacam yükle

5 Cevap php

Ben diğerleri arasında. Mp3 dosya yüklemelerini sağlayan bir PHP yükleme senaryo üzerinde çalışıyorum. Ben MP3 dahil izin filetypes, belirtir, ve 500MB maksimum upload limitini ayarlamak bir dizi oluşturduk:

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

// create an array of permitted MIME types
$permitted = array('application/msword', 'application/pdf', 'text/plain', 'text/rtf', 'image/gif', 'image/jpeg', 'image/pjpeg', 'image/png', 'image/tiff', 'application/zip', 'audio/mpeg', 'audio/mpeg3', 'audio/x-mpeg-3', 'video/mpeg', 'video/mp4', 'video/quicktime', 'video/x-ms-wmv', 'application/x-rar-compressed');

Şimdiye kadar belirtilen tüm dosya türlerini test başarıyla yüklendi ancak nedense. Mp3 için bir hata ile çıkageldi edilmiştir. Yukarıda gördüğünüz gibi ses / mpeg, audio/mpeg3 ve audio/x-mpeg-3 dahil ettik ama bunların hiçbiri bir fark gibi görünüyor.

Birisi sorun ne olabilir önermek ve ayrıca. Mp3 yüklenenler izin için gerekli biri olan ses türü gösterir miyim?

Teşekkürler

Aşağıdaki gibi Update: Ben dosya üzerinde kontrol çalıştırmak için kullanıyorum kodu:

// check that file is within the permitted size
    	if ($_FILES['file-upload']['size'][$number] > 0 || $_FILES['file-upload']['size'][$number] <= MAX_FILE_SIZE) {
    		$sizeOK = true;
    	}

    	// check that file is of an permitted MIME type
    	foreach ($permitted as $type) {
      		if ($type == $_FILES['file-upload']['type'][$number]) {
        		$typeOK = true;
        		break;
        	}
      	}

    	if ($sizeOK && $typeOK) {
      		switch($_FILES['file-upload']['error'][$number]) {
        		case 0:
          			// check if a file of the same name has been uploaded
    	  			if (!file_exists(UPLOAD_DIR.$file)) {
    	    			// move the file to the upload folder and rename it
    	    			$success = move_uploaded_file($_FILES['file-upload']['tmp_name'][$number], UPLOAD_DIR.$file);
    	    		}
    	  			else {
    			    	// strip the extension off the upload filename
    			    	$filetypes = array('/\.doc$/', '/\.pdf$/', '/\.txt$/', '/\.rtf$/', '/\.gif$/', '/\.jpg$/', '/\.jpeg$/', '/\.png$/', '/\.tiff$/', '/\.mpeg$/', '/\.mpg$/', '/\.mp4$/', '/\.mov$/', '/\.wmv$/', '/\.zip$/', '/\.rar$/', '/\.mp3$/');
    			    	$name = preg_replace($filetypes, '', $file);
    			    	// get the position of the final period in the filename
    			    	$period = strrpos($file, '.');
    			    	// use substr() to get the filename extension
    			    	// it starts one character after the period
    			    	$filenameExtension = substr($file, $period+1);
    			    	// get the next filename	
    			    	$newName = getNextFilename(UPLOAD_DIR, $name, $filenameExtension); 
    			    	$success = move_uploaded_file($_FILES['file-upload']['tmp_name'][$number], UPLOAD_DIR.$newName);
    				}
    	  			if ($success) {
            			$result[] = "$file uploaded successfully";
            		}
    	  			else {
    	    			$result[] = "Error uploading $file. Please try again.";
    	    		}
          			break;
        		case 3:
    	  			$result[] = "Error uploading $file. Please try again.";
    			default:
          			$result[] = "System error uploading $file. Contact webmaster.";
        	}
      	}
    	elseif ($_FILES['file-upload']['error'][$number] == 4) {
      		$result[] = 'No file selected';
      	}
    	else {
      		$result[] = "$file cannot be uploaded. Maximum size: $max. Acceptable file types: doc, pdf, txt, rtf, gif, jpg, png, tiff, mpeg, mpg, mp3, mp4, mov, wmv, zip, rar.";
      	}

Ben dosya boyutu yanlış veya uzatma izin verilmez ya bana alt başka sonuç alıyorum.

Update 2: I've run a print_r of the _FILES array to hopefully provide a little more info. The results are:

Array ( [file-upload] => Array ( [name] => Array ( [0] => Mozart.mp3 [1] => [2] => )

        [type] => Array
            (
                [0] => audio/mpg
                [1] => 
                [2] => 
            )

        [tmp_name] => Array
            (
                [0] => /Applications/MAMP/tmp/php/phpgBtlBy
                [1] => 
                [2] => 
            )

        [error] => Array
            (
                [0] => 0
                [1] => 4
                [2] => 4
            )

        [size] => Array
            (
                [0] => 75050
                [1] => 0
                [2] => 0
            )

    )

)

5 Cevap

MAX_FILE_SIZE bayt bir değer

5120000 500 MB değildir. Bu benim hesaplaşma tarafından 5MB oluyor.

Ayrıca php.ini dosyasında "post_max_size" ve "upload_max_size" değişkenleri geçmeyen olduğunuzu kontrol etmek gerekir

İkinci olarak, bir mp3 aşağıdaki mime herhangi biri olabilir

  • audio / mpeg
  • audio / x-mpeg
  • Audio/MP3
  • audio/x-mp3
  • audio/mpeg3
  • audio/x-mpeg3
  • ses / mpg
  • audio / x-mpg
  • Ses / x-mpegaudio

http://filext.com/file-extension/MP3

Sen $ _FILES değerini [...] ['type'] aslında dosya türüyle eşleşen kabul asla. Müşteri herhangi bir rasgele bir dizeyi gönderebilir, ve PHP tarafından tüm işaretli değil. Bkz here.

Eğer (muhtemelen yok ki) hiç güvenlik umurumda değil iyi bir nedeniniz olmadıkça, aslında yüklenen dosya ne tür belirlemek için işi kendiniz yapmak zorundasınız. PHP sizin için ağır kaldırma yapar, hangi varsayılan fileinfo paketi sağlar. Bkz finfo_file().

Eğer hala bu gerek ama emin birçok da aynı sorunla karşı karşıya olacak eğer ben şüpheliyim. Bu ben yaptım ve bu benim için çalıştı budur.

Php Kodu:

if(isset($_POST['submit'])) {

    $fileName = $_FILES['userfile']['name'];
    $tmpName = $_FILES['userfile']['tmp_name'];
    $fileSize = $_FILES['userfile']['size'];
    $fileType = $_FILES['userfile']['type'];

if ($fileType != 'audio/mpeg' && $fileType != 'audio/mpeg3' && $fileType != 'audio/mp3' && $fileType != 'audio/x-mpeg' && $fileType != 'audio/x-mp3' && $fileType != 'audio/x-mpeg3' && $fileType != 'audio/x-mpg' && $fileType != 'audio/x-mpegaudio' && $fileType != 'audio/x-mpeg-3') {
        echo('<script>alert("Error! You file is not an mp3 file. Thank You.")</script>');
    } else if ($fileSize > '10485760') {
        echo('<script>alert("File should not be more than 10mb")</script>');
    } else if ($rep == 'Say something about your post...') {
    $rep == '';
    } else {
    // get the file extension first
    $ext = substr(strrchr($fileName, "."), 1); 

    // make the random file name
    $randName = md5(rand() * time());

    // and now we have the unique file name for the upload file
    $filePath = $uploadDir . $randName . '.' . $ext;

    $result = move_uploaded_file($tmpName, $filePath);
    if (!$result) {
        echo "Error uploading file";
    exit;
    }

    if(!get_magic_quotes_gpc()) {

    $fileName = addslashes($fileName);
    $filePath = addslashes($filePath);

    }

    $sql = "INSERT INTO media SET
            path = '$filePath',
            size = '$fileSize',
            ftype = '$fileType',
            fname = '$fileName'";

if (mysql_query($sql)) {
    echo('');
    } else {
        echo('<p style="color: #ff0000;">Error adding audio: ' . mysql_error() . '</p><br />');
}

ve html kodu olacak;

<form action="<?php $_SERVER['PHP_SELF'] ?>" method="post" enctype="multipart/form-data"">
      <input type="hidden" name="MAX_FILE_SIZE" value="2000000">
      <input type="file" class="file_input" name="userfile" />
      <input type="submit" value="" name="submit" id="submitStatus" class="submit" />
    </form>

5MB sınırı muhtemelen sorundur.

İşte hataları bazı sembolik anlam verecek bazı kod:

class UploadException extends Exception { 
    public function __construct($code) { 
        $message = $this->codeToMessage($code); 
        parent::__construct($message, $code); 
    } 

    private function codeToMessage($code) { 
        switch ($code) { 
            case UPLOAD_ERR_INI_SIZE: 
                $message = "The uploaded file exceeds the upload_max_filesize directive in php.ini"; 
                break; 
            case UPLOAD_ERR_FORM_SIZE: 
                $message = "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form"; 
                break; 
            case UPLOAD_ERR_PARTIAL: 
                $message = "The uploaded file was only partially uploaded"; 
                break; 
            case UPLOAD_ERR_NO_FILE: 
                $message = "No file was uploaded"; 
                break; 
            case UPLOAD_ERR_NO_TMP_DIR: 
                $message = "Missing a temporary folder"; 
                break; 
            case UPLOAD_ERR_CANT_WRITE: 
                $message = "Failed to write file to disk"; 
                break; 
            case UPLOAD_ERR_EXTENSION: 
                $message = "File upload stopped by extension"; 
                break; 

            default: 
                $message = "Unknown upload error"; 
                break; 
        } 
        return $message; 
    } 
} 

// Use 
if ($_FILES['file']['error'] === UPLOAD_ERR_OK) { 
    //uploading successfully done 
} else { 
    throw new UploadException($_FILES['file']['error']); 
}

If you're getting an error from your last else statement, it is difficult to tell what exactly triggered it. Try using something like the above. http://www.php.net/manual/en/features.file-upload.errors.php