отображать изображение со страницы HTML, используя PHP без вызова скрипта PHP или используя эхо PHP, чтобы скрыть путь к изображению - PullRequest
0 голосов
/ 11 мая 2019

Я хочу отображать изображения из файлов на веб-странице HTML, используя PHP, чтобы скрыть расположение файлов, используя заголовок / файл чтения PHP и избегая любого PHP, который мог бы раскрыть местоположение файла (например, echo).

До сих пор я мог добиться этого только путем вызова скрипта PHP из HTML, но предпочел бы сделать это без вызова скрипта, чтобы зритель не видел файл скрипта PHP.Я не хочу использовать файл PHP, а не файл HTML (поэтому зритель не может ввести URL-адрес сценария PHP сам по себе).

image.php:

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

image.html:

<html>
...
<img src="image.php"/>

В файле HTML я хотел бы сделать эквивалент, но в строке:

<html>
...
<img src="<?php header('Content-Type:image/jpeg');readfile('../image.jpg');?>"/>

Или:

<html>
...
<?php
echo '<img src="';
header('Content-Type:image/jpeg'); 
readfile('../image.jpg');
echo '"/>';
?>

Iподозреваю, что мое непонимание того, как HTML и PHP работают вместе, подводит меня сюда.

Ответы [ 3 ]

1 голос
/ 11 мая 2019

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

Хотя есть способ заставить его работать. Это немного сложнее, но вы можете использовать для этого файл .htaccess. Обычно вы часто используете его для перезаписи некоторого URL-адреса, чтобы перенаправить URL-адрес на index.php. Вы также можете использовать его для создания URL изображения:

RewriteEngine On
RewriteRule ^/special-images/(.*)\.jpg$ /php-file-directory/image.php?image-name=$1 [L]

Если вы сейчас сделаете <img src="/special-images/bob.jpg" />, это будет внутренне open-image.php с $_GET['image-name'], равным bob.

* Не могу проверить htaccess прямо сейчас, но вы понимаете суть этого.

1 голос
/ 11 мая 2019

Я хотел бы сделать эквивалент, но в строке:

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

Также этот код выглядит бессмысленным - вы просто выставляете существующий файл без всякой выгоды делать это самостоятельно, НО со штрафом за уничтожение всего кэширования.и другие функции, которые могут делать браузеры.Если вы не знаете, как сделать это должным образом (это не так тривиально), вы усложняете простую вещь, а не упрощаете сложную.

0 голосов
/ 11 мая 2019

попробуйте добавить его к URL-адресу данных

https://stackoverflow.com/a/13758760/11485791

пример:

<img src="<?
php path = '../image.jpg';
$type = pathinfo($path, PATHINFO_EXTENSION);
$data = file_get_contents($path);
$base64 = 'data:image/' . $type . ';base64,' . base64_encode($data);
echo $base64;
?>"/>

но тогда возвращаемый html будет огромным

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