2010-07-16 2 views
3

это работает для меня, но есть лучше/безопаснее способ использования включают:Лучше/безопаснее использовать php?

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

Я пробовал:

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

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

+0

Возможно, вы скажете, что файл, который вы пытаетесь включить, относится к файлу, который выполняется? – NikiC

+0

Убедитесь, что файл, который вы включаете, находится в том же каталоге, что и файл, в который вы его включаете (на веб-сервере). Вы можете использовать относительные пути, если он isnt –

+0

вы попробовали листинг/если он находится в корневом каталоге вашего сервера? – Tim

ответ

3

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

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

Есть несколько вещей, которые здесь не так:

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

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

Выполните одно из них:

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

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

пример:

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

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

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

Я настоятельно рекомендую установив include_path, а затем с помощью РНР автозагрузку:

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;  
    } 
} 
+0

Автозагрузка - отличная точка. –

Смежные вопросы