通过php问题输出图像

时间:2014-10-30 17:49:15

标签: php image readfile

我知道这可能是一个非常微不足道的问题,虽然我花了最近几个小时在网上爬行,但我似乎无法做对。

我有一个文件image_get.php,它应该显示一个与php文件位于同一目录下的图像文件“keepcalm.png”。

我正在使用一个类来处理所有与图像相关的操作。

image_get.php

<?php
   include "classes/image.class.php"; 
   include "classes/database.class.php";
   $database_sso = new database('SSO'); //will be needed later and is dummy for now
   $testimage = new image($database_sso, "1"); //parameters are dummy for now
   $testimage->show_image();
?>

image.class.php

<?php

class image{
   private $database_image;     //Image Database containing all images
   private $imageid;            //ID of Image in Database
   private $filepath;           //Path to image file


//PUBLIC FUNCTIONS  
   public function __construct($database, $imageid){
     $this->database_image = $database;     //Right now this is just a placeholder
     $this->imageid = $imageid;         //Right now this is just a placeholder

   }

    public function show_image(){

    $remoteImage = $this->get_local_link_from_id($this->imageid);  // Right now this returns "keepcalm.png"

    header('Content-Type: image/x-png')
    $returnstring = readfile($remoteImage);

}
 //PRIVATE FUNCTIONS
private function get_local_link_from_id($imageid){

    $local_link = "keepcalm.png"; //dummy for now
    return $local_link;
}


}



?>

我得到的输出是complet乱码,如这里所见 - &gt; http://niederrad.no-ip.org/portal/image_get.php

我错过了什么? 我已经尝试了很多以上的迭代,对于我应该如何继续完全无能为力......

2 个答案:

答案 0 :(得分:0)

试试这个:

public function show_image() {

    // this returns "keepcalm.png"
    $remoteImage = $this->get_local_link_from_id($this->imageid);

    // Set Header
    header("Content-Type: image/png"); // More info: http://stackoverflow.com/a/2086406/2332336

    // Output the contents of image
    readfile($remoteImage);
    exit;
}

如果这对您不起作用,则表示PHP无法找到本地图像keepcalm.png 可能是因为它在这里不存在:http://niederrad.no-ip.org/portal/keepcalm.png(即来自脚本(image_get.php)执行位置http://niederrad.no-ip.org/portal/

如果是这种情况,您可能必须告诉您的readfile()命令图像位于服务器上。我的意思是指定文件的绝对路径(例如,在Linux服务器/home/USERNAME/public_html/images/上)

如果图像位于远程服务器上(如您的变量名所示),那么您的代码应如下所示:

    // Output the contents of image
    exit(file_get_contents('http://remote-site.com/path/to/'. $remoteImage));

假设您的PHP配置allow_url_fopen设置为true。

答案 1 :(得分:0)

问题出在物料清单上,我觉得很奇怪,因为我确定我已经检查过不用BOM编码...

How to fix "Headers already sent" error in PHP

Cheery的一个非常好的建议。