为了账号安全,请及时绑定邮箱和手机立即绑定

php on line 15请问错误原因是?怎么解决?

php on line 15请问错误原因是?怎么解决?

PHP C
互换的青春 2022-07-20 15:11:58
我想用我自己的方法:我的实现思路是先获取文件名称,然后用split()函数以符号“.”来分割文件名,最后用end()函数获取分割后所得数组的最后一个元素,就得出扩展名了,代码如下:$filename=$file['name']; //单独输出filename是可以得出值的$filetype=end(split(".",$filename)); echo $filetype;运行后报错如下:cranberryStrict Standards: Only variables should be passed by reference in D:\AppServ\www\myweb\uploadfile.php on line 15请问错误原因是?怎么解决?
查看完整描述

3 回答

?
蛊毒传说

TA贡献1895条经验 获得超3个赞

不用这么麻烦,先用这个函数basename()获得文件的文件名.
然后用$type = explode(".",$name); $type = @$type[1]; 这样就获得了后缀了.

查看完整回答
反对 回复 2022-07-24
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

解决你的问题的方法就是,分开写代码,即:
$filearr = split(".",$filename);
$filetype = end($filearr);

split 函数用来分割字符串的时候,基本等同于函数 preg_grep,分割表达式可以是一个正则表达式,也可以是一个普通字符串,所以本身的执行效率很低,这一点你要记得……
所以,实现你现在的这个需求的话,最好用explode函数,使用普通字符作为分割表达式……

但是也的确如楼上所说,split 函数(PHP里)已经弃用,你可以使用 preg_match、preg_match_all 、preg_grep 等使用正则表达式作为分割的函数来替代。

就整个你的需求而言,你的思路还不很好,当一个文件名是【a.b.c.d.e.f.g.php】的时候,程序要浪费多余的资源来分割其实你不用的a、b、c……,
所以要简单满足你取后缀名的需求的代码应该是:
$filetype=substr(strrchr($filename,'.'),1);

此外还有:$path_info = pathinfo($filename); $filetype = $path_info['extension']; 其实不是很推荐。

下面比较一下它们各自的执行效率:
设文件名是:aaa.bb.php、循环执行10000次;执行10次取平均值:
split + end :0.067644s
explode + end :0.016251s
pathinfo + ['extension'] :0.018983s
strrchr + substr :0.008611s


查看完整回答
反对 回复 2022-07-24
?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

Function split() is deprecated,,spilt函数被弃用,可以用explode

查看完整回答
反对 回复 2022-07-24
  • 3 回答
  • 0 关注
  • 405 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信