更好/更安全的方式使用PHP包括?

时间:2010-07-16 18:40:16

标签: php security include

这对我有用,但有更好/更安全的方式来使用include:

<?php include "http://www.myserver.com/somefile.php" ; ?>

我试过了:

<?php include "somefile.php" ; ?>

但它不起作用。

5 个答案:

答案 0 :(得分:3)

我使用这种格式,所以我可以使用根级别的相对路径。它比一条路径中的.. \ .. \更容易阅读。

include $_SERVER["DOCUMENT_ROOT"] . '/root folder/file.php'

答案 1 :(得分:1)

这里有几个问题:

  • 如果要包含一个PHP源文件进行处理,包括URL将不起作用,除非服务器不处理PHP文件并逐字返回。
  • 包含网址并不安全;这是你的服务器,它可能不那么严重,但无论如何它都会受到影响,因为直接从磁盘读取文件的速度更快。
  • 如果您所包含的文件没有PHP代码,请使用readfilefile_get_contents

你的第二个包含不起作用的原因是因为文件somefile.php不在“工作目录”中(可能是包含你的文件的目录)。

做其中一项:

  • 使用完整路径:/path/to/somefile.php(在类Unix系统上)。
  • 使用相对路径:../relative/path/to/somefile.php

答案 2 :(得分:1)

为了最好的便携性和maintence,我会在基本路径中定义某种常量,并在查找文件时使用它。这样,如果文件系统中的某些内容发生变化,您只需要更改一个变量以保持一切正常。

示例:

define('INCLUDE_DIR','/www/whatever/');
include(INCLUDE_DIR . 'somefile.php');

答案 3 :(得分:1)

我强烈建议设置include_path,然后使用PHP的自动加载:

http://us3.php.net/autoload

我的自动加载器如下所示:

function __autoload( $class_name ) {
    $fullclasspath="";

    // get separated directories
    $pathchunks=explode("_",$class_name);

    //re-build path without last item
    $count = count( $pathchunks ) -1;
    for($i=0;$i<$count;$i++) {
        $fullclasspath.=$pathchunks[$i].'/';
    }
    $last = count( $pathchunks ) - 1;
    $path_to_file = $fullclasspath.$pathchunks[$last].'.php';
    if ( file_exists( $path_to_file ) ) {
        require_once $path_to_file;    
    }
}

答案 4 :(得分:0)

我用这个:

$filename = "file.php";
if (file_exists($filename)) {
include($filename);
}