我有一个php文件,我包含在我的PHP脚本中,但我不希望人们能够直接运行该文件(不包括在内).我怎样才能防止这种情况发生?
使所包含的脚本无法通过HTTP访问.例如,通过保护子文件夹或将它们移动到文档根目录之上.
如果你不能这样做,define()就像IS_INCLUDED你的主脚本中的东西,exit;如果这个常量不在defined()你的包含脚本中.
检查脚本是否是 PHP 进程的父进程可能不是防止用户直接请求包含文件的最佳方法。但它在许多其他情况下也很方便,例如 AJAX 模块等。我不会通过这个开始一个新主题。
if (__FILE__ == get_included_files()[0])
// Doesn't work with PHP prepend unless calling [1] instead.
if (__FILE__ == $_SERVER['DOCUMENT_ROOT'] . $_SERVER['SCRIPT_FILENAME'])
// May not work on Windows due to mixed DIRECTORY_SEPARATOR (machine specific)
if (basename(__FILE__) == basename($_SERVER['SCRIPT_FILENAME']))
// Doesn't work with files with the same basename but different paths
if (defined('FLAG_FROM_A_PARENT'))
// Works in all scenarios but I personally dislike this
if (realpath(__FILE__) == realpath($_SERVER['DOCUMENT_ROOT'] . $_SERVER['SCRIPT_FILENAME']))
// Should work flawlessly
Run Code Online (Sandbox Code Playgroud)
请记住,某些使用虚拟路径的机器可能会在不同的 php 组件中返回不同的路径。realpath() 是您的朋友。
| 归档时间: |
|
| 查看次数: |
2983 次 |
| 最近记录: |