strpos() 期望参数 1 为字符串,数组给定
strpos() expects parameter 1 to be string, array given
我在上传功能时收到此警告,但我不明白为什么。我已经查看了相同错误的其他问题,但无法获得解决方案。
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
我是瞎了还是没有数组?
我只是想不通为什么会这样。
任何帮助深表感谢。谢谢。
- 函数签名
($name,$old,$dir=NULL,$autoid,$number)
带默认值的参数移至末尾($name,$old,$autoid,$number,$dir=NULL)
- 尽量不要使用
global
变量将它们作为参数传递
并回答你的问题 $_FILES[$name]['name']
当你上传多个文件时可以是数组。 Documentation
如果您不确定有多少文件即将到来,您可以将数据自动转换为数组并循环播放。如果只有一个字符串,那么它将变成一个单元素数组,只循环一次。 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);
}
我在上传功能时收到此警告,但我不明白为什么。我已经查看了相同错误的其他问题,但无法获得解决方案。
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
我是瞎了还是没有数组?
我只是想不通为什么会这样。 任何帮助深表感谢。谢谢。
- 函数签名
($name,$old,$dir=NULL,$autoid,$number)
带默认值的参数移至末尾($name,$old,$autoid,$number,$dir=NULL)
- 尽量不要使用
global
变量将它们作为参数传递
并回答你的问题 $_FILES[$name]['name']
当你上传多个文件时可以是数组。 Documentation
如果您不确定有多少文件即将到来,您可以将数据自动转换为数组并循环播放。如果只有一个字符串,那么它将变成一个单元素数组,只循环一次。 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);
}