下载脚本技术问询:如何全局屏蔽所有PHP文件而非逐个指定
屏蔽所有PHP文件的实现方法
你之前用$file_name != '*.php'无效的原因是:普通字符串比较不支持通配符*,这种写法只会精确匹配字面量为*.php的文件名,自然无法过滤所有PHP文件。以下是几种实用的实现方式:
方法1:检查文件后缀(最直观)
利用字符串处理函数判断文件名是否以.php结尾,同时兼容大小写后缀(比如.PHP):
// 方式A:用pathinfo获取扩展名 $file_ext = pathinfo($file_name, PATHINFO_EXTENSION); if (strtolower($file_ext) === 'php') { // 跳过该文件,不执行下载逻辑 continue; } // 方式B:直接截取文件名结尾部分判断 if (strtolower(substr($file_name, -4)) === '.php') { continue; }
方法2:正则表达式匹配(灵活扩展)
如果需要支持更多变种后缀(比如.php5、.phps),正则表达式会更灵活:
// 匹配以.php/.PHP/.php5/.phps结尾的文件 if (preg_match('/\.php[5s]?$/i', $file_name)) { continue; }
其中i表示不区分大小写,[5s]?表示可选的5或s后缀。
方法3:遍历目录时直接过滤
如果你的脚本是遍历目录获取文件列表,可以在遍历阶段就排除PHP文件:
$target_dir = '/你的目标目录路径'; $file_list = scandir($target_dir); foreach ($file_list as $file) { // 跳过目录和PHP文件 if (is_dir($target_dir . '/' . $file) || preg_match('/\.php$/i', $file)) { continue; } // 执行你的下载逻辑 }
注意事项
- 如果
$file_name包含完整文件路径(比如/var/www/site/index.php),上述方法依然有效,因为pathinfo和正则会自动识别文件名部分。 - 若需要屏蔽其他脚本文件,只需扩展后缀判断或正则规则即可。
内容的提问来源于stack exchange,提问作者Fontane
相关产品推荐
相关产品推荐

