我写了一个脚本,用于将图像上传到我的服务器。用户可以使用它,例如用于上传他们的头像或他们的作品。
这是functions.php中的函数
function save_image($image, $uploadedfile)
{
error_reporting(0);
$change="";
$abc="";
define ("MAX_SIZE","40000");
function getExtension($str) {
$i = strrpos($str,".");
if (!$i) { return ""; }
$l = strlen($str) - $i;
$ext = substr($str,$i+1,$l);
return $ext;
}
$errors=0;
if ($image)
{
$filename = stripslashes($image);
$extension = getExtension($filename);
$extension = strtolower($extension);
if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif"))
{
$change='<div class="msgdiv">Unknown Image extension </div> ';
$errors=1;
}
else
{
$size=filesize($uploadedfile);
if ($size > MAX_SIZE*1024)
{
$change='<div class="msgdiv">You have exceeded the size limit!</div> ';
$errors=1;
}
if($extension=="jpg" || $extension=="jpeg" )
{
$uploadedfile = $uploadedfile;
$src = imagecreatefromjpeg($uploadedfile);
}
else if($extension=="png")
{
$uploadedfile = $uploadedfile;
$src = imagecreatefrompng($uploadedfile);
}
else
{
$src = imagecreatefromgif($uploadedfile);
}
echo $scr;
list($width,$height)=getimagesize($uploadedfile);
$newwidth=$width;
$newheight=$height;
$tmp=imagecreatetruecolor($newwidth,$newheight);
imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height);
$filename = "images/vcard_images/". $image;
imagejpeg($tmp,$filename,100);
imagedestroy($src);
imagedestroy($tmp);
imagedestroy($tmp1);
}}
}
所以现在我在页面create.php上有一个表单,他们可以上传他们的6个作品。因此,他们从硬盘驱动器中选择6个文件,然后按保存。然后我这样调用函数6次:
$work1 = $_FILES["work1"]["name"];
save_image($_FILES["work1"]["name"], $_FILES['work1']['tmp_name']);
$work2 = $_FILES["work2"]["name"];
save_image($_FILES["work2"]["name"], $_FILES['work2']['tmp_name']);
$work3 = $_FILES["work3"]["name"];
save_image($_FILES["work3"]["name"], $_FILES['work3']['tmp_name']);
$work4 = $_FILES["work4"]["name"];
save_image($_FILES["work4"]["name"], $_FILES['work4']['tmp_name']);
$work5 = $_FILES["work5"]["name"];
save_image($_FILES["work5"]["name"], $_FILES['work5']['tmp_name']);
$work6 = $_FILES["work6"]["name"];
save_image($_FILES["work6"]["name"], $_FILES['work6']['tmp_name']);
但奇怪的是,如果按SAVE,页面就会变成白色。如果我只调用函数onces,那么只有这个:
$work1 = $_FILES["work1"]["name"];
save_image($_FILES["work1"]["name"], $_FILES['work1']['tmp_name']);
完美无缺。
不知道我做错了什么..
亲切的问候
编辑:
错误报告告诉我:
Notice: Constant MAX_SIZE already defined in /Applications/XAMPP/xamppfiles/htdocs/vcard2/user/functions.php on line 11
Fatal error: Cannot redeclare getExtension() (previously declared in /Applications/XAMPP/xamppfiles/htdocs/vcard2/user/functions.php:12) in /Applications/XAMPP/xamppfiles/htdocs/vcard2/user/functions.php on line 12
答案 0 :(得分:2)
您输入错误:echo $ scr而不是echo $ src
答案 1 :(得分:0)
我建议你看看HTML5的FILE API,它管理多个文件上传和拖放系统。如果你想玩的话,可以使用两个推荐的脚本:
http://blueimp.github.com/jQuery-File-Upload/
和
https://github.com/weixiyen/jquery-filedrop
我试过他们两个,他们很好
答案 2 :(得分:0)
您的错误是两个独立的,但出于同样的原因发生:
Notice: Constant MAX_SIZE already defined in /Applications/XAMPP/xamppfiles/htdocs/vcard2/user/functions.php on line 11
你在你的函数中写了DEFINE。第一次运行它工作正常,但秒时间,它已经定义。将DEFINE移出函数save_image
Fatal error: Cannot redeclare getExtension() (previously declared in /Applications/XAMPP/xamppfiles/htdocs/vcard2/user/functions.php:12) in /Applications/XAMPP/xamppfiles/htdocs/vcard2/user/functions.php on line 12
同样适用于此错误。函数运行函数getExtention的秒时间被重新调整。将函数移到save_image
之外,它应该按预期工作。
答案 3 :(得分:0)
您的函数包含define
语句。每次调用函数时都会执行此操作,但是当您尝试重新定义现有常量时,define
会失败。
将此define
语句放在函数之外,而不是。
该函数的同一个故事getExtension
:我不清楚你为什么要在另一个函数中执行此操作;不。
答案 4 :(得分:0)
将函数getExtension
移出save_image
函数。
PHP中的嵌套函数未绑定到函数的“私有”范围, 它们进入全局函数表。 并且你不能redclare(全局)函数。
如果你真的想嵌套函数,那么只在非声明时声明:
if (!function_exists('getExtension')) { function getExtension(){...}}
您应该考虑将define
语句移出函数
或使其有条件:
if (!defined('MAX_SIZE')) { define('MAX_SIZE', 1024); }
您还可以使用isset
或empty
检查Requestvars,即。在循环中:
foreach (range(1,7) as $num) {
if (!empty($_FILES['work'.$num]['tmp_name'])) {
save_image($_FILES["work".$num]["name"], $_FILES['work'.$num]['tmp_name']);
}
}