我有一个文件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)附加正确的扩展名。我该怎么做?
答案 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);