разрешение localhost в php, так что можно просматривать за пределами виртуальной машины - PullRequest
2 голосов
/ 31 марта 2010

Я использую Windows 7. Внутри я использую Virtualbox и Ubuntu. В Ubuntu я использую Apache и использую PHP codeigniter. Чтобы ссылаться на наши файлы CSS и JS, мы используем этот синтаксис:

<?php echo site_url('css/styles.css'); ?>

При локальном просмотре сайта (в рамках Ubuntu VM), который разрешается в:

http://localhost/styles.css

Так прекрасно работает.

Проблема в том, что я захожу на этот сайт из Windows 7 (для тестирования IE). Чтобы получить доступ к сайту в Windows 7, я обращаюсь к IP-адресу виртуальной машины:

http://xx.x.x.x/

Это загружает сайт, но, увы, все переменные site_url все еще переписываются как 'localhost'. Указанные файлы, очевидно, не существуют на локальном хосте моих окон 7.

Есть ли способ обойти эту короткую позицию, заключающуюся в жестком кодировании относительных ссылок в моем PHP-файле?

Ответы [ 3 ]

5 голосов
/ 31 марта 2010

Здесь много вариантов от очень простого до безумного комплекса:

Легко

$config['base_url'] = 'http://'. $_SERVER['HTTP_HOST'].'/';

Это поддерживает:

Комплекс

$config['base_url'] = isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on' ? 'https' : 'http';
$config['base_url'] .= '://'. $_SERVER['HTTP_HOST'];
$config['base_url']l .= str_replace(basename($_SERVER['SCRIPT_NAME']), '', $_SERVER['SCRIPT_NAME']);

Это поддерживает:

Потенциально безумный

Этот очень похож, но сохраняет ваш config.php в чистоте, предлагаетОткат в случае сбоя HTTP_HOST дает вам константу для использования по всему сайту и может дать вам относительный URI к BASEPATH и APPPATH от веб-корня.

Поместите это в constants.php:

/*
|--------------------------------------------------------------------------
| Docment root folders
|--------------------------------------------------------------------------
|
| These constants use existing location information to work out web root, etc.
|
*/

// Base URL (keeps this crazy sh*t out of the config.php
if(isset($_SERVER['HTTP_HOST']))
{
    $base_url = isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on' ? 'https' : 'http';
    $base_url .= '://'. $_SERVER['HTTP_HOST'];
    $base_url .= str_replace(basename($_SERVER['SCRIPT_NAME']), '', $_SERVER['SCRIPT_NAME']);

    // Base URI (It's different to base URL!)
    $base_uri = parse_url($base_url, PHP_URL_PATH);
    if(substr($base_uri, 0, 1) != '/') $base_uri = '/'.$base_uri;
    if(substr($base_uri, -1, 1) != '/') $base_uri .= '/';
}

else
{
    $base_url = 'http://localhost/';
    $base_uri = '/';
}

// Define these values to be used later on
define('BASE_URL', $base_url);
define('BASE_URI', $base_uri);
define('APPPATH_URI', BASE_URI.APPPATH);

// We dont need these variables any more
unset($base_uri, $base_url);

В вашем config.php вы можете просто использовать:

$config['base_url'] = BASE_URL;

Это поддерживает:

(Да, это тот же список, что и комплексметод).

Это должно привести к тому, что ваше приложение будет работать практически везде, где вы его поместили, но пока оно не поддерживает URL-адреса / ~ userdir.

1 голос
/ 31 марта 2010

Функция site_url() в CodeIgniter, , задокументированная здесь , использует все, что вы настроили в своем файле конфигурации. Вы должны просто иметь возможность открыть свой основной файл конфигурации (application/config/config.php) и изменить настройку базового URL-адреса на свой виртуальный IP, и тогда ваши ссылки будут работать для обеих сред. Это первая настройка в файле:

$config['base_url'] = "http://x.x.x.x/";
0 голосов
/ 31 марта 2010

Более практичным было бы установить виртуальный хост на Apache и добавить имя хоста в файл windows 'hosts', чтобы вы могли использовать что-то вроде 'mysite.local' вместо 'localhost' или ip address.

подробнее

...