如何放置包括在其他地方

时间:2015-11-15 08:24:07

标签: php

我在php中创建了一些函数,但是我遇到了问题

if (isset($_GET['page']) ) 
{
    $open = __DIR__.'/../view/html/'.$_GET['page'].'.php';
    if (file_exists($open)){
        include $open; //<<<<can i//
    }
    else {
        "echo "The file not found";
    }
} 
  1. 如果是,我想将该文件包含在其他地方,但是如何?
  2. 我正在尝试将代码放在我想要的位置,但__DIR__无法正常工作。我不知道如何解决它变得正确。解决方案无法在教程中找到。

3 个答案:

答案 0 :(得分:0)

你必须这样做。

使用file_get_contents()

if (file_exists($open)){
    file_get_contents($open);
}

答案 1 :(得分:0)

您的问题的答案是yes,这将有效。是否应使用readfile()file_get_contents()include取决于文件的内容。如果您在该文件中有php代码,则需要includerequire。但这实际上带来了另一个问题。

正如@anonymous在评论中所提到的,你正在暴露自己的LFI攻击。要解决此问题,应将页面定义为白名单数组。然后,您应检查该页面是否在白名单数组中。如果不是,请不要尝试打开该文件。

$pages = array(
    'page1',
    'page2'
);

然后你可以做一个参考并检查它是否存在。

if(in_array($_GET['page'], $pages)){
    //now check for the file
    $open = __DIR__.'/../view/html/'.$_GET['page'].'.php';
    if(file_exists($open)){
        include $open;
    }
} else {
    //page does not exist, redirect them elsewhere.
    header('Location: http://example.com/404.php');
}

答案 2 :(得分:0)

我会用:

if( isset( $_GET['page'] ) ) {
    switch( strtolower( $_GET['page') ) ) {
        case 'download':
            include '../download.php';
            break;
        case 'blog':
            include '../blog.php';
            break;
        // ... And so on
        default:
            echo 'File not found';
    }
} else {
    echo 'No file specified';
}

通过这种方式,您可以完全控制可以包含哪些文件!