Доступ к файлу, который находится перед / вне корневого каталога сервера?

Я делаю интранет для послепродажного обслуживания клиентов. Сотрудник должен иметь возможность загружать img-файлы на сервер интрасети, и мне нужно сохранить их в каталоге с BEFORE www (корневой каталог веб-сайта).

Выполнение этого с использованием php довольно просто, но как включить эти img на веб-сайт после их загрузки? Я пробовал этот код

 <img src="../img/img.png"/> 

Это не работает, потому что я не могу отправить файл, если он НАРУШЕН в каталоге www сервера …

Есть ли правильный способ сделать это?

Текущее дерево:

 server root directory |www |(all server files) |img |(all img files) 

(index.php сервера находится в www и файлы находятся в img )

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

Вы можете сделать следующее:

Внутри вашего каталога www создайте файл «image.php» с похожим контентом:

 <?php header('Content-Type: image/png'); readfile("../img/" . $_GET['img']); ?> 

И назовите свои изображения с помощью

 <img src="image.php?img=myimage.png" /> 

Имейте в виду, что ваш PHP-файл не должен быть таким простым 🙂 Как вы можете захотеть обратиться к нескольким форматам изображений (и предоставить для них правильный заголовок), проверить путь / включения вредоносных файлов (вы не хотите использовать $ _GET без проверки / дезинфекции ввода), дополнительное кэширование и т. Д. И т. Д. И т. Д.

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

Это зависит от того, что вы пытаетесь выполнить и как. С «простыми» командами html это, как вы узнали. Вы не можете перейти в каталог за пределами корня www. (для приложений xampp на C для exmple это большая часть времени c: \ xampp \ htdocs).

Если у вас все в порядке с помощью команд serveride для достижения того, чего вы хотите достичь, вы можете использовать php для обхода, читая соответствующие файлы через PHP. Например, если ваш файл называется «myimg.gif» и находится в «c: \ pics»,

 <img SRC="data:image/gif;base64,<?php echo base64_encode(file_get_contents("c:\pics\myimg.gif"));?>"> 

При этом вы читаете содержимое файла и записываете его непосредственно в тег img. Имейте в виду, что вам нужно изменить изображение / gif на то, что вам действительно нужно.

Вы не можете напрямую обращаться к файлу вне / над корневым каталогом (www или public_html).

Вы можете создать виртуальный каталог в конфигурации сервера Apache. Google "apache virtual directory" для получения дополнительной информации.

Пример конфигурации виртуального каталога:

 <IfModule alias_module> Alias /uploaded_images/ "/home/someuser/somewhere" <Directory "/home/someuser/somewhere"> Allow from all </Directory> </IfModule> 

Каталог uploaded_images будет доступен из Интернета, как обычный каталог в каталоге www. Вы можете копировать файлы оттуда в другое место (вид буферизации).

Вы также можете открыть / скопировать этот файл с ftp с php-уровня, не изменяя ничего в apache, но это может быть очень медленным (используйте его, только если вы не можете управлять конфигурацией apache, гораздо лучше работает виртуальный каталог).

php.net: FTP

Я согласен с идеей @ kamil о создании виртуального каталога. Однако, если вы хотите перейти по php-маршруту, я написал код, который открывает изображения в каталоге перед WWW и копирует их в папку www / images.

 <?php $imagepath = "../images/"; define('IMGPATH', realpath($imagepath).DIRECTORY_SEPARATOR); $cachewwwimg = "images/"; $imagename = 'image.jpg'; copy(IMGPATH.$imagename, $cachewwwimg.$imagename) ?> <img src="<?php echo $cacheimg.$imagename;?>"/>