Я делаю интранет для послепродажного обслуживания клиентов. Сотрудник должен иметь возможность загружать 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;?>"/>