使用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');

使用框架非常有用,可以对图像进行访问限制和条件判断。由于文件处理容易出现意外错误,因此使用框架是一个好选择!

广告
将在 10 秒后关闭
bannerAds