php里面用copy函数上传图片文件的时候发现得到的图片不对

efinal 2005-06-17 08:53:16
我在php里面用copy函数上传图片文件的时候发现这样一个问题:

当它拷贝gif格式的文件的时候 就是正确的

当它拷贝jpg或者bmp的时候 copy得到的文件就是原来文件大小的两倍 显示出来的图像自然也不对了

我试了一下 在copy之前 用$file_size看了一下文件的大小 就已经是两倍大小了

我试了一下 move_uploaded_file 好像也不行

代码如下:

上传表单

<form name="upad" method="post" enctype="multipart/form-data">
<tr align="center" bgcolor="#efefef">
<td height="80"><input type="file" name="photo" size=20> <input type="submit" name="Submit" value="上 传"></td>
</tr>
</form>

处理程序

if(empty($photo)){
showmessage("对不起,没有上传文件!");
exit();
}
// showmessage($photo_size); 我在这里显示图片的大小就已经不对了 大概是原来的2倍大小
if($photo_size==0){
showmessage("对不起,上传文件的字节数为0!");
exit();
}

$savepath="...";//指定具体的savepath 在指定的具体的savepath可以找到上传后的文件 只是出了上述的问题
if(move_uploaded_file($photo,$savepath)){
//上传后的处理

}else{
showmessage("上传失败");
exit();
}

我试着把一个php的文件改名为jpg的文件上传 得到的文件大小也是原来的2倍 但是内容没有变 还是可以正常读取

