PHP:检查文件是否直接加载而不是包含?
有没有办法防止用户查看文件,但仍然将其用作PHP中另一个文件中包含的文件?
如果您使用
define('APP_RAN');
在包含它的文件中,然后放入
if(!defined('APP_RAN')){ die(); }
或者
defined('APP_RAN') or die();
(更易于阅读)
在包含的文件中,如果您直接访问它们,它将死亡。
不过,最好将所有包含的文件放在 DocumentRoot 之上。
例如,如果您的索引页位于
/my/server/domain/public_html
您应该将包含的文件放在
/my/server/domain/
我的建议:
<?php
if (__FILE__ == $_SERVER['SCRIPT_FILENAME']) {
header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found');
exit("<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\r\n<html><head>\r\n<title>404 Not Found</title>\r\n</head><body>\r\n<h1>Not Found</h1>\r\n<p>The requested URL " . $_SERVER['SCRIPT_NAME'] . " was not found on this server.</p>\r\n</body></html>");
}
else {
// your code
}
?>
1.)它检查它是否被直接调用,否则它会抛出一个错误
2.)它输出一个404标准apache错误页面(请与您原来的404页面进行比较或简单地包括该页面)以通过模糊性添加安全性
3.) else 部分避免在文件上传到实时环境时部分执行(PHP 不会等待“?>”)。如果包含的文件仅包含一个函数/一个类,则不需要它。