Heim >Backend-Entwicklung >PHP-Tutorial >Ausführliche Einführung zur Lösung des Problems, dass PHP beim Hochladen von Bildern im nicht standardmäßigen Format auf die PJPEG-Methode fehlschlägt

Ausführliche Einführung zur Lösung des Problems, dass PHP beim Hochladen von Bildern im nicht standardmäßigen Format auf die PJPEG-Methode fehlschlägt

黄舟
黄舟Original
2017-03-13 16:39:441528Durchsuche

In diesem Artikel werden hauptsächlich relevante Informationen zur Lösung des Problems des PHP-Uploads von nicht standardmäßigen Bildern im JPEG-Format vorgestellt. Freunde in Not können sich darauf beziehen

Vor einiger Zeit hat die Website ein neues Fotoalbum hinzugefügt Funktion, aber in letzter Zeit habe ich immer festgestellt, dass einige von Benutzern hochgeladene Links zu Bilddateien ungültig sind. Ich habe den Code viele Male überprüft und ausreichend Tests durchgeführt, aber das Problem des Upload-Fehlers tritt schließlich immer noch auf habe heute eine Lösung gefunden.

Ich habe das JPG-Bild gefunden, das der Benutzer nicht von der Sicherungsquelle hochladen konnte, und einen Upload-Test durchgeführt. Nachdem der Upload abgeschlossen war, wurde auf der Seite Folgendes angezeigt:

Warning: imagecreatefromjpeg(): ‘/tmp/lalala' is not a valid JPEG file in /path/upload.php on line 1

Diese Warnung erscheint fällig zur GD-FunktionDie Bibliothekserkennung hat festgestellt, dass die Ursache durch ein nicht standardmäßiges JPEG-Bildformat verursacht wurde.

Lösung: Wenn die PHP-Version > 5.1.3 ist, können Sie sie in php.ini hinzufügen:

gd.jpeg_ignore_warning = 1

Der MIME-Typ enthält image/jpeg und image/pjpeg Es gibt zwei Typen. Die GD-Bibliothek erkennt nur das traditionelle Format des ersteren, und das letztere ist die Abkürzung für progressives JPEG.

Darüber hinaus füge ich eine praktische PHP-Klasse zum Hochladen mehrerer Bilder hinzu, die mehrere Bild-Upload-Funktionen in den Formaten GIF, JPG, JPEG, PJPEG und PNG unterstützt Beschränken Sie die Klasse, laden Sie die Bildgröße hoch, legen Sie das Upload-Verzeichnis fest, einige Einreichungsbeurteilungen und andere Funktionen. Tatsächlich ist diese Kategorie nicht auf das Hochladen von Bildern wie TXT/RAR beschränkt. Ich glaube, Sie können damit umgehen 🎜>


Sie können den Code in eine PHP-Datei kopieren, den Dateinamen speichern: more_upload_file.class.php und

include
<?php 
class more_file_upload{
const FILE_PATH=&#39;/uploadfile/&#39;;//默认文件上传的目录,请自行修改
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(&#39;m-d-Y&#39;);
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(&#39;/&#39;, &#39;image/gif&#39;, &#39;image/jpg&#39;, &#39;image/jpeg&#39;, &#39;image/pjpeg&#39;, &#39;image/png&#39;);
this->file_type_real_array = array(0.1, &#39;jpg&#39;=>74707370, &#39;gif&#39;=>7173, &#39;bmp&#39;=>6677, &#39;png&#39;=>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=&#39;<strong>文件超过服务器的约定大小!</strong>&#39;;break;
case 2: smfilemessage=&#39;<strong>文件超过指定的文件大小!</strong>&#39;;break;
case 3: smfilemessage=&#39;<strong>文件只上传了部分!</strong>&#39;;break;
case 4: echo "this->file_name ".&#39;文件上传失败!<br/>&#39;;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[&#39;chars1&#39;].strInfo[&#39;chars2&#39;]);
smfiletypeflag = array_search(typeCode, this->file_type_real_array);
if(smfiletypeflag == false){ //判断是否是png图片
typeCode = intval(strInfo[&#39;chars2&#39;].strInfo[&#39;chars3&#39;].strInfo[&#39;chars4&#39;]);
smfiletypeflag = array_search(typeCode, this->file_type_real_array);
if(smfiletypeflag == false){ //判断是否是jpg图片
$typeCode = intval(strInfo[&#39;chars7&#39;].strInfo[&#39;chars8&#39;].strInfo[&#39;chars9&#39;].strInfo[&#39;chars10&#39;]);
smfiletypeflag = array_search(typeCode, this->file_type_real_array);
}
}
}
if($smfiletypeflag == false){
$smfilemessage=&#39;<strong>文件类型不对,请核实!</strong>&#39;;
self::destruct();
}else{
$resflag = $this->move_file($this->file_tmp_name,this->file_name);
if (resflag == 1){
$smfilemessage = &#39;文件上传成功!&#39;;
self::totalsize +=intval($smfilesize);
self::destruct();
}else{
$smfilemessage = &#39;<strong>文件上传失败!</strong>&#39;;
self::destruct();
}
}
}
$smfilesizeformat = $this->size_BKM(smfilesize);
echo &#39;<tr>
<td align="left" >&#39;.smfilename.&#39;</td>
<td align="center" >&#39;.smfiletype.&#39;</td>
<td align="center" >&#39;.smfilesizeformat.&#39;</td>
<td align="center" >&#39;.smfilemessage.&#39;</td>
</tr>&#39;;
}
function move_file(mvfiletmp,mvfilename){ //移动文件
mvfilenamearr = explode(&#39;.&#39;,basename(mvfilename));
mvfilenamearr[0] = this->rand_string();
mvfilename = implode(&#39;.&#39;,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;
}
}
?>
verwenden.

Das obige ist der detaillierte Inhalt vonAusführliche Einführung zur Lösung des Problems, dass PHP beim Hochladen von Bildern im nicht standardmäßigen Format auf die PJPEG-Methode fehlschlägt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn