您的示例应该可以正常工作(我根据 EDIT 2 再次取消了前一个),前提是该文件位于当前工作目录中(从现在开始我将其缩写为 cwd )。
编辑
对不起,我在想什么。您的示例当然不起作用,因为file_exists()
应该提供文件的完整路径。因此,在文件前面加上要从目录中提取文件的目录。尽管如此,我对清理和白名单等的警告仍然很重要。
结束编辑
编辑 2
哇,对不起,我搞砸了。file_exists()
使用相对路径应该可以正常工作。查看文档,它确实警告安全模式限制。也许这些适用于你的情况,我不知道。
结束编辑 2
您可以使用 测试 cwd 是什么getcwd()
。通常情况下,cwd 与您的应用程序的入口点相同。因此,如果例如/usr/www/your_site_root/index.php
是入口点,那么/usr/www/your_site_root/
就是 cwd。
因此,您尝试包含在示例中的文件应位于所述目录中。
一句忠告:
您可能已经意识到这一点,但是您的示例不是很安全。您不会以任何方式清理用户的输入($_GET[ 'file' ]
在这种情况下)。这样,访问者将能够包含各种带有不需要结果的 php 文件。
因此,我建议您保留允许获取的文件的白名单。就像是:
<?php
$whiteList = array(
'dude',
'chick',
'mom'
);
// and just to be safe, you should probably strip stuff like ../ etc. here too.
$requestedFileBaseName = $_GET[ 'file' ];
if( !in_array( $requestedFileBaseName, $whileList ) )
{
include( '404.php' );
}
else
{
include( $requestedFileBaseName . '.php' );
}