Можно ли написать универсальную (для клиента и для сервера) функцию для получения абсолютного пути? Как это сделать?

Если я напишу так:

define('ROOT', $_SERVER["REQUEST_SCHEME"] . '://' . $_SERVER['HTTP_HOST'] . '/');

затем при использовании серверной функции, например, imagejpeg, возникает ошибка:

imagejpeg(http://mysite/files/users/imgs/original/man.jpg): failed to open stream: HTTP wrapper does not support writeable connections

Если я напишу так:

define('ROOT', realpath(dirname(__FILE__)) . DIRECTORY_SEPARATOR);

Тогда в представлении (MVC) картинка просто не откроется. Например, вот код:

<div style="background-image:url('D:\1Develop\domains\mysite\files/users/imgs/original/man.jpg')"></div>

Блок с «background-image» пуст. Однако, если вы возьмете путь в URL и вставите его в адресную строку, картинка откроется.

Можно ли написать универсальную функцию, которая будет работать как на стороне клиента, так и на стороне сервера?

Если это так, вот функция php, которую возвращает путь:

return DOCROOT . 'files/users/imgs/original/' . $user->photo;

-1

Решение

Нет, это невозможно. URL не являются путями; пути не являются URL-адресами. Используйте две разные константы для корня файловой системы и корня URL.

1

Другие решения

если вы хотите базовое имя URL

<?php
function basename_url(){
if(isset($_SERVER['HTTPS'])){
$protocol = ($_SERVER['HTTPS'] && $_SERVER['HTTPS'] != "off") ? "https" : "http";
}
else{
$protocol = 'http';
}
$base_url = $_SERVER['REQUEST_URI'];
return $protocol . "://" . $_SERVER['HTTP_HOST'].$base_url;
};

Вы можете удалить имя файла, который ты
его из stackoverflow, но не могу вспомнить автора.

-1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector