strpos()期望参数1是字符串,给定数组

时间:2017-11-02 22:12:22

标签: php strpos

我在上传功能上收到此警告,但我无法弄清楚原因。我已经查看了同一错误的其他问题,但无法得到解决方案。

function upload($name,$old,$dir=NULL,$autoid,$number)
{
    global $def_dir;
    if(!$dir)$dir="../".$GLOBALS["logo"];


    if($_FILES[$name]['name']){
        if( is_file($dir.$old) ) unlink($dir.$old);
        $ext=substr($_FILES[$name]['name'],strpos($_FILES[$name]['name'],$name),strlen($_FILES[$name]['name']));
        $file=$autoid.'_'.$number.$ext;

        move_uploaded_file($_FILES[$name]['tmp_name'],$dir.$file);

    }else{
        $file=$old;
    }

    return($file);
}

我试过var_dump($_FILES[$name]['name'] 结果是string(24) "generic-project-icon.png"

我已尝试print_r($_FILES[$name]['name']),结果为generic-project-icon.png

我是瞎了还是那里没有阵列?

我无法弄清楚为什么会这样。 任何帮助深表感谢。感谢。

2 个答案:

答案 0 :(得分:1)

  1. 功能签名($name,$old,$dir=NULL,$autoid,$number)参数,默认值移至结束($name,$old,$autoid,$number,$dir=NULL)
  2. 尝试不要使用global个变量将它们作为参数传递
  3. 当您上传多个文件时,回答您的问题$_FILES[$name]['name']可以是数组。 Documentation

答案 1 :(得分:0)

如果您不确定要传输多少文件,可以将数据自动转换为数组并循环播放。如果只有一个字符串,那么它将成为单个元素数组并循环一次。 Technique Demo

参见内联评论......

代码(未经测试):

function upload($name,$old,$autoid,$dir=NULL,$number=1){  // move parameters with default values to the end 
    // remove global variable, it is unused/pointless
    if(!$dir)$dir="../".$GLOBALS["logo"];

    if(isset($_FILES[$name]['tmp_name'])){  // check that the element isset()
        foreach((array)$_FILES[$name]['tmp_name'] as $n){  // loop all elements
            if( is_file($dir.$old) ) unlink($dir.$old);
            $file=$autoid.'_'.$number.strstr($name, '.');  // use strstr() to get "dot & extension"
            move_uploaded_file($n,$dir.$file);
         }
    }else{
        $file=$old;
    }

    return($file);
}