2010-05-02 12 views
7

왜 내가 mime_content_type ($의 mp3_file_path) 그것의 반환 응용 프로그램/octet-stream을 호출 일부 MP3 파일 파일에?이유 mime_content_type에 일부 MP3 파일은 응용 프로그램/옥텟 스트림을 반환

나는이 있습니다

if (!empty($_FILES)) { 
    $tempFile = $_FILES['Filedata']['tmp_name']; 
    $image = getimagesize($tempFile); 
    $mp3_mimes = array('audio/mpeg', 'audio/x-mpeg', 'audio/mp3', 'audio/x-mp3', 'audio/mpeg3', 'audio/x-mpeg3', 'audio/mpg', 'audio/x-mpg', 'audio/x-mpegaudio'); 

    if (in_array(mime_content_type($tempFile), $mp3_mimes)) { 
     echo json_encode("mp3"); 
    } elseif ($image['mime']=='image/jpeg') { 
     echo json_encode("jpg"); 
    } else{ 
     echo json_encode("error"); 
    } 
} 

편집 : 내가 여기에 좋은 클래스를 발견 :

http://www.zedwood.com/article/127/php-calculate-duration-of-mp3

+0

은 어쩌면 몇 가지 코드를 보여? 또는 그러한 파일의 몇 가지 예가 있습니까? – lbedogni

답변

2

application/octet-stream 아마이 파일을 인식하지 못합니다 mime_content_type의 대체 유형 .

MP3는 실제 MP3 파일이 아니거나 파일이 실제 MP3 파일이지만 PHP 함수가 형식을 인식하는 데 사용하는 "마술 바이트"를 포함하지 않습니다. 다른 하위 형식이거나 가변 비트 전송률을가집니다.

당신은 getid3 당신에게 더 나은 결과를 얻을 수 있는지 시도 할 수 있습니다. 나는 그것으로 일한 적이 없지만 멀티미디어 파일에서 많은 정보를 얻으려면 꽤 건강한 라이브러리처럼 보입니다.

PHP 구성에 액세스 할 수있는 경우 change the mime.magic file PHP를 사용할 수 있지만 MP3를 감지 할 수있는 파일이 더 있는지 여부는 알 수 없습니다. (mime.magic 파일은 mime_content_type이 특정 파일 형식을 인식하는 데 사용하는 모든 바이트 시퀀스가 ​​들어있는 파일입니다.

+1

필자는 getid3을 파헤칠 기회를 얻었고, 정확하게 기억한다면 확장자에 따라 파일 형식을 파악한다는 것이 판명났습니다. – jayarjo

8

MP3 파일은 식별에 이상한 짐승입니다. .wav 컨테이너로 MP3를 저장할 수 있습니다. 파일의 시작 부분에 ID3v2 헤더가있을 수 있습니다. 기본적으로 모든 파일에 MP3를 내장 할 수 있습니다.

신뢰성을 감지 할 수있는 유일한 방법은 파일을 통해 천천히 구문 분석과 MP3 프레임처럼 보이는 뭔가를 찾으려고하는 것입니다. 프레임은 유효한 MP3 데이터의 최소 단위이며 가능한 0.028 초의 오디오를 나타냅니다 (메모리 꺼짐). 프레임의 크기는 비트 레이트와 샘플링 속도에 따라 달라집니다, 그래서 당신은 단지 첫 번째 프레임의 비트 레이트/샘플 속도를 잡고 같은 크기가됩니다 다른 모든 프레임을지지 않습니다 - VBR MP3 파일은 전체를 분석해야 총 연주 시간을 계산합니다.

는이 모든 PHP의에서는 FileInfo를 사용하여 MP3를 식별 그 아래로 비등 실제 MP3 데이터 어디서나 파일에 시작할 수있는 등, 신뢰할 수 없습니다. 에서는 FileInfo는, 데이터의 첫 번째 킬로바이트 또는 두에 보이는 데이터가 약간 멀리에서 시작했기 때문에 그것은 MP3 아니에요 말한다면, 그래서 아주 잘 거짓말 될 수 있습니다.

+2

그래서 해결책은 무엇입니까? –

관련 문제