문제

좋아, 그래서 여러 다른 파일 유형을 처리 해야하는 index.php 파일이 있습니다. 무엇을 기반으로 파일 타입을 추측합니까? REQUEST_URI.

내가 요청하면 http://site/image.jpg, 및 모든 요청이 Index.php를 통해 리디렉션됩니다.

<?php
   include('/www/site'.$_SERVER['REQUEST_URI']);
?>

그 일을 어떻게 올바르게 만들까요?

요청 된 파일의 확장에 따라 테스트해야합니까, 아니면 필드 타입을 얻는 방법이 있습니까?

도움이 되었습니까?

해결책

이미지로 만 일하고 있다고 확신한다면 확인할 수 있습니다. getImagesize () exif_imagetype () PHP 기능. 이미지 MIME 유형을 반환하려고합니다.

외부 종속성을 신경 쓰지 않으면 우수한 것을 확인할 수도 있습니다. getId3 다양한 파일 유형의 MIME 유형을 결정할 수있는 라이브러리.

마지막으로, 당신은 그것을 확인할 수 있습니다 mime_content_type () 기능 - 그러나 그것은 더 이상 사용되지 않았습니다 fileInfo PECL 확장.

다른 팁

MIME_CONTENT_TYPE ()는 더 이상 사용되지 않으므로 앞으로 작동하는 것을 믿지 않을 것입니다. "FileInfo"Pecl 확장이 있지만, 나는 그것에 대해 좋은 것을 듣지 못했습니다.

*nix 서버에서 실행중인 경우 다음을 수행 할 수 있습니다.

$file = escapeshellarg( $filename );
$mime = shell_exec("file -bi " . $file);
$filename should probably include the absolute path.
function get_mime($file) {
  if (function_exists("finfo_file")) {
    $finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension
    $mime = finfo_file($finfo, $file);
    finfo_close($finfo);
    return $mime;
  } else if (function_exists("mime_content_type")) {
    return mime_content_type($file);
  } else if (!stristr(ini_get("disable_functions"), "shell_exec")) {
    // http://stackoverflow.com/a/134930/1593459
    $file = escapeshellarg($file);
    $mime = shell_exec("file -bi " . $file);
    return $mime;
  } else {
    return false;
  }
}

나에게는 아무것도 작동하지 않습니다. mime_content_type 더 이상 사용되지 않고 finfo 설치되지 않았습니다 shell_exec 허용되지 않습니다.

나는 실제로 부족에 의해 지어졌다 기준 PHP의 마임 스니핑 방법. FileInfo를 설치하십시오 ... 더 이상 사용되지 않은 기능을 사용하십시오 ... 오,이 작업은 있지만 이미지에 대해서만! 나는 그것에 지쳤다. 그래서 나는 약간의 연구를했고 Whatwg Mimesniffing Spec - 나는 이것이 여전히 초안 사양이라고 생각합니다.

어쨌든,이 사양을 사용하여 PHP에서 Mimesniffer를 구현할 수있었습니다. 성능은 문제가되지 않습니다. 사실 겸손한 기계에서 PHP가 시간을 내기 전에 수천 개의 파일을 열고 스니핑 할 수있었습니다.

여기에 있습니다 Mimereader 클래스.

require_once("MimeReader.php");

$mime = new MimeReader(<YOUR FILE PATH>);
$mime_type_string = $mime->getType();     // "image/jpeg" etc.

이미지 만 작업하고 있고 Mime Type (예 : 헤더의 경우)이 필요한 경우 가장 빠르고 가장 직접적인 답변입니다.

$file = 'path/to/image.jpg';
$image_mime = image_type_to_mime_type(exif_imagetype($file));

이미지 파일의 이름을 바꾸더라도 실제 이미지 Mime 유형을 출력합니다.

PHP 매뉴얼에 따르면 Finfo-file 기능은이 작업을 수행하는 가장 좋은 방법입니다. 그러나 설치해야합니다 fileInfo PECL 확장.

확장자가 옵션이 아닌 경우 구식을 사용할 수 있습니다. mime_content_type 기능.

