CodeIgniter,在Controller中获取当前uri?

时间:2016-05-11 20:44:55

标签: php codeigniter nginx

我的任务是使用PHP 7和Nginx将使用PHP 4的2.0x CodeIgniter安装升级到3.0.6安装。我一直在关注记录的upgrade process

我遇到的问题是$this->uri的值,现有页面现在看起来像垃圾。

代码,没有其他逻辑:

require("App_Controller.php");
class StaticContent extends AppController {

  function index() {
     error_log('A>>>' . serialize($this->uri->uri_string()) . '<<<');
  }

  function _remap() {

    // These two lines added for analysing issue
    $this->index();
    return;

    // TODO: Temporary - Hard coded splash page to use an empty template
    if($this->uri->segment(1) === false && $pageData = $this->contentmodel->get(NULL, -1, 'empty')) {
      $this->_locale_splash();
    }
    elseif(substr($this->uri->uri_string(), -1, 1) != '/') {
      // Add trailing slash if not present
      redirect2($this->uri->uri_string() . '/');
    }
    // other code omitted
  }

}

日志中的文本输出:

"PHP message: A>>>s:0:"";<<<" while reading response header from upstream, client: 10.0.2.2, server: _, request: "GET /2017/ HTTP/1.1", upstream: "fastcgi://unix:/var/run/php/php7.0-fpm.sock:", host: "localhost:8080"

我不知道如何处理s:0:"";值或我应该采取什么措施来解决此问题?

根据@ Sparky的建议,http://localhost:8080/2017/var_dump($this->uri)输出(CodeIgniter生活在2017年路径中),给出:

object(CI_URI)#6 (6) {
  ["keyval"]=>
  array(0) {
  }
  ["uri_string"]=>
  string(0) ""
  ["segments"]=>
  array(0) {
  }
  ["rsegments"]=>
  array(2) {
    [1]=>
    string(13) "staticcontent"
    [2]=>
    string(5) "index"
  }
  ["_permitted_uri_chars":protected]=>
  string(14) "a-z 0-9~%.:_\-"
  ["config"]=>
  &object(CI_Config)#3 (3) {
    ["config"]=>
    &array(55) {
      ["OT_front_news_count"]=>
      int(8)
      ["OT_show_countdown"]=>
      bool(true)
      ["OT_show_newsletter"]=>
      bool(false)
      ["OT_event_date_en"]=>
      string(18) "August 5–7, 2017"
      ["OT_event_date_fr"]=>
      string(18) "5 – 7 août 2017"
      ["OT_event_year"]=>
      string(4) "2016"
      ["site_name"]=>
      string(14) "MySite 2017"
      ["base_url"]=>
      string(26) "http://localhost:8080/2017"
      ["index_page"]=>
      string(0) ""
      ["uri_protocol"]=>
      string(11) "REQUEST_URI"
      ["url_suffix"]=>
      string(0) ""
      ["language"]=>
      string(7) "english"
      ["charset"]=>
      string(5) "UTF-8"
      ["enable_hooks"]=>
      bool(false)
      ["subclass_prefix"]=>
      string(3) "MY_"
      ["composer_autoload"]=>
      bool(false)
      ["permitted_uri_chars"]=>
      string(14) "a-z 0-9~%.:_\-"
      ["allow_get_array"]=>
      bool(true)
      ["enable_query_strings"]=>
      bool(false)
      ["controller_trigger"]=>
      string(1) "c"
      ["function_trigger"]=>
      string(1) "m"
      ["directory_trigger"]=>
      string(1) "d"
      ["log_threshold"]=>
      int(0)
      ["log_path"]=>
      string(0) ""
      ["log_file_extension"]=>
      string(0) ""
      ["log_file_permissions"]=>
      int(420)
      ["log_date_format"]=>
      string(11) "Y-m-d H:i:s"
      ["error_views_path"]=>
      string(0) ""
      ["cache_path"]=>
      string(0) ""
      ["cache_query_string"]=>
      bool(false)
      ["encryption_key"]=>
      string(0) ""
      ["sess_driver"]=>
      string(5) "files"
      ["sess_cookie_name"]=>
      string(10) "ci_session"
      ["sess_expiration"]=>
      int(7200)
      ["sess_save_path"]=>
      NULL
      ["sess_match_ip"]=>
      bool(false)
      ["sess_time_to_update"]=>
      int(300)
      ["sess_regenerate_destroy"]=>
      bool(false)
      ["cookie_prefix"]=>
      string(0) ""
      ["cookie_domain"]=>
      string(0) ""
      ["cookie_path"]=>
      string(6) "/2016/"
      ["cookie_secure"]=>
      bool(false)
      ["cookie_httponly"]=>
      bool(false)
      ["standardize_newlines"]=>
      bool(false)
      ["global_xss_filtering"]=>
      bool(false)
      ["csrf_protection"]=>
      bool(false)
      ["csrf_token_name"]=>
      string(14) "csrf_test_name"
      ["csrf_cookie_name"]=>
      string(16) "csrf_cookie_name"
      ["csrf_expire"]=>
      int(7200)
      ["csrf_regenerate"]=>
      bool(true)
      ["csrf_exclude_uris"]=>
      array(0) {
      }
      ["compress_output"]=>
      bool(false)
      ["time_reference"]=>
      string(5) "local"
      ["rewrite_short_tags"]=>
      bool(false)
      ["proxy_ips"]=>
      string(0) ""
    }
    ["is_loaded"]=>
    array(0) {
    }
    ["_config_paths"]=>
    array(1) {
      [0]=>
      string(31) "/var/www/html/2017/application/"
    }
  }
}

1 个答案:

答案 0 :(得分:0)

根据var_dump($this->uri)的{​​{1}} ...

http://localhost:8080/2017/

...您的URI中没有任何段(object(CI_URI)#6 (6) { ["keyval"]=> array(0) { } ["uri_string"]=> string(0) "" ["segments"]=> array(0) { } .... 之后没有),因此2017/是URI字符串的预期结果。

According to the docs

  

""

     

返回:URI字符串

     

返回类型:字符串

     

返回包含完整URI的字符串。例如,如果这是您的完整网址:

     

uri_string()

     

该方法将返回:

     

http://example.com/index.php/news/local/345

请注意news/local/345不是URI字符串的一部分。