찾다
백엔드 개발PHP 튜토리얼PHP 判断上传文件类型的问题

这几天都在写关于PHP文件上传的代码,BUG不断,都自己解决了,现在唯一没有解决的问题就是:
判断上传文件的类型。网上说的方法大多数是判断文件的扩展名或者类型($_FILES['file']['type']),但是如果有人把扩展名改掉,一样可以上传。所以我不使用这种方法。
后来发现一个函数:

function checkTitle($filename)  //判断文件类型{	$filename=($_FILES['file']['tmp_name']);	$file     = fopen($filename, "rb");	$bin      = fread($file, 2); //只读2字节	fclose($file);	$strInfo  = @unpack("C2chars", $bin);	$typeCode = intval($strInfo['chars1'].$strInfo['chars2']);	$fileType = '';	switch ($typeCode)	{		case 8075:		$fileType = 'zip';		break;		case 8297:		$fileType = 'rar';		break;		case 255216:		$fileType = 'jpg';		break;		case 7173:		$fileType = 'gif';		break;		case 6677:		$fileType = 'bmp';		break;		case 13780:		$fileType = 'png';		break;		default:		$fileType = 'unknown'.$typeCode;	}	//Fix	if ($strInfo['chars1']=='-1' && $strInfo['chars2']=='-40' ){		return 'jpg';	}	    			if ($strInfo['chars1']=='-119' && $strInfo['chars2']=='80' ) 	{		return 'png';	}	return $fileType;}

这个函数可以判断真实的文件类型,但是我调用函数的时候,使用:
$type=array('.txt','.rtf','.doc','.docx','.xls','.xlsx','.ppt','.pptx','.jpg','.jpeg','.png','.bmp','.png','.zip','.rar','.7z','.tar','.gz','.tar.gz');
if(!in_array(checkTitle ($_FILES['file']['tmp_name']) ,$type)) //判断上传文件类型
{
//文件类型不正确的提示
}
其中标红的部分,如果是$_FILES['file']['name']就报错,而如果是$_FILES['file']['tmp_name']就会提示文件类型不正确(即使我上传图片和rar文件也一样),请问怎么写才正确?


回复讨论(解决方案)

先打印出checkTitle方法的返回值是什么。
checkTitle方法里面怎么还有个 $filename=($_FILES['file']['tmp_name']);

