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

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

Дмитрий Корниенко Гуру (2700), закрыт 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? Причем, путь должен быть указан относительный
Дополнен 2 месяца назад
Папка /photo может называться по разному, их много, нельзя прописать абсолютный путь. Нужно именно относительный, но при инклуде понимать, что файл лежит там, откуда инклуд подтянулся
Лучший ответ
Александр Волков Мудрец (11214) 2 месяца назад
Примерно так
 <?php 
// Определяем путь к текущей директории относительно корня веб-сервера
$baseDir = str_replace($_SERVER['DOCUMENT_ROOT'], '', __DIR__);
?>
<img src="<?php echo $baseDir; ?>/1.jpg">
Дмитрий КорниенкоГуру (2700) 2 месяца назад
Теперь у меня пусть к картинке начинается с диска C:\OpenServer\domains.....\1.jpg
Как бы всё верно, но в браузере не отображается. Можно ли это тоже как-то пофиксить? )) Чтобы адрес начинался с https : //domainname/ ... /1.jpg ? ))
Александр Волков Мудрец (11214) Дмитрий Корниенко, потому что путь, начинающийся с C:\, — это локальный файловый путь, для работы в браузере нужно использовать URL, начинающийся с http:// или https:// . Используй веб сервер по типу OpenServer
Дмитрий КорниенкоГуру (2700) 2 месяца назад
Так я его и использую
Александр Волков Мудрец (11214) Дмитрий Корниенко, Ты его через веб сервер запускаешь? http:// или https:// у тебя должно быть
Александр ВолковМудрец (11214) 2 месяца назад
 <?php 
// базовый URL до твоего домена
$baseUrl = (!empty($_SERVER['HTTPS']) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'];

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

<img src="<?php echo $imagePath; ?>" alt="Image">
Дмитрий Корниенко Гуру (2700) Беспрекословный Эксперт, В этом варианте получился абсолютный путь, а не относительный. папка photo может иметь разные названия,т ак не подойдёт ... Нужно, чтобы фото всегда подтягивалось относительно вложенного (инклуд) файла
Остальные ответы
Андрей Высший разум (478217) 2 месяца назад
 <img src="/photo/1.jpg"> 
Не надо использовать в HTML / CSS относительные адреса. Никогда не надо.
Твоё "путь должен быть указан относительный" лишь создало тебе проблему на пустом месте, которую ты теперь пытаешься героически преодолеть.
Дмитрий КорниенкоГуру (2700) 2 месяца назад
Папка /photo может называться по разному, их много, нельзя прописать абсолютный путь. Нужно именно относительный, но при инклуде понимать, что файл лежит там, откуда инклуд подтянулся
Андрей Высший разум (478217) Дмитрий Корниенко, И что с того, что директорий много? Каким образом это создаёт проблему, если в конкретном файле прописан конкретный путь? Ведь если ты пишешь <?php include "/image/pics.php";?>, то /image/pics.php - это совсем другой файл, в котором будет прописан совсем другой путь.
S.H.I. Оракул (72836) 2 месяца назад
В 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">
Дмитрий КорниенкоГуру (2700) 2 месяца назад
Папка /photo может называться по разному, их много, нельзя прописать абсолютный путь. Нужно именно относительный, но при инклуде понимать, что файл лежит там, откуда инклуд подтянулся
S.H.I. Оракул (72836) Использование __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'; 
?> 
Дмитрий КорниенкоГуру (2700) 2 месяца назад
Теперь у меня пусть к картинке начинается с диска C:\OpenServer\domains.....\1.jpg
Как бы всё верно, но в браузере не отображается. Можно ли это тоже как-то пофиксить? )) Чтобы адрес начинался с https : //domainname/ ... /1.jpg ? ))
Alex Искусственный Интеллект (120580) 2 месяца назад
начинай адрес с слеша, это всегда корень сайта.
/photo/1.jpg
Похожие вопросы