Laravel检查图像路径字符串是否为图像

时间:2015-10-22 14:50:54

标签: php laravel

单击链接时,我将图像路径作为GET参数传递,但出于安全原因,我需要检查这是否是图像。

当我尝试使用此代码时,x为'15612.jpg':

$fileName

我测试的所有.jpg文件都给出了'Not a image',但是当我尝试使用.txt文件时,它不会出错,为什么会这样?我猜我做错了,因为当它不是图像时验证器会失败,对吗?

我知道验证器需要$fileName = $_GET['fileName']; $image = array('file' => File::get('unverified-images/'.$fileName)); $rules = array('file' => 'image'); $validator = Validator::make($image, $rules); if ($validator->fails()) { Session::flash('error', 'Not an image'); return Redirect::to('controlpanel'); } 代替Input::file(),但如果我没有使用表单,我该如何使用呢?

2 个答案:

答案 0 :(得分:8)

这可能是避免验证器并自行检查的情况,所以你可以这样做:

$allowedMimeTypes = ['image/jpeg','image/gif','image/png','image/bmp','image/svg+xml'];
$contentType = mime_content_type('path/to/image');

if(! in_array($contentType, $allowedMimeTypes) ){
  Session::flash('error', 'Not an image'); 
  return Redirect::to('controlpanel');
}

答案 1 :(得分:0)

其他检查其是否为图像的方法是使用php explode函数获取文件扩展名

PHP

$imageExtensions = ['jpg', 'jpeg', 'gif', 'png', 'bmp', 'svg', 'svgz', 'cgm', 'djv', 'djvu', 'ico', 'ief','jpe', 'pbm', 'pgm', 'pnm', 'ppm', 'ras', 'rgb', 'tif', 'tiff', 'wbmp', 'xbm', 'xpm', 'xwd'];

$explodeImage = explode('.', 'image-url-here');
$extension = end($explodeImage);

if(in_array($extension, $imageExtensions))
{
    // Is image
}else
{
    // Is not image 
}

这对我来说很重要!

在这里您可以找到所有文件扩展名的数组click here