在php中解析localhost,以便可以在VM之外查看

在php中解析localhost,以便可以在VM之外查看,php,codeigniter,virtualization,Php,Codeigniter,Virtualization,我正在运行Windows7。在里面,我正在运行Virtualbox和Ubuntu。在Ubuntu中,我运行Apache并使用PHP codeigniter。为了引用CSS和JS文件,我们使用以下语法: <?php echo site_url('css/styles.css'); ?> 这样很好 问题是当我从Windows7(用于IE测试)中访问该站点时。要访问Windows 7中的站点,请参考VM的IP地址: http://xx.x.x.x/ 这将加载站点,但遗憾的是,所有站点u

我正在运行Windows7。在里面,我正在运行Virtualbox和Ubuntu。在Ubuntu中,我运行Apache并使用PHP codeigniter。为了引用CSS和JS文件,我们使用以下语法:

<?php echo site_url('css/styles.css'); ?>
这样很好

问题是当我从Windows7(用于IE测试)中访问该站点时。要访问Windows 7中的站点,请参考VM的IP地址:

http://xx.x.x.x/
这将加载站点,但遗憾的是,所有站点url变量仍被重写为“localhost”。上述文件显然不存在于我的Windows7的本地主机上

在我的PHP文件中,有没有一种方法可以解决这个简单的硬编码相对链接的问题?

CodeIgniter中的
site\u url()
函数使用您在配置文件中设置的任何内容。您应该只需要打开主配置文件(
application/config/config.php
)并将基本URL设置更改为您的VM IP,然后您的链接就可以在这两种环境下工作。这是文件中的第一个设置:

$config['base_url'] = "http://x.x.x.x/";

更实际的做法是在Apache上设置一个虚拟主机,并将主机名添加到windows的“hosts”文件中,这样您就可以使用类似“mysite.local”的内容而不是“localhost”或ip地址


这里有许多选项,从非常简单到非常复杂:

简单

$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_主机出现故障时提供回退,为您提供一个在整个站点中使用的常量,还可以从web根目录为您提供BASEPATH和APPPATH的相对URI

将其放入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;
这支持:

(是的,这与复杂方法的列表相同)


这应该可以让你的应用程序在几乎任何地方运行,但到目前为止,它还不支持/~userdir URL。

啊!我没有意识到这只是配置文件中的一个变量集。很高兴知道!你好您在复杂部分的第三行中是否有输入错误:
$config['base\u url']l.=..
$config['base_url'] = BASE_URL;