进入位于前/文件服务器根目录之外?(Access a file which is located b

2019-06-21 03:24发布

我正在做一个售后客户服务企业公司内部网。 员工需要能够IMG文件上传到内网的服务器,我需要将它们存储在目录中是前www (Web站点的根目录)。

这样做使用PHP是很容易的,但一旦他们上传的方式,包括在网站上这些IMGS? 我想这个代码

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

这是行不通的,因为我不能发送一个文件,如果它超出了服务器的www目录...

有没有做任何适当的方式?

当前树形:

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

(服务器的index.php文件位于www和文件都在img

Answer 1:

你不能直接访问你的web目录以外的任何文件。 至于你的问题包括标签PHP还有,我想你可能想使用它。

你可以做的是以下几点:

里面你的www目录,创建一个“image.php”文件,具有相似的内容:

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

并调用您的图像与

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

请注意,你的PHP文件不应该是简单的:)你可能要应对多种图像格式(并为他们提供正确的标题),检查是否有恶意文件的路径/夹杂物(你不想使用$ _GET而无需验证/消毒的输入),额外的高速缓存等等,等等等等

但是,这应该给你你如何能针对你的问题的想法。



Answer 2:

这取决于你想什么来实现,以及如何。 随着“简单” HTML命令是因为你发现了。 你不能去到一个目录下的WWW目录之外。 (关于下exmple XAMPP应用来说,大多数时间使用c:\​​ XAMPP \ htdocs中)。

如果你都OK使用服务器端的命令来实现你想实现,那么你可以使用PHP做一个变通方法,通过读取通过PHP相应的文件内容。 例如,如果您的文件名为“myimg.gif”和位于“C:\图片”

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

与您正在阅读的文件的内容,并直接写入入img标签。 请注意,您需要在图像/ GIF更改为你真正需要的存在。



Answer 3:

您无法直接访问外部文件/你上面的根目录(WWW或的public_html)。

您可以创建在Apache服务器配置虚拟目录。 谷歌“阿帕奇虚拟目录”以获取更多信息。

虚拟目录配置例如:

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

uploaded_images目录将可以从像www目录正常的目录网站。 你可以从那里复制文件到另一个位置(一种缓冲)。

您还可以打开/复制从PHP水平FTP该文件不改变阿帕奇什么,但是这可能是很慢(只使用它,如果你无法控制的Apache配置,虚拟目录要好得多)。

php.net:FTP



Answer 4:

我同意@卡米尔的有关创建虚拟目录的想法。 但是,如果你想要去的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;?>"/>


文章来源: Access a file which is located before / outside the server root directory?