Php 该函数只工作1次

Php 该函数只工作1次,php,file,function,upload,Php,File,Function,Upload,我编写了一个脚本,用于将图像上载到我的服务器。用户可以使用它来上传他们的头像或作品 这是functions.php中的函数 function save_image($image, $uploadedfile) { error_reporting(0); $change=""; $abc=""; define ("MAX_SIZE","40000"); function getExtension($str) { $i = strrpos($str,".");

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

这是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);
}}


}
但奇怪的是,如果我按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

您有一个键入错误:echo$scr而不是echo$src

我建议您看看HTML5的文件API,它管理多个文件上传和拖放系统。如果您想玩游戏,建议使用两种脚本:


我尝试了两种方法,它们都很好

您的错误是两种不同的,但发生的原因相同:

Notice: Constant MAX_SIZE already defined in /Applications/XAMPP/xamppfiles/htdocs/vcard2/user/functions.php on line 11
您可以在函数内部编写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

这个错误也是如此。函数运行函数GetExtension的秒数被清除。将函数移到
save_image
之外,它应该可以正常工作。

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

将此
define
语句放在函数之外


这个函数的情况也一样:我不清楚为什么在另一个函数中这样做;不要。

将函数
getExtension
移出
save\u image
函数

PHP中的嵌套函数不绑定到函数的“私有”范围, 它们进入全局函数表。 并且不能重新声明(全局)函数

如果确实要嵌套函数,则仅在未声明时声明:

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

你应该考虑把<代码>定义语句也从函数中移出。 或者让它有条件:

if (!defined('MAX_SIZE')) { define('MAX_SIZE', 1024); }
您还可以使用
isset
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']); 
  } 
}

查看代码只需1张图片,您必须将图像存储在一个数组中。您是否启用了错误消息?请尝试启用(使用
E_ALL
),这样“白色页面”可能会更有用。您还可以使用isset或empty进行检查:
foreach(范围(0,7)为$num){if(!empty($u文件['work.$num]['tmp_name'])){save_image($_FILES[“work”。$num][“name”],$_FILES[“work”。$num][“tmp_name”];)}
哦,是的,我明白了,但这并不能让它正常工作:)无论如何谢谢!!谢谢!但我真的很想使用这个脚本!
foreach (range(1,7) as $num) { 
  if (!empty($_FILES['work'.$num]['tmp_name'])) { 
    save_image($_FILES["work".$num]["name"], $_FILES['work'.$num]['tmp_name']); 
  } 
}