单击链接时,我将图像路径作为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()
,但如果我没有使用表单,我该如何使用呢?
答案 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