Количество просмотров изображений

Я хотел бы иметь код для изображения, который подсчитывает количество просмотров изображения независимо от того, на каком сайте находится изображение. Я хочу использовать тэг img src и указать src на php-страницу, которая учитывает это представление, а затем возвращает изображение для просмотра. Я думал примерно так:

<img src="www.mywebsiteurl.com/something.php" /> 

Как мне написать «something.php», чтобы он вернул правильный файл изображения? Я знаю, как записывать просмотр страницы, но если я должен сделать что-то другое в этом случае, скажите мне.

Ваш скрипт должен:

  1. Запишите хит.
  2. Задайте тип содержимого вывода ( header('Content-Type: image/jpeg'); )
  3. Вывести изображение ( readfile( $path_to_image ) );

Для примера см. Документацию по чтению и вывод изображения на PHP .

Загрузка изображений / файлов из php медленнее, чем обычная загрузка файлов.

Основные минусы:

  • Изображения нельзя кэшировать из-за динамического запроса, который большинство браузеров не поддерживает в динамических запросах.
  • Накладные расходы на sever и apache.

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

Альтернативное решение

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

Ajax-вызов

 $.get("inc_img_view.php?img_id="+<?php echo $img_id; ?>); 

Это самая баребонная версия, которую вы можете иметь:

 <?php header('Content-type: image/jpeg'); readfile('somepic.jpg'); 

Вы можете вызвать изображение, используя URL-адрес, похожий на: www.mywebsiteurl.com/image_renderer.php?url=url_to_image .

image_rendered.php:

 <?php header("Content-Type: image/jpeg"); $url = urldecode($_GET['url']); $headers = array( "GET ".$url." HTTP/1.1", "Content-Type: text/xml; charset=UTF-8", "Accept: text/xml", "Cache-Control: no-cache", "Pragma: no-cache" ); $ch = curl_init($url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, false); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); $r = curl_exec($ch); // you can connect to your database and increment the number of times this image was viewed echo $r; ?> 

Надеюсь, это укажет вам в правильном направлении.

Да, вы хорошо начали. Я бы сделал что-то вроде этого

 <img src="www.mywebsiteurl.com/image_counter.php?src=image.jpg" /> 

В image_counter.php возьмите $src = $_GET['src'] для источника изображения.

Затем +1 для этого изображения в базе данных.

Тогда сделайте

 header('Content-type: image/jpeg'); readfile($src); 

Что-то вроде этого должно работать:

 <?php $file = $_GET['img']; $path = "images/"; // do an increment of views on the image here - probably in a database? $exifImageType = exif_imagetype($path.$file); if ($exifImageType !== false) { $type = image_type_to_mime_type($exifImageType); } header('Content-Type: $type'); echo file_get_contents($path.$file); 

Примечание: это может сделать что-то вроде:

 <img src="getimage.php?img=image.jpg" /> 

покажите правильное изображение после увеличения просмотров.

Вы всегда можете добавить некоторый .htaccess, чтобы сделать все вызовы / images / anything через ваш файл изображения. Это означало бы, что вы могли бы сохранить URL-адрес так, как будто он получает фактический файл изображения (например, /images/logo.jpg будет переписано на самом деле через getimage.php? Img = logo.jpg)