用户
 找回密码
 入住 CI 中国社区
搜索
查看: 856|回复: 14
收起左侧

[版本 4.x] CI4要怎么配置才能跑起来呢,在Windows IIS7.5

[复制链接]
发表于 2018-9-30 13:22:44 | 显示全部楼层 |阅读模式
本帖最后由 冰辉 于 2018-9-30 13:32 编辑

我在现在的IIS站点加一个虚拟目录v3映射到public目录,在application/Config/App.php设置了 public $baseURL = 'v3'
访问出现如下结果:


PHP Fatal error:  Uncaught TypeError: Argument 1 passed to CodeIgniter\HTTP\URI::setScheme() must be of the type string, null given, called in D:\CodeIgniter\system\HTTP\IncomingRequest.php on line 585 and defined in D:\CodeIgniter\system\HTTP\URI.php:583Stack trace:

#0 D:\CodeIgniter\system\HTTP\IncomingRequest.php(585): CodeIgniter\HTTP\URI->setScheme(NULL)

#1 D:\CodeIgniter\system\HTTP\IncomingRequest.php(172): CodeIgniter\HTTP\IncomingRequest->detectURI('REQUEST_URI', 'v3/')

#2 D:\CodeIgniter\system\Config\Services.php(526): CodeIgniter\HTTP\IncomingRequest->__construct(Object(Config\App), Object(CodeIgniter\HTTP\URI), '', Object(CodeIgniter\HTTP\UserAgent))

#3 D:\CodeIgniter\system\Config\BaseService.php(114): CodeIgniter\Config\Services::request(Object(Config\App), false)

#4 D:\CodeIgniter\system\Config\Services.php(514): CodeIgniter\Config\BaseService::getSharedInstance('request', NULL)

#5 D:\CodeIgniter\system\Config\Services.php(231): CodeIgniter\Config\Services::request()

#6 D:\CodeIgniter\system\Config\BaseService. in D:\CodeIgniter\system\HTTP\URI.php on line 583






 楼主| 发表于 2018-10-9 09:25:53 | 显示全部楼层
本帖最后由 冰辉 于 2018-10-9 09:55 编辑
Hex 发表于 2018-10-1 02:13
报什么错误?这是全局变量,哪里都可以使用呀。

是这样的第一次:
PHP复制代码
$http_type = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) ? 'https://' : 'http://';
public $baseURL = $http_type . $_SERVER['HTTP_HOST'] . '/v3/';
 
复制代码

报:
PHP Parse error:  syntax error, unexpected '$http_type' (T_VARIABLE), expecting function (T_FUNCTION) or const (T_CONST) in D:\CodeIgniter\application\Config\App.php on line 24


第二次,我是需要public声明变量

PHP复制代码
 
public $http_type = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) ? 'https://' : 'http://';
public $baseURL = $http_type . $_SERVER['HTTP_HOST'] . '/v3/';
 
 
复制代码

报:
PHP Fatal error:  Constant expression contains invalid operations in D:\CodeIgniter\application\Config\App.php on line 24

总结:
我在app.php 里面设置了,
PHP复制代码
public $baseURL = 'http://127.0.0.1/v3/';
复制代码

我测试了http和 https,都可以访问,不影响。
我想多了。
 楼主| 发表于 2018-9-30 21:50:29 | 显示全部楼层
换到linux下,nignx+php,还是报错

Fatal error: Uncaught TypeError: Argument 1 passed to CodeIgniter\HTTP\URI::setScheme() must be of the type string, null given, called in /www/wwwroot/web/system/HTTP/IncomingRequest.php on line 585 and defined in /www/wwwroot/web/system/HTTP/URI.php:583
Stack trace:
#0 /www/wwwroot/web/system/HTTP/IncomingRequest.php(585): CodeIgniter\HTTP\URI->setScheme(NULL)
#1 /www/wwwroot/web/system/HTTP/IncomingRequest.php(172): CodeIgniter\HTTP\IncomingRequest->detectURI('REQUEST_URI', '/public/')
#2 /www/wwwroot/web/system/Config/Services.php(526): CodeIgniter\HTTP\IncomingRequest->__construct(Object(Config\App), Object(CodeIgniter\HTTP\URI), '', Object(CodeIgniter\HTTP\UserAgent))
#3 /www/wwwroot/web/system/Config/BaseService.php(114): CodeIgniter\Config\Services::request(Object(Config\App), false)
#4 /www/wwwroot/web/system/Config/Services.php(514): CodeIgniter\Config\BaseService::getSharedInstance('request', NULL)
#5 /www/wwwroot/web/system/Config/Services.php(231): CodeIgniter\Config\Services::request()
#6 /www/wwwroot/web/sys in /www/wwwroot/web/system/HTTP/URI.php on line 583
发表于 2018-11-23 14:29:56 | 显示全部楼层
Hex 发表于 2018-10-1 02:13
报什么错误?这是全局变量,哪里都可以使用呀。

对于这个问题我也很有疑问。
CI4里面的$baseURL 是否同等于 CI3里面的$config['base_url']

刚刚试过了,App.php 里面 $baseURL = ‘http://127.0.0.1/’没有问题
但是使用了全局变量却不行‘

CI3里面我是这么配置的
$config['base_url'] = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on") ? "https" : "http")."://".$_SERVER['HTTP_HOST'].str_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']);

CI4里面:
public $baseURL = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on") ? "https" : "http")."://".$_SERVER['HTTP_HOST'].str_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']);

CI4报错:PHP Fatal error:  Constant expression contains invalid operations in D:\www\CodeIgniter4-develop\application\Config\App.php on line 24

不知道是不是写法不对还是其他的,望能解惑。
 楼主| 发表于 2018-9-30 13:34:20 | 显示全部楼层
public $baseURL = '/v3'   也不行
 楼主| 发表于 2018-9-30 13:36:06 | 显示全部楼层

public $baseURL = '/v3/'   也不行
 楼主| 发表于 2018-9-30 22:37:51 | 显示全部楼层
我弄明白了
public $baseURL = 'http://ww.xxx.xx/v3/'
 楼主| 发表于 2018-9-30 22:46:24 | 显示全部楼层
但是如果是多个域名和端口的话,就不灵活了,为什么CI4会这样呢
发表于 2018-9-30 23:15:31 | 显示全部楼层
冰辉 发表于 2018-9-30 22:46
但是如果是多个域名和端口的话,就不灵活了,为什么CI4会这样呢

$baseUrl 你可以自己通过 $_SERVER 自动识别当前域名和端口,这个 CI3 就是这样的,这里可以写代码的,你可以随意定制。
另外,建议先看看手册再来用 CI4。
 楼主| 发表于 2018-9-30 23:40:07 | 显示全部楼层
Hex 发表于 2018-9-30 23:15
$baseUrl 你可以自己通过 $_SERVER 自动识别当前域名和端口,这个 CI3 就是这样的,这里可以写代码的,你 ...

是的,我看了中文版的手册,没翻译好,我理解错了;

后来看了英文版的手册,才知道。
 楼主| 发表于 2018-9-30 23:57:03 | 显示全部楼层
CI4 在application/Config/App.php 里面不能用php的变量,如$_SERVER,会报错误;
先不管了,边学边用。
发表于 2018-10-1 02:13:18 | 显示全部楼层
冰辉 发表于 2018-9-30 23:57
CI4 在application/Config/App.php 里面不能用php的变量,如$_SERVER,会报错误;
先不管了,边学边用。 ...

报什么错误?这是全局变量,哪里都可以使用呀。

本版积分规则