0

我编写了一个脚本,用于将图像上传到我的服务器。用户可以使用它来上传他们的头像或他们的作品。

这是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,页面就会变成白色。如果我只调用一次函数,那么只有这个:

$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
4

5 回答 5

2

您输入错误: echo $scr 而不是 echo $src

于 2012-10-08T09:58:41.280 回答
0

我建议你看看 HTML5 的 FILE API,它管理多个文件上传和拖放系统。如果你想玩,推荐两个脚本:

http://blueimp.github.com/jQuery-File-Upload/

https://github.com/weixiyen/jquery-filedrop

我都试过了,它们都很好

于 2012-10-08T10:05:39.670 回答
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它应该可以按预期工作。

于 2012-10-08T10:24:37.300 回答
0

您的函数包含一个define语句。每次调用函数时都会执行此操作,但define在尝试重新定义现有常量时会失败。

而是将此define语句放在函数之外。

该函数的故事相同getExtension:我不清楚为什么要在另一个函数中这样做;不。

于 2012-10-08T10:25:15.960 回答
0

将函数getExtension移出save_image函数。

PHP 中的嵌套函数不受函数“私有”范围的约束,它们进入全局函数表。而且您不能重新声明(全局)函数。

如果你真的想嵌套函数,那么只在未声明时声明:

if (!function_exists('getExtension')) { function getExtension(){...}}  

您应该考虑将defineStatement 也移出函数或使其成为有条件的:

if (!defined('MAX_SIZE')) { define('MAX_SIZE', 1024); }

isset您还可以使用or来检查 Requestvars empty,即。在一个循环中:

foreach (range(1,7) as $num) { 
  if (!empty($_FILES['work'.$num]['tmp_name'])) { 
    save_image($_FILES["work".$num]["name"], $_FILES['work'.$num]['tmp_name']); 
  } 
}
于 2012-10-08T10:44:33.780 回答