SSL (HTTPS) URLs and CodeIgniter (Extending the core)
In one of my previous post I have shown how we can use both secure and non-secure URLs. Now I am going to show how we can do this, extending native libraries.
What we are going to do…
We will create secure version of some functions. For this we will create a helper file ‘my_url_helper.php’ and save it in ‘system/application/helpers’. We will be creating secure version of following functions:
- site_url()
- base_url()
- anchor()
- redirect()
Lets’ start…
First we will add the following config element in the config file:
$config['secure_base_url'] = 'https://example.com'; |
Then, open the my_url_helper.php file (system/application/helpers/my_url_helper.php) and add the following codes.
if( ! function_exists('secure_site_url') ) { function secure_site_url($uri = '') { $CI =& get_instance(); return $CI->config->secure_site_url($uri); } } if( ! function_exists('secure_base_url') ) { function secure_base_url() { $CI =& get_instance(); return $CI->config->slash_item('secure_base_url'); } } if ( ! function_exists('secure_anchor')) { function secure_anchor($uri = '', $title = '', $attributes = '') { $title = (string) $title; if ( ! is_array($uri)) { $secure_site_url = ( ! preg_match('!^\w+://! i', $uri)) ? secure_site_url($uri) : $uri; } else { $secure_site_url = secure_site_url($uri); } if ($title == '') { $title = $secure_site_url; } if ($attributes != '') { $attributes = _parse_attributes($attributes); } return '<a href="'.$secure_site_url.'" ' . $attributes . '>'.$title.'</a>'; } } if ( ! function_exists('secure_redirect')) { function secure_redirect($uri = '', $method = 'location', $http_response_code = 302) { switch($method) { case 'refresh' : header("Refresh:0;url=".secure_site_url($uri)); break; default : header("Location: ".secure_site_url($uri), TRUE, $http_response_code); break; } exit; } } |
Now, I will extend the Config library (system/libraries/Config.php). I assume that the sub class prefix is set as ‘MY_’ in config file (system/application/config/config.php). Create a file ‘MY_Config.php’ in ‘system/application/libraries’ folder and save the file with following code.
class MY_Config extends CI_Config { function MY_Config() { parent::CI_Config(); } function secure_site_url($uri = '') { if (is_array($uri)) { $uri = implode('/', $uri); } if ($uri == '') { return $this->slash_item('secure_base_url').$this->item('index_page'); } else { $suffix = ($this->item('url_suffix') == FALSE) ? '' : $this->item('url_suffix'); return $this->slash_item('secure_base_url').$this->slash_item('index_page').preg_replace("|^/*(.+?)/*$|", "\\1", $uri).$suffix; } } } |
Now what we have…
Now we have secured versions of those function. You may now use them as their insecured version. Enjoy coding ;).