doushizhou4477
2016-05-11 20:44
浏览 45
已采纳

CodeIgniter,在Controller中获取当前url?

I have been tasked with upgrading a 2.0x CodeIgniter install, using PHP 4, to a 3.0.6 install, using PHP 7 and Nginx. I have been following the documented upgrade process.

The issue I am running into is that the value of $this->uri, an existing page now looks like junk.

The code, without the other logic:

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
  }

}

The text output in the log:

"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"

I don't know what to make of the s:0:""; value or what I should be doing to resolve this issue?

Following @Sparky's suggestion, the var_dump($this->uri) output for http://localhost:8080/2017/ (CodeIgniter lives in 2017 path), gives:

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条回答 默认 最新

  • doudaochu1699 2016-05-12 16:41
    已采纳

    According to your var_dump($this->uri) of http://localhost:8080/2017/...

    object(CI_URI)#6 (6) {
      ["keyval"]=>
      array(0) {
      }
      ["uri_string"]=>
      string(0) ""
      ["segments"]=>
      array(0) {
      }
      ....
    

    ... there are no segments in your URI (nothing after 2017/), so "" is the expected result for URI string.


    According to the docs:

    uri_string()

    Returns: URI string

    Return type: string

    Returns a string with the complete URI. For example, if this is your full URL:

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

    The method would return this:

    news/local/345

    Notice how http://example.com/index.php/ is not part of the URI string.

    已采纳该答案
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题