HTML PHP: показывать IMG по умолчанию, если указанный не существует, используя изображения сетевого расположения - PullRequest
0 голосов
/ 22 мая 2018

Я думаю, что на это уже ответили, но я пытаюсь показать изображение, основанное на переменной.Если изображение не существует, оно должно показывать IMG по умолчанию.Проблема в том, что оба изображения не отображаются.Изображения хранятся на сервере, доступном из сети.Изображения имеют имя $ IDnr.jpg.

<?php
  $filename="\\Network-server\map\map\map\map\<?php echo $IDnr; ?>.jpg";
  if(is_readable($filename)){
     $fileToShow=$filename;
  }else{
    $fileToShow="\\Network-server\map\map\map\map\defaultIMG.jpg";
  }
    echo '<img class="imageclass" src="<?php echo $fileToShow; ?>"/>';
?>

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Ошибка в первой строке вместо

$filename="\\Network-server\map\map\map\map\<?php echo $IDnr; ?>.jpg";

write

$filename="\\Network-server\map\map\map\map\\".$IDnr.".jpg";
0 голосов
/ 22 мая 2018

Вам необходимо правильно интерполировать строки:

$IDnr = 'filename';

$filename = "\\\\Network-server\\map\\map\\map\\map\\".$IDnr.".jpg";

echo $filename;

Вывод:

\\Network-server\map\map\map\map\filename.jpg

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

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


Обновление по комментариям:

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

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

Вариант 1. Ссылка на сетевой путь с использованием file:

Сетевой путь работает только для посетителей, которые действительно находятся в сети и имеют правочтобы прочитать ресурс, чтобы вы могли сделать что-то вроде echo '<img src="file:'.$filename.'"/>';, но ограничение сети, вероятно, нежелательно.

Вариант 2. Считайте содержимое файла и предоставьте его в виде встроенного изображения

echo '<img src="data:image/jpeg;base64,'.base64_encode( file_get_contents( $filename ) ).'"/>';

Самая большая проблема заключается в том, что он не может кэшироваться веб-браузерами, и PHP должен считывать данные из сетевого расположения и загружать КАЖДОГО ОДНОГО изображения в память для всех пользовательских запросов, поэтомуможет иметь серьезные последствия для производительности.

Вариант 3: смонтировать сетевое расположение

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

echo '<img src="http://example.com/map/map/map/'.$IDnr.'.jpg"/>';
...