mime_content_type() 위의 의견에도 불구하고가 이상한 것으로 보인다. 그것은 - 또는 적어도이 화신이 아닙니다. mime_content_type() 에 따르면 더 이상 사용되지 않습니다 http://php.net/manual/en/function.mime-content-type.php. FileInfo 확장자의 일부이지만 PHP 문서는 이제 PHP 5.3.0으로 기본적으로 활성화되어 있음을 알려줍니다.

PHP 5.3 기준으로 FINFO를 사용하여이를 달성 할 수 있습니다.

<?php
$info = new finfo(FILEINFO_MIME_TYPE);
echo $info->file('myImage.jpg');
// prints "image/jpeg"

FileInfo_mime_type 플래그는 선택 사항입니다. 그것 없이는 일부 파일에 대해 더 장악 한 문자열을 얻습니다. (일부 이미지 유형은 크기와 색 깊이 정보를 반환합니다). FileInfo_mime 플래그를 사용하면 MIME 타입 및 사용 가능한 경우 인코딩을 반환합니다 (예 : 이미지/png; charset = binary 또는 text/x-php; charset = us-ascii). 보다 이 지역 더 많은 정보를 위해서.

나는 그것을 사용하지 않았지만 거기가 있습니다 PECL 확장 파일의 모방 유형을 얻는 데. 그것에 대한 공식 문서가 있습니다 매뉴얼.

목적에 따라 파일 확장은 괜찮을 수 있지만 쉽게 변경되기 때문에 믿을 수 없을 정도로 신뢰할 수 없습니다.

사용자 기능을 사용하여 매우 좋은 결과를 얻었습니다.http://php.net/manual/de/function.mime-content-type.php@''John Dot Howard at Prismmg dot com 26-OCT-2009 03:43 ''

function get_mime_type($filename, $mimePath = '../etc') { ...

FINFO, EXEC 또는 더 이상 사용되지 않은 기능을 사용하지 않습니다

원격 ressources에서도 잘 작동합니다!

이미지 만 다루는 경우 사용할 수 있습니다. [getimagesize()][1] 유형을 포함하여 이미지에 대한 모든 종류의 정보가 포함 된 함수.

보다 일반적인 접근 방식은 PECL의 FileInfo 확장자를 사용하는 것입니다. 이 확장에 대한 PHP 문서는 다음에서 찾을 수 있습니다. http://us.php.net/manual/en/ref.fileinfo.php

어떤 사람들은 그 확장에 대한 심각한 불만이 있습니다 ... 심각한 문제가 발생하거나 어떤 이유로 든 확장을 설치할 수없는 경우 더 이상 사용되지 않은 기능을 확인하고 싶을 수도 있습니다. mime_content_type()

Linux를 실행하고 확장자가 있으면 해시 어레이를 만들어 /etc/mime.types에서 Mime 유형을 읽을 수 있습니다. 그런 다음 메모리에 저장하고 배열 키로 Mime을 호출 할 수 있습니다. :)

/**
 * Helper function to extract all mime types from the default Linux /etc/mime.types
 */
function get_mime_types() {
    $mime_types = array();
    if (
        file_exists('/etc/mime.types') &&
        ($fh = fopen('/etc/mime.types', 'r')) !== false
    ) {
        while (($line = fgets($fh)) !== false) {
            if (!trim($line) || substr($line, 0, 1) === '#') continue;
            $mime_type = preg_split('/\t+/', rtrim($line));
            if (
                is_array($mime_type) &&
                isset($mime_type[0]) && $mime_type[0] &&
                isset($mime_type[1]) && $mime_type[1]
            ) {
                foreach (explode(' ', $mime_type[1]) as $ext) {
                    $mime_types[$ext] = $mime_type[0];
                }
            }
        }
        fclose($fh);
    }
    return $mime_types;
}

서버에있는 모든 파일의 마임은 이것으로 얻을 수 있습니다.

<?php
function get_mime($file_path){
  $finfo = new finfo(FILEINFO_MIME_TYPE);
  $type  = $finfo->file(file_path);
}

$mime = get_mime('path/to/file.ext');
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top