PHP-获取路径的文件扩展名

PHP-获取路径的文件扩展名,php,Php,这会获取路径的文件扩展名吗?它是文件上传脚本的一部分,该脚本接着检查$end是否为“jpg”,而不是其他内容。考虑到我下面的内容,这可以被绕过吗 $temp = strlen($path); $end = $path[$temp-3] . $path[$temp-2] . $path[$temp-1]; 看看: 混合路径信息(字符串$path[,int$options=pathinfo_DIRNAME | pathinfo_BASENAME | pathinfo_EXTENSION | pat

这会获取路径的文件扩展名吗?它是文件上传脚本的一部分,该脚本接着检查$end是否为“jpg”,而不是其他内容。考虑到我下面的内容,这可以被绕过吗

$temp = strlen($path);
$end = $path[$temp-3] . $path[$temp-2] . $path[$temp-1];
看看:

混合路径信息(字符串$path[,int$options=pathinfo_DIRNAME | pathinfo_BASENAME | pathinfo_EXTENSION | pathinfo_FILENAME])

试试这个

$ext = pathinfo('abc.jpeg' ,PATHINFO_EXTENSION);

如果您想确保上传了有效的图像,请不要依赖文件结尾,因为它可能会被篡改。您可以使用PHP图像函数来确保文件确实是图像,例如:

function is_image($path) {
    $a = getimagesize($path);
    $image_type = $a[2];

    if(in_array($image_type , array(IMAGETYPE_GIF , IMAGETYPE_JPEG ,IMAGETYPE_PNG , IMAGETYPE_BMP)))
    {
         return true;
    }
    return false;
 }

我无法更改代码,但我想确保它是安全的。好吧,给一个答案:它不是。扩展只是为了程序兼容性,所以您的计算机将知道如何处理它。它不是100%安全的。如果文件末尾显示
jpg
,则不能依赖图像这一事实。我无法更改代码,但我想确保它是安全的,它将完美地工作。有些代码将搜索最后3个字符(但有些时候我们有4个字符长的ext),或者有些代码将搜索“.”点(有些时候我们可以有像“my.persocal.xls”这样的文件名,所以它有两个点),在以上所有情况下,这都能很好地工作。因此,我发布的代码不能被滥用来上传非jpeg的内容?为什么要增加行数,以便通过内置函数轻松获得。感谢您提供的信息,但我正在评估现有代码,因为我无法更改它以检查文件扩展名,你的代码是安全的。但是,如上所述,它不能确保该文件确实是一个图像。它提供了名称的最后三个字符,但是,例如,如果名称不是三个字符长,它可能不会有什么好处。因此,至少检查$temp>3(您可能需要多于3个,对吧)
$ext = pathinfo('abc.jpeg' ,PATHINFO_EXTENSION);
function is_image($path) {
    $a = getimagesize($path);
    $image_type = $a[2];

    if(in_array($image_type , array(IMAGETYPE_GIF , IMAGETYPE_JPEG ,IMAGETYPE_PNG , IMAGETYPE_BMP)))
    {
         return true;
    }
    return false;
 }