Как создать файл php для отображения изображения типа <img src = "/ img.php? ImageID = 32" />?

Я сохраняю баннерную рекламу в таблице mysql, или я должен сказать только имя файла, например: «imagename.jpg» или «banner3.gif».

Очевидно, что я хочу отслеживать загрузку этих баннеров, поэтому я собираюсь создать php-файл под названием img.php и называть его так

<img src="/img/img.php?imageID=3" /> 

И это вытащит изображение с id 3 вместе с обновлением таблицы хитов и т. Д.

Я знаю, как обновлять таблицу хитов … но то, что я пытаюсь выработать, – это код файла img.php, чтобы он просто извлекал имя файла и выводил его на экран, чтобы он работал как обычный образ.

Пока у меня есть …

 <?php header("Content-Type: image/jpeg"); // insert my db connect file // update the hits table etc $sql = 'SELECT * FROM ads WHERE id="' . $_GET['imageID'] . '" '; $res = mysql_query($sql); $row = mysql_fetch_array($res); $image = '/img/' . $row['file']; imagejpeg($image); // and this is where I'm at... ?> 

У меня есть некоторые проблемы с вышеуказанным кодом, который я извлек из разных мест, чтобы добраться сюда. Изображения могут быть png / gif / jpg, в то время как тип содержимого заголовка имеет только пространство для одного типа.

Есть ли способ, чтобы этот файл работал нормально для нескольких типов изображений? Я думаю, что я должен сначала запросить таблицу, выработать расширение файла и затем вставить функцию заголовка, основанную на этом.

Но что я на самом деле делаю, когда у меня есть это право, и я хочу, чтобы изображение просто появилось?

благодаря вашей помощи вот окончательный рабочий файл

 <?php // make sure we're only getting a number for the query b4 doing stuff if(is_numeric($_GET['imid'])) { include('thedbfile.php'); $types['jpg'] = 'image/jpeg'; $types['png'] = 'image/png'; $types['gif'] = 'image/gif'; $sql = 'SELECT file FROM ads WHERE id="' . $_GET['imid'] . '" '; $res = mysql_query($sql); $row = mysql_fetch_array($res); $image = 'img/banners/' . $row['file']; $extension = end(explode('.', $row['file'])); header('Content-Type: ' . $types[$extension]); echo file_get_contents($image); } ?> в <?php // make sure we're only getting a number for the query b4 doing stuff if(is_numeric($_GET['imid'])) { include('thedbfile.php'); $types['jpg'] = 'image/jpeg'; $types['png'] = 'image/png'; $types['gif'] = 'image/gif'; $sql = 'SELECT file FROM ads WHERE id="' . $_GET['imid'] . '" '; $res = mysql_query($sql); $row = mysql_fetch_array($res); $image = 'img/banners/' . $row['file']; $extension = end(explode('.', $row['file'])); header('Content-Type: ' . $types[$extension]); echo file_get_contents($image); } ?> 

Solutions Collecting From Web of "Как создать файл php для отображения изображения типа <img src = "/ img.php? ImageID = 32" />?"

Вы можете захотеть сохранить содержимое изображения непосредственно в своей базе данных.

Как вы сказали, вам нужно проанализировать тип содержимого из имени файла. Вы также можете добавить поле в свою базу данных, которое содержит расширение.

 $extension = end(explode('.', $row['file'])); 

Затем вам нужно создать массив, который содержит тип содержимого заголовка:

 $types['jpg'] = 'image/jpeg'; $types['png'] = 'image/png'; 

затем отправьте заголовок (вы захотите проверить, содержит ли массив типов ключ расширения и ошибку, если это не так)

 header('Content-Type: ' . $types[$extension]); 

Затем загрузите изображение с помощью

 echo file_get_contents($image); 

Это должно сделать это. Обратите внимание, что вам действительно нужно проверить, является ли параметр ImageID целочисленным по соображениям безопасности:

 if(!ctype_digit($_GET['ImageID'])) // error 
 echo file_get_contents($image); 

Но я сомневаюсь, что ваши изображения действительно находятся в /img/ (верхний уровень иерархии файловой системы). И да, настроив Content-type после того, как вы знаете, какой тип вашего изображения звучит хорошо.

PS вы немного расширили свой код, и я понятия не имею, что такое imagejpeg($image) 😉

вы можете попробовать header('Location: <URL-TO-IMAGE>'); после того, как вы закончите с изображением.

в качестве альтернативы вы можете определить расширение из имени файла, а затем вернуть соответствующий тип MIME.

 function mime2ext($mime){ $m = explode('/',$mime); $mime = $m[count($m)-1]; switch($mime){ case 'jpg': return 'jpg'; break; case 'jpeg': return 'jpg'; break; case 'pjpeg': return 'jpg'; break; case 'png': return 'png'; break; case 'gif': return 'gif'; break; } return ''; } function ext2mime($fname){ $ext = end(explode('.',$fname)); switch($ext){ case 'jpg': return 'image/jpeg'; break; case 'jpeg': return 'image/jpeg'; break; case 'png': return 'image/png'; break; case 'gif': return 'image/gif'; break; } return ''; } 

в отношении множественного типа mime нет множественного типа mime. Будет отправлен только последний Content-Type.

видеть:

 <?php header('Content-Type: image/jpeg'); header('Content-Type: image/png'); header('Content-Type: image/gif'); ?> 

Тип контента – image / gif.

Что-то вроде этого гарантирует, что вы правильно доставляете изображение и убедитесь, что оно не кэшировано, так что перезагрузка страницы вызовет новую выборку …

 //tell client abou tcontent type header("Content-Type:image/jpeg"); //prevent caching header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past header ("Last-Modified: " . gmdate("D, d MYH:i:s") . " GMT"); // always modified header ("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header ("Pragma: no-cache"); // HTTP/1.0 //how big is it? header("Content-Length:".filesize($image)); //send image data readfile($image); 

В конце вам просто нужно повернуть данные изображения в теле сообщения вместе с правильным слушателем. Мой код выглядит так:

 header("Content-type: $mime"); echo $this->mBinaryJunk; 

Вам нужно правильно установить тип $ mime на основе фактического типа изображения. Вы можете сделать это, сохранив его, когда оригинал найдет файл или обнаружите его из имени файла.