Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP—&引用;定义或退出“;在许多文件的开头?_Php - Fatal编程技术网

PHP—&引用;定义或退出“;在许多文件的开头?

PHP—&引用;定义或退出“;在许多文件的开头?,php,Php,我一直在检查一些PHP源代码,我经常发现以 defined('__someconstant__') or exit(); 我知道如果以前的文件定义了\uuuuu someconstant\uuuuuu,这会阻止直接访问该文件,但我想知道这是否真的有必要。。。如果不在每个文件中引入这些额外的代码,是否有一种更干净的方法(即使是非基于PHP的方法)?为了避免(几乎)每个文件顶部的那些(无用的)行,您可以: 将公共“控制器”文件(如index.php存储在名为web或public的目录中,web服

我一直在检查一些PHP源代码,我经常发现以

defined('__someconstant__') or exit();
我知道如果以前的文件定义了
\uuuuu someconstant\uuuuuu
,这会阻止直接访问该文件,但我想知道这是否真的有必要。。。如果不在每个文件中引入这些额外的代码,是否有一种更干净的方法(即使是非基于PHP的方法)?

为了避免(几乎)每个文件顶部的那些(无用的)行,您可以:

  • 将公共“控制器”文件(如index.php存储在名为webpublic的目录中,web服务器的别名或虚拟主机指向该目录

  • 存储在其他目录中,如libconfigapps…所有不应通过Web服务器直接访问的文件,只需键入URL即可

这通常是现有框架的结构


此外,您可以(当然也会,对于URL重写)放置一个
.htaccess
文件,但服务器配置错误可能会意外地禁用它,因此将源文件保留在不同的目录中会更好。

添加到@NullUserException的答案中

是的,还有其他方法可以防止直接访问文件(.htaccess是其中之一),但对于与广泛受众共享的软件,您不能真正依赖这些技术。不过,您可以依赖文件顶部的一个简单条件

在每个文件中不引入额外代码的情况下,是否有一种更干净的方法(即使不是基于PHP的)

这些代码片段的存在表明代码结构不正确,即代码在全局范围内自动执行。您不应该在纯函数/类包含中包含此
或exit();
代码。这将是多余的


执行潜在危险操作的代码首先不应在web上访问。或exit;方法是一种变通方法。它应该始终伴随文件匹配拒绝文件中的所有。但是,htaccess文件。最好设置整个include目录不可访问。

 .htaccess
依赖于web服务器,这不是。是的。但是大多数其他服务器也应该有这方面的功能,如果只有一个全局配置的话。Nanoweb有
。nwcaccess
和nginx一些迷你脚本语言,例如,使用suphp/suexec设置,你可以求助于目录权限。我很惊讶你是唯一一个能够这是防止直接访问您的文件的最安全的方法,即不要将它们放在文档根目录中!@JohnCartwright是的,但这需要额外的配置。此外,这可能不是每个人都可以使用的选项,特别是对许多使用共享主机的人。@NullUserExceptionఠ_ఠ 当使用别名或虚拟主机时,配置难度是相同的(只需指向
{projectroot}/web
而不是
{projectroot}
)。但是你是对的,这不适合配置选项太少的共享主机。但是如果你不想冒太大的风险(安全、源代码隐私、中断…)共享主机可能不是一个选项。