更好/更安全地使用php的方法包括?

更好/更安全地使用php的方法包括?,php,security,include,Php,Security,Include,这对我来说很有效,但有没有更好/更安全的方法来使用include: <?php include "http://www.myserver.com/somefile.php" ; ?> 我试过: <?php include "somefile.php" ; ?> 但它没有起作用 我使用这种格式,因此可以使用根级别的相对路径。它比路径中的一堆…\ \更容易阅读 include $_SERVER["DOCUMENT_ROOT"] . '/root folder/fi

这对我来说很有效,但有没有更好/更安全的方法来使用include:

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

我试过:

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


但它没有起作用

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

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

这里有几个问题:

  • 如果您想要包含一个PHP源文件进行处理,那么包含一个URL将不起作用,除非服务器不处理PHP文件并逐字返回
  • 包括URL是不安全的;这是您的服务器,可能不太严重,但它的性能会受到影响,因为直接从磁盘读取文件的速度更快
  • 如果包含的文件没有PHP代码,请使用
    readfile
    file\u get\u contents
第二个include不起作用的原因是文件
somefile.php
不在“工作目录”(可能是包含该include的文件目录)中

执行以下操作之一:

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

    • 为了获得最佳的可移植性和维护性,我会在基本路径中定义某种常量,并在查找文件时使用它。这样,如果文件系统中的某些内容发生了更改,您只需更改一个变量即可使所有内容正常工作

      例如:

      define('INCLUDE_DIR','/www/whatever/');
      include(INCLUDE_DIR . 'somefile.php');
      
      我用这个:

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

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

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

      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;    
          }
      }
      
      function\uuu自动加载($class\u name){
      $fullclasspath=“”;
      //获取分离的目录
      $pathchunks=explode(“\u”,$class\u name);
      //重新生成不带最后一项的路径
      $count=count($pathchunks)-1;
      
      对于($i=0;$i)您能告诉use there您尝试包含的文件是相对于正在执行的文件的吗?请确保您包含的文件与您包含的文件(在Web服务器上)位于同一目录中。如果不是,您可以使用相对路径。您是否尝试了前导/如果它位于服务器的根目录中?