使用PHP输出图像
这篇文章是2016年PHP总复习的Advent Calendar第21天的文章!
关于PHP输出图像的方法!虽然有很多类似的文章和知识,但考虑到初学者,希望大家见谅(´・ω・`)
输出图像是什么意思?
<?php
echo 'Hello, world!';
当加载上述描述的 index.php 时,将会显示”Hello, world!”。
同样地,当你读取一个PHP文件时,它会输出图片。
只是这么简单的事情,但是作为一个初学者的时候一直无法理解。。。
写法 (xiě fǎ)
使用传统的PHP编写
在HTTP头中声明“这是一张图片”,然后读取文件。
例如,如果要输出位于public/images/hoge.png路径下的图片。
<?php
header('Content-Type: image/png');
readfile('public/images/hoge.png');
就是这样了。真简单啊!
在content-type中指定的是MIME类型,它表示图片的种类(在这里是image/png),可以通过函数来获取。
<?php
$file = 'public/images/hoge.png';
//MIMEタイプの取得
$finfo = new finfo(FILEINFO_MIME_TYPE);
$mime_type = $finfo->file($img_file);
header('Content-Type: '.$mime_type);
readfile($file);
由于文件的扩展名有时会被伪装,为避免意外错误,通常通过获取 MIME 类型来判断文件的扩展名。 PHP手册。
额外:使用框架。
举个例子,我们将以介绍程度写一下Laravel。
public function showImage() {
$file = public_path('image/hoge.png');
$mime_type = File::mimeType($file);
$headers = [
'Content-type' => $mime_type
];
response()->file($file, $headers);
}
当你第一次看到这么多陌生函数时可能会感到惊讶,但是Laravel非常方便,它可以轻松处理动态操作并吸收内部的小错误。
如果使用框架,可以轻松地进行路由处理并输出图像。例如,当访问/image时可以显示图片。
Route::get('/image', 'SampleController@showImage');
使用框架非常有用,可以对图像进行访问限制和条件判断。由于文件处理容易出现意外错误,因此使用框架是一个好选择!