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

DA.*_*DA. 2 php virtualization codeigniter

我正在运行Windows 7.在内部,我正在运行Virtualbox和Ubuntu.在Ubuntu中,我正在运行Apache并使用PHP codeigniter.要引用我们的CSS和JS文件,我们使用以下语法:

<?php echo site_url('css/styles.css'); ?>
Run Code Online (Sandbox Code Playgroud)

在本地(在Ubuntu VM中)查看站点时,该站点解析为:

http://localhost/styles.css
Run Code Online (Sandbox Code Playgroud)

工作得很好.

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

http://xx.x.x.x/
Run Code Online (Sandbox Code Playgroud)

这会加载网站,但是,所有的site_url变量仍然被重写为"localhost".我的Windows 7的localhost上显然不存在所述文件.

有没有办法解决我的PHP文件中硬编码相对链接的问题?

Phi*_*eon 5

这里有很多选择,从非常简单到疯狂的复杂:

简单

$config['base_url'] = 'http://'. $_SERVER['HTTP_HOST'].'/';
Run Code Online (Sandbox Code Playgroud)

这支持:

复杂

$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']);
Run Code Online (Sandbox Code Playgroud)

这支持:

潜在的疯狂

这个非常相似但是保持你的config.php干净,如果HTTP_HOST失败则提供回退,给你一个在整个站点中使用的常量,并且可以从web root给你一个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);
Run Code Online (Sandbox Code Playgroud)

在config.php中,您可以简单地使用:

$config['base_url'] = BASE_URL;
Run Code Online (Sandbox Code Playgroud)

这支持:

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

这应该可以使您的应用程序在您放置它的任何地方运行,但到目前为止它还不支持/ ~userdir URL.