Лучший / безопасный способ использования php include? - PullRequest
3 голосов
/ 16 июля 2010

это работает для меня, но есть ли лучший / более безопасный способ использовать include:

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

Я пробовал:

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

, но это не сработало.

Ответы [ 5 ]

3 голосов
/ 16 июля 2010

Я использую этот формат, чтобы я мог использовать относительные пути от корневого уровня. Это облегчает чтение, чем куча .. \ .. \ в пути.

include $_SERVER["DOCUMENT_ROOT"] . '/root folder/file.php'
1 голос
/ 17 июля 2010

Я бы настоятельно рекомендовал установить 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;    
    }
}
1 голос
/ 16 июля 2010

Для лучшей переносимости и обслуживания я бы определил некоторую константу для базового пути и использовал ее при поиске файлов.Таким образом, если что-то в файловой системе изменяется, вам нужно изменить только одну переменную, чтобы все работало.

пример:

define('INCLUDE_DIR','/www/whatever/');
include(INCLUDE_DIR . 'somefile.php');
1 голос
/ 16 июля 2010

Здесь несколько вещей не так:

  • Если вы хотите включить исходный файл PHP для обработки, в том числе URL не будет работать, если сервер не обработает файлы PHP и не вернет его дословно.
  • Включение URL-адресов небезопасно; это ваш сервер, вероятно, не такой серьезный, но в любом случае это снижение производительности, поскольку чтение файла непосредственно с диска происходит быстрее.
  • Если файл, который вы включаете, не имеет кода PHP, используйте readfile или file_get_contents.

Причина, по которой ваше второе включение не работает, заключается в том, что файл somefile.php не находится в «рабочем каталоге» (скорее всего, в каталоге файла, в котором вы включаете).

Выполните одно из следующих действий:

  • Используйте полный путь: /path/to/somefile.php (в Unix-подобных системах).
  • Используйте относительный путь: ../relative/path/to/somefile.php.
0 голосов
/ 16 июля 2010

Я использую это:

$filename = "file.php";
if (file_exists($filename)) {
include($filename);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...