我有一个用php制作的版本管理系统。
文件通过上传添加到存储库。这些文件存储在web根目录的子文件夹中。(这不是问题,因为它将在受信任用户的本地网络中运行)。我必须添加一个选项来查看"原始代码",或者至少下载它们。我目前的想法是使用标准的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服务器中排除?
上传文件时更改文件的后缀如何?EG myfile.php变为myfile.php.removeme?如果用户想下载该文件,请将其改回。
我建议使用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>';