获取图像的扩展名并将其附加到文件名并相应地发送标题

时间:2015-03-18 11:57:12

标签: php

我有一个文件picviwer.php,可以加载如下图片:

<img src="http://www.example.com/loadimage?uid=$id&view=pic" id="ppic" />

它向另一个文件loadimage.php发送一个GET请求,其中包含要加载的照片的ID。

以下是loadimage.php的代码

if(isset($_GET['uid'])){
$uid = $_GET['uid'];
$remoteImage = "http://www.example.com/user-pics/".$uid.".png";
$img = file_get_contents($remoteImage);
header('Content-Type: image/x-png'); //or whatever
readfile($remoteImage);

}

现在上面的代码只处理png图像,我希望扩展所有类型的图像(.jpg,.gif等)。为此我想获得图像的扩展,然后相应地发送标题。同时使用文件名(uid)附加正确的扩展名。我该怎么做?

3 个答案:

答案 0 :(得分:3)

我希望它会对你有所帮助。它会有点长,但肯定会起作用,并且可以在其他条件下添加更多扩展。

if(file_exists("http://www.example.com/user-pics/".$uid.".png")) {

 $remoteImage = "http://www.example.com/user-pics/".$uid.".png";

}elseif( file_exists("http://www.example.com/user-pics/".$uid.".jpg") ){

   $remoteImage = "http://www.example.com/user-pics/".$uid.".jpg";
} 

等等

答案 1 :(得分:1)

我建议不要通过完整的域名访问文件,而是通过服务器上的路径访问文件。这将消除形成内部HTTP请求以检查文件存在并读取内容所花费的服务器负载。

您可以按如下方式找到现有扩展程序:

if(isset($_GET['uid'])){
    $uid = $_GET['uid'];

    $imagesPath = '/path/to/images/'; //REPLACE with the correct server path
    $existingImage = '';

    foreach (glob($imagesPath . $uid . ".*") as $filename) {
        // this matches all files with name $uid and an existing extension. If you have preferred extensions handle them here.
        $existingImage = $filename;
        break; // We only need one if we have no extension preference
    }

    if ('' === $existingImage) {
        // No images are found that have the required filename. Handle this exception here
    }

    $finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype 
    $imgMimeType = finfo_file($finfo, $existingImage);
    finfo_close($finfo);

    header('Content-Type: ' . $imgMimeType); 
    readfile($existingImage );

}

答案 2 :(得分:0)

您可以使用以下方法获取文件的扩展名:

$extension = pathinfo($imagePath, PATHINFO_EXTENSION);

要获取标头的正确mime类型,请使用exif_imagetype()来获取可以转换为正确mime类型的imagetype。 (如果您只使用图像)。

$imageType = exif_imagetype($imagePath);
$headerString = 'Content-Type:'. image_type_to_mime_type ($imageType);
header($headerString);