str_contains($filename, '.')可判断文件名是否含点号,但需php 8.0+,且$filename必须为非空字符串,否则触发警告或typeerror;低版本应改用strpos($filename, '.') !== false。

PHP中用str_contains判断文件名是否含有点号,需注意点号是普通字符而非正则元字符,直接传入即可,但若文件名为空或为null会触发警告。
确认PHP版本支持str_contains
str_contains是PHP 8.0新增函数,低于该版本会报Fatal error。运行php -v检查当前版本,若显示7.4或更低,必须升级PHP或改用strpos替代。
基础用法:判断字符串是否含点号
直接将文件名和'.'作为参数传入str_contains:
str_contains($filename, '.')
这一步操作起来很简单,返回true表示含点号,false表示不含。注意【$filename必须是字符串类型】,传入数组或对象会抛出TypeError。
安全处理可能为空或非字符串的文件名
方法一:先过滤再判断
使用is_string($filename) && $filename !== ''确保变量可用,再调用str_contains。跳过类型校验直接调用,遇到null时str_contains会返回false,但会触发Warning:Trying to access array offset on value of type null。
方法二:用三元运算封装容错逻辑
is_string($filename) ? str_contains($filename, '.') : false
这种方法避免了警告,也明确排除了非字符串输入。实际项目中推荐此写法,尤其当文件名来自$_GET或$_FILES时,源头数据不可信。
对比替代方案:用strpos模拟str_contains行为
第一步:调用strpos($filename, '.')获取点号首次出现位置
第二步:判断返回值是否大于等于0——注意不能用=== false,因为点号在开头时返回0,而0 == false为true,会导致误判
第三步:完整表达式写成strpos($filename, '.') !== false
这比str_contains多写几个字符,但兼容PHP 7.0+。如果项目尚未升级到8.0,这是最稳妥的选择。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