1、
function checkTitle($filename)  //判断文件类型
{
    $filename=($_FILES['file']['tmp_name']);
应写作

function checkTitle($filename)  //判断文件类型{    $filename = $filename['tmp_name']);

2、
if(!in_array(checkTitle($_FILES['file']['tmp_name']),$type)) //判断上传文件类型
{
应写作
if(!in_array(checkTitle($_FILES['file']),$type)) //判断上传文件类型{

因为你不能假定表单控件都只命名为 file,如果是别的名字呢?

1、
function checkTitle($filename)  //判断文件类型
{
    $filename=($_FILES['file']['tmp_name']);
应写作

PHP code?123function checkTitle($filename)  //判断文件类型{    $filename = $filename['tmp_n……
我的表单里面上传文件就叫“file”: 

先打印出checkTitle方法的返回值是什么。
checkTitle方法里面怎么还有个$filename=($_FILES['file']['tmp_name']);
如果我写$filename=($_FILES['file']['name']);会报错,只好把name改成tmp_name

自己把问题解决了:
1.因为这时还没有移动临时文件,所以只能用tmp_name,如果用name当然无法得出结果(tmp_name的文件在服务器,而name的文件在客户端);
2.判断不出来的原因是因为array()里面的值都有“.”,删除掉就可以了:
$type=array('txt','rtf','doc','docx','xls','xlsx','ppt','.pptx','jpg','jpeg','png','bmp','png','zip','rar','7z','tar','gz','tar.gz');
(因为我开始使用的是按扩展名判断的方法,所以都有“.”)
现在文件上传的代码完全正常了,另外我在网上看到另一个代码,取文件头前4位,然后转换成16进制。

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
PHP와 Python : 다른 패러다임이 설명되었습니다PHP와 Python : 다른 패러다임이 설명되었습니다Apr 18, 2025 am 12:26 AM

PHP는 주로 절차 적 프로그래밍이지만 객체 지향 프로그래밍 (OOP)도 지원합니다. Python은 OOP, 기능 및 절차 프로그래밍을 포함한 다양한 패러다임을 지원합니다. PHP는 웹 개발에 적합하며 Python은 데이터 분석 및 기계 학습과 같은 다양한 응용 프로그램에 적합합니다.

PHP와 Python : 그들의 역사에 깊은 다이빙PHP와 Python : 그들의 역사에 깊은 다이빙Apr 18, 2025 am 12:25 AM

PHP는 1994 년에 시작되었으며 Rasmuslerdorf에 의해 개발되었습니다. 원래 웹 사이트 방문자를 추적하는 데 사용되었으며 점차 서버 측 스크립팅 언어로 진화했으며 웹 개발에 널리 사용되었습니다. Python은 1980 년대 후반 Guidovan Rossum에 의해 개발되었으며 1991 년에 처음 출시되었습니다. 코드 가독성과 단순성을 강조하며 과학 컴퓨팅, 데이터 분석 및 기타 분야에 적합합니다.

PHP와 Python 중에서 선택 : 가이드PHP와 Python 중에서 선택 : 가이드Apr 18, 2025 am 12:24 AM

PHP는 웹 개발 및 빠른 프로토 타이핑에 적합하며 Python은 데이터 과학 및 기계 학습에 적합합니다. 1.PHP는 간단한 구문과 함께 동적 웹 개발에 사용되며 빠른 개발에 적합합니다. 2. Python은 간결한 구문을 가지고 있으며 여러 분야에 적합하며 강력한 라이브러리 생태계가 있습니다.

PHP 및 프레임 워크 : 언어 현대화PHP 및 프레임 워크 : 언어 현대화Apr 18, 2025 am 12:14 AM

PHP는 현대화 프로세스에서 많은 웹 사이트 및 응용 프로그램을 지원하고 프레임 워크를 통해 개발 요구에 적응하기 때문에 여전히 중요합니다. 1.PHP7은 성능을 향상시키고 새로운 기능을 소개합니다. 2. Laravel, Symfony 및 Codeigniter와 같은 현대 프레임 워크는 개발을 단순화하고 코드 품질을 향상시킵니다. 3. 성능 최적화 및 모범 사례는 응용 프로그램 효율성을 더욱 향상시킵니다.

PHP의 영향 : 웹 개발 및 그 이상PHP의 영향 : 웹 개발 및 그 이상Apr 18, 2025 am 12:10 AM

phphassignificallyimpactedwebdevelopmentandextendsbeyondit

스칼라 유형, 반환 유형, 노조 유형 및 무효 유형을 포함한 PHP 유형의 힌트 작업은 어떻게 작동합니까?스칼라 유형, 반환 유형, 노조 유형 및 무효 유형을 포함한 PHP 유형의 힌트 작업은 어떻게 작동합니까?Apr 17, 2025 am 12:25 AM

PHP 유형은 코드 품질과 가독성을 향상시키기위한 프롬프트입니다. 1) 스칼라 유형 팁 : PHP7.0이므로 int, float 등과 같은 기능 매개 변수에 기본 데이터 유형을 지정할 수 있습니다. 2) 반환 유형 프롬프트 : 기능 반환 값 유형의 일관성을 확인하십시오. 3) Union 유형 프롬프트 : PHP8.0이므로 기능 매개 변수 또는 반환 값에 여러 유형을 지정할 수 있습니다. 4) Nullable 유형 프롬프트 : NULL 값을 포함하고 널 값을 반환 할 수있는 기능을 포함 할 수 있습니다.

PHP는 객체 클로닝 (클론 키워드) 및 __clone 마법 방법을 어떻게 처리합니까?PHP는 객체 클로닝 (클론 키워드) 및 __clone 마법 방법을 어떻게 처리합니까?Apr 17, 2025 am 12:24 AM

PHP에서는 클론 키워드를 사용하여 객체 사본을 만들고 \ _ \ _ Clone Magic 메소드를 통해 클로닝 동작을 사용자 정의하십시오. 1. 복제 키워드를 사용하여 얕은 사본을 만들어 객체의 속성을 복제하지만 객체의 속성은 아닙니다. 2. \ _ \ _ 클론 방법은 얕은 복사 문제를 피하기 위해 중첩 된 물체를 깊이 복사 할 수 있습니다. 3. 복제의 순환 참조 및 성능 문제를 피하고 클로닝 작업을 최적화하여 효율성을 향상시키기 위해주의를 기울이십시오.

PHP vs. Python : 사용 사례 및 응용 프로그램PHP vs. Python : 사용 사례 및 응용 프로그램Apr 17, 2025 am 12:23 AM

PHP는 웹 개발 및 컨텐츠 관리 시스템에 적합하며 Python은 데이터 과학, 기계 학습 및 자동화 스크립트에 적합합니다. 1.PHP는 빠르고 확장 가능한 웹 사이트 및 응용 프로그램을 구축하는 데 잘 작동하며 WordPress와 같은 CMS에서 일반적으로 사용됩니다. 2. Python은 Numpy 및 Tensorflow와 같은 풍부한 라이브러리를 통해 데이터 과학 및 기계 학습 분야에서 뛰어난 공연을했습니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구