在php中解析localhost,因此可以是VM外的视图 - php

我正在运行Windows7。在其中,我正在运行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中的站点,请参考VM的IP地址:

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

这样就加载了网站,但是,所有site_url变量仍被重写为“ localhost”。这些文件显然在Windows 7的本地主机上不存在。

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

参考方案

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

简单

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

这支持:

http://localhost/
http://local.mysite:8080/
http://sub.example.com/
http://example.com/

复杂

$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']);

这支持:

http://localhost/
http://local.mysite:8080/
http://sub.example.com/
http://example.com/
https://example.com/
http://example.com/sub-directory

可能发疯

这非常相似,但是可以保持config.php的干净,如果HTTP_HOST失败,则可以提供一个后备功能,可以为您提供在整个站点中使用的常量,还可以为您提供从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;

这支持:

http://localhost/
http://local.mysite:8080/
http://sub.example.com/
http://example.com/
https://example.com/
http://example.com/sub-directory

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

这将使您的应用几乎可以在您放置的任何位置运行,但是到目前为止,它不支持/〜userdir URL。

php-casperjs获取内部文本 - php

我正在为casperjs使用php包装器-https://github.com/alwex/php-casperjs我正在网上自动化一些重复的工作,我需要访问一个项目的innerText,但是我尚不清楚如何从casperjs浏览器访问dom。我认为在js中我会var arr = document.querySelector('label.input…

php getdate()-小时不正确 - php

我在iframe中将php用于计数器。我正在使用getdate();功能。我的当地时间不是下午12:16,如果我使用getdate();从php获取现在的本地时间,小时显示为13。我从php getdate()回答的值应该不是12吗?$d1=getdate(); $hournew=$d1['hours']; echo $hournew .…

php:是否有充分的理由引用所有数组键/索引? - php

我正在遍历别人的代码,他们总是避免转义其数组键。例如:$ row_rsCatalogsItems [名称]代替$ row_rsCatalogsItems ['名称']因此,我不断地对自己接触的所有事物进行微小的更改,以应对这些惰性。但是现在我想知道这样做是否有很多好处。我得到它会在默认为字符串之前检查常量(我在处理常量时会讨厌php中的行为,因为即使未定义,…

PayPal PHP IPN示例引用了哪些POST序列化问题? - php

PayPal用于PHP IPN侦听器的示例代码在顶部具有以下注释/代码:// reading posted data from directly from $_POST causes serialization // issues with array data in POST // reading raw POST data from input stre…

PHP标头功能不起作用 - php

我曾经使用此功能从一个PHP页面重定向到另一个:header( 'Location: student.php?cnp='.$_REQUEST['name']) ; 在我的本地主机中,它确实可以工作,但是如果在Internet中对其进行测试,则不会重定向。我也尝试给出完整的路径(如http://.../student.p…