Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как сохранить относительный путь картинки внутри php файла, вложенного include ?

Дмитрий Корниенко Гуру (2695), открыт 1 неделю назад
В файле photo/pics.php указана ссылка на картинку, которая лежит в той же папке photo
 <img src="1.jpg"> 
Файл index.php лежит в корне (на уровень выше). В нём указан include
 <?php include "/photo/pics.php";?> 
При открытии страницы index.php мы видим, что картинка не отображается, потому что её относительный путь стал /1.jpg, вместо /photo/1.jpg

Вопрос: Как сделать так, чтобы картинка отображалась и при прямом заходе на страницу pics.php, и при обращении к странице index.php? Причем, путь должен быть указан относительный
Дополнен 1 неделю назад
Папка /photo может называться по разному, их много, нельзя прописать абсолютный путь. Нужно именно относительный, но при инклуде понимать, что файл лежит там, откуда инклуд подтянулся
4 ответа
Андрей Высший разум (469959) 1 неделю назад
 <img src="/photo/1.jpg"> 
Не надо использовать в HTML / CSS относительные адреса. Никогда не надо.
Твоё "путь должен быть указан относительный" лишь создало тебе проблему на пустом месте, которую ты теперь пытаешься героически преодолеть.
Дмитрий КорниенкоГуру (2695) 1 неделю назад
Папка /photo может называться по разному, их много, нельзя прописать абсолютный путь. Нужно именно относительный, но при инклуде понимать, что файл лежит там, откуда инклуд подтянулся
Андрей Высший разум (469959) Дмитрий Корниенко, И что с того, что директорий много? Каким образом это создаёт проблему, если в конкретном файле прописан конкретный путь? Ведь если ты пишешь <?php include "/image/pics.php";?>, то /image/pics.php - это совсем другой файл, в котором будет прописан совсем другой путь.
S.H.I. Оракул (69249) 1 неделю назад
В index.php определим переменную, которая будет содержать базовый путь к папке photo.
 <?php 
$base_path = 'photo';
include $base_path . '/pics.php';
?>
В pics.php используем эту переменную для построения пути к картинке.
 <?php 
if (!isset($base_path)) {
$base_path = '';
}
?>
<img src="<?php echo $base_path; ?>/1.jpg">
Дмитрий КорниенкоГуру (2695) 1 неделю назад
Папка /photo может называться по разному, их много, нельзя прописать абсолютный путь. Нужно именно относительный, но при инклуде понимать, что файл лежит там, откуда инклуд подтянулся
S.H.I. Оракул (69249) Использование __DIR__ и realpath. В pics.php определим текущий путь к файлу и его родительской директории.
 <?php 
$current_dir = __DIR__; 
 
$parent_dir = realpath($current_dir . '/..'); 
 
$relative_path = str_replace($_SERVER['DOCUMENT_ROOT'], '', $parent_dir) . '/photo'; 
?> 
<img src="<?php echo $relative_path; ?>/1.jpg"> 
В index.php просто включаем pics.php без дополнительных настроек.
 <?php 
include 'photo/pics.php'; 
?> 
Дмитрий КорниенкоГуру (2695) 1 неделю назад
Теперь у меня пусть к картинке начинается с диска C:\OpenServer\domains.....\1.jpg
Как бы всё верно, но в браузере не отображается. Можно ли это тоже как-то пофиксить? )) Чтобы адрес начинался с https : //domainname/ ... /1.jpg ? ))
TarinValdor Мыслитель (8573) 1 неделю назад
Примерно так
 <?php 
// Определяем путь к текущей директории относительно корня веб-сервера
$baseDir = str_replace($_SERVER['DOCUMENT_ROOT'], '', __DIR__);
?>
<img src="<?php echo $baseDir; ?>/1.jpg">
Дмитрий КорниенкоГуру (2695) 1 неделю назад
Теперь у меня пусть к картинке начинается с диска C:\OpenServer\domains.....\1.jpg
Как бы всё верно, но в браузере не отображается. Можно ли это тоже как-то пофиксить? )) Чтобы адрес начинался с https : //domainname/ ... /1.jpg ? ))
TarinValdor Мыслитель (8573) Дмитрий Корниенко, потому что путь, начинающийся с C:\, — это локальный файловый путь, для работы в браузере нужно использовать URL, начинающийся с http:// или https:// . Используй веб сервер по типу OpenServer
Дмитрий КорниенкоГуру (2695) 1 неделю назад
Так я его и использую
TarinValdor Мыслитель (8573) Дмитрий Корниенко, Ты его через веб сервер запускаешь? http:// или https:// у тебя должно быть
TarinValdorМыслитель (8573) 1 неделю назад
 <?php 
// базовый URL до твоего домена
$baseUrl = (!empty($_SERVER['HTTPS']) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'];

// путь к файлу относительно домена
$imagePath = $baseUrl . '/photo/1.jpg';
?>

<img src="<?php echo $imagePath; ?>" alt="Image">
Дмитрий Корниенко Гуру (2695) Беспрекословный Эксперт, В этом варианте получился абсолютный путь, а не относительный. папка photo может иметь разные названия,т ак не подойдёт ... Нужно, чтобы фото всегда подтягивалось относительно вложенного (инклуд) файла
Alex Искусственный Интеллект (119360) 1 неделю назад
начинай адрес с слеша, это всегда корень сайта.
/photo/1.jpg
Похожие вопросы