解决PHP上传非标准格式的图片pjpeg失败的方法

来源:脚本之家  责任编辑:小易  

我也是刚刚遇到了你的问题。找到了一段参考资料,希望能对你有所帮助。  Windows和Linux

前一阵子网站新上了相册功能,可最近总发现有一些用户上传的图片文件链接失效,代码检查了很多次,测试也做的比较充分了,但还是会出现上传失败的问题,很是郁闷,今天终于找到了解决办法。

  php文件上传,提示移动文件失败,基本是上传保存的目录不可写造成的,需要好好设置一下,下面是一个

从备份源中找到了用户上传失败的JPG图片,进行上传测试,上传完成后页面提示:

上传类,保存文件名称为 uppoo.php:<?phpclass upphoto{

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

把代码粘贴到编辑器 希望对你有用 呵呵 <?php function getn

出现这个Warning是由于GD函数库检测发现是非标准JPEG图片格式导致。

是这样的,现在浏览器安全性加强了,不能获取到本地端的路径所以只能取得上传到的文件名,你得手动定义

解决方法,如果PHP版本 > 5.1.3,可以在php.ini中增加:

我家猫平时不喜欢呆人类睡的床,除非我躺在沙发上,她会过来像小孩一样靠着我躺一会,大概就是发发嗲表示一下依赖吧。大冬天很冷的时候会趁我们关灯以后偷偷钻我被窝,应该是怕冷吧!因为我老公不喜欢她上床,所以她都是偷偷摸摸过来,默默等在我这边的床头柜上,直到我发现她,漏个小洞给她蹑手蹑脚地进来

gd.jpeg_ignore_warning = 1

死飞在于一个死字他和普通自行车比少了一个“弹子盘”就物理学来说减少了一个做功的单位那么我们可以简单得讲我们骑死飞是将自己的机械能转换成了动能而一般的自行车中间因为多了个弹子盘我们先是将机械能转换成动能然后这个动能再转换成能使盘子转动的机械能机械能最后带动自行车转换成动能虽然解释可能有点不可理解但只要知道因为多做了功所以我们消耗需要更大而同样的消耗下骑死飞我们力的传送就更有效那么再来分析山地车和公路车为啥山地车要慢一点呢其实这是个误区通常情况下山地车和公路车同等车轮半径那么调节到最高档位(记不得了貌似是9档?)急速状态下是一样快的我以前是骑山地车的专门和骑公路车的比过但是这样很累和死飞和普通车比

在 MIME 类型中有 image/jpeg 与 image/pjpeg 两种,GD库只认识前者的传统格式,后者是 progressive JPEG 的缩写,啥是pjpeg昵?

有人说,城市人文明讲究,我却认为农村人更加讲究。为什么呢?农村文化是我国传统文化的的根据地,农村文化的变迁也反映了我国传统文化的兴衰更迭。农村人有传统,虽然不一定有科学道理,但基本都有源头可以追溯。就拿木工做床做床来说,现在基本按照房间大小来布置,但旧时的农村可不是,依旧讲究“门不离八,床不离七”,门甭管多大都得有八,寓意开门大发,床甭管多小,也都得有七,寓意娶妻生子。虽然这些风俗没有科学道理,但都反映了劳动人民的愿景。当然,农村还有许许多类似的讲究,比如说就有很多东西您只能借,不能还。比如说药罐、比如说拐杖,比如说灵杠,当然还有发面等等。这些东西要么不吉利、要么不常使用、要么不好借也不好还。

这个链接中有详细的解释:

吴亦凡将代言新款小米手机,我当时是不信的,毕竟荣耀8的代言人就是吴亦凡,虽说合同可能到期了,但总不至于代言老东家的死对头吧!于是我在微博上搜了一下,有吴亦凡的粉丝发视频表示吴亦凡今天就是在拍摄小米新款手机的宣传片,以下为该网友的微博截图:有网友说吴亦凡代言小米手机其实早就洽谈好了,吴亦凡不久前给麦当劳拍摄了宣传片,里面的吴亦凡使用的就是亮蓝色的小米6,以下为吴亦凡拍摄的麦当劳宣传片截图,多个镜头都可以清楚的看到吴亦凡使用的就是亮蓝色小米6。而麦当劳的宣传海报里吴亦凡手持的也是小米6,好像还特意把小米6拍的很显眼,看来吴亦凡代言小米手机是板上钉钉的事了。吴亦凡现在代言小米6并无不妥之处,虽说他去

http://www.faqs.org/faqs/jpeg-faq/part1/section-11.html

另外,php.net 中也有相关问题的详细讨论,有兴趣的朋友可以进去看看:

http://bugs.php.net/bug.php?id=29878

另外给大家附上一个实用的PHP多图片文件上传类,支持gif、jpg、jpeg、pjpeg、png格式的多图片上传功能,类中可限制图片类型、上传图片大小、设置上传目录、一些提交判断等功能。其实本类不局限于图片的上传,也可以上传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文件中,保存文件名为:more_upload_file.class.php,使用时include。

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

上传type中jpg是image/jpeg还是image/pjpeg

文件上传筛选jpg图片,需要用image/pjpeg;

例如:

<input type="file" name="userfile" accept="image/png, image/pjpeg, image/gif, image/bmp" title="图片" />

打开的文件选择窗口可以筛选出 png, jpg, gif, bmp 四种格式的图片。

PHP:上传图片后错误,新手求帮助.

单上传图片的话也用不到gd库的函数吧。下面是一个例子:

<!-- upload.html文件 -->

<!DOCTYPE html>

<html>

<head>

    <title>upload</title>

    <meta http-equiv="content-type" content="text/html;charset=utf-8">

</head>

<body>

<h2>文件上传</h2>

<!-- 如果要上传文件务必要加上 enctype="multipart/form-data" -->

<form enctype="multipart/form-data" method="post" action="upload.php">

<table>

<tr><td>用户名</td><td><input type="text" name="username"></td></tr>

<tr><td>文件介绍</td><td><textarea name="introduce" rows="5" cols="20"></textarea></td></tr>

<tr><td>选择文件</td><td><input type="file" name="myfile"></td></tr>

<tr><td colspan="2"><input type="submit" name="submit" value="提交"></td></tr>

</table>

</form>

</body>

</html><?php 

// upload.php文件

// 打印$_FILES

/*echo '<pre>';

print_r($_FILES);

echo '</pre>';*/

// 创建上传的文件夹

$folder=substr($_SERVER['DOCUMENT_ROOT'], -1)=='/'?$_SERVER['DOCUMENT_ROOT']:$_SERVER['DOCUMENT_ROOT'].'/';

$folder.='file/uploads/';

// echo $folder;exit();

if (!file_exists($folder)) {

    mkdir($folder);

}

// 防止文件被覆盖

$folder.=$_POST['username'].'/';

if (!file_exists($folder)) {

    mkdir($folder);

}

// *上传文件的大小

if ($_FILES['myfile']['size']>2*1024*1024) {

    echo '上传文件不能超过2M.';

    exit();

}

// 规定上传的文件类型

// if (!in_array($_FILES['myfile']['type'], array('image/jpeg','image/pjpeg','image/gif'))) {

if (current(explode('/', $_FILES['myfile']['type']))!='image') {

    echo '只能上传图片格式的文件.';

    exit();

}

// 防止同一个用户上传相同的文件

$suffix=explode('.', $_FILES['myfile']['name']);

$suffix=end($suffix);

$file_name=time().rand(1000,9999).'.'.$suffix;

// 判断文件是否是通过http post提交的

if (is_uploaded_file($_FILES['myfile']['tmp_name'])) {

    move_uploaded_file($_FILES['myfile']['tmp_name'], $folder.$file_name);

}

 ?>

php 编写 实现上传图片至服务器的函数

php上传图片客户端和服务器端实现方法分享给大家供大家参考。具体如下:

前台表单代码

<form name="form1" method="post" action="admin_upfile.php" enctype="multipart/form-data">

<input type="file" name="pic">

<input type="submit" name="Submit" value="开始上传" class="button">

</form>

后端php代码

<?php

//这里上传 $upsize判断上传文件的大小

$uppath = "/attached/"; //文件上传路径

//转换根目录的路径

if (strpos($uppath, "/") == 0)

{

$i = 0;

$thpath = $_SERVER["SCRIPT_NAME"];

$thpath = substr($thpath, 1, strlen($thpath));

while (strripos($thpath, "/") !== false)

{

$thpath = substr($thpath, strpos($thpath, "/") + 1, strlen($thpath));

$i = ++$i;

}

$pp = "";

for ($j = 0; $j < $i; ++$j)

{

$pp .= "../";

}

$uppaths = $pp . substr($uppath, 1, strlen($thpath));

}

$filename = date("y-m-d");

if (is_dir($uppaths . $filename) != TRUE)

mkdir($uppaths . $filename, 0777);

$f = $_FILES['pic'];

if ($f["type"] != "image/gif" && $f["type"] != "image/pjpeg" && $f["type"] != "image/jpeg" && $f["type"] != "image/x-png")

{

echo "<script>alert('只能上传图片格式的文件');window.close()</script>";

return false;

}

//获得文件扩展名

$temp_arr = explode(".", $f["name"]);

$file_ext = array_pop($temp_arr);

$file_ext = trim($file_ext);

$file_ext = strtolower($file_ext);

//新文件名

$new_file_name = md5(date("YmdHis")) . '.' . $file_ext;

echo $dest = $uppaths . $filename . "/" . date("ymdhis") . "_" .

$new_file_name; //设置文件名为日期加上文件名避免重复 上传目录

echo $dest1 = $uppath . $filename . "/" . date("ymdhis") . "_" .

$new_file_name; //设置文件名为日期加上文件名避免重复

$r = move_uploaded_file($f['tmp_name'], $dest);

?>

求助!php制作上传图片时候遇到的问题

<?php

/*

* 参数说明

* $max_file_size : 上传文件大小*, 单位BYTE

* $destination_folder : 上传文件路径

* $watermark : 是否附加水印(1为加水印,其他为不加水印);

*

* 使用说明:

* 1. 将PHP.INI文件里面的"extension=php_gd2.dll"一行前面的;号去掉,因为我们要用到GD库;

* 2. 将extension_dir =改为你的php_gd2.dll所在目录;

*/

// 上传文件类型列表

$uptypes = array (

'image/jpg',

'image/png',

'image/jpeg',

'image/pjpeg',

'image/gif',

'image/bmp',

'image/x-png'

);

$max_file_size = 20000000; //上传文件大小*,单位BYTE

$destination_folder = 'uploadimg/'; //上传文件路径

$watermark = 1; //是否附加水印(1为加水印,其他为不加水印);

$watertype = 1; //水印类型(1为文字,2为图片)

$waterposition = 1; //水印位置(1为左下角,2为右下角,3为左上角,4为右上角,5为居中);

$waterstring = "http://www.xplore.cn/"; //水印字符串

$waterimg = "xplore.gif"; //水印图片

$imgpreview = 1; //是否生成预览图(1为生成,其他为不生成);

$imgpreviewsize = 1 / 2; //缩略图比例

?>

<html>

<head>

<title>ZwelL图片上传程序</title>

</head>

<body>

<form id="upfile" name="upform" enctype="multipart/form-data" method="post" action="">

<label for="upfile">上传文件:</label>

<input type="file" name="upfile" id="fileField" />

<input type="submit" name="submit" value="上传"/>

</form>

<?php

if ($_SERVER['REQUEST_METHOD'] == 'POST') {

//判断是否有上传文件

if (is_uploaded_file($_FILES['upfile']['tmp_name'])) {

$upfile = $_FILES['upfile'];

print_r($_FILES['upfile']);

$name = $upfilep['name']; //文件名

$type = $upfile['type']; //文件类型

$size = $upfile['size']; //文件大小

$tmp_name = $upfile['tmp_name']; //临时文件

$error = $upfile['error']; //出错原因

if ($max_file_size < $size) { //判断文件的大小

echo '上传文件太大';

exit ();

}

if (!in_arrar($type, $uptypes)) { //判断文件的类型

echo '上传文件类型不符' . $type;

exit ();

}

if (!file_exists($destination_folder)) {

mkdir($destination_folder);

}

if (file_exists("upload/" . $_FILES["file"]["name"])) {

echo $_FILES["file"]["name"] . " already exists. ";

} else {

move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);

echo "Stored in: " . "upload/" . $_FILES["file"]["name"];

}

$pinfo = pathinfo($name);

$ftype = $pinfo['extension'];

$destination = $destination_folder . time() . "." . $ftype;

if (file_exists($destination) && $overwrite != true) {

echo "同名的文件已经存在了";

exit ();

}

if (!move_uploaded_file($tmp_name, $destination)) {

echo "移动文件出错";

exit ();

}

$pinfo = pathinfo($destination);

$fname = $pinfo[basename];

echo " <font color=red>已经成功上传</font><br>文件名: <font color=blue>" .$destination_folder . $fname . "</font><br>";

echo " 宽度:" . $image_size[0];

echo " 长度:" . $image_size[1];

echo "<br> 大小:" . $file["size"] . " bytes";

if ($watermark == 1) {

$iinfo = getimagesize($destination, $iinfo);

$nimage = imagecreatetruecolor($image_size[0], $image_size[1]);

$white = imagecolorallocate($nimage, 255, 255, 255);

$black = imagecolorallocate($nimage, 0, 0, 0);

$red = imagecolorallocate($nimage, 255, 0, 0);

imagefill($nimage, 0, 0, $white);

switch ($iinfo[2]) {

case 1 :

$simage = imagecreatefromgif($destination);

break;

case 2 :

$simage = imagecreatefromjpeg($destination);

break;

case 3 :

$simage = imagecreatefrompng($destination);

break;

case 6 :

$simage = imagecreatefromwbmp($destination);

break;

default :

die("不支持的文件类型");

exit;

}

imagecopy($nimage, $simage, 0, 0, 0, 0, $image_size[0], $image_size[1]);

imagefilledrectangle($nimage, 1, $image_size[1] - 15, 80, $image_size[1], $white);

switch ($watertype) {

case 1 : //加水印字符串

imagestring($nimage, 2, 3, $image_size[1] - 15, $waterstring, $black);

break;

case 2 : //加水印图片

$simage1 = imagecreatefromgif("xplore.gif");

imagecopy($nimage, $simage1, 0, 0, 0, 0, 85, 15);

imagedestroy($simage1);

break;

}

switch ($iinfo[2]) {

case 1 :

//imagegif($nimage, $destination);

imagejpeg($nimage, $destination);

break;

case 2 :

imagejpeg($nimage, $destination);

break;

case 3 :

imagepng($nimage, $destination);

break;

case 6 :

imagewbmp($nimage, $destination);

//imagejpeg($nimage, $destination);

break;

}

//覆盖原上传文件

imagedestroy($nimage);

imagedestroy($simage);

}

if ($imgpreview == 1) {

echo "<br>图片预览:<br>";

echo "<img src=\"" . $destination . "\" width=" . ($image_size[0] *$imgpreviewsize) . " height=" . ($image_size[1] * $imgpreviewsize);

echo " alt=\"图片预览:\r文件名:" . $destination . "\r上传时间:\">";

}

}

}

