redeclare 一般是 include 时重复加载同一个文件出现
可以改用 include_once下面的方法也可以,但比较烦人if (!function_exists('test_function')) {
function test_function() {
echo "test_function()";
}
}
if (!function_exists('test_function')) {
function test_function() {
echo "test_function()";
}
}

解决方案 »

  1.   

    没有啥好的办法.
    要么把子函数提出来,放到主函数之外.
    要么就用楼上的方法function_exists,检查函数是否存在.
      

  2.   

    应该是你在函数里调用了include_once ,require_once之类的问题办法是,只能调用一次!第二:最好将函数写在一个文件里,只调用一次这个文件
      

  3.   

    主程序是这样的:
    <?php
    session_start();
    require_once('dbseller_connect.php');
    $result=mysql_query("SELECT subrfqid FROM quotes WHERE rfqid='$rfqid'");
    $row=mysql_num_rows($result);
    $rfqid=$_SESSION['rfqid'];
    $inlist=$row;
    include('upload.php');  在这里调用了主函数的文件
    for ($i=1; $i<9; $i++)
    {   
        $price=$_POST['price'.$i];
        
     if ($price!='') {
       $inlist=$inlist+1;
           $subrfqid=$rfqid.'s'.$inlist;
       $result=mysql_query("INSERT INTO quotes (rfqid, subrfqid, price) VALUES ('$rfqid','$subrfqid','$price')");
       upload('file'.$i);在这里FOR循环里使用主函数
       if ($result='0' or '') {
        echo 'Insert Failed';
       }}}$effect=$inlist-$row;
    echo 'Total '.$effect.'  prices were successfully updated.'?>
      

  4.   

    这个是主函数的文件,是一个文件上传的功能,包含了一些子函数:
    <?php
    function upload($sheetname)
    {
       $uploaddir = "uploads/";//设置文件保存目录 注意包含/   
       $type=array("jpg","gif","bmp","jpeg","png");//设置允许上传文件的类型
      // $patch="http://127.0.0.1/cr_downloadphp/upload/files/";//程序所在路径
       
       //获取文件后缀名函数
          function fileext($filename)
        {
            return substr(strrchr($filename, '.'), 1);
        }
       //生成随机文件名函数   
        function random($length)
        {
            $hash = 'CR-';
            $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz';
            $max = strlen($chars) - 1;
            mt_srand((double)microtime() * 1000000);
                for($i = 0; $i < $length; $i++)
                {
                    $hash .= $chars[mt_rand(0, $max)];
                }
            return $hash;
        }   $a=strtolower(fileext($_FILES[$sheetname]['name']));
       //判断文件类型
       if(!in_array(strtolower(fileext($_FILES[$sheetname]['name'])),$type))
         {
            $text=implode(",",$type);
            echo "您只能上传以下类型文件: ",$text,"<br>";
         }
       //生成目标文件的文件名   
        else{
        $filename=explode(".",$_FILES[$sheetname]['name']);
            do
            {
                $filename[0]=random(10); //设置随机数长度
                $name=implode(".",$filename);
                //$name1=$name.".Mcncc";
                $uploadfile=$uploaddir.$name;
            }   while(file_exists($uploadfile));        if (move_uploaded_file($_FILES[$sheetname]['tmp_name'],$uploadfile)){
                
                if(is_uploaded_file($_FILES[$sheetname]['tmp_name'])){
                    //输出图片预览is_uploaded_file($_FILES['userfile']['tmp_name']
                    echo "<center>您的文件已经上传完毕 上传图片预览: </center><br><center><img src='$uploadfile'></center>";
                    echo"<br><center><a href='javascrīpt:history.go(-1)'>继续上传</a></center>";
                  }
                  else{
                   echo $_FILES[$sheetname]['tmp_name'];
                   echo is_uploaded_file($_FILES[$sheetname]['tmp_name']);
                  
                    echo "上传失败!";
                  }
            }
       }
       
       return;
    }?>就是这样循环调用的过程中产生了重复申明函数的错误。有没有什么办法可以在这个主函数文件的末尾加一个类似于注销所有子函数的代码?让服务器下一次调用函数时认为这个函数是新建立的
      

  5.   

    把函数提出来,和upload函数并列不就行了吗.
    不知道你为啥非得把它放到函数内部,
    如果为了安全限制的,完全可以将upload封装成类,将 fileext($filename) 函数声明为private类型或者protected类型.
      

  6.   

          function fileext($filename) 
        { 
            return substr(strrchr($filename, '.'), 1); 
        } 
      //生成随机文件名函数  
        function random($length) 
        { 
            $hash = 'CR-'; 
            $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz'; 
            $max = strlen($chars) - 1; 
            mt_srand((double)microtime() * 1000000); 
                for($i = 0; $i < $length; $i++) 
                { 
                    $hash .= $chars[mt_rand(0, $max)]; 
                } 
            return $hash; 
        } 这个变成if (!function_exists('test_function')) {
        function test_function() {
            echo "test_function()";
        }
    }就行了,循环调用upload函数,定义了很多次random,fileext.我就搞不懂了,你函数可以提取到upload()外面去不行嘛?
      

  7.   

    谢谢楼上诸位啦!!!
    按照jlzan1314的方法解决了。在子函数前面加了function_exists()的判别语句。
    以前我甚至不知道这个判别函数的存在。
    我是做外贸的,9月份开始了解html和php。
    初来论坛,不知道问好问题以后我应该怎么操作。我的技术分现在为零。
    也希望能找到机会帮助别人。