Я написал метод для установки header () для соответствующего типа файла загрузки, сохраненной в базе данных, и затем я хотел бы повторить () файл.
Метод заключается в следующем внутри контроллера:
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 (), я вижу необработанный шарик загрузки, представленный на экране.
Это как-то связано с CodeIgniter или я допустил ошибку PHP?
EDIT:
Я изменил функцию и поместил ее в отдельный файл вне 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';
}
?>
die () с результатом $ 2 дает то, что я ожидал, но он не отображает страницу в браузере. Опять же, если я добавлю 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, если это вообще поможет ..