?>

</body>

</html>

你对比一下,就知道原因了,祝你成功

我用PHP测试文件下载功能,但是下载下来的图片却总是损坏的,代码如下:

下面几个回答的都tm没学过php在那水,下载的图片损坏,首先你已经下载了,文件没问题,但文件可能被压缩了, 加入这个选项 CURLOPT_ENCODING => "", 这是应对所有压缩的,一般都是gzip,上面不行就换成CURLOPT_ENCODING => "gzip",,如果还不行,把图片拖到浏览器看能不能打开,能打开说明是图片,只是格式window不支持,可能是webp格式的,getimagesize对webp格式的图片只会返回false,你要是想让他在window上显示,用php转化成jpg吧:

$img = imagecreatefromwebp('./response.webp');

$info=imagejpeg($img, 'a.jpg');

var_dump($info);

  • 本文相关:
  • php move_uploaded_file() 函数(将上传的文件移动到新位置)
  • php中uploaded_files函数使用方法详解
  • php中checkbox多选框上传失败的代码写法
  • php上传大文件失败的原因及应对策略
  • 浅析php 中move_uploaded_file 上传中文文件名失败
  • php多人模块开发原理解析
  • 如何使用php计算上一个月的今天
  • php cli模式下的多进程应用分析
  • 解决thinkphp下使用上传插件uploadify浏览器firefox报302错误的方
  • php 使用file_get_contents读取大文件的方法
  • php pki加密技术(openssl)详解
  • 如何对php程序中的常见漏洞进行攻击(上)
  • php提示undefined index的几种解决方法
  • php 柱状图实现代码
  • php curl 获取https请求的2种方法
  • 上传type中jpg是image/jpeg还是image/pjpeg
  • PHP:上传图片后错误,新手求帮助.
  • php 编写 实现上传图片至服务器的函数
  • 求助!php制作上传图片时候遇到的问题
  • 我用PHP测试文件下载功能,但是下载下来的图片却总是损坏的,代码如下:
  • php上传文件错误怎么解决
  • php文件上传,提示移动文件失败
  • PHP上传图片怎么做?
  • 急求:php上传图片代码的修改
  • php中如何处理上传图片
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved