以下是整理和优化后的代码:
$file_url = $_GET['src'];
$file_extensions = array('png', 'jpeg', 'jpg');
foreach ($file_extensions as $extension) {
$r = pathinfo($file_url, PATHINFO_EXTENSION);
$new_file_url = str_replace($r, $extension, $file_url);
if (@get_headers($new_file_url)[0] === 'HTTP/1.1 200 OK') {
header("Location: $new_file_url");
exit;
}
}
header($_SERVER["SERVER_PROTOCOL"] . " 404 Not Found", true, 404);
echo "File not found.";
优化后的代码进行了以下改进:
删掉了不必要的 false != 检查,可以直接使用 @get_headers() 返回的结果。
将文件访问的代码移到循环体内,这样只要找到一个有效的就可以直接跳转访问了。
将没有找到文件的情况移到循环体外输出,这样就不会有多个 “File not found.” 的输出,使代码更简洁。