实在是不明白怎么回事:(

...全文
537 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
efinal 2005-06-28
  • 打赏
  • 举报
回复
我试了一下楼上的例子 发现还是不行 得到的图片大小还是原来的2倍

我觉得是系统的原因阿 不明白
mind5 2005-06-24
  • 打赏
  • 举报
回复
再试试这段代码。
注意copy语句,用的是'tmp_name',这是form提交后文件内容真正保存所在
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>文件上传</title>
</head>

<body>
<?php
if($_POST['post_flag']==1)
{
$a=copy($_FILES['myfile']['tmp_name'],$_FILES['myfile']['name']);
}
?>
<form enctype="multipart/form-data" method="post">
文件名称: <input name="myfile" type="file"><br>
<input type="hidden" name="post_flag" value="1">
<input type="submit" value="送出">
</form>
</body>
</html>
efinal 2005-06-23
  • 打赏
  • 举报
回复
自己顶
efinal 2005-06-21
  • 打赏
  • 举报
回复
其他的上传方法肯定可以解决问题 但是我不明白为什么会有这个问题?
efinal 2005-06-18
  • 打赏
  • 举报
回复
谢谢楼上两位 但是我想这不是我程序的问题

我在同一个服务器上的另外一个程序里面也发现了类似的问题

而且我把 mind5(e网流星) 他的程序也试了一下 jpg图片也有问题(gif没有问题)

我觉得是不是服务器哪个地方的配置有问题?或者是关于jpg格式的问题?
uuq 2005-06-18
  • 打赏
  • 举报
回复
你用ftp传上去看看
jiefy 2005-06-18
  • 打赏
  • 举报
回复
我用的两个文件解决的上传问题。
并且实现自动缩略图。
一个是上传窗口 upload.php
<table width="350" height="118" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" style="border:1px solid #959594;">
<tr>
<td height="24"><div align="center">請提交設備圖片</div></td>
</tr>
<form enctype="multipart/form-data" action=upload_facility.php method=post>
<tr>
<td height="74" align="center">
<?
include ("conn.php");
$res=mysql_query("select * from facility ORDER by id desc" ,$db);
$myrow = mysql_fetch_array($res);
?>
<INPUT TYPE="hidden" name="id" value="<?echo $id;?>">
<input type=file name=upfile style="width:200;border:1 solid #9a9999; font-size:9pt; background-color:#ffffff" size="17">
</td>
</tr>
<tr>
<td align="center">
<input type=submit value='提交設備圖片' name="submit" style="width:100;border:1 solid #9a9999; font-size:9pt; background-color:#ffffff">
</td>
</tr>
</form>

</table>


一个是upload_pic.php

<table width="300" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" style="border:1px solid #959594;">
<tr>
<td align="center">
<?
if ($upfile_type=="image/pjpeg" || $upfile_type=="image/gif")
{
//小站图览栏目使用了一个生成缩略图函数,这个函数来自网络中。
//函数:
// 本函数从源文件取出图象,设定成指定大小,并输出到目的文件
// 源文件格式:gif,jpg,,png
// 目的文件格式:jpg
// $srcfile: 源文件
// $dstfile: 目标文件
// $dstW: 目标图片宽度
// $dstH: 目标文件高度
function makethumb($upfile,$dstFile,$newwight,$newheight) {
$data = GetImageSize($upfile,&$info);
switch ($data[2]) {
case 1:
$im = @ImageCreateFromGIF($upfile);
break;
case 2:
$im = @imagecreatefromjpeg($upfile);
break;
case 3:
$im = @ImageCreateFromPNG($upfile);
break;
}
$srcW=ImageSX($im);
$srcH=ImageSY($im);

if($srcW>230||$srcH>160)
{
@$ratio=$srcH/$srcW;
if($ratio<1)
{
$newwidth="230";
@$newheight=$srcH*(230/$srcW);
}
else
{
$newheight="160";
$newwidth=$srcW*(160/$srcH);
}
}
else
{
$newheight=$srcH;
$newwidth=$srcW;
}

$ni=ImageCreate($newwidth,$newheight);
ImageCopyResized($ni,$im,0,0,0,0,$newwidth,$newheight,$srcW,$srcH);
ImageJpeg($ni,$dstFile);
//$dstFile="upload/";
// 如果需要输出到浏览器,那么将上一句改为ImageJpeg($ni);
// 如果需要其它格式的图片,改动最后一句就可以了
}
//使用方法:
if($upfile_size>0)
{
$simage="facs".date('YmdHis',time()).substr($upfile_name,-4);
//$simage为生成缩略图文件名
$bimage="facb".date('YmdHis',time()).substr($upfile_name,-4);
//$bimage为原图上传后的文件名
$copymes = copy($upfile,"upload/$bimage");
$src_image="upload/".$bimage;
$dst_image="upload/".$simage;
makethumb($src_image,$dst_image,$newwidth,$newheight);

}

}
else
{
echo"<br><font color=#FF0000>請上传.jpg格式或者.gif格式的圖片!</font><br><br><a href=javascript:history.go(-1);>返回</a>";
die("");
}


//$copymes = copy($upfile,$filename);
if ($copymes) {
print("<font color=red>上传成功!</font>");
print("文件名稱$upfile_name<br>");
print("文件大小$upfile_size<br>");
echo "產品縮略圖片:<br><img src=\"$dst_image\"><br>";
echo "產品圖片:<br><img src=\"$src_image\" width=200 height=130><br>";

echo "<font color=#FF0000>設備圖片修改添加成功!</font>";

}

else {
print("<font color=#FF0000>設備圖片修改添加失敗!</font><br><a href=javascript:history.go(-1);>返回</a>");
}
?>

<a href="javascript:window.close();">關閉窗口</a>
</td>
</tr>
</table>

mind5 2005-06-17
  • 打赏
  • 举报
回复
我这有个copy上传的程序,很简单,你看看
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>文件上传</title>
</head>

<body>
<?php
if($_POST['post_flag']==1)
{
$a=copy($myfile,"upload_file/".$myfile_name);
}
?>
<form enctype="multipart/form-data" action="index.php" method="post">
您的大名: <input type=text name=user><br>
文件名称: <input name="myfile" type="file"><br>
<input type="hidden" name="post_flag" value="1">
<input type="submit" value="送出">
</form>
</body>
</html>

21,890

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