이 글은 PHP가 비표준 형식의 사진을 업로드하는 데 실패하는 문제를 해결하는 방법에 대한 관련 정보를 주로 소개합니다. pjpeg 실패가 필요한 친구는 이를 참고할 수 있습니다
얼마 전 웹사이트에 새로운 사진 앨범이 추가되었습니다. 기능을 사용하고 있는데 최근에는 사용자가 업로드한 이미지 파일의 일부 링크가 유효하지 않은 것으로 나타났습니다. 코드를 여러 번 확인하고 충분한 테스트를 거쳤지만 여전히 업로드 실패 문제가 발생합니다. 오늘 해결책을 찾았습니다.
사용자가 백업 소스에서 업로드하지 못한 JPG 이미지를 찾아 업로드 테스트를 수행했습니다. 업로드가 완료된 후 페이지에
Warning: imagecreatefromjpeg(): ‘/tmp/lalala' is not a valid JPEG file in /path/upload.php on line 1
이 경고가 나타납니다. GD함수 라이브러리 감지 결과 비표준 JPEG 이미지 형식으로 인해 발생한 것으로 확인되었습니다.
해결 방법, PHP 버전 > 5.1.3인 경우 php.ini에 추가할 수 있습니다.
gd.jpeg_ignore_warning = 1
MIME 유형에는 image/jpeg 및 image/pjpeg의 두 가지 유형이 있습니다. GD 라이브러리는 전자의 전통적인 형식만 인식하고 후자는 Progressive JPEG의 약어입니다.
추가로 gif, jpg, jpeg, pjpeg, png 형식의 다양한 이미지 업로드 기능을 지원하는 실용적인 PHP 다중 이미지 파일 업로드 클래스 를 첨부합니다. 클래스 제한, 이미지 크기 업로드, 업로드 디렉토리 설정, 일부 제출 판단 및 기타 기능. 실제로 이 카테고리는 이미지 업로드에만 국한되지 않습니다. TXT/RAR 등의 파일 형식도 업로드할 수 있습니다. 구체적인 코드는 아래에 게시되어 있습니다. 🎜>
<?php class more_file_upload{ const FILE_PATH='/uploadfile/';//默认文件上传的目录,请自行修改 var file_type; var file_type_array; var file_type_real_array; var file_type_string; var file_name; var file_size; var file_tmp_name; var file_error; var handledate; static totalsize=0; function construct(file_name,file_error,file_size,file_tmp_name,file_type){ this->handledate=date('m-d-Y'); if (!empty(file_name)){ this->file_name = file_name; this->file_error = file_error; this->file_size = file_size; this->file_tmp_name = file_tmp_name; this->file_type = file_type; this->file_type_array = array('/', 'image/gif', 'image/jpg', 'image/jpeg', 'image/pjpeg', 'image/png'); this->file_type_real_array = array(0.1, 'jpg'=>74707370, 'gif'=>7173, 'bmp'=>6677, 'png'=>807871); this->show_execute_message(this->file_error,this->file_name,this->file_type,this->file_size); } } function destruct(){ this->file_name = NULL; this->file_error = NULL; this->file_size = NULL; this->file_tmp_name = NULL; this->file_type = NULL; self::totalsize = 0; } function show_execute_message(smfileerror,smfilename,smfiletype,smfilesize){ if(smfileerror>0){ switch (smfileerror){ case 1: smfilemessage='<strong>文件超过服务器的约定大小!</strong>';break; case 2: smfilemessage='<strong>文件超过指定的文件大小!</strong>';break; case 3: smfilemessage='<strong>文件只上传了部分!</strong>';break; case 4: echo "this->file_name ".'文件上传失败!<br/>';break; } self::destruct(); }else{ smfiletypeflag = array_search(smfiletype,this->file_type_array); //进行真实格式验证 if(smfiletypeflag != false){ file = fopen(this->file_tmp_name, "rb"); bin = fread(file, 10); fclose(file); strInfo = @unpack("c10chars", bin); typeCode = intval(strInfo['chars1'].strInfo['chars2']); smfiletypeflag = array_search(typeCode, this->file_type_real_array); if(smfiletypeflag == false){ //判断是否是png图片 typeCode = intval(strInfo['chars2'].strInfo['chars3'].strInfo['chars4']); smfiletypeflag = array_search(typeCode, this->file_type_real_array); if(smfiletypeflag == false){ //判断是否是jpg图片 $typeCode = intval(strInfo['chars7'].strInfo['chars8'].strInfo['chars9'].strInfo['chars10']); smfiletypeflag = array_search(typeCode, this->file_type_real_array); } } } if($smfiletypeflag == false){ $smfilemessage='<strong>文件类型不对,请核实!</strong>'; self::destruct(); }else{ $resflag = $this->move_file($this->file_tmp_name,this->file_name); if (resflag == 1){ $smfilemessage = '文件上传成功!'; self::totalsize +=intval($smfilesize); self::destruct(); }else{ $smfilemessage = '<strong>文件上传失败!</strong>'; self::destruct(); } } } $smfilesizeformat = $this->size_BKM(smfilesize); echo '<tr> <td align="left" >'.smfilename.'</td> <td align="center" >'.smfiletype.'</td> <td align="center" >'.smfilesizeformat.'</td> <td align="center" >'.smfilemessage.'</td> </tr>'; } function move_file(mvfiletmp,mvfilename){ //移动文件 mvfilenamearr = explode('.',basename(mvfilename)); mvfilenamearr[0] = this->rand_string(); mvfilename = implode('.',mvfilenamearr); if (is_uploaded_file(mvfiletmp)){ uploadfile = self::FILE_PATH."mvfilename"; result = move_uploaded_file(mvfiletmp,uploadfile); return result; } } function rand_string(){ string = md5(uniqid(rand().microtime())); return string; } function size_BKM(size){ // B/KB/MB单位转换 if(size < 1024) { size_BKM = (string)size . " B"; } elseif(size < (1024 * 1024)) { size_BKM = number_format((double)(size / 1024), 1) . " KB"; }else { size_BKM = number_format((double)(size / (1024*1024)),1)." MB"; } return size_BKM; } } ?>
위 내용은 PHP가 비표준 형식의 사진을 업로드하는 문제를 해결하기 위한 자세한 소개 pjpeg 실패 방법 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!