Хитрости PHP-заголовка ответа - PullRequest
0 голосов
/ 01 ноября 2018

index.php:

<style type="text/css">
img {
width: 50px;
}
</style>

<iframe name="myPHPScript" src="header.php" width="50%" 
frameborder="0"> 
</iframe>

<iframe name="myPHPScript" src="header.php" width="50%" 
frameborder="0"> 
</iframe>

<iframe name="myPHPScript" src="header1.php" width="50%" 
frameborder="0"> 
</iframe>

header.php:

<?php header("Content-type: image/png");
$img1 = file_get_contents ("3.png");
echo $img1;
?>

header1.php:

<?php header("Content-type: image/png");
$img2 = file_get_contents ("test1.jpg");
echo $img2;
?>

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

Ответы [ 3 ]

0 голосов
/ 01 ноября 2018

Нет "хитрости". Вы не можете "запретить пользователям получать изображения".

Каждый ресурс на стороне сервера, то есть изображения, HTML-страницы, таблицы стилей, все , должен иметь URL-адрес, по которому они могут быть загружены. Браузер отправляет запрос на загрузку URL-адреса, получает ответ на этот запрос, а затем обрабатывает его соответственно как HTML-страницу, изображение или что-либо еще.

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

Если вы разрешаете посетителям видеть ваше изображение, это означает, что им нужно загрузить его на свой компьютер. Им нужен URL для этого. Вашим посетителям все равно, заканчивается ли этот URL-адрес .php или .jpg. Все, что они знают, это то, что запрос на этот URL вернет это изображение. Твой "трюк" ничего не делает. Вы по-прежнему получаете URL , с которого можно загрузить изображение .

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

(Этот ответ может показаться несколько бессмысленным, но адрес - первоначальная редакция вопроса.)

0 голосов
/ 01 ноября 2018

Другой способ показать несколько изображений одним вызовом - вместо возврата одного изображения вернуть HTML-код, содержащий несколько изображений. Например, вы бы назвали свой php-файл и вернули бы это:

  <img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="/>
  <img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="/>
  <img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="/>
  <img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="/>

Где вместо ссылок вы помещаете данные изображения непосредственно в SRC как данные, закодированные в base64.

Как уже отмечали другие, это не помешает кому-либо скопировать изображение.

Отличный пример, почему даже используется ctrl + prtsc. Даже если мы игнорируем такие вещи, как кеш браузера и т. Д. Можно просто сделать снимок экрана.


Как я упоминал в комментариях, вы можете запретить файлу PHP возвращать изображение, если кто-то (скажем) не вошел в систему. Это предотвратит прямые ссылки на ваш сайт. Который в некоторых случаях имеет веские причины, в качестве примера я использовал сайт невесты по почте. Некоторые изображения профиля были общедоступны, другие - нет (не без учетной записи). В данном случае это не было проблемой контента для взрослых, поэтому была юридическая ответственность за то, чтобы не показывать некоторые изображения широкой публике или не связывать их непосредственно с сайтом.

Но, опять же, это не мешает кому-либо копировать изображение и делиться им публично.

0 голосов
/ 01 ноября 2018

Вы можете использовать параметр URL.

<iframe name="myPHPScript" src="header.php?id=0" width="50%" 
frameborder="0"> 
</iframe>

<iframe name="myPHPScript" src="header.php?id=0" width="50%" 
frameborder="0"> 
</iframe>

<iframe name="myPHPScript" src="header.php?id=1" width="50%" 
frameborder="0"> 
</iframe>

PHP-скрипт использует $_GET['id'], чтобы определить, какой файл изображения вернуть.

<?php 
header("Content-type: image/png");
$images = ["3.png", "test1.jpg"];
if (isset($images[$_GET['id']])) {
    readfile($images[$_GET['id']]);
}
?>

Альтернативой этому было бы возвращение PHP одного изображения, содержащего все ваши изображения, и использование CSS-спрайтов для отображения различных его частей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...