单击时下载/查看文件:Apache目录列表

时间:2012-01-07 14:15:18

标签: php apache2

我有一个用php制作的版本管理系统。

文件通过上传添加到存储库。文件存储在web root的子文件夹中。(这不是问题,因为它要在受信任的用户之间的本地网络中运行)。我必须添加一个选项查看“原始代码”或至少下载它们。我目前的想法是使用标准的apache目录列表来实现它。

问题

存储库肯定会包含HTML和PHP文件。它们会被执行而不是被显示。

我尝试使用文件权限管理它但没有成功。

另一种可能的解决方案是使用只读文本字段,如果文件太大,会给服务器内存带来巨大负担。它不支持图像文件。

Apache目录列表需要零代码来显示文件。这是我选择这种方法的主要原因。 无论如何这里是我提到的文本字段显示。

public function show_file()
   {
     while(!feof($this->_handle))
     {
       $content=fgets($this->_handle)."<br/>";
     }
     echo "<input type=text value=$content readonly>";
   }

我会考虑仅使用Javascript作为最后一个选项,因为它对我来说完全不同。

如何处理这种情况?有没有办法从Web服务器中排除特定目录(及其子目录)?

2 个答案:

答案 0 :(得分:0)

如果在上传时更改文件的后缀怎么样? EG myfile.php成为myfile.php.removeme?如果此人想要下载文件,请将其更改回来。

答案 1 :(得分:0)

我建议改用file_get_contents()。根据文件:

  

file_get_contents()是将文件内容读入字符串的首选方法。如果操作系统支持,它将使用内存映射技术来提高性能。

对于您的具体情况,我会做类似的事情:

$file = file_get_contents('/path/to/your/file.php');

// If you want to be able to edit the file.
echo '<textarea name="content">' . $file . '</textarea>';

// If you just want to display the content.
echo '<pre>' . htmlentities($file) . '</pre>';