2012-04-26 8 views
2

finfo_* 함수는 파일에 대한 정보를 반환합니다. 가장 흥미로운 기능은 첫 번째 매개 변수는이 파일에 대한 반환 원하는 정보 만 인 자원입니다finfo_ * functions

string finfo_file(resource $finfo, string $file_name = NULL [, int $options = FILEINFO_NONE [, resource $context = NULL ]]) 

이다; 내 경우, 나는 FILEINFO_MIME_TYPE을 원하는, 그래서 finfo_open() 기능 사용 : 내 업로드 된 파일의 MIME 형식을 얻을 수

resource finfo_open([int $options = FILEINFO_NONE [, string $magic_file = NULL ]]) 

$a = finfo_open(FILEINFO_MIME_TYPE) 
echo finfo_file($a,$fileatt['tmp_name']); 

와 끝까지, 그리고 모두가 잘 작동

그러나, 두 가지 질문 :

  • 3 (선택 사양) 매개 변수가 finfo_file이면 int $options = FILEINFO_NONE이지만 첫 번째 옵션은 finfo_open과 동일합니다. finfo_file의 첫 번째 매개 변수에 리소스의 일부로 필요하므로 동일한 기능의 선택적 매개 변수 (int)이기도 한 이유는 무엇입니까?

  • 초, 리소스 및 기능 이름 finfo_open은 상당히 혼동스러운 것처럼 보입니다. mysql_* 함수에서 리소스은 쿼리의 결과입니다. 상당히 복잡한 개체로 이해할 수 있습니다. 그러나 여기에 리소스 그냥 문자열입니다, 그래서 PHP는 그것을 보이는 것보다 더 복잡하게 보입니까? 비슷하게, 파일이 조작되고 사용되어야 할 함수 중 하나가 일반적으로 어프로치라는 단어에 이라는 이름으로 열리고 그 이름에 처음에는 (나에게 어쨌든) 파일 스트림이 열리고/여기에서 파일에서 원하는 정보를 지정하는 데 사용됩니다. 이 용어들에 대한 이상한 역사적 이유가 있습니까?

답변

1

용어 자원 및 함수 이름 finfo_open은 매우 혼란 스러울 것 같다; mysql_ * 함수에서 리소스는 질의의 결과이며, 나는 꽤 복잡한 객체라고 이해할 수있다. 그러나, 여기에 자원

아니, finfo_open의 결과가 자원 단지 문자열입니다. 리소스는 무엇이든 상관 없으며 대개 외부 프로그램의 식별자입니다. MySQL의 경우, MySQL 자원은 저수준의 mysql 클라이언트 라이브러리가 연 결한 연결 식별자입니다. MySQL 결과 자원은 특정 연결을 통해 열린 결과에 대한 식별자입니다.

finfo_open의 경우에는 열리는 "마법 파일"이 있습니다. 이 마법 파일에는 MIME 형식 정보가 들어 있습니다. 당신은 finfo_open에 두 번째 매개 변수로 사용하는 특정 마법의 파일을 지정할 수 있습니다

resource finfo_open([int $options = FILEINFO_NONE [, string $magic_file = NULL ]]) 

그래서 여기에 외부 리소스는 열린 매직 파일의 파일 핸들입니다. 여러 finfo 쿼리를 수행하는 경우이 파일을 열어두기를 원하므로이 파일을 리소스로 추상화했습니다.

finfo_file에 3 (옵션) 매개 변수가 int $options = FILEINFO_NONE이지만, 이것이 내가이 뒤에 생각이 무엇인지 모른다, finfo_open 참 좋은 질문이다

에 1 옵션과 동일 . 아마도 동일한 종류의 finfo 쿼리를 반복적으로 수행하는 경우 finfo_file을 호출 할 때마다 대신 finfo_open으로 매개 변수로 지정할 수 있습니다.