我已经编写了一个方法来将header()设置为存储在数据库中的上传的相应文件类型,然后我想echo()该文件。
控制器内的方法如下:
function view_upload( $id = 0 ) {
$id = $this->db->escape( $id );
$query = $this->db->query( "SELECT file_type FROM media WHERE id = $id" )->row();
$query2 = $this->db->query( "SELECT file FROM media WHERE id = $id" )->row();
header("Content-type: ".$query->file_type);
//die( "moo" );
echo( $query2->file );
}
奇怪的是,一旦我设置了header(),该方法的其余部分似乎被忽略,例如,如果我取消注释die()语句它不会死亡并且它不会回显图像。如果我删除了header()调用,我会看到显示在屏幕上的原始上传blob ..
这是与CodeIgniter有关还是我犯了PHP错误?
编辑:
我已经更改了函数并将其放在CodeIgniter之外的单独文件中,但是如果我浏览它并传入$ id它仍然不显示图像......
<?php
// just so we know it is broken
error_reporting(E_ALL);
// some basic sanity checks
if(isset($_GET['id']) && is_numeric($_GET['id'])) {
//connect to the db
$link = mysql_connect("localhost", "user", "pass") or die("Could not connect: " . mysql_error());
// select our database
mysql_select_db("database") or die(mysql_error());
$id = $_GET['id'];
// get the file from the db
$sql = "SELECT file FROM media WHERE id=$id";
// the result of the query
$result = mysql_query("$sql") or die("Invalid query: " . mysql_error());
// get the file_type from the db
$sql = "SELECT file_type FROM media WHERE id=$id";
// the result of the query
$result2 = mysql_query("$sql") or die("Invalid query: " . mysql_error());
// set the header for the image
//ob_clean();
//die( mysql_result($result, 0) );
//header('Content-type:'.mysql_result($result2, 0));
header('Content-type: image/png');
//ob_clean();
echo mysql_result($result, 0);
// close the db link
mysql_close($link);
}
else {
echo 'Please use a real id number';
}
?>
两个$ result上的die()产生了我所期望的但是它没有在浏览器中显示页面。再次,如果我添加ob_clean(),它会说:
ob_clean() [<a href='ref.outcontrol'>ref.outcontrol</a>]: failed to delete buffer. No buffer to delete.
我已经从这里复制了代码: http://www.phpriot.com/articles/images-in-mysql/8如果有帮助的话......
答案 0 :(得分:1)
事实证明,数据库中的图像已损坏,因此无法显示,因为我已将addslashes()添加到文件内容中(不确定为什么,似乎记得读取它对于消除XSS漏洞很有用)。
删除这意味着我存储了未损坏的图像,然后它们显示正常。
答案 1 :(得分:1)
首先你需要在on_clean()之前启动ob_start()然后你需要写像header()。 以下是以下内容。
ob_start(); ob_clean(); header(“Content-type:image / png”);
&GT?; 试试这个让我知道这是否有效或希望它能帮到你。