2013-07-30 4 views
0

У меня есть сайт со следующей структурой каталогов:PHP require_once путь

index.php 
connections/database.php 
contacts/details.php 
inc/functions.php 

index.php, database.php и details.php страницы все требуют страницы functions.php. Я включаю это на следующих страницах:

$path = dirname(__DIR__); 
// looks like this: /Library/WebServer/Documents/clients/acme 
require_once $path.'/inc/functions.php'; 

Это хорошо работает на моем сервере разработки Mac. Я просто загрузил файлы на рабочий сервер, на котором работает IIS/Windows 2008, поэтому я знал, что будут проблемы с некоторыми путями.

мне пришлось изменить код, чтобы включить файл functions.php в этом:

$path = dirname(__DIR__); 
// looks like this: C:\inetpub\wwwroot\client_sites\acme 
require_once $path.'\inc\functions.php'; 

Это все работает до сих пор, но мне интересно, если есть простой способ сделать это динамичным, так что я не нужно изменять строку для правильной обратной косой черты или косой черты в зависимости от среды сервера? В какой-то момент я забуду, или клиент может изменить серверы, а затем это сломается и потребует вручную изменить пути.

Есть ли способ автоматически обрабатывать путь независимо от операционной среды сервера?

+5

Вы можете просто использовать/повсюду, он будет правильно интерпретироваться на машинах Windows. – Orangepill

+1

Согласитесь с @Orangepill. Слитки косы должны отлично работать как на окнах, так и на системах * nix. – Cyclonecode

+1

PHP будет автоматически переводить разделители каталогов для вас. Просто используйте '/' и не беспокойтесь об этом. Единственное, о чем вам нужно беспокоиться, это обратиться к разным дискам. Windows'd нужны 'D: /', 'C: /' и т. Д., Тогда как unix-ish-системы не могли не беспокоиться об этом. –

ответ

2

Ну, в PHP есть константа DIRECTORY_SEPARATOR, но нет необходимости ее использовать. Если вы используете косые черты, вы будете в порядке. Windows не будет возражать.

1

Определите DIRECTORY_SEPARATOR в начальной загрузке приложения или автозагрузке.

например.

<?php 
define('DS', DIRECTORY_SEPARATOR); // set the 3rd param to true to define case-insensitive 

Некоторые PHP-структуры (например, CodeIgniter) делают это одинаково для обеспечения правильных dirpath.

Так, чтобы воссоздать путь в вашем примере:

<?php 
define('DS', DIRECTORY_SEPARATOR); 

require_once dirname(__DIR__).DS.'inc'.DS.'functions.php'; 

Отъезд Руководство по PHP для PredefinedConstants и define().

Также рассмотрите возможность использования set_include_path() и spl_autoload_register().

Счастливое кодирование!