是否可以下载具有读取权限的php文件?

是否可以下载具有读取权限的php文件?,php,linux,unix,permissions,server,Php,Linux,Unix,Permissions,Server,好的,所以当涉及到php或在服务器端执行的任何其他语言时,我并不确定权限 据我所知,文件具有以下权限:读取、写入、执行,它们可以组合使用,如仅读取和执行、仅写入等。有三种“用户类型”,因此基本上需要为每种用户设置读、写、执行权限:用户,即:根用户,组用户,世界用户。如果我将每个文件的读取权限设置为“ON”,理论上,我应该能够下载php文件,无论我是谁,因为所有用户都可以读取该文件 在我的本地服务器上做了一个小实验。我有一个名为a.php的文件,其中包含以下代码: <?php echo 'e

好的,所以当涉及到php或在服务器端执行的任何其他语言时,我并不确定权限

据我所知,文件具有以下权限:读取写入执行,它们可以组合使用,如仅读取和执行、仅写入等。有三种“用户类型”,因此基本上需要为每种用户设置读、写、执行权限:用户,即:根用户组用户世界用户。如果我将每个文件的读取权限设置为“ON”,理论上,我应该能够下载php文件,无论我是谁,因为所有用户都可以读取该文件

在我的本地服务器上做了一个小实验。我有一个名为a.php的文件,其中包含以下代码:

<?php
echo 'executed';
?>

我已将其权限设置为333,即-r--r--。每个访问该文件的人都只能读取它。如果我使用我的浏览器访问a.php,我只会看到executed,这是来自php文件的回声的结果,而不是整个文本。我不太清楚为什么会发生这种情况,也不清楚为什么没有显示所有的代码。这在某种程度上确实是一件好事,因为黑客将无法看到源代码,即使您忘记禁用读取权限(例如)


这对我来说是个谜,如果有人能解释为什么会发生这种情况,我会非常感激。谢谢

这是由于web服务器(Apache、nginx等)造成的。当你“询问”这个文件时,它会检查它的类型,然后猜怎么办。当它看到php时,就会执行它,发送text/html头。如果希望它显示代码,不要执行它并返回text/plain

在您的例子中,php解释器(不是浏览器!)读取文件,然后执行它。如果您拒绝读取此文件,它将无法执行此操作

唯一需要“执行”权限的是老式CGI脚本。这些都是代表Web服务器通过shell执行的。Web服务器访问的每个其他文件只需要“读取”权限

PHP脚本不会像程序一样“执行”。Web服务器中的PHP插件将PHP代码读入内存并在内存中执行。在任何时候都没有真正的“php程序”在运行。只要文件可读,PHP就可以加载原始代码,然后解析/执行它。

这个问题的答案:解释有关PHP脚本的权限是如何工作的。不确定它是否回答了你的全部问题,但这应该是一个好的开始。