summaryrefslogtreecommitdiffstats
path: root/user_guide_src/source/general
diff options
context:
space:
mode:
authorAndrey Andreev <narf@devilix.net>2018-06-12 15:45:46 +0200
committerAndrey Andreev <narf@devilix.net>2018-06-12 15:45:46 +0200
commit30e2eafa86c4c7b6b39cea3e7089a90df9f603fb (patch)
tree391bc1e62d8d0ad045e18a6da72e3e2a59e91503 /user_guide_src/source/general
parenta9da3dd2f16a8f97d7bc4ff5572b28e4bb84c813 (diff)
[ci skip] 3.1.9 release
Diffstat (limited to 'user_guide_src/source/general')
-rw-r--r--user_guide_src/source/general/alternative_php.rst75
-rw-r--r--user_guide_src/source/general/ancillary_classes.rst80
-rw-r--r--user_guide_src/source/general/autoloader.rst27
-rw-r--r--user_guide_src/source/general/caching.rst71
-rw-r--r--user_guide_src/source/general/cli.rst78
-rw-r--r--user_guide_src/source/general/common_functions.rst188
-rw-r--r--user_guide_src/source/general/compatibility_functions.rst232
-rw-r--r--user_guide_src/source/general/controllers.rst340
-rw-r--r--user_guide_src/source/general/core_classes.rst117
-rw-r--r--user_guide_src/source/general/creating_drivers.rst25
-rw-r--r--user_guide_src/source/general/creating_libraries.rst260
-rw-r--r--user_guide_src/source/general/credits.rst22
-rw-r--r--user_guide_src/source/general/drivers.rst40
-rw-r--r--user_guide_src/source/general/environments.rst52
-rw-r--r--user_guide_src/source/general/errors.rst120
-rw-r--r--user_guide_src/source/general/helpers.rst145
-rw-r--r--user_guide_src/source/general/hooks.rst127
-rw-r--r--user_guide_src/source/general/index.rst33
-rw-r--r--user_guide_src/source/general/libraries.rst32
-rw-r--r--user_guide_src/source/general/managing_apps.rst61
-rw-r--r--user_guide_src/source/general/models.rst167
-rw-r--r--user_guide_src/source/general/profiling.rst90
-rw-r--r--user_guide_src/source/general/requirements.rst21
-rw-r--r--user_guide_src/source/general/reserved_names.rst88
-rw-r--r--user_guide_src/source/general/routing.rst207
-rw-r--r--user_guide_src/source/general/security.rst200
-rw-r--r--user_guide_src/source/general/styleguide.rst636
-rw-r--r--user_guide_src/source/general/urls.rst100
-rw-r--r--user_guide_src/source/general/views.rst213
-rw-r--r--user_guide_src/source/general/welcome.rst32
30 files changed, 0 insertions, 3879 deletions
diff --git a/user_guide_src/source/general/alternative_php.rst b/user_guide_src/source/general/alternative_php.rst
deleted file mode 100644
index 418d2e6eb..000000000
--- a/user_guide_src/source/general/alternative_php.rst
+++ /dev/null
@@ -1,75 +0,0 @@
-###################################
-Alternate PHP Syntax for View Files
-###################################
-
-If you do not utilize CodeIgniter's :doc:`template
-engine <../libraries/parser>`, you'll be using pure PHP in your
-View files. To minimize the PHP code in these files, and to make it
-easier to identify the code blocks it is recommended that you use PHPs
-alternative syntax for control structures and short tag echo statements.
-If you are not familiar with this syntax, it allows you to eliminate the
-braces from your code, and eliminate "echo" statements.
-
-Automatic Short Tag Support
-===========================
-
-.. note:: If you find that the syntax described in this page does not
- work on your server it might be that "short tags" are disabled in your
- PHP ini file. CodeIgniter will optionally rewrite short tags on-the-fly,
- allowing you to use that syntax even if your server doesn't support it.
- This feature can be enabled in your *config/config.php* file.
-
-Please note that if you do use this feature, if PHP errors are
-encountered in your **view files**, the error message and line number
-will not be accurately shown. Instead, all errors will be shown as
-``eval()`` errors.
-
-Alternative Echos
-=================
-
-Normally to echo, or print out a variable you would do this::
-
- <?php echo $variable; ?>
-
-With the alternative syntax you can instead do it this way::
-
- <?=$variable?>
-
-Alternative Control Structures
-==============================
-
-Controls structures, like if, for, foreach, and while can be written in
-a simplified format as well. Here is an example using ``foreach``::
-
- <ul>
-
- <?php foreach ($todo as $item): ?>
-
- <li><?=$item?></li>
-
- <?php endforeach; ?>
-
- </ul>
-
-Notice that there are no braces. Instead, the end brace is replaced with
-``endforeach``. Each of the control structures listed above has a similar
-closing syntax: ``endif``, ``endfor``, ``endforeach``, and ``endwhile``
-
-Also notice that instead of using a semicolon after each structure
-(except the last one), there is a colon. This is important!
-
-Here is another example, using ``if``/``elseif``/``else``. Notice the colons::
-
- <?php if ($username === 'sally'): ?>
-
- <h3>Hi Sally</h3>
-
- <?php elseif ($username === 'joe'): ?>
-
- <h3>Hi Joe</h3>
-
- <?php else: ?>
-
- <h3>Hi unknown user</h3>
-
- <?php endif; ?> \ No newline at end of file
diff --git a/user_guide_src/source/general/ancillary_classes.rst b/user_guide_src/source/general/ancillary_classes.rst
deleted file mode 100644
index 4d6528aae..000000000
--- a/user_guide_src/source/general/ancillary_classes.rst
+++ /dev/null
@@ -1,80 +0,0 @@
-##########################
-Creating Ancillary Classes
-##########################
-
-In some cases you may want to develop classes that exist apart from your
-controllers but have the ability to utilize all of CodeIgniter's
-resources. This is easily possible as you'll see.
-
-get_instance()
-==============
-
-.. php:function:: get_instance()
-
- :returns: Reference to your controller's instance
- :rtype: CI_Controller
-
-**Any class that you instantiate within your controller methods can
-access CodeIgniter's native resources** simply by using the
-``get_instance()`` function. This function returns the main
-CodeIgniter object.
-
-Normally, to call any of the available methods, CodeIgniter requires
-you to use the ``$this`` construct::
-
- $this->load->helper('url');
- $this->load->library('session');
- $this->config->item('base_url');
- // etc.
-
-``$this``, however, only works within your controllers, your models,
-or your views. If you would like to use CodeIgniter's classes from
-within your own custom classes you can do so as follows:
-
-First, assign the CodeIgniter object to a variable::
-
- $CI =& get_instance();
-
-Once you've assigned the object to a variable, you'll use that variable
-*instead* of ``$this``::
-
- $CI =& get_instance();
-
- $CI->load->helper('url');
- $CI->load->library('session');
- $CI->config->item('base_url');
- // etc.
-
-If you'll be using ``get_instance()`` inside another class, then it would
-be better if you assign it to a property. This way, you won't need to call
-``get_instance()`` in every single method.
-
-Example::
-
- class Example {
-
- protected $CI;
-
- // We'll use a constructor, as you can't directly call a function
- // from a property definition.
- public function __construct()
- {
- // Assign the CodeIgniter super-object
- $this->CI =& get_instance();
- }
-
- public function foo()
- {
- $this->CI->load->helper('url');
- redirect();
- }
-
- public function bar()
- {
- $this->CI->config->item('base_url');
- }
- }
-
-In the above example, both methods ``foo()`` and ``bar()`` will work
-after you instantiate the Example class, without the need to call
-``get_instance()`` in each of them.
diff --git a/user_guide_src/source/general/autoloader.rst b/user_guide_src/source/general/autoloader.rst
deleted file mode 100644
index 2f1223e28..000000000
--- a/user_guide_src/source/general/autoloader.rst
+++ /dev/null
@@ -1,27 +0,0 @@
-######################
-Auto-loading Resources
-######################
-
-CodeIgniter comes with an "Auto-load" feature that permits libraries,
-helpers, and models to be initialized automatically every time the
-system runs. If you need certain resources globally throughout your
-application you should consider auto-loading them for convenience.
-
-The following items can be loaded automatically:
-
-- Classes found in the *libraries/* directory
-- Helper files found in the *helpers/* directory
-- Custom config files found in the *config/* directory
-- Language files found in the *system/language/* directory
-- Models found in the *models/* folder
-
-To autoload resources, open the **application/config/autoload.php**
-file and add the item you want loaded to the autoload array. You'll
-find instructions in that file corresponding to each type of item.
-
-.. note:: Do not include the file extension (.php) when adding items to
- the autoload array.
-
-Additionally, if you want CodeIgniter to use a `Composer <https://getcomposer.org/>`_
-auto-loader, just set ``$config['composer_autoload']`` to ``TRUE`` or
-a custom path in **application/config/config.php**. \ No newline at end of file
diff --git a/user_guide_src/source/general/caching.rst b/user_guide_src/source/general/caching.rst
deleted file mode 100644
index f499f6e93..000000000
--- a/user_guide_src/source/general/caching.rst
+++ /dev/null
@@ -1,71 +0,0 @@
-################
-Web Page Caching
-################
-
-CodeIgniter lets you cache your pages in order to achieve maximum
-performance.
-
-Although CodeIgniter is quite fast, the amount of dynamic information
-you display in your pages will correlate directly to the server
-resources, memory, and processing cycles utilized, which affect your
-page load speeds. By caching your pages, since they are saved in their
-fully rendered state, you can achieve performance that nears that of
-static web pages.
-
-How Does Caching Work?
-======================
-
-Caching can be enabled on a per-page basis, and you can set the length
-of time that a page should remain cached before being refreshed. When a
-page is loaded for the first time, the cache file will be written to
-your application/cache folder. On subsequent page loads the cache file
-will be retrieved and sent to the requesting user's browser. If it has
-expired, it will be deleted and refreshed before being sent to the
-browser.
-
-.. note: The Benchmark tag is not cached so you can still view your page
- load speed when caching is enabled.
-
-Enabling Caching
-================
-
-To enable caching, put the following tag in any of your controller
-methods::
-
- $this->output->cache($n);
-
-Where ``$n`` is the number of **minutes** you wish the page to remain
-cached between refreshes.
-
-The above tag can go anywhere within a method. It is not affected by
-the order that it appears, so place it wherever it seems most logical to
-you. Once the tag is in place, your pages will begin being cached.
-
-.. important:: Because of the way CodeIgniter stores content for output,
- caching will only work if you are generating display for your
- controller with a :doc:`view <./views>`.
-
-.. important:: If you change configuration options that might affect
- your output, you have to manually delete your cache files.
-
-.. note:: Before the cache files can be written you must set the file
- permissions on your *application/cache/* directory such that
- it is writable.
-
-Deleting Caches
-===============
-
-If you no longer wish to cache a file you can remove the caching tag and
-it will no longer be refreshed when it expires.
-
-.. note:: Removing the tag will not delete the cache immediately. It will
- have to expire normally.
-
-If you need to manually delete the cache, you can use the ``delete_cache()``
-method::
-
- // Deletes cache for the currently requested URI
- $this->output->delete_cache();
-
- // Deletes cache for /foo/bar
- $this->output->delete_cache('/foo/bar'); \ No newline at end of file
diff --git a/user_guide_src/source/general/cli.rst b/user_guide_src/source/general/cli.rst
deleted file mode 100644
index 764a6b835..000000000
--- a/user_guide_src/source/general/cli.rst
+++ /dev/null
@@ -1,78 +0,0 @@
-###################
-Running via the CLI
-###################
-
-As well as calling an applications :doc:`Controllers <./controllers>`
-via the URL in a browser they can also be loaded via the command-line
-interface (CLI).
-
-.. contents:: Page Contents
-
-What is the CLI?
-================
-
-The command-line interface is a text-based method of interacting with
-computers. For more information, check the `Wikipedia
-article <http://en.wikipedia.org/wiki/Command-line_interface>`_.
-
-Why run via the command-line?
-=============================
-
-There are many reasons for running CodeIgniter from the command-line,
-but they are not always obvious.
-
-- Run your cron-jobs without needing to use *wget* or *curl*
-- Make your cron-jobs inaccessible from being loaded in the URL by
- checking the return value of :php:func:`is_cli()`.
-- Make interactive "tasks" that can do things like set permissions,
- prune cache folders, run backups, etc.
-- Integrate with other applications in other languages. For example, a
- random C++ script could call one command and run code in your models!
-
-Let's try it: Hello World!
-==========================
-
-Let's create a simple controller so you can see it in action. Using your
-text editor, create a file called Tools.php, and put the following code
-in it::
-
- <?php
- class Tools extends CI_Controller {
-
- public function message($to = 'World')
- {
- echo "Hello {$to}!".PHP_EOL;
- }
- }
-
-Then save the file to your *application/controllers/* folder.
-
-Now normally you would visit the site using a URL similar to this::
-
- example.com/index.php/tools/message/to
-
-Instead, we are going to open the terminal in Mac/Linux or go to Run > "cmd"
-in Windows and navigate to our CodeIgniter project.
-
-.. code-block:: bash
-
- $ cd /path/to/project;
- $ php index.php tools message
-
-If you did it right, you should see *Hello World!* printed.
-
-.. code-block:: bash
-
- $ php index.php tools message "John Smith"
-
-Here we are passing it a argument in the same way that URL parameters
-work. "John Smith" is passed as a argument and output is::
-
- Hello John Smith!
-
-That's it!
-==========
-
-That, in a nutshell, is all there is to know about controllers on the
-command line. Remember that this is just a normal controller, so routing
-and ``_remap()`` works fine.
diff --git a/user_guide_src/source/general/common_functions.rst b/user_guide_src/source/general/common_functions.rst
deleted file mode 100644
index 3e3e42264..000000000
--- a/user_guide_src/source/general/common_functions.rst
+++ /dev/null
@@ -1,188 +0,0 @@
-################
-Common Functions
-################
-
-CodeIgniter uses a few functions for its operation that are globally
-defined, and are available to you at any point. These do not require
-loading any libraries or helpers.
-
-.. contents::
- :local:
-
-.. raw:: html
-
- <div class="custom-index container"></div>
-
-.. php:function:: is_php($version)
-
- :param string $version: Version number
- :returns: TRUE if the running PHP version is at least the one specified or FALSE if not
- :rtype: bool
-
- Determines if the PHP version being used is greater than the
- supplied version number.
-
- Example::
-
- if (is_php('5.3'))
- {
- $str = quoted_printable_encode($str);
- }
-
- Returns boolean TRUE if the installed version of PHP is equal to or
- greater than the supplied version number. Returns FALSE if the installed
- version of PHP is lower than the supplied version number.
-
-.. php:function:: is_really_writable($file)
-
- :param string $file: File path
- :returns: TRUE if the path is writable, FALSE if not
- :rtype: bool
-
- ``is_writable()`` returns TRUE on Windows servers when you really can't
- write to the file as the OS reports to PHP as FALSE only if the
- read-only attribute is marked.
-
- This function determines if a file is actually writable by attempting
- to write to it first. Generally only recommended on platforms where
- this information may be unreliable.
-
- Example::
-
- if (is_really_writable('file.txt'))
- {
- echo "I could write to this if I wanted to";
- }
- else
- {
- echo "File is not writable";
- }
-
- .. note:: See also `PHP bug #54709 <https://bugs.php.net/bug.php?id=54709>`_ for more info.
-
-.. php:function:: config_item($key)
-
- :param string $key: Config item key
- :returns: Configuration key value or NULL if not found
- :rtype: mixed
-
- The :doc:`Config Library <../libraries/config>` is the preferred way of
- accessing configuration information, however ``config_item()`` can be used
- to retrieve single keys. See :doc:`Config Library <../libraries/config>`
- documentation for more information.
-
-.. :noindex: function:: show_error($message, $status_code[, $heading = 'An Error Was Encountered'])
-
- :param mixed $message: Error message
- :param int $status_code: HTTP Response status code
- :param string $heading: Error page heading
- :rtype: void
-
- This function calls ``CI_Exception::show_error()``. For more info,
- please see the :doc:`Error Handling <errors>` documentation.
-
-.. :noindex: function:: show_404([$page = ''[, $log_error = TRUE]])
-
- :param string $page: URI string
- :param bool $log_error: Whether to log the error
- :rtype: void
-
- This function calls ``CI_Exception::show_404()``. For more info,
- please see the :doc:`Error Handling <errors>` documentation.
-
-.. :noindex: function:: log_message($level, $message)
-
- :param string $level: Log level: 'error', 'debug' or 'info'
- :param string $message: Message to log
- :rtype: void
-
- This function is an alias for ``CI_Log::write_log()``. For more info,
- please see the :doc:`Error Handling <errors>` documentation.
-
-.. php:function:: set_status_header($code[, $text = ''])
-
- :param int $code: HTTP Response status code
- :param string $text: A custom message to set with the status code
- :rtype: void
-
- Permits you to manually set a server status header. Example::
-
- set_status_header(401);
- // Sets the header as: Unauthorized
-
- `See here <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html>`_ for
- a full list of headers.
-
-.. php:function:: remove_invisible_characters($str[, $url_encoded = TRUE])
-
- :param string $str: Input string
- :param bool $url_encoded: Whether to remove URL-encoded characters as well
- :returns: Sanitized string
- :rtype: string
-
- This function prevents inserting NULL characters between ASCII
- characters, like Java\\0script.
-
- Example::
-
- remove_invisible_characters('Java\\0script');
- // Returns: 'Javascript'
-
-.. php:function:: html_escape($var)
-
- :param mixed $var: Variable to escape (string or array)
- :returns: HTML escaped string(s)
- :rtype: mixed
-
- This function acts as an alias for PHP's native ``htmlspecialchars()``
- function, with the advantage of being able to accept an array of strings.
-
- It is useful in preventing Cross Site Scripting (XSS).
-
-.. php:function:: get_mimes()
-
- :returns: An associative array of file types
- :rtype: array
-
- This function returns a *reference* to the MIMEs array from
- *application/config/mimes.php*.
-
-.. php:function:: is_https()
-
- :returns: TRUE if currently using HTTP-over-SSL, FALSE if not
- :rtype: bool
-
- Returns TRUE if a secure (HTTPS) connection is used and FALSE
- in any other case (including non-HTTP requests).
-
-.. php:function:: is_cli()
-
- :returns: TRUE if currently running under CLI, FALSE otherwise
- :rtype: bool
-
- Returns TRUE if the application is run through the command line
- and FALSE if not.
-
- .. note:: This function checks both if the ``PHP_SAPI`` value is 'cli'
- or if the ``STDIN`` constant is defined.
-
-.. php:function:: function_usable($function_name)
-
- :param string $function_name: Function name
- :returns: TRUE if the function can be used, FALSE if not
- :rtype: bool
-
- Returns TRUE if a function exists and is usable, FALSE otherwise.
-
- This function runs a ``function_exists()`` check and if the
- `Suhosin extension <http://www.hardened-php.net/suhosin/>` is loaded,
- checks if it doesn't disable the function being checked.
-
- It is useful if you want to check for the availability of functions
- such as ``eval()`` and ``exec()``, which are dangerous and might be
- disabled on servers with highly restrictive security policies.
-
- .. note:: This function was introduced because Suhosin terminated
- script execution, but this turned out to be a bug. A fix
- has been available for some time (version 0.9.34), but is
- unfortunately not released yet. \ No newline at end of file
diff --git a/user_guide_src/source/general/compatibility_functions.rst b/user_guide_src/source/general/compatibility_functions.rst
deleted file mode 100644
index 584968663..000000000
--- a/user_guide_src/source/general/compatibility_functions.rst
+++ /dev/null
@@ -1,232 +0,0 @@
-#######################
-Compatibility Functions
-#######################
-
-CodeIgniter provides a set of compatibility functions that enable
-you to use functions what are otherwise natively available in PHP,
-but only in higher versions or depending on a certain extension.
-
-Being custom implementations, these functions will also have some
-set of dependencies on their own, but are still useful if your
-PHP setup doesn't offer them natively.
-
-.. note:: Much like the :doc:`common functions <common_functions>`, the
- compatibility functions are always available, as long as
- their dependencies are met.
-
-.. contents::
- :local:
-
-.. raw:: html
-
- <div class="custom-index container"></div>
-
-****************
-Password Hashing
-****************
-
-This set of compatibility functions offers a "backport" of PHP's
-standard `Password Hashing extension <http://php.net/password>`_
-that is otherwise available only since PHP 5.5.
-
-Dependencies
-============
-
-- PHP 5.3.7
-- ``CRYPT_BLOWFISH`` support for ``crypt()``
-
-Constants
-=========
-
-- ``PASSWORD_BCRYPT``
-- ``PASSWORD_DEFAULT``
-
-Function reference
-==================
-
-.. php:function:: password_get_info($hash)
-
- :param string $hash: Password hash
- :returns: Information about the hashed password
- :rtype: array
-
- For more information, please refer to the `PHP manual for
- password_get_info() <http://php.net/password_get_info>`_.
-
-.. php:function:: password_hash($password, $algo[, $options = array()])
-
- :param string $password: Plain-text password
- :param int $algo: Hashing algorithm
- :param array $options: Hashing options
- :returns: Hashed password or FALSE on failure
- :rtype: string
-
- For more information, please refer to the `PHP manual for
- password_hash() <http://php.net/password_hash>`_.
-
- .. note:: Unless you provide your own (and valid) salt, this function
- has a further dependency on an available CSPRNG source. Each
- of the following would satisfy that:
- - ``mcrypt_create_iv()`` with ``MCRYPT_DEV_URANDOM``
- - ``openssl_random_pseudo_bytes()``
- - /dev/arandom
- - /dev/urandom
-
-.. php:function:: password_needs_rehash()
-
- :param string $hash: Password hash
- :param int $algo: Hashing algorithm
- :param array $options: Hashing options
- :returns: TRUE if the hash should be rehashed to match the given algorithm and options, FALSE otherwise
- :rtype: bool
-
- For more information, please refer to the `PHP manual for
- password_needs_rehash() <http://php.net/password_needs_rehash>`_.
-
-.. php:function:: password_verify($password, $hash)
-
- :param string $password: Plain-text password
- :param string $hash: Password hash
- :returns: TRUE if the password matches the hash, FALSE if not
- :rtype: bool
-
- For more information, please refer to the `PHP manual for
- password_verify() <http://php.net/password_verify>`_.
-
-*********************
-Hash (Message Digest)
-*********************
-
-This compatibility layer contains backports for the ``hash_equals()``
-and ``hash_pbkdf2()`` functions, which otherwise require PHP 5.6 and/or
-PHP 5.5 respectively.
-
-Dependencies
-============
-
-- None
-
-Function reference
-==================
-
-.. php:function:: hash_equals($known_string, $user_string)
-
- :param string $known_string: Known string
- :param string $user_string: User-supplied string
- :returns: TRUE if the strings match, FALSE otherwise
- :rtype: string
-
- For more information, please refer to the `PHP manual for
- hash_equals() <http://php.net/hash_equals>`_.
-
-.. php:function:: hash_pbkdf2($algo, $password, $salt, $iterations[, $length = 0[, $raw_output = FALSE]])
-
- :param string $algo: Hashing algorithm
- :param string $password: Password
- :param string $salt: Hash salt
- :param int $iterations: Number of iterations to perform during derivation
- :param int $length: Output string length
- :param bool $raw_output: Whether to return raw binary data
- :returns: Password-derived key or FALSE on failure
- :rtype: string
-
- For more information, please refer to the `PHP manual for
- hash_pbkdf2() <http://php.net/hash_pbkdf2>`_.
-
-****************
-Multibyte String
-****************
-
-This set of compatibility functions offers limited support for PHP's
-`Multibyte String extension <http://php.net/mbstring>`_. Because of
-the limited alternative solutions, only a few functions are available.
-
-.. note:: When a character set parameter is ommited,
- ``$config['charset']`` will be used.
-
-Dependencies
-============
-
-- `iconv <http://php.net/iconv>`_ extension
-
-.. important:: This dependency is optional and these functions will
- always be declared. If iconv is not available, they WILL
- fall-back to their non-mbstring versions.
-
-.. important:: Where a character set is supplied, it must be
- supported by iconv and in a format that it recognizes.
-
-.. note:: For you own dependency check on the actual mbstring
- extension, use the ``MB_ENABLED`` constant.
-
-Function reference
-==================
-
-.. php:function:: mb_strlen($str[, $encoding = NULL])
-
- :param string $str: Input string
- :param string $encoding: Character set
- :returns: Number of characters in the input string or FALSE on failure
- :rtype: string
-
- For more information, please refer to the `PHP manual for
- mb_strlen() <http://php.net/mb_strlen>`_.
-
-.. php:function:: mb_strpos($haystack, $needle[, $offset = 0[, $encoding = NULL]])
-
- :param string $haystack: String to search in
- :param string $needle: Part of string to search for
- :param int $offset: Search offset
- :param string $encoding: Character set
- :returns: Numeric character position of where $needle was found or FALSE if not found
- :rtype: mixed
-
- For more information, please refer to the `PHP manual for
- mb_strpos() <http://php.net/mb_strpos>`_.
-
-.. php:function:: mb_substr($str, $start[, $length = NULL[, $encoding = NULL]])
-
- :param string $str: Input string
- :param int $start: Position of first character
- :param int $length: Maximum number of characters
- :param string $encoding: Character set
- :returns: Portion of $str specified by $start and $length or FALSE on failure
- :rtype: string
-
- For more information, please refer to the `PHP manual for
- mb_substr() <http://php.net/mb_substr>`_.
-
-******************
-Standard Functions
-******************
-
-This set of compatibility functions offers support for a few
-standard functions in PHP that otherwise require a newer PHP version.
-
-Dependencies
-============
-
-- None
-
-Function reference
-==================
-
-.. php:function:: array_column(array $array, $column_key[, $index_key = NULL])
-
- :param array $array: Array to fetch results from
- :param mixed $column_key: Key of the column to return values from
- :param mixed $index_key: Key to use for the returned values
- :returns: An array of values representing a single column from the input array
- :rtype: array
-
- For more information, please refer to the `PHP manual for
- array_column() <http://php.net/array_column>`_.
-
-.. php:function:: hex2bin($data)
-
- :param array $data: Hexadecimal representation of data
- :returns: Binary representation of the given data
- :rtype: string
-
- For more information, please refer to the `PHP manual for hex2bin()
- <http://php.net/hex2bin>`_.
diff --git a/user_guide_src/source/general/controllers.rst b/user_guide_src/source/general/controllers.rst
deleted file mode 100644
index 14e583636..000000000
--- a/user_guide_src/source/general/controllers.rst
+++ /dev/null
@@ -1,340 +0,0 @@
-###########
-Controllers
-###########
-
-Controllers are the heart of your application, as they determine how
-HTTP requests should be handled.
-
-.. contents:: Page Contents
-
-What is a Controller?
-=====================
-
-**A Controller is simply a class file that is named in a way that can be
-associated with a URI.**
-
-Consider this URI::
-
- example.com/index.php/blog/
-
-In the above example, CodeIgniter would attempt to find a controller
-named Blog.php and load it.
-
-**When a controller's name matches the first segment of a URI, it will
-be loaded.**
-
-Let's try it: Hello World!
-==========================
-
-Let's create a simple controller so you can see it in action. Using your
-text editor, create a file called Blog.php, and put the following code
-in it::
-
- <?php
- class Blog extends CI_Controller {
-
- public function index()
- {
- echo 'Hello World!';
- }
- }
-
-Then save the file to your *application/controllers/* directory.
-
-.. important:: The file must be called 'Blog.php', with a capital 'B'.
-
-Now visit the your site using a URL similar to this::
-
- example.com/index.php/blog/
-
-If you did it right, you should see:
-
- Hello World!
-
-.. important:: Class names must start with an uppercase letter.
-
-This is valid::
-
- <?php
- class Blog extends CI_Controller {
-
- }
-
-This is **not** valid::
-
- <?php
- class blog extends CI_Controller {
-
- }
-
-Also, always make sure your controller extends the parent controller
-class so that it can inherit all its methods.
-
-Methods
-=======
-
-In the above example the method name is ``index()``. The "index" method
-is always loaded by default if the **second segment** of the URI is
-empty. Another way to show your "Hello World" message would be this::
-
- example.com/index.php/blog/index/
-
-**The second segment of the URI determines which method in the
-controller gets called.**
-
-Let's try it. Add a new method to your controller::
-
- <?php
- class Blog extends CI_Controller {
-
- public function index()
- {
- echo 'Hello World!';
- }
-
- public function comments()
- {
- echo 'Look at this!';
- }
- }
-
-Now load the following URL to see the comment method::
-
- example.com/index.php/blog/comments/
-
-You should see your new message.
-
-Passing URI Segments to your methods
-====================================
-
-If your URI contains more than two segments they will be passed to your
-method as parameters.
-
-For example, let's say you have a URI like this::
-
- example.com/index.php/products/shoes/sandals/123
-
-Your method will be passed URI segments 3 and 4 ("sandals" and "123")::
-
- <?php
- class Products extends CI_Controller {
-
- public function shoes($sandals, $id)
- {
- echo $sandals;
- echo $id;
- }
- }
-
-.. important:: If you are using the :doc:`URI Routing <routing>`
- feature, the segments passed to your method will be the re-routed
- ones.
-
-Defining a Default Controller
-=============================
-
-CodeIgniter can be told to load a default controller when a URI is not
-present, as will be the case when only your site root URL is requested.
-To specify a default controller, open your **application/config/routes.php**
-file and set this variable::
-
- $route['default_controller'] = 'blog';
-
-Where 'blog' is the name of the controller class you want used. If you now
-load your main index.php file without specifying any URI segments you'll
-see your "Hello World" message by default.
-
-For more information, please refer to the "Reserved Routes" section of the
-:doc:`URI Routing <routing>` documentation.
-
-Remapping Method Calls
-======================
-
-As noted above, the second segment of the URI typically determines which
-method in the controller gets called. CodeIgniter permits you to override
-this behavior through the use of the ``_remap()`` method::
-
- public function _remap()
- {
- // Some code here...
- }
-
-.. important:: If your controller contains a method named _remap(),
- it will **always** get called regardless of what your URI contains. It
- overrides the normal behavior in which the URI determines which method
- is called, allowing you to define your own method routing rules.
-
-The overridden method call (typically the second segment of the URI) will
-be passed as a parameter to the ``_remap()`` method::
-
- public function _remap($method)
- {
- if ($method === 'some_method')
- {
- $this->$method();
- }
- else
- {
- $this->default_method();
- }
- }
-
-Any extra segments after the method name are passed into ``_remap()`` as an
-optional second parameter. This array can be used in combination with
-PHP's `call_user_func_array() <http://php.net/call_user_func_array>`_
-to emulate CodeIgniter's default behavior.
-
-Example::
-
- public function _remap($method, $params = array())
- {
- $method = 'process_'.$method;
- if (method_exists($this, $method))
- {
- return call_user_func_array(array($this, $method), $params);
- }
- show_404();
- }
-
-Processing Output
-=================
-
-CodeIgniter has an output class that takes care of sending your final
-rendered data to the web browser automatically. More information on this
-can be found in the :doc:`Views <views>` and :doc:`Output Class
-<../libraries/output>` pages. In some cases, however, you might want to
-post-process the finalized data in some way and send it to the browser
-yourself. CodeIgniter permits you to add a method named ``_output()``
-to your controller that will receive the finalized output data.
-
-.. important:: If your controller contains a method named ``_output()``,
- it will **always** be called by the output class instead of
- echoing the finalized data directly. The first parameter of the
- method will contain the finalized output.
-
-Here is an example::
-
- public function _output($output)
- {
- echo $output;
- }
-
-.. note::
-
- Please note that your ``_output()`` method will receive the
- data in its finalized state. Benchmark and memory usage data
- will be rendered, cache files written (if you have caching
- enabled), and headers will be sent (if you use that
- :doc:`feature <../libraries/output>`) before it is handed off
- to the ``_output()`` method.
- To have your controller's output cached properly, its
- ``_output()`` method can use::
-
- if ($this->output->cache_expiration > 0)
- {
- $this->output->_write_cache($output);
- }
-
- If you are using this feature the page execution timer and
- memory usage stats might not be perfectly accurate since they
- will not take into account any further processing you do.
- For an alternate way to control output *before* any of the
- final processing is done, please see the available methods
- in the :doc:`Output Library <../libraries/output>`.
-
-Private methods
-===============
-
-In some cases you may want certain methods hidden from public access.
-In order to achieve this, simply declare the method as being private
-or protected and it will not be served via a URL request. For example,
-if you were to have a method like this::
-
- private function _utility()
- {
- // some code
- }
-
-Trying to access it via the URL, like this, will not work::
-
- example.com/index.php/blog/_utility/
-
-.. note:: Prefixing method names with an underscore will also prevent
- them from being called. This is a legacy feature that is left
- for backwards-compatibility.
-
-Organizing Your Controllers into Sub-directories
-================================================
-
-If you are building a large application you might want to hierarchically
-organize or structure your controllers into sub-directories. CodeIgniter
-permits you to do this.
-
-Simply create sub-directories under the main *application/controllers/*
-one and place your controller classes within them.
-
-.. note:: When using this feature the first segment of your URI must
- specify the folder. For example, let's say you have a controller located
- here::
-
- application/controllers/products/Shoes.php
-
- To call the above controller your URI will look something like this::
-
- example.com/index.php/products/shoes/show/123
-
-Each of your sub-directories may contain a default controller which will be
-called if the URL contains *only* the sub-directory. Simply put a controller
-in there that matches the name of your 'default_controller' as specified in
-your *application/config/routes.php* file.
-
-CodeIgniter also permits you to remap your URIs using its :doc:`URI
-Routing <routing>` feature.
-
-Class Constructors
-==================
-
-If you intend to use a constructor in any of your Controllers, you
-**MUST** place the following line of code in it::
-
- parent::__construct();
-
-The reason this line is necessary is because your local constructor will
-be overriding the one in the parent controller class so we need to
-manually call it.
-
-Example::
-
- <?php
- class Blog extends CI_Controller {
-
- public function __construct()
- {
- parent::__construct();
- // Your own constructor code
- }
- }
-
-Constructors are useful if you need to set some default values, or run a
-default process when your class is instantiated. Constructors can't
-return a value, but they can do some default work.
-
-Reserved method names
-=====================
-
-Since your controller classes will extend the main application
-controller you must be careful not to name your methods identically to
-the ones used by that class, otherwise your local functions will
-override them. See :doc:`Reserved Names <reserved_names>` for a full
-list.
-
-.. important:: You should also never have a method named identically
- to its class name. If you do, and there is no ``__construct()``
- method in the same class, then your e.g. ``Index::index()``
- method will be executed as a class constructor! This is a PHP4
- backwards-compatibility feature.
-
-That's it!
-==========
-
-That, in a nutshell, is all there is to know about controllers.
diff --git a/user_guide_src/source/general/core_classes.rst b/user_guide_src/source/general/core_classes.rst
deleted file mode 100644
index 9ccded75c..000000000
--- a/user_guide_src/source/general/core_classes.rst
+++ /dev/null
@@ -1,117 +0,0 @@
-############################
-Creating Core System Classes
-############################
-
-Every time CodeIgniter runs there are several base classes that are
-initialized automatically as part of the core framework. It is possible,
-however, to swap any of the core system classes with your own versions
-or even extend the core versions.
-
-**Most users will never have any need to do this, but the option to
-replace or extend them does exist for those who would like to
-significantly alter the CodeIgniter core.**
-
-.. note:: Messing with a core system class has a lot of implications, so
- make sure you know what you are doing before attempting it.
-
-System Class List
-=================
-
-The following is a list of the core system files that are invoked every
-time CodeIgniter runs:
-
-- Benchmark
-- Config
-- Controller
-- Exceptions
-- Hooks
-- Input
-- Language
-- Loader
-- Log
-- Output
-- Router
-- Security
-- URI
-- Utf8
-
-Replacing Core Classes
-======================
-
-To use one of your own system classes instead of a default one simply
-place your version inside your local *application/core/* directory::
-
- application/core/some_class.php
-
-If this directory does not exist you can create it.
-
-Any file named identically to one from the list above will be used
-instead of the one normally used.
-
-Please note that your class must use CI as a prefix. For example, if
-your file is named Input.php the class will be named::
-
- class CI_Input {
-
- }
-
-Extending Core Class
-====================
-
-If all you need to do is add some functionality to an existing library -
-perhaps add a method or two - then it's overkill to replace the entire
-library with your version. In this case it's better to simply extend the
-class. Extending a class is nearly identical to replacing a class with a
-couple exceptions:
-
-- The class declaration must extend the parent class.
-- Your new class name and filename must be prefixed with MY\_ (this
- item is configurable. See below.).
-
-For example, to extend the native Input class you'll create a file named
-application/core/MY_Input.php, and declare your class with::
-
- class MY_Input extends CI_Input {
-
- }
-
-.. note:: If you need to use a constructor in your class make sure you
- extend the parent constructor::
-
- class MY_Input extends CI_Input {
-
- public function __construct()
- {
- parent::__construct();
- // Your own constructor code
- }
- }
-
-**Tip:** Any functions in your class that are named identically to the
-methods in the parent class will be used instead of the native ones
-(this is known as "method overriding"). This allows you to substantially
-alter the CodeIgniter core.
-
-If you are extending the Controller core class, then be sure to extend
-your new class in your application controller's constructors.
-
-::
-
- class Welcome extends MY_Controller {
-
- public function index()
- {
- $this->load->view('welcome_message');
- }
- }
-
-Setting Your Own Prefix
------------------------
-
-To set your own sub-class prefix, open your
-*application/config/config.php* file and look for this item::
-
- $config['subclass_prefix'] = 'MY_';
-
-Please note that all native CodeIgniter libraries are prefixed
-with CI\_ so DO NOT use that as your prefix.
diff --git a/user_guide_src/source/general/creating_drivers.rst b/user_guide_src/source/general/creating_drivers.rst
deleted file mode 100644
index 63ac83902..000000000
--- a/user_guide_src/source/general/creating_drivers.rst
+++ /dev/null
@@ -1,25 +0,0 @@
-################
-Creating Drivers
-################
-
-Driver Directory and File Structure
-===================================
-
-Sample driver directory and file structure layout:
-
-- /application/libraries/Driver_name
-
- - Driver_name.php
- - drivers
-
- - Driver_name_subclass_1.php
- - Driver_name_subclass_2.php
- - Driver_name_subclass_3.php
-
-.. note:: In order to maintain compatibility on case-sensitive
- file systems, the Driver_name directory must be
- named in the format returned by ``ucfirst()``.
-
-.. note:: The Driver library's architecture is such that
- the subclasses don't extend and therefore don't inherit
- properties or methods of the main driver. \ No newline at end of file
diff --git a/user_guide_src/source/general/creating_libraries.rst b/user_guide_src/source/general/creating_libraries.rst
deleted file mode 100644
index 83742b619..000000000
--- a/user_guide_src/source/general/creating_libraries.rst
+++ /dev/null
@@ -1,260 +0,0 @@
-##################
-Creating Libraries
-##################
-
-When we use the term "Libraries" we are normally referring to the
-classes that are located in the libraries directory and described in the
-Class Reference of this user guide. In this case, however, we will
-instead describe how you can create your own libraries within your
-application/libraries directory in order to maintain separation between
-your local resources and the global framework resources.
-
-As an added bonus, CodeIgniter permits your libraries to extend native
-classes if you simply need to add some functionality to an existing
-library. Or you can even replace native libraries just by placing
-identically named versions in your *application/libraries* directory.
-
-In summary:
-
-- You can create entirely new libraries.
-- You can extend native libraries.
-- You can replace native libraries.
-
-The page below explains these three concepts in detail.
-
-.. note:: The Database classes can not be extended or replaced with your
- own classes. All other classes are able to be replaced/extended.
-
-Storage
-=======
-
-Your library classes should be placed within your *application/libraries*
-directory, as this is where CodeIgniter will look for them when they are
-initialized.
-
-Naming Conventions
-==================
-
-- File names must be capitalized. For example: Myclass.php
-- Class declarations must be capitalized. For example: class Myclass
-- Class names and file names must match.
-
-The Class File
-==============
-
-Classes should have this basic prototype::
-
- <?php
- defined('BASEPATH') OR exit('No direct script access allowed');
-
- class Someclass {
-
- public function some_method()
- {
- }
- }
-
-.. note:: We are using the name Someclass purely as an example.
-
-Using Your Class
-================
-
-From within any of your :doc:`Controller <controllers>` methods you
-can initialize your class using the standard::
-
- $this->load->library('someclass');
-
-Where *someclass* is the file name, without the ".php" file extension.
-You can submit the file name capitalized or lower case. CodeIgniter
-doesn't care.
-
-Once loaded you can access your class using the lower case version::
-
- $this->someclass->some_method();  // Object instances will always be lower case
-
-Passing Parameters When Initializing Your Class
-===============================================
-
-In the library loading method you can dynamically pass data as an
-array via the second parameter and it will be passed to your class
-constructor::
-
- $params = array('type' => 'large', 'color' => 'red');
-
- $this->load->library('someclass', $params);
-
-If you use this feature you must set up your class constructor to expect
-data::
-
- <?php defined('BASEPATH') OR exit('No direct script access allowed');
-
- class Someclass {
-
- public function __construct($params)
- {
- // Do something with $params
- }
- }
-
-You can also pass parameters stored in a config file. Simply create a
-config file named identically to the class file name and store it in
-your *application/config/* directory. Note that if you dynamically pass
-parameters as described above, the config file option will not be
-available.
-
-Utilizing CodeIgniter Resources within Your Library
-===================================================
-
-To access CodeIgniter's native resources within your library use the
-``get_instance()`` method. This method returns the CodeIgniter super
-object.
-
-Normally from within your controller methods you will call any of the
-available CodeIgniter methods using the ``$this`` construct::
-
- $this->load->helper('url');
- $this->load->library('session');
- $this->config->item('base_url');
- // etc.
-
-``$this``, however, only works directly within your controllers, your
-models, or your views. If you would like to use CodeIgniter's classes
-from within your own custom classes you can do so as follows:
-
-First, assign the CodeIgniter object to a variable::
-
- $CI =& get_instance();
-
-Once you've assigned the object to a variable, you'll use that variable
-*instead* of ``$this``::
-
- $CI =& get_instance();
-
- $CI->load->helper('url');
- $CI->load->library('session');
- $CI->config->item('base_url');
- // etc.
-
-.. note:: You'll notice that the above ``get_instance()`` function is being
- passed by reference::
-
- $CI =& get_instance();
-
- This is very important. Assigning by reference allows you to use the
- original CodeIgniter object rather than creating a copy of it.
-
-However, since a library is a class, it would be better if you
-take full advantage of the OOP principles. So, in order to
-be able to use the CodeIgniter super-object in all of the class
-methods, you're encouraged to assign it to a property instead::
-
- class Example_library {
-
- protected $CI;
-
- // We'll use a constructor, as you can't directly call a function
- // from a property definition.
- public function __construct()
- {
- // Assign the CodeIgniter super-object
- $this->CI =& get_instance();
- }
-
- public function foo()
- {
- $this->CI->load->helper('url');
- redirect();
- }
-
- public function bar()
- {
- echo $this->CI->config->item('base_url');
- }
-
- }
-
-Replacing Native Libraries with Your Versions
-=============================================
-
-Simply by naming your class files identically to a native library will
-cause CodeIgniter to use it instead of the native one. To use this
-feature you must name the file and the class declaration exactly the
-same as the native library. For example, to replace the native Email
-library you'll create a file named *application/libraries/Email.php*,
-and declare your class with::
-
- class CI_Email {
-
- }
-
-Note that most native classes are prefixed with CI\_.
-
-To load your library you'll see the standard loading method::
-
- $this->load->library('email');
-
-.. note:: At this time the Database classes can not be replaced with
- your own versions.
-
-Extending Native Libraries
-==========================
-
-If all you need to do is add some functionality to an existing library -
-perhaps add a method or two - then it's overkill to replace the entire
-library with your version. In this case it's better to simply extend the
-class. Extending a class is nearly identical to replacing a class with a
-couple exceptions:
-
-- The class declaration must extend the parent class.
-- Your new class name and filename must be prefixed with MY\_ (this
- item is configurable. See below.).
-
-For example, to extend the native Email class you'll create a file named
-*application/libraries/MY_Email.php*, and declare your class with::
-
- class MY_Email extends CI_Email {
-
- }
-
-If you need to use a constructor in your class make sure you
-extend the parent constructor::
-
- class MY_Email extends CI_Email {
-
- public function __construct($config = array())
- {
- parent::__construct($config);
- // Your own constructor code
- }
-
- }
-
-.. note:: Not all of the libraries have the same (or any) parameters
- in their constructor. Take a look at the library that you're
- extending first to see how it should be implemented.
-
-Loading Your Sub-class
-----------------------
-
-To load your sub-class you'll use the standard syntax normally used. DO
-NOT include your prefix. For example, to load the example above, which
-extends the Email class, you will use::
-
- $this->load->library('email');
-
-Once loaded you will use the class variable as you normally would for
-the class you are extending. In the case of the email class all calls
-will use::
-
- $this->email->some_method();
-
-Setting Your Own Prefix
------------------------
-
-To set your own sub-class prefix, open your
-*application/config/config.php* file and look for this item::
-
- $config['subclass_prefix'] = 'MY_';
-
-Please note that all native CodeIgniter libraries are prefixed with CI\_
-so DO NOT use that as your prefix.
diff --git a/user_guide_src/source/general/credits.rst b/user_guide_src/source/general/credits.rst
deleted file mode 100644
index d0f14b3bd..000000000
--- a/user_guide_src/source/general/credits.rst
+++ /dev/null
@@ -1,22 +0,0 @@
-#######
-Credits
-#######
-
-CodeIgniter was originally developed by `Rick Ellis <https://ellislab.com/>`_
-(CEO of `EllisLab, Inc. <https://ellislab.com/>`_). The framework was written for
-performance in the real world, with many of the class libraries, helpers, and
-sub-systems borrowed from the code-base of `ExpressionEngine
-<https://ellislab.com/expressionengine>`_.
-
-It was, for years, developed and maintained by EllisLab, the ExpressionEngine
-Development Team and a group of community members called the Reactor Team.
-
-In 2014, CodeIgniter was acquired by the `British Columbia Institute of Technology
-<http://www.bcit.ca/>`_ and was then officially announced as a community-maintained
-project.
-
-Bleeding edge development is spearheaded by the handpicked contributors
-of the Reactor Team.
-
-A hat tip goes to Ruby on Rails for inspiring us to create a PHP framework, and
-for bringing frameworks into the general consciousness of the web community. \ No newline at end of file
diff --git a/user_guide_src/source/general/drivers.rst b/user_guide_src/source/general/drivers.rst
deleted file mode 100644
index b64b0e75e..000000000
--- a/user_guide_src/source/general/drivers.rst
+++ /dev/null
@@ -1,40 +0,0 @@
-#########################
-Using CodeIgniter Drivers
-#########################
-
-Drivers are a special type of Library that has a parent class and any
-number of potential child classes. Child classes have access to the
-parent class, but not their siblings. Drivers provide an elegant syntax
-in your :doc:`controllers <controllers>` for libraries that benefit
-from or require being broken down into discrete classes.
-
-Drivers are found in the *system/libraries/* directory, in their own
-sub-directory which is identically named to the parent library class.
-Also inside that directory is a subdirectory named drivers, which
-contains all of the possible child class files.
-
-To use a driver you will initialize it within a controller using the
-following initialization method::
-
- $this->load->driver('class_name');
-
-Where class name is the name of the driver class you want to invoke. For
-example, to load a driver named "Some_parent" you would do this::
-
- $this->load->driver('some_parent');
-
-Methods of that class can then be invoked with::
-
- $this->some_parent->some_method();
-
-The child classes, the drivers themselves, can then be called directly
-through the parent class, without initializing them::
-
- $this->some_parent->child_one->some_method();
- $this->some_parent->child_two->another_method();
-
-Creating Your Own Drivers
-=========================
-
-Please read the section of the user guide that discusses how to :doc:`create
-your own drivers <creating_drivers>`. \ No newline at end of file
diff --git a/user_guide_src/source/general/environments.rst b/user_guide_src/source/general/environments.rst
deleted file mode 100644
index ac6f3235e..000000000
--- a/user_guide_src/source/general/environments.rst
+++ /dev/null
@@ -1,52 +0,0 @@
-##############################
-Handling Multiple Environments
-##############################
-
-Developers often desire different system behavior depending on whether
-an application is running in a development or production environment.
-For example, verbose error output is something that would be useful
-while developing an application, but it may also pose a security issue
-when "live".
-
-The ENVIRONMENT Constant
-========================
-
-By default, CodeIgniter comes with the environment constant set to use
-the value provided in ``$_SERVER['CI_ENV']``, otherwise defaults to
-'development'. At the top of index.php, you will see::
-
- define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');
-
-This server variable can be set in your .htaccess file, or Apache
-config using `SetEnv <https://httpd.apache.org/docs/2.2/mod/mod_env.html#setenv>`_.
-Alternative methods are available for nginx and other servers, or you can
-remove this logic entirely and set the constant based on the server's IP address.
-
-In addition to affecting some basic framework behavior (see the next
-section), you may use this constant in your own development to
-differentiate between which environment you are running in.
-
-Effects On Default Framework Behavior
-=====================================
-
-There are some places in the CodeIgniter system where the ENVIRONMENT
-constant is used. This section describes how default framework behavior
-is affected.
-
-Error Reporting
----------------
-
-Setting the ENVIRONMENT constant to a value of 'development' will cause
-all PHP errors to be rendered to the browser when they occur.
-Conversely, setting the constant to 'production' will disable all error
-output. Disabling error reporting in production is a :doc:`good security
-practice <security>`.
-
-Configuration Files
--------------------
-
-Optionally, you can have CodeIgniter load environment-specific
-configuration files. This may be useful for managing things like
-differing API keys across multiple environments. This is described in
-more detail in the environment section of the :doc:`Config Class
-<../libraries/config>` documentation. \ No newline at end of file
diff --git a/user_guide_src/source/general/errors.rst b/user_guide_src/source/general/errors.rst
deleted file mode 100644
index a1cc3517a..000000000
--- a/user_guide_src/source/general/errors.rst
+++ /dev/null
@@ -1,120 +0,0 @@
-##############
-Error Handling
-##############
-
-CodeIgniter lets you build error reporting into your applications using
-the functions described below. In addition, it has an error logging
-class that permits error and debugging messages to be saved as text
-files.
-
-.. note:: By default, CodeIgniter displays all PHP errors. You might
- wish to change this behavior once your development is complete. You'll
- find the error_reporting() function located at the top of your main
- index.php file. Disabling error reporting will NOT prevent log files
- from being written if there are errors.
-
-Unlike most systems in CodeIgniter, the error functions are simple
-procedural interfaces that are available globally throughout the
-application. This approach permits error messages to get triggered
-without having to worry about class/function scoping.
-
-CodeIgniter also returns a status code whenever a portion of the core
-calls ``exit()``. This exit status code is separate from the HTTP status
-code, and serves as a notice to other processes that may be watching of
-whether the script completed successfully, or if not, what kind of
-problem it encountered that caused it to abort. These values are
-defined in *application/config/constants.php*. While exit status codes
-are most useful in CLI settings, returning the proper code helps server
-software keep track of your scripts and the health of your application.
-
-The following functions let you generate errors:
-
-.. php:function:: show_error($message, $status_code, $heading = 'An Error Was Encountered')
-
- :param mixed $message: Error message
- :param int $status_code: HTTP Response status code
- :param string $heading: Error page heading
- :rtype: void
-
- This function will display the error message supplied to it using
- the error template appropriate to your execution::
-
- application/views/errors/html/error_general.php
-
- or:
-
- application/views/errors/cli/error_general.php
-
- The optional parameter ``$status_code`` determines what HTTP status
- code should be sent with the error. If ``$status_code`` is less
- than 100, the HTTP status code will be set to 500, and the exit
- status code will be set to ``$status_code + EXIT__AUTO_MIN``.
- If that value is larger than ``EXIT__AUTO_MAX``, or if
- ``$status_code`` is 100 or higher, the exit status code will be set
- to ``EXIT_ERROR``.
- You can check in *application/config/constants.php* for more detail.
-
-.. php:function:: show_404($page = '', $log_error = TRUE)
-
- :param string $page: URI string
- :param bool $log_error: Whether to log the error
- :rtype: void
-
- This function will display the 404 error message supplied to it
- using the error template appropriate to your execution::
-
- application/views/errors/html/error_404.php
-
- or:
-
- application/views/errors/cli/error_404.php
-
- The function expects the string passed to it to be the file path to
- the page that isn't found. The exit status code will be set to
- ``EXIT_UNKNOWN_FILE``.
- Note that CodeIgniter automatically shows 404 messages if
- controllers are not found.
-
- CodeIgniter automatically logs any ``show_404()`` calls. Setting the
- optional second parameter to FALSE will skip logging.
-
-.. php:function:: log_message($level, $message)
-
- :param string $level: Log level: 'error', 'debug' or 'info'
- :param string $message: Message to log
- :rtype: void
-
- This function lets you write messages to your log files. You must
- supply one of three "levels" in the first parameter, indicating what
- type of message it is (debug, error, info), with the message itself
- in the second parameter.
-
- Example::
-
- if ($some_var == '')
- {
- log_message('error', 'Some variable did not contain a value.');
- }
- else
- {
- log_message('debug', 'Some variable was correctly set');
- }
-
- log_message('info', 'The purpose of some variable is to provide some value.');
-
- There are three message types:
-
- #. Error Messages. These are actual errors, such as PHP errors or
- user errors.
- #. Debug Messages. These are messages that assist in debugging. For
- example, if a class has been initialized, you could log this as
- debugging info.
- #. Informational Messages. These are the lowest priority messages,
- simply giving information regarding some process.
-
- .. note:: In order for the log file to actually be written, the
- *logs/* directory must be writable. In addition, you must
- set the "threshold" for logging in
- *application/config/config.php*. You might, for example,
- only want error messages to be logged, and not the other
- two types. If you set it to zero logging will be disabled.
diff --git a/user_guide_src/source/general/helpers.rst b/user_guide_src/source/general/helpers.rst
deleted file mode 100644
index d171aa8ed..000000000
--- a/user_guide_src/source/general/helpers.rst
+++ /dev/null
@@ -1,145 +0,0 @@
-################
-Helper Functions
-################
-
-Helpers, as the name suggests, help you with tasks. Each helper file is
-simply a collection of functions in a particular category. There are **URL
-Helpers**, that assist in creating links, there are Form Helpers that help
-you create form elements, **Text Helpers** perform various text formatting
-routines, **Cookie Helpers** set and read cookies, File Helpers help you
-deal with files, etc.
-
-Unlike most other systems in CodeIgniter, Helpers are not written in an
-Object Oriented format. They are simple, procedural functions. Each
-helper function performs one specific task, with no dependence on other
-functions.
-
-CodeIgniter does not load Helper Files by default, so the first step in
-using a Helper is to load it. Once loaded, it becomes globally available
-in your :doc:`controller <../general/controllers>` and
-:doc:`views <../general/views>`.
-
-Helpers are typically stored in your **system/helpers**, or
-**application/helpers directory**. CodeIgniter will look first in your
-**application/helpers directory**. If the directory does not exist or the
-specified helper is not located there CI will instead look in your
-global *system/helpers/* directory.
-
-Loading a Helper
-================
-
-Loading a helper file is quite simple using the following method::
-
- $this->load->helper('name');
-
-Where **name** is the file name of the helper, without the .php file
-extension or the "helper" part.
-
-For example, to load the **URL Helper** file, which is named
-**url_helper.php**, you would do this::
-
- $this->load->helper('url');
-
-A helper can be loaded anywhere within your controller methods (or
-even within your View files, although that's not a good practice), as
-long as you load it before you use it. You can load your helpers in your
-controller constructor so that they become available automatically in
-any function, or you can load a helper in a specific function that needs
-it.
-
-.. note:: The Helper loading method above does not return a value, so
- don't try to assign it to a variable. Just use it as shown.
-
-Loading Multiple Helpers
-========================
-
-If you need to load more than one helper you can specify them in an
-array, like this::
-
- $this->load->helper(
- array('helper1', 'helper2', 'helper3')
- );
-
-Auto-loading Helpers
-====================
-
-If you find that you need a particular helper globally throughout your
-application, you can tell CodeIgniter to auto-load it during system
-initialization. This is done by opening the **application/config/autoload.php**
-file and adding the helper to the autoload array.
-
-Using a Helper
-==============
-
-Once you've loaded the Helper File containing the function you intend to
-use, you'll call it the way you would a standard PHP function.
-
-For example, to create a link using the ``anchor()`` function in one of
-your view files you would do this::
-
- <?php echo anchor('blog/comments', 'Click Here');?>
-
-Where "Click Here" is the name of the link, and "blog/comments" is the
-URI to the controller/method you wish to link to.
-
-"Extending" Helpers
-===================
-
-To "extend" Helpers, create a file in your **application/helpers/** folder
-with an identical name to the existing Helper, but prefixed with **MY\_**
-(this item is configurable. See below.).
-
-If all you need to do is add some functionality to an existing helper -
-perhaps add a function or two, or change how a particular helper
-function operates - then it's overkill to replace the entire helper with
-your version. In this case it's better to simply "extend" the Helper.
-
-.. note:: The term "extend" is used loosely since Helper functions are
- procedural and discrete and cannot be extended in the traditional
- programmatic sense. Under the hood, this gives you the ability to
- add to or or to replace the functions a Helper provides.
-
-For example, to extend the native **Array Helper** you'll create a file
-named **application/helpers/MY_array_helper.php**, and add or override
-functions::
-
- // any_in_array() is not in the Array Helper, so it defines a new function
- function any_in_array($needle, $haystack)
- {
- $needle = is_array($needle) ? $needle : array($needle);
-
- foreach ($needle as $item)
- {
- if (in_array($item, $haystack))
- {
- return TRUE;
- }
- }
-
- return FALSE;
- }
-
- // random_element() is included in Array Helper, so it overrides the native function
- function random_element($array)
- {
- shuffle($array);
- return array_pop($array);
- }
-
-Setting Your Own Prefix
------------------------
-
-The filename prefix for "extending" Helpers is the same used to extend
-libraries and core classes. To set your own prefix, open your
-**application/config/config.php** file and look for this item::
-
- $config['subclass_prefix'] = 'MY_';
-
-Please note that all native CodeIgniter libraries are prefixed with **CI\_**
-so DO NOT use that as your prefix.
-
-Now What?
-=========
-
-In the Table of Contents you'll find a list of all the available Helper
-Files. Browse each one to see what they do. \ No newline at end of file
diff --git a/user_guide_src/source/general/hooks.rst b/user_guide_src/source/general/hooks.rst
deleted file mode 100644
index 6cc3407a3..000000000
--- a/user_guide_src/source/general/hooks.rst
+++ /dev/null
@@ -1,127 +0,0 @@
-####################################
-Hooks - Extending the Framework Core
-####################################
-
-CodeIgniter's Hooks feature provides a means to tap into and modify the
-inner workings of the framework without hacking the core files. When
-CodeIgniter runs it follows a specific execution process, diagramed in
-the :doc:`Application Flow <../overview/appflow>` page. There may be
-instances, however, where you'd like to cause some action to take place
-at a particular stage in the execution process. For example, you might
-want to run a script right before your controllers get loaded, or right
-after, or you might want to trigger one of your own scripts in some
-other location.
-
-Enabling Hooks
-==============
-
-The hooks feature can be globally enabled/disabled by setting the
-following item in the **application/config/config.php** file::
-
- $config['enable_hooks'] = TRUE;
-
-Defining a Hook
-===============
-
-Hooks are defined in the **application/config/hooks.php** file.
-Each hook is specified as an array with this prototype::
-
- $hook['pre_controller'] = array(
- 'class' => 'MyClass',
- 'function' => 'Myfunction',
- 'filename' => 'Myclass.php',
- 'filepath' => 'hooks',
- 'params' => array('beer', 'wine', 'snacks')
- );
-
-**Notes:**
-
-The array index correlates to the name of the particular hook point you
-want to use. In the above example the hook point is pre_controller. A
-list of hook points is found below. The following items should be
-defined in your associative hook array:
-
-- **class** The name of the class you wish to invoke. If you prefer to
- use a procedural function instead of a class, leave this item blank.
-- **function** The function (or method) name you wish to call.
-- **filename** The file name containing your class/function.
-- **filepath** The name of the directory containing your script.
- Note:
- Your script must be located in a directory INSIDE your *application/*
- directory, so the file path is relative to that directory. For example,
- if your script is located in *application/hooks/*, you will simply use
- 'hooks' as your filepath. If your script is located in
- *application/hooks/utilities/* you will use 'hooks/utilities' as your
- filepath. No trailing slash.
-- **params** Any parameters you wish to pass to your script. This item
- is optional.
-
-You can also use lambda/anoymous functions (or closures) as hooks, with
-a simpler syntax::
-
- $hook['post_controller'] = function()
- {
- /* do something here */
- };
-
-Multiple Calls to the Same Hook
-===============================
-
-If want to use the same hook point with more than one script, simply
-make your array declaration multi-dimensional, like this::
-
- $hook['pre_controller'][] = array(
- 'class' => 'MyClass',
- 'function' => 'MyMethod',
- 'filename' => 'Myclass.php',
- 'filepath' => 'hooks',
- 'params' => array('beer', 'wine', 'snacks')
- );
-
- $hook['pre_controller'][] = array(
- 'class' => 'MyOtherClass',
- 'function' => 'MyOtherMethod',
- 'filename' => 'Myotherclass.php',
- 'filepath' => 'hooks',
- 'params' => array('red', 'yellow', 'blue')
- );
-
-Notice the brackets after each array index::
-
- $hook['pre_controller'][]
-
-This permits you to have the same hook point with multiple scripts. The
-order you define your array will be the execution order.
-
-Hook Points
-===========
-
-The following is a list of available hook points.
-
-- **pre_system**
- Called very early during system execution. Only the benchmark and
- hooks class have been loaded at this point. No routing or other
- processes have happened.
-- **pre_controller**
- Called immediately prior to any of your controllers being called.
- All base classes, routing, and security checks have been done.
-- **post_controller_constructor**
- Called immediately after your controller is instantiated, but prior
- to any method calls happening.
-- **post_controller**
- Called immediately after your controller is fully executed.
-- **display_override**
- Overrides the ``_display()`` method, used to send the finalized page
- to the web browser at the end of system execution. This permits you
- to use your own display methodology. Note that you will need to
- reference the CI superobject with ``$this->CI =& get_instance()`` and
- then the finalized data will be available by calling
- ``$this->CI->output->get_output()``.
-- **cache_override**
- Enables you to call your own method instead of the ``_display_cache()``
- method in the :doc:`Output Library <../libraries/output>`. This permits
- you to use your own cache display mechanism.
-- **post_system**
- Called after the final rendered page is sent to the browser, at the
- end of system execution after the finalized data is sent to the
- browser. \ No newline at end of file
diff --git a/user_guide_src/source/general/index.rst b/user_guide_src/source/general/index.rst
deleted file mode 100644
index 195c4a98a..000000000
--- a/user_guide_src/source/general/index.rst
+++ /dev/null
@@ -1,33 +0,0 @@
-##############
-General Topics
-##############
-
-.. toctree::
- :titlesonly:
-
- urls
- controllers
- reserved_names
- views
- models
- Helpers <helpers>
- libraries
- creating_libraries
- drivers
- creating_drivers
- core_classes
- ancillary_classes
- hooks
- autoloader
- common_functions
- compatibility_functions
- routing
- errors
- Caching <caching>
- profiling
- cli
- managing_apps
- environments
- alternative_php
- security
- PHP Style Guide <styleguide> \ No newline at end of file
diff --git a/user_guide_src/source/general/libraries.rst b/user_guide_src/source/general/libraries.rst
deleted file mode 100644
index 9bbda51bb..000000000
--- a/user_guide_src/source/general/libraries.rst
+++ /dev/null
@@ -1,32 +0,0 @@
-###########################
-Using CodeIgniter Libraries
-###########################
-
-All of the available libraries are located in your *system/libraries/*
-directory. In most cases, to use one of these classes involves initializing
-it within a :doc:`controller <controllers>` using the following
-initialization method::
-
- $this->load->library('class_name');
-
-Where 'class_name' is the name of the class you want to invoke. For
-example, to load the :doc:`Form Validation Library
-<../libraries/form_validation>` you would do this::
-
- $this->load->library('form_validation');
-
-Once initialized you can use it as indicated in the user guide page
-corresponding to that class.
-
-Additionally, multiple libraries can be loaded at the same time by
-passing an array of libraries to the load method.
-
-Example::
-
- $this->load->library(array('email', 'table'));
-
-Creating Your Own Libraries
-===========================
-
-Please read the section of the user guide that discusses how to
-:doc:`create your own libraries <creating_libraries>`. \ No newline at end of file
diff --git a/user_guide_src/source/general/managing_apps.rst b/user_guide_src/source/general/managing_apps.rst
deleted file mode 100644
index 4861ba71a..000000000
--- a/user_guide_src/source/general/managing_apps.rst
+++ /dev/null
@@ -1,61 +0,0 @@
-##########################
-Managing your Applications
-##########################
-
-By default it is assumed that you only intend to use CodeIgniter to
-manage one application, which you will build in your *application/*
-directory. It is possible, however, to have multiple sets of
-applications that share a single CodeIgniter installation, or even to
-rename or relocate your application directory.
-
-Renaming the Application Directory
-==================================
-
-If you would like to rename your application directory you may do so
-as long as you open your main index.php file and set its name using
-the ``$application_folder`` variable::
-
- $application_folder = 'application';
-
-Relocating your Application Directory
-=====================================
-
-It is possible to move your application directory to a different
-location on your server than your web root. To do so open
-your main index.php and set a *full server path* in the
-``$application_folder`` variable::
-
- $application_folder = '/path/to/your/application';
-
-Running Multiple Applications with one CodeIgniter Installation
-===============================================================
-
-If you would like to share a common CodeIgniter installation to manage
-several different applications simply put all of the directories located
-inside your application directory into their own sub-directory.
-
-For example, let's say you want to create two applications, named "foo"
-and "bar". You could structure your application directories like this::
-
- applications/foo/
- applications/foo/config/
- applications/foo/controllers/
- applications/foo/libraries/
- applications/foo/models/
- applications/foo/views/
- applications/bar/
- applications/bar/config/
- applications/bar/controllers/
- applications/bar/libraries/
- applications/bar/models/
- applications/bar/views/
-
-To select a particular application for use requires that you open your
-main index.php file and set the ``$application_folder`` variable. For
-example, to select the "foo" application for use you would do this::
-
- $application_folder = 'applications/foo';
-
-.. note:: Each of your applications will need its own index.php file
- which calls the desired application. The index.php file can be named
- anything you want. \ No newline at end of file
diff --git a/user_guide_src/source/general/models.rst b/user_guide_src/source/general/models.rst
deleted file mode 100644
index 0b20164e9..000000000
--- a/user_guide_src/source/general/models.rst
+++ /dev/null
@@ -1,167 +0,0 @@
-######
-Models
-######
-
-Models are **optionally** available for those who want to use a more
-traditional MVC approach.
-
-.. contents:: Page Contents
-
-What is a Model?
-================
-
-Models are PHP classes that are designed to work with information in
-your database. For example, let's say you use CodeIgniter to manage a
-blog. You might have a model class that contains functions to insert,
-update, and retrieve your blog data. Here is an example of what such a
-model class might look like::
-
- class Blog_model extends CI_Model {
-
- public $title;
- public $content;
- public $date;
-
- public function get_last_ten_entries()
- {
- $query = $this->db->get('entries', 10);
- return $query->result();
- }
-
- public function insert_entry()
- {
- $this->title = $_POST['title']; // please read the below note
- $this->content = $_POST['content'];
- $this->date = time();
-
- $this->db->insert('entries', $this);
- }
-
- public function update_entry()
- {
- $this->title = $_POST['title'];
- $this->content = $_POST['content'];
- $this->date = time();
-
- $this->db->update('entries', $this, array('id' => $_POST['id']));
- }
-
- }
-
-.. note:: The methods in the above example use the :doc:`Query Builder
- <../database/query_builder>` database methods.
-
-.. note:: For the sake of simplicity in this example we're using ``$_POST``
- directly. This is generally bad practice, and a more common approach
- would be to use the :doc:`Input Library <../libraries/input>`
- ``$this->input->post('title')``.
-
-Anatomy of a Model
-==================
-
-Model classes are stored in your **application/models/** directory.
-They can be nested within sub-directories if you want this type of
-organization.
-
-The basic prototype for a model class is this::
-
- class Model_name extends CI_Model {
-
- }
-
-Where **Model_name** is the name of your class. Class names **must** have
-the first letter capitalized with the rest of the name lowercase. Make
-sure your class extends the base Model class.
-
-The file name must match the class name. For example, if this is your class::
-
- class User_model extends CI_Model {
-
- }
-
-Your file will be this::
-
- application/models/User_model.php
-
-Loading a Model
-===============
-
-Your models will typically be loaded and called from within your
-:doc:`controller <controllers>` methods. To load a model you will use
-the following method::
-
- $this->load->model('model_name');
-
-If your model is located in a sub-directory, include the relative path
-from your models directory. For example, if you have a model located at
-*application/models/blog/Queries.php* you'll load it using::
-
- $this->load->model('blog/queries');
-
-Once loaded, you will access your model methods using an object with the
-same name as your class::
-
- $this->load->model('model_name');
-
- $this->model_name->method();
-
-If you would like your model assigned to a different object name you can
-specify it via the second parameter of the loading method::
-
- $this->load->model('model_name', 'foobar');
-
- $this->foobar->method();
-
-Here is an example of a controller, that loads a model, then serves a
-view::
-
- class Blog_controller extends CI_Controller {
-
- public function blog()
- {
- $this->load->model('blog');
-
- $data['query'] = $this->blog->get_last_ten_entries();
-
- $this->load->view('blog', $data);
- }
- }
-
-
-Auto-loading Models
-===================
-
-If you find that you need a particular model globally throughout your
-application, you can tell CodeIgniter to auto-load it during system
-initialization. This is done by opening the
-**application/config/autoload.php** file and adding the model to the
-autoload array.
-
-Connecting to your Database
-===========================
-
-When a model is loaded it does **NOT** connect automatically to your
-database. The following options for connecting are available to you:
-
-- You can connect using the standard database methods :doc:`described
- here <../database/connecting>`, either from within your
- Controller class or your Model class.
-- You can tell the model loading method to auto-connect by passing
- TRUE (boolean) via the third parameter, and connectivity settings,
- as defined in your database config file will be used::
-
- $this->load->model('model_name', '', TRUE);
-
-- You can manually pass database connectivity settings via the third
- parameter::
-
- $config['hostname'] = 'localhost';
- $config['username'] = 'myusername';
- $config['password'] = 'mypassword';
- $config['database'] = 'mydatabase';
- $config['dbdriver'] = 'mysqli';
- $config['dbprefix'] = '';
- $config['pconnect'] = FALSE;
- $config['db_debug'] = TRUE;
-
- $this->load->model('model_name', '', $config);
diff --git a/user_guide_src/source/general/profiling.rst b/user_guide_src/source/general/profiling.rst
deleted file mode 100644
index 2716d1781..000000000
--- a/user_guide_src/source/general/profiling.rst
+++ /dev/null
@@ -1,90 +0,0 @@
-##########################
-Profiling Your Application
-##########################
-
-The Profiler Class will display benchmark results, queries you have run,
-and ``$_POST`` data at the bottom of your pages. This information can be
-useful during development in order to help with debugging and
-optimization.
-
-Initializing the Class
-======================
-
-.. important:: This class does NOT need to be initialized. It is loaded
- automatically by the :doc:`Output Library <../libraries/output>`
- if profiling is enabled as shown below.
-
-Enabling the Profiler
-=====================
-
-To enable the profiler place the following line anywhere within your
-:doc:`Controller <controllers>` methods::
-
- $this->output->enable_profiler(TRUE);
-
-When enabled a report will be generated and inserted at the bottom of
-your pages.
-
-To disable the profiler you will use::
-
- $this->output->enable_profiler(FALSE);
-
-Setting Benchmark Points
-========================
-
-In order for the Profiler to compile and display your benchmark data you
-must name your mark points using specific syntax.
-
-Please read the information on setting Benchmark points in the
-:doc:`Benchmark Library <../libraries/benchmark>` page.
-
-Enabling and Disabling Profiler Sections
-========================================
-
-Each section of Profiler data can be enabled or disabled by setting a
-corresponding config variable to TRUE or FALSE. This can be done one of
-two ways. First, you can set application wide defaults with the
-*application/config/profiler.php* config file.
-
-Example::
-
- $config['config'] = FALSE;
- $config['queries'] = FALSE;
-
-In your controllers, you can override the defaults and config file
-values by calling the ``set_profiler_sections()`` method of the
-:doc:`Output Library <../libraries/output>`::
-
- $sections = array(
- 'config' => TRUE,
- 'queries' => TRUE
- );
-
- $this->output->set_profiler_sections($sections);
-
-Available sections and the array key used to access them are described
-in the table below.
-
-======================= =================================================================== ========
-Key Description Default
-======================= =================================================================== ========
-**benchmarks** Elapsed time of Benchmark points and total execution time TRUE
-**config** CodeIgniter Config variables TRUE
-**controller_info** The Controller class and method requested TRUE
-**get** Any GET data passed in the request TRUE
-**http_headers** The HTTP headers for the current request TRUE
-**memory_usage** Amount of memory consumed by the current request, in bytes TRUE
-**post** Any POST data passed in the request TRUE
-**queries** Listing of all database queries executed, including execution time TRUE
-**uri_string** The URI of the current request TRUE
-**session_data** Data stored in the current session TRUE
-**query_toggle_count** The number of queries after which the query block will default to 25
- hidden.
-======================= =================================================================== ========
-
-.. note:: Disabling the :doc:`save_queries </database/configuration>` setting in
- your database configuration will also effectively disable profiling for
- database queries and render the 'queries' setting above useless. You can
- optionally override this setting with ``$this->db->save_queries = TRUE;``.
- Without this setting you won't be able to view the queries or the
- `last_query <database/helpers>`. \ No newline at end of file
diff --git a/user_guide_src/source/general/requirements.rst b/user_guide_src/source/general/requirements.rst
deleted file mode 100644
index f2729f3d5..000000000
--- a/user_guide_src/source/general/requirements.rst
+++ /dev/null
@@ -1,21 +0,0 @@
-###################
-Server Requirements
-###################
-
-`PHP <http://php.net/>`_ version 5.6 or newer is recommended.
-
-It should work on 5.3.7 as well, but we strongly advise you NOT to run
-such old versions of PHP, because of potential security and performance
-issues, as well as missing features.
-
-A database is required for most web application programming.
-Currently supported databases are:
-
- - MySQL (5.1+) via the *mysql* (deprecated), *mysqli* and *pdo* drivers
- - Oracle via the *oci8* and *pdo* drivers
- - PostgreSQL via the *postgre* and *pdo* drivers
- - MS SQL via the *mssql*, *sqlsrv* (version 2005 and above only) and *pdo* drivers
- - SQLite via the *sqlite* (version 2), *sqlite3* (version 3) and *pdo* drivers
- - CUBRID via the *cubrid* and *pdo* drivers
- - Interbase/Firebird via the *ibase* and *pdo* drivers
- - ODBC via the *odbc* and *pdo* drivers (you should know that ODBC is actually an abstraction layer) \ No newline at end of file
diff --git a/user_guide_src/source/general/reserved_names.rst b/user_guide_src/source/general/reserved_names.rst
deleted file mode 100644
index 5d745cba6..000000000
--- a/user_guide_src/source/general/reserved_names.rst
+++ /dev/null
@@ -1,88 +0,0 @@
-##############
-Reserved Names
-##############
-
-In order to help out, CodeIgniter uses a series of function, method,
-class and variable names in its operation. Because of this, some names
-cannot be used by a developer. Following is a list of reserved names
-that cannot be used.
-
-Controller names
-----------------
-
-Since your controller classes will extend the main application
-controller you must be careful not to name your methods identically to
-the ones used by that class, otherwise your local methods will
-override them. The following is a list of reserved names. Do not name
-your controller any of these:
-
-- CI_Controller
-- Default
-- index
-
-Functions
----------
-
-- :php:func:`is_php()`
-- :php:func:`is_really_writable()`
-- ``load_class()``
-- ``is_loaded()``
-- ``get_config()``
-- :php:func:`config_item()`
-- :php:func:`show_error()`
-- :php:func:`show_404()`
-- :php:func:`log_message()`
-- :php:func:`set_status_header()`
-- :php:func:`get_mimes()`
-- :php:func:`html_escape()`
-- :php:func:`remove_invisible_characters()`
-- :php:func:`is_https()`
-- :php:func:`function_usable()`
-- :php:func:`get_instance()`
-- ``_error_handler()``
-- ``_exception_handler()``
-- ``_stringify_attributes()``
-
-Variables
----------
-
-- ``$config``
-- ``$db``
-- ``$lang``
-
-Constants
----------
-
-- ENVIRONMENT
-- FCPATH
-- SELF
-- BASEPATH
-- APPPATH
-- VIEWPATH
-- CI_VERSION
-- MB_ENABLED
-- ICONV_ENABLED
-- UTF8_ENABLED
-- FILE_READ_MODE
-- FILE_WRITE_MODE
-- DIR_READ_MODE
-- DIR_WRITE_MODE
-- FOPEN_READ
-- FOPEN_READ_WRITE
-- FOPEN_WRITE_CREATE_DESTRUCTIVE
-- FOPEN_READ_WRITE_CREATE_DESTRUCTIVE
-- FOPEN_WRITE_CREATE
-- FOPEN_READ_WRITE_CREATE
-- FOPEN_WRITE_CREATE_STRICT
-- FOPEN_READ_WRITE_CREATE_STRICT
-- SHOW_DEBUG_BACKTRACE
-- EXIT_SUCCESS
-- EXIT_ERROR
-- EXIT_CONFIG
-- EXIT_UNKNOWN_FILE
-- EXIT_UNKNOWN_CLASS
-- EXIT_UNKNOWN_METHOD
-- EXIT_USER_INPUT
-- EXIT_DATABASE
-- EXIT__AUTO_MIN
-- EXIT__AUTO_MAX \ No newline at end of file
diff --git a/user_guide_src/source/general/routing.rst b/user_guide_src/source/general/routing.rst
deleted file mode 100644
index 909289d8d..000000000
--- a/user_guide_src/source/general/routing.rst
+++ /dev/null
@@ -1,207 +0,0 @@
-###########
-URI Routing
-###########
-
-Typically there is a one-to-one relationship between a URL string and
-its corresponding controller class/method. The segments in a URI
-normally follow this pattern::
-
- example.com/class/function/id/
-
-In some instances, however, you may want to remap this relationship so
-that a different class/method can be called instead of the one
-corresponding to the URL.
-
-For example, let's say you want your URLs to have this prototype::
-
- example.com/product/1/
- example.com/product/2/
- example.com/product/3/
- example.com/product/4/
-
-Normally the second segment of the URL is reserved for the method
-name, but in the example above it instead has a product ID. To
-overcome this, CodeIgniter allows you to remap the URI handler.
-
-Setting your own routing rules
-==============================
-
-Routing rules are defined in your *application/config/routes.php* file.
-In it you'll see an array called ``$route`` that permits you to specify
-your own routing criteria. Routes can either be specified using wildcards
-or Regular Expressions.
-
-Wildcards
-=========
-
-A typical wildcard route might look something like this::
-
- $route['product/:num'] = 'catalog/product_lookup';
-
-In a route, the array key contains the URI to be matched, while the
-array value contains the destination it should be re-routed to. In the
-above example, if the literal word "product" is found in the first
-segment of the URL, and a number is found in the second segment, the
-"catalog" class and the "product_lookup" method are instead used.
-
-You can match literal values or you can use two wildcard types:
-
-**(:num)** will match a segment containing only numbers.
-**(:any)** will match a segment containing any character (except for '/', which is the segment delimiter).
-
-.. note:: Wildcards are actually aliases for regular expressions, with
- **:any** being translated to **[^/]+** and **:num** to **[0-9]+**,
- respectively.
-
-.. note:: Routes will run in the order they are defined. Higher routes
- will always take precedence over lower ones.
-
-.. note:: Route rules are not filters! Setting a rule of e.g.
- 'foo/bar/(:num)' will not prevent controller *Foo* and method
- *bar* to be called with a non-numeric value if that is a valid
- route.
-
-Examples
-========
-
-Here are a few routing examples::
-
- $route['journals'] = 'blogs';
-
-A URL containing the word "journals" in the first segment will be
-remapped to the "blogs" class.
-
-::
-
- $route['blog/joe'] = 'blogs/users/34';
-
-A URL containing the segments blog/joe will be remapped to the "blogs"
-class and the "users" method. The ID will be set to "34".
-
-::
-
- $route['product/(:any)'] = 'catalog/product_lookup';
-
-A URL with "product" as the first segment, and anything in the second
-will be remapped to the "catalog" class and the "product_lookup"
-method.
-
-::
-
- $route['product/(:num)'] = 'catalog/product_lookup_by_id/$1';
-
-A URL with "product" as the first segment, and a number in the second
-will be remapped to the "catalog" class and the
-"product_lookup_by_id" method passing in the match as a variable to
-the method.
-
-.. important:: Do not use leading/trailing slashes.
-
-Regular Expressions
-===================
-
-If you prefer you can use regular expressions to define your routing
-rules. Any valid regular expression is allowed, as are back-references.
-
-.. note:: If you use back-references you must use the dollar syntax
- rather than the double backslash syntax.
-
-A typical RegEx route might look something like this::
-
- $route['products/([a-z]+)/(\d+)'] = '$1/id_$2';
-
-In the above example, a URI similar to products/shirts/123 would instead
-call the "shirts" controller class and the "id_123" method.
-
-With regular expressions, you can also catch multiple segments at once.
-For example, if a user accesses a password protected area of your web
-application and you wish to be able to redirect them back to the same
-page after they log in, you may find this example useful::
-
- $route['login/(.+)'] = 'auth/login/$1';
-
-.. note:: In the above example, if the ``$1`` placeholder contains a
- slash, it will still be split into multiple parameters when
- passed to ``Auth::login()``.
-
-For those of you who don't know regular expressions and want to learn
-more about them, `regular-expressions.info <http://www.regular-expressions.info/>`_
-might be a good starting point.
-
-.. note:: You can also mix and match wildcards with regular expressions.
-
-Callbacks
-=========
-
-You can also use callbacks in place of the normal routing rules to process
-the back-references. Example::
-
- $route['products/([a-zA-Z]+)/edit/(\d+)'] = function ($product_type, $id)
- {
- return 'catalog/product_edit/' . strtolower($product_type) . '/' . $id;
- };
-
-Using HTTP verbs in routes
-==========================
-
-It is possible to use HTTP verbs (request method) to define your routing rules.
-This is particularly useful when building RESTful applications. You can use standard HTTP
-verbs (GET, PUT, POST, DELETE, PATCH) or a custom one such (e.g. PURGE). HTTP verb rules
-are case-insensitive. All you need to do is to add the verb as an array key to your route.
-Example::
-
- $route['products']['put'] = 'product/insert';
-
-In the above example, a PUT request to URI "products" would call the ``Product::insert()``
-controller method.
-
-::
-
- $route['products/(:num)']['DELETE'] = 'product/delete/$1';
-
-A DELETE request to URL with "products" as first the segment and a number in the second will be
-mapped to the ``Product::delete()`` method, passing the numeric value as the first parameter.
-
-Using HTTP verbs is of course, optional.
-
-Reserved Routes
-===============
-
-There are three reserved routes::
-
- $route['default_controller'] = 'welcome';
-
-This route points to the action that should be executed if the URI contains
-no data, which will be the case when people load your root URL.
-The setting accepts a **controller/method** value and ``index()`` would be
-the default method if you don't specify one. In the above example, it is
-``Welcome::index()`` that would be called.
-
-.. note:: You can NOT use a directory as a part of this setting!
-
-You are encouraged to always have a default route as otherwise a 404 page
-will appear by default.
-
-::
-
- $route['404_override'] = '';
-
-This route indicates which controller class should be loaded if the
-requested controller is not found. It will override the default 404
-error page. Same per-directory rules as with 'default_controller'
-apply here as well.
-
-It won't affect to the ``show_404()`` function, which will
-continue loading the default *error_404.php* file at
-*application/views/errors/error_404.php*.
-
-::
-
- $route['translate_uri_dashes'] = FALSE;
-
-As evident by the boolean value, this is not exactly a route. This
-option enables you to automatically replace dashes ('-') with
-underscores in the controller and method URI segments, thus saving you
-additional route entries if you need to do that.
-This is required, because the dash isn't a valid class or method name
-character and would cause a fatal error if you try to use it.
diff --git a/user_guide_src/source/general/security.rst b/user_guide_src/source/general/security.rst
deleted file mode 100644
index 744a2c934..000000000
--- a/user_guide_src/source/general/security.rst
+++ /dev/null
@@ -1,200 +0,0 @@
-########
-Security
-########
-
-This page describes some "best practices" regarding web security, and
-details CodeIgniter's internal security features.
-
-.. note:: If you came here looking for a security contact, please refer to
- our `Contribution Guide <../contributing/index>`.
-
-URI Security
-============
-
-CodeIgniter is fairly restrictive regarding which characters it allows
-in your URI strings in order to help minimize the possibility that
-malicious data can be passed to your application. URIs may only contain
-the following:
-
-- Alpha-numeric text (latin characters only)
-- Tilde: ~
-- Percent sign: %
-- Period: .
-- Colon: :
-- Underscore: \_
-- Dash: -
-- Space
-
-Register_globals
-================
-
-During system initialization all global variables that are found to exist
-in the ``$_GET``, ``$_POST``, ``$_REQUEST`` and ``$_COOKIE`` are unset.
-
-The unsetting routine is effectively the same as *register_globals = off*.
-
-display_errors
-==============
-
-In production environments, it is typically desirable to "disable" PHP's
-error reporting by setting the internal *display_errors* flag to a value
-of 0. This disables native PHP errors from being rendered as output,
-which may potentially contain sensitive information.
-
-Setting CodeIgniter's **ENVIRONMENT** constant in index.php to a value of
-**\'production\'** will turn off these errors. In development mode, it is
-recommended that a value of 'development' is used. More information
-about differentiating between environments can be found on the
-:doc:`Handling Environments <environments>` page.
-
-magic_quotes_runtime
-====================
-
-The *magic_quotes_runtime* directive is turned off during system
-initialization so that you don't have to remove slashes when retrieving
-data from your database.
-
-**************
-Best Practices
-**************
-
-Before accepting any data into your application, whether it be POST data
-from a form submission, COOKIE data, URI data, XML-RPC data, or even
-data from the SERVER array, you are encouraged to practice this three
-step approach:
-
-#. Validate the data to ensure it conforms to the correct type, length,
- size, etc.
-#. Filter the data as if it were tainted.
-#. Escape the data before submitting it into your database or outputting
- it to a browser.
-
-CodeIgniter provides the following functions and tips to assist you
-in this process:
-
-XSS Filtering
-=============
-
-CodeIgniter comes with a Cross Site Scripting filter. This filter
-looks for commonly used techniques to embed malicious JavaScript into
-your data, or other types of code that attempt to hijack cookies or
-do other malicious things. The XSS Filter is described
-:doc:`here <../libraries/security>`.
-
-.. note:: XSS filtering should *only be performed on output*. Filtering
- input data may modify the data in undesirable ways, including
- stripping special characters from passwords, which reduces
- security instead of improving it.
-
-CSRF protection
-===============
-
-CSRF stands for Cross-Site Request Forgery, which is the process of an
-attacker tricking their victim into unknowingly submitting a request.
-
-CodeIgniter provides CSRF protection out of the box, which will get
-automatically triggered for every non-GET HTTP request, but also needs
-you to create your submit forms in a certain way. This is explained in
-the :doc:`Security Library <../libraries/security>` documentation.
-
-Password handling
-=================
-
-It is *critical* that you handle passwords in your application properly.
-
-Unfortunately, many developers don't know how to do that, and the web is
-full of outdated or otherwise wrongful advices, which doesn't help.
-
-We would like to give you a list of combined do's and don'ts to help you
-with that. Please read below.
-
-- DO NOT store passwords in plain-text format.
-
- Always **hash** your passwords.
-
-- DO NOT use Base64 or similar encoding for storing passwords.
-
- This is as good as storing them in plain-text. Really. Do **hashing**,
- not *encoding*.
-
- Encoding, and encryption too, are two-way processes. Passwords are
- secrets that must only be known to their owner, and thus must work
- only in one direction. Hashing does that - there's *no* un-hashing or
- de-hashing, but there is decoding and decryption.
-
-- DO NOT use weak or broken hashing algorithms like MD5 or SHA1.
-
- These algorithms are old, proven to be flawed, and not designed for
- password hashing in the first place.
-
- Also, DON'T invent your own algorithms.
-
- Only use strong password hashing algorithms like BCrypt, which is used
- in PHP's own `Password Hashing <http://php.net/password>`_ functions.
-
- Please use them, even if you're not running PHP 5.5+, CodeIgniter
- provides them for you.
-
-- DO NOT ever display or send a password in plain-text format!
-
- Even to the password's owner, if you need a "Forgotten password"
- feature, just randomly generate a new, one-time (this is also important)
- password and send that instead.
-
-- DO NOT put unnecessary limits on your users' passwords.
-
- If you're using a hashing algorithm other than BCrypt (which has a limit
- of 72 characters), you should set a relatively high limit on password
- lengths in order to mitigate DoS attacks - say, 1024 characters.
-
- Other than that however, there's no point in forcing a rule that a
- password can only be up to a number of characters, or that it can't
- contain a certain set of special characters.
-
- Not only does this **reduce** security instead of improving it, but
- there's literally no reason to do it. No technical limitations and
- no (practical) storage constraints apply once you've hashed them, none!
-
-Validate input data
-===================
-
-CodeIgniter has a :doc:`Form Validation Library
-<../libraries/form_validation>` that assists you in
-validating, filtering, and prepping your data.
-
-Even if that doesn't work for your use case however, be sure to always
-validate and sanitize all input data. For example, if you expect a numeric
-string for an input variable, you can check for that with ``is_numeric()``
-or ``ctype_digit()``. Always try to narrow down your checks to a certain
-pattern.
-
-Have it in mind that this includes not only ``$_POST`` and ``$_GET``
-variables, but also cookies, the user-agent string and basically
-*all data that is not created directly by your own code*.
-
-
-Escape all data before database insertion
-=========================================
-
-Never insert information into your database without escaping it.
-Please see the section that discusses :doc:`database queries
-<../database/queries>` for more information.
-
-Hide your files
-===============
-
-Another good security practice is to only leave your *index.php*
-and "assets" (e.g. .js, css and image files) under your server's
-*webroot* directory (most commonly named "htdocs/"). These are
-the only files that you would need to be accessible from the web.
-
-Allowing your visitors to see anything else would potentially
-allow them to access sensitive data, execute scripts, etc.
-
-If you're not allowed to do that, you can try using a .htaccess
-file to restrict access to those resources.
-
-CodeIgniter will have an index.html file in all of its
-directories in an attempt to hide some of this data, but have
-it in mind that this is not enough to prevent a serious
-attacker.
diff --git a/user_guide_src/source/general/styleguide.rst b/user_guide_src/source/general/styleguide.rst
deleted file mode 100644
index 9b4a84e14..000000000
--- a/user_guide_src/source/general/styleguide.rst
+++ /dev/null
@@ -1,636 +0,0 @@
-###############
-PHP Style Guide
-###############
-
-
-The following page describes the coding styles adhered to when
-contributing to the development of CodeIgniter. There is no requirement
-to use these styles in your own CodeIgniter application, though they
-are recommended.
-
-.. contents:: Table of Contents
-
-File Format
-===========
-
-Files should be saved with Unicode (UTF-8) encoding. The BOM should
-*not* be used. Unlike UTF-16 and UTF-32, there's no byte order to
-indicate in a UTF-8 encoded file, and the BOM can have a negative side
-effect in PHP of sending output, preventing the application from being
-able to set its own headers. Unix line endings should be used (LF).
-
-Here is how to apply these settings in some of the more common text
-editors. Instructions for your text editor may vary; check your text
-editor's documentation.
-
-TextMate
-''''''''
-
-#. Open the Application Preferences
-#. Click Advanced, and then the "Saving" tab
-#. In "File Encoding", select "UTF-8 (recommended)"
-#. In "Line Endings", select "LF (recommended)"
-#. *Optional:* Check "Use for existing files as well" if you wish to
- modify the line endings of files you open to your new preference.
-
-BBEdit
-''''''
-
-#. Open the Application Preferences
-#. Select "Text Encodings" on the left.
-#. In "Default text encoding for new documents", select "Unicode (UTF-8,
- no BOM)"
-#. *Optional:* In "If file's encoding can't be guessed, use", select
- "Unicode (UTF-8, no BOM)"
-#. Select "Text Files" on the left.
-#. In "Default line breaks", select "Mac OS X and Unix (LF)"
-
-PHP Closing Tag
-===============
-
-The PHP closing tag on a PHP document **?>** is optional to the PHP
-parser. However, if used, any whitespace following the closing tag,
-whether introduced by the developer, user, or an FTP application, can
-cause unwanted output, PHP errors, or if the latter are suppressed,
-blank pages. For this reason, all PHP files MUST OMIT the PHP closing
-tag and end with a single empty line instead.
-
-File Naming
-===========
-
-Class files must be named in a Ucfirst-like manner, while any other file name
-(configurations, views, generic scripts, etc.) should be in all lowercase.
-
-**INCORRECT**::
-
- somelibrary.php
- someLibrary.php
- SOMELIBRARY.php
- Some_Library.php
-
- Application_config.php
- Application_Config.php
- applicationConfig.php
-
-**CORRECT**::
-
- Somelibrary.php
- Some_library.php
-
- applicationconfig.php
- application_config.php
-
-Furthermore, class file names should match the name of the class itself.
-For example, if you have a class named `Myclass`, then its filename must
-be **Myclass.php**.
-
-Class and Method Naming
-=======================
-
-Class names should always start with an uppercase letter. Multiple words
-should be separated with an underscore, and not CamelCased.
-
-**INCORRECT**::
-
- class superclass
- class SuperClass
-
-**CORRECT**::
-
- class Super_class
-
-::
-
- class Super_class {
-
- public function __construct()
- {
-
- }
- }
-
-Class methods should be entirely lowercased and named to clearly
-indicate their function, preferably including a verb. Try to avoid
-overly long and verbose names. Multiple words should be separated
-with an underscore.
-
-**INCORRECT**::
-
- function fileproperties() // not descriptive and needs underscore separator
- function fileProperties() // not descriptive and uses CamelCase
- function getfileproperties() // Better! But still missing underscore separator
- function getFileProperties() // uses CamelCase
- function get_the_file_properties_from_the_file() // wordy
-
-**CORRECT**::
-
- function get_file_properties() // descriptive, underscore separator, and all lowercase letters
-
-Variable Names
-==============
-
-The guidelines for variable naming are very similar to those used for
-class methods. Variables should contain only lowercase letters,
-use underscore separators, and be reasonably named to indicate their
-purpose and contents. Very short, non-word variables should only be used
-as iterators in for() loops.
-
-**INCORRECT**::
-
- $j = 'foo'; // single letter variables should only be used in for() loops
- $Str // contains uppercase letters
- $bufferedText // uses CamelCasing, and could be shortened without losing semantic meaning
- $groupid // multiple words, needs underscore separator
- $name_of_last_city_used // too long
-
-**CORRECT**::
-
- for ($j = 0; $j < 10; $j++)
- $str
- $buffer
- $group_id
- $last_city
-
-Commenting
-==========
-
-In general, code should be commented prolifically. It not only helps
-describe the flow and intent of the code for less experienced
-programmers, but can prove invaluable when returning to your own code
-months down the line. There is not a required format for comments, but
-the following are recommended.
-
-`DocBlock <http://manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/tutorial_phpDocumentor.howto.pkg.html#basics.docblock>`_
-style comments preceding class, method, and property declarations so they can be
-picked up by IDEs::
-
- /**
- * Super Class
- *
- * @package Package Name
- * @subpackage Subpackage
- * @category Category
- * @author Author Name
- * @link http://example.com
- */
- class Super_class {
-
-::
-
- /**
- * Encodes string for use in XML
- *
- * @param string $str Input string
- * @return string
- */
- function xml_encode($str)
-
-::
-
- /**
- * Data for class manipulation
- *
- * @var array
- */
- public $data = array();
-
-Use single line comments within code, leaving a blank line between large
-comment blocks and code.
-
-::
-
- // break up the string by newlines
- $parts = explode("\n", $str);
-
- // A longer comment that needs to give greater detail on what is
- // occurring and why can use multiple single-line comments. Try to
- // keep the width reasonable, around 70 characters is the easiest to
- // read. Don't hesitate to link to permanent external resources
- // that may provide greater detail:
- //
- // http://example.com/information_about_something/in_particular/
-
- $parts = $this->foo($parts);
-
-Constants
-=========
-
-Constants follow the same guidelines as do variables, except constants
-should always be fully uppercase. *Always use CodeIgniter constants when
-appropriate, i.e. SLASH, LD, RD, PATH_CACHE, etc.*
-
-**INCORRECT**::
-
- myConstant // missing underscore separator and not fully uppercase
- N // no single-letter constants
- S_C_VER // not descriptive
- $str = str_replace('{foo}', 'bar', $str); // should use LD and RD constants
-
-**CORRECT**::
-
- MY_CONSTANT
- NEWLINE
- SUPER_CLASS_VERSION
- $str = str_replace(LD.'foo'.RD, 'bar', $str);
-
-TRUE, FALSE, and NULL
-=====================
-
-**TRUE**, **FALSE**, and **NULL** keywords should always be fully
-uppercase.
-
-**INCORRECT**::
-
- if ($foo == true)
- $bar = false;
- function foo($bar = null)
-
-**CORRECT**::
-
- if ($foo == TRUE)
- $bar = FALSE;
- function foo($bar = NULL)
-
-Logical Operators
-=================
-
-Use of the ``||`` "or" comparison operator is discouraged, as its clarity
-on some output devices is low (looking like the number 11, for instance).
-``&&`` is preferred over ``AND`` but either are acceptable, and a space should
-always precede and follow ``!``.
-
-**INCORRECT**::
-
- if ($foo || $bar)
- if ($foo AND $bar) // okay but not recommended for common syntax highlighting applications
- if (!$foo)
- if (! is_array($foo))
-
-**CORRECT**::
-
- if ($foo OR $bar)
- if ($foo && $bar) // recommended
- if ( ! $foo)
- if ( ! is_array($foo))
-
-
-Comparing Return Values and Typecasting
-=======================================
-
-Some PHP functions return FALSE on failure, but may also have a valid
-return value of "" or 0, which would evaluate to FALSE in loose
-comparisons. Be explicit by comparing the variable type when using these
-return values in conditionals to ensure the return value is indeed what
-you expect, and not a value that has an equivalent loose-type
-evaluation.
-
-Use the same stringency in returning and checking your own variables.
-Use **===** and **!==** as necessary.
-
-**INCORRECT**::
-
- // If 'foo' is at the beginning of the string, strpos will return a 0,
- // resulting in this conditional evaluating as TRUE
- if (strpos($str, 'foo') == FALSE)
-
-**CORRECT**::
-
- if (strpos($str, 'foo') === FALSE)
-
-**INCORRECT**::
-
- function build_string($str = "")
- {
- if ($str == "") // uh-oh! What if FALSE or the integer 0 is passed as an argument?
- {
-
- }
- }
-
-**CORRECT**::
-
- function build_string($str = "")
- {
- if ($str === "")
- {
-
- }
- }
-
-
-See also information regarding `typecasting
-<http://php.net/manual/en/language.types.type-juggling.php#language.types.typecasting>`_,
-which can be quite useful. Typecasting has a slightly different effect
-which may be desirable. When casting a variable as a string, for
-instance, NULL and boolean FALSE variables become empty strings, 0 (and
-other numbers) become strings of digits, and boolean TRUE becomes "1"::
-
- $str = (string) $str; // cast $str as a string
-
-Debugging Code
-==============
-
-Do not leave debugging code in your submissions, even when commented out.
-Things such as ``var_dump()``, ``print_r()``, ``die()``/``exit()`` should not be included
-in your code unless it serves a specific purpose other than debugging.
-
-Whitespace in Files
-===================
-
-No whitespace can precede the opening PHP tag or follow the closing PHP
-tag. Output is buffered, so whitespace in your files can cause output to
-begin before CodeIgniter outputs its content, leading to errors and an
-inability for CodeIgniter to send proper headers.
-
-Compatibility
-=============
-
-CodeIgniter recommends PHP 5.6 or newer to be used, but it should be
-compatible with PHP 5.3.7. Your code must either be compatible with this
-requirement, provide a suitable fallback, or be an optional feature that
-dies quietly without affecting a user's application.
-
-Additionally, do not use PHP functions that require non-default libraries
-to be installed unless your code contains an alternative method when the
-function is not available.
-
-One File per Class
-==================
-
-Use separate files for each class, unless the classes are *closely related*.
-An example of a CodeIgniter file that contains multiple classes is the
-Xmlrpc library file.
-
-Whitespace
-==========
-
-Use tabs for whitespace in your code, not spaces. This may seem like a
-small thing, but using tabs instead of whitespace allows the developer
-looking at your code to have indentation at levels that they prefer and
-customize in whatever application they use. And as a side benefit, it
-results in (slightly) more compact files, storing one tab character
-versus, say, four space characters.
-
-Line Breaks
-===========
-
-Files must be saved with Unix line breaks. This is more of an issue for
-developers who work in Windows, but in any case ensure that your text
-editor is setup to save files with Unix line breaks.
-
-Code Indenting
-==============
-
-Use Allman style indenting. With the exception of Class declarations,
-braces are always placed on a line by themselves, and indented at the
-same level as the control statement that "owns" them.
-
-**INCORRECT**::
-
- function foo($bar) {
- // ...
- }
-
- foreach ($arr as $key => $val) {
- // ...
- }
-
- if ($foo == $bar) {
- // ...
- } else {
- // ...
- }
-
- for ($i = 0; $i < 10; $i++)
- {
- for ($j = 0; $j < 10; $j++)
- {
- // ...
- }
- }
-
- try {
- // ...
- }
- catch() {
- // ...
- }
-
-**CORRECT**::
-
- function foo($bar)
- {
- // ...
- }
-
- foreach ($arr as $key => $val)
- {
- // ...
- }
-
- if ($foo == $bar)
- {
- // ...
- }
- else
- {
- // ...
- }
-
- for ($i = 0; $i < 10; $i++)
- {
- for ($j = 0; $j < 10; $j++)
- {
- // ...
- }
- }
-
- try
- {
- // ...
- }
- catch()
- {
- // ...
- }
-
-Bracket and Parenthetic Spacing
-===============================
-
-In general, parenthesis and brackets should not use any additional
-spaces. The exception is that a space should always follow PHP control
-structures that accept arguments with parenthesis (declare, do-while,
-elseif, for, foreach, if, switch, while), to help distinguish them from
-functions and increase readability.
-
-**INCORRECT**::
-
- $arr[ $foo ] = 'foo';
-
-**CORRECT**::
-
- $arr[$foo] = 'foo'; // no spaces around array keys
-
-**INCORRECT**::
-
- function foo ( $bar )
- {
-
- }
-
-**CORRECT**::
-
- function foo($bar) // no spaces around parenthesis in function declarations
- {
-
- }
-
-**INCORRECT**::
-
- foreach( $query->result() as $row )
-
-**CORRECT**::
-
- foreach ($query->result() as $row) // single space following PHP control structures, but not in interior parenthesis
-
-Localized Text
-==============
-
-CodeIgniter libraries should take advantage of corresponding language files
-whenever possible.
-
-**INCORRECT**::
-
- return "Invalid Selection";
-
-**CORRECT**::
-
- return $this->lang->line('invalid_selection');
-
-Private Methods and Variables
-=============================
-
-Methods and variables that are only accessed internally,
-such as utility and helper functions that your public methods use for
-code abstraction, should be prefixed with an underscore.
-
-::
-
- public function convert_text()
- private function _convert_text()
-
-PHP Errors
-==========
-
-Code must run error free and not rely on warnings and notices to be
-hidden to meet this requirement. For instance, never access a variable
-that you did not set yourself (such as ``$_POST`` array keys) without first
-checking to see that it ``isset()``.
-
-Make sure that your dev environment has error reporting enabled
-for ALL users, and that display_errors is enabled in the PHP
-environment. You can check this setting with::
-
- if (ini_get('display_errors') == 1)
- {
- exit "Enabled";
- }
-
-On some servers where *display_errors* is disabled, and you do not have
-the ability to change this in the php.ini, you can often enable it with::
-
- ini_set('display_errors', 1);
-
-.. note:: Setting the `display_errors
- <http://php.net/manual/en/errorfunc.configuration.php#ini.display-errors>`_
- setting with ``ini_set()`` at runtime is not identical to having
- it enabled in the PHP environment. Namely, it will not have any
- effect if the script has fatal errors.
-
-Short Open Tags
-===============
-
-Always use full PHP opening tags, in case a server does not have
-*short_open_tag* enabled.
-
-**INCORRECT**::
-
- <? echo $foo; ?>
-
- <?=$foo?>
-
-**CORRECT**::
-
- <?php echo $foo; ?>
-
-.. note:: PHP 5.4 will always have the **<?=** tag available.
-
-One Statement Per Line
-======================
-
-Never combine statements on one line.
-
-**INCORRECT**::
-
- $foo = 'this'; $bar = 'that'; $bat = str_replace($foo, $bar, $bag);
-
-**CORRECT**::
-
- $foo = 'this';
- $bar = 'that';
- $bat = str_replace($foo, $bar, $bag);
-
-Strings
-=======
-
-Always use single quoted strings unless you need variables parsed, and
-in cases where you do need variables parsed, use braces to prevent
-greedy token parsing. You may also use double-quoted strings if the
-string contains single quotes, so you do not have to use escape
-characters.
-
-**INCORRECT**::
-
- "My String" // no variable parsing, so no use for double quotes
- "My string $foo" // needs braces
- 'SELECT foo FROM bar WHERE baz = \'bag\'' // ugly
-
-**CORRECT**::
-
- 'My String'
- "My string {$foo}"
- "SELECT foo FROM bar WHERE baz = 'bag'"
-
-SQL Queries
-===========
-
-SQL keywords are always capitalized: SELECT, INSERT, UPDATE, WHERE,
-AS, JOIN, ON, IN, etc.
-
-Break up long queries into multiple lines for legibility, preferably
-breaking for each clause.
-
-**INCORRECT**::
-
- // keywords are lowercase and query is too long for
- // a single line (... indicates continuation of line)
- $query = $this->db->query("select foo, bar, baz, foofoo, foobar as raboof, foobaz from exp_pre_email_addresses
- ...where foo != 'oof' and baz != 'zab' order by foobaz limit 5, 100");
-
-**CORRECT**::
-
- $query = $this->db->query("SELECT foo, bar, baz, foofoo, foobar AS raboof, foobaz
- FROM exp_pre_email_addresses
- WHERE foo != 'oof'
- AND baz != 'zab'
- ORDER BY foobaz
- LIMIT 5, 100");
-
-Default Function Arguments
-==========================
-
-Whenever appropriate, provide function argument defaults, which helps
-prevent PHP errors with mistaken calls and provides common fallback
-values which can save a few lines of code. Example::
-
- function foo($bar = '', $baz = FALSE) \ No newline at end of file
diff --git a/user_guide_src/source/general/urls.rst b/user_guide_src/source/general/urls.rst
deleted file mode 100644
index b8a1b9f5b..000000000
--- a/user_guide_src/source/general/urls.rst
+++ /dev/null
@@ -1,100 +0,0 @@
-################
-CodeIgniter URLs
-################
-
-By default, URLs in CodeIgniter are designed to be search-engine and
-human friendly. Rather than using the standard "query string" approach
-to URLs that is synonymous with dynamic systems, CodeIgniter uses a
-**segment-based** approach::
-
- example.com/news/article/my_article
-
-.. note:: Query string URLs can be optionally enabled, as described
- below.
-
-URI Segments
-============
-
-The segments in the URL, in following with the Model-View-Controller
-approach, usually represent::
-
- example.com/class/function/ID
-
-#. The first segment represents the controller **class** that should be
- invoked.
-#. The second segment represents the class **function**, or method, that
- should be called.
-#. The third, and any additional segments, represent the ID and any
- variables that will be passed to the controller.
-
-The :doc:`URI Library <../libraries/uri>` and the :doc:`URL Helper
-<../helpers/url_helper>` contain functions that make it easy to work
-with your URI data. In addition, your URLs can be remapped using the
-:doc:`URI Routing <routing>` feature for more flexibility.
-
-Removing the index.php file
-===========================
-
-By default, the **index.php** file will be included in your URLs::
-
- example.com/index.php/news/article/my_article
-
-If your Apache server has *mod_rewrite* enabled, you can easily remove this
-file by using a .htaccess file with some simple rules. Here is an example
-of such a file, using the "negative" method in which everything is redirected
-except the specified items:
-
-.. code-block:: apache
-
- RewriteEngine On
- RewriteCond %{REQUEST_FILENAME} !-f
- RewriteCond %{REQUEST_FILENAME} !-d
- RewriteRule ^(.*)$ index.php/$1 [L]
-
-In the above example, any HTTP request other than those for existing
-directories and existing files is treated as a request for your index.php file.
-
-.. note:: These specific rules might not work for all server configurations.
-
-.. note:: Make sure to also exclude from the above rule any assets that you
- might need to be accessible from the outside world.
-
-Adding a URL Suffix
-===================
-
-In your **config/config.php** file you can specify a suffix that will be
-added to all URLs generated by CodeIgniter. For example, if a URL is
-this::
-
- example.com/index.php/products/view/shoes
-
-You can optionally add a suffix, like **.html,** making the page appear to
-be of a certain type::
-
- example.com/index.php/products/view/shoes.html
-
-Enabling Query Strings
-======================
-
-In some cases you might prefer to use query strings URLs::
-
- index.php?c=products&m=view&id=345
-
-CodeIgniter optionally supports this capability, which can be enabled in
-your **application/config.php** file. If you open your config file you'll
-see these items::
-
- $config['enable_query_strings'] = FALSE;
- $config['controller_trigger'] = 'c';
- $config['function_trigger'] = 'm';
-
-If you change "enable_query_strings" to TRUE this feature will become
-active. Your controllers and functions will then be accessible using the
-"trigger" words you've set to invoke your controllers and methods::
-
- index.php?c=controller&m=method
-
-.. note:: If you are using query strings you will have to build your own
- URLs, rather than utilizing the URL helpers (and other helpers
- that generate URLs, like some of the form helpers) as these are
- designed to work with segment based URLs. \ No newline at end of file
diff --git a/user_guide_src/source/general/views.rst b/user_guide_src/source/general/views.rst
deleted file mode 100644
index 2fc0cb2ca..000000000
--- a/user_guide_src/source/general/views.rst
+++ /dev/null
@@ -1,213 +0,0 @@
-#####
-Views
-#####
-
-A view is simply a web page, or a page fragment, like a header, footer,
-sidebar, etc. In fact, views can flexibly be embedded within other views
-(within other views, etc., etc.) if you need this type of hierarchy.
-
-Views are never called directly, they must be loaded by a
-:doc:`controller <controllers>`. Remember that in an MVC framework, the
-Controller acts as the traffic cop, so it is responsible for fetching a
-particular view. If you have not read the
-:doc:`Controllers <controllers>` page you should do so before
-continuing.
-
-Using the example controller you created in the
-:doc:`controller <controllers>` page, let's add a view to it.
-
-Creating a View
-===============
-
-Using your text editor, create a file called blogview.php, and put this
-in it::
-
- <html>
- <head>
- <title>My Blog</title>
- </head>
- <body>
- <h1>Welcome to my Blog!</h1>
- </body>
- </html>
-
-Then save the file in your *application/views/* directory.
-
-Loading a View
-==============
-
-To load a particular view file you will use the following method::
-
- $this->load->view('name');
-
-Where name is the name of your view file.
-
-.. note:: The .php file extension does not need to be specified
- unless you use something other than .php.
-
-Now, open the controller file you made earlier called Blog.php, and
-replace the echo statement with the view loading method::
-
- <?php
- class Blog extends CI_Controller {
-
- public function index()
- {
- $this->load->view('blogview');
- }
- }
-
-If you visit your site using the URL you did earlier you should see your
-new view. The URL was similar to this::
-
- example.com/index.php/blog/
-
-Loading multiple views
-======================
-
-CodeIgniter will intelligently handle multiple calls to
-``$this->load->view()`` from within a controller. If more than one call
-happens they will be appended together. For example, you may wish to
-have a header view, a menu view, a content view, and a footer view. That
-might look something like this::
-
- <?php
-
- class Page extends CI_Controller {
-
- public function index()
- {
- $data['page_title'] = 'Your title';
- $this->load->view('header');
- $this->load->view('menu');
- $this->load->view('content', $data);
- $this->load->view('footer');
- }
-
- }
-
-In the example above, we are using "dynamically added data", which you
-will see below.
-
-Storing Views within Sub-directories
-====================================
-
-Your view files can also be stored within sub-directories if you prefer
-that type of organization. When doing so you will need to include the
-directory name loading the view. Example::
-
- $this->load->view('directory_name/file_name');
-
-Adding Dynamic Data to the View
-===============================
-
-Data is passed from the controller to the view by way of an **array** or
-an **object** in the second parameter of the view loading method. Here
-is an example using an array::
-
- $data = array(
- 'title' => 'My Title',
- 'heading' => 'My Heading',
- 'message' => 'My Message'
- );
-
- $this->load->view('blogview', $data);
-
-And here's an example using an object::
-
- $data = new Someclass();
- $this->load->view('blogview', $data);
-
-.. note:: If you use an object, the class variables will be turned
- into array elements.
-
-Let's try it with your controller file. Open it add this code::
-
- <?php
- class Blog extends CI_Controller {
-
- public function index()
- {
- $data['title'] = "My Real Title";
- $data['heading'] = "My Real Heading";
-
- $this->load->view('blogview', $data);
- }
- }
-
-Now open your view file and change the text to variables that correspond
-to the array keys in your data::
-
- <html>
- <head>
- <title><?php echo $title;?></title>
- </head>
- <body>
- <h1><?php echo $heading;?></h1>
- </body>
- </html>
-
-Then load the page at the URL you've been using and you should see the
-variables replaced.
-
-Creating Loops
-==============
-
-The data array you pass to your view files is not limited to simple
-variables. You can pass multi dimensional arrays, which can be looped to
-generate multiple rows. For example, if you pull data from your database
-it will typically be in the form of a multi-dimensional array.
-
-Here's a simple example. Add this to your controller::
-
- <?php
- class Blog extends CI_Controller {
-
- public function index()
- {
- $data['todo_list'] = array('Clean House', 'Call Mom', 'Run Errands');
-
- $data['title'] = "My Real Title";
- $data['heading'] = "My Real Heading";
-
- $this->load->view('blogview', $data);
- }
- }
-
-Now open your view file and create a loop::
-
- <html>
- <head>
- <title><?php echo $title;?></title>
- </head>
- <body>
- <h1><?php echo $heading;?></h1>
-
- <h3>My Todo List</h3>
-
- <ul>
- <?php foreach ($todo_list as $item):?>
-
- <li><?php echo $item;?></li>
-
- <?php endforeach;?>
- </ul>
-
- </body>
- </html>
-
-.. note:: You'll notice that in the example above we are using PHP's
- alternative syntax. If you are not familiar with it you can read about
- it :doc:`here <alternative_php>`.
-
-Returning views as data
-=======================
-
-There is a third **optional** parameter lets you change the behavior of
-the method so that it returns data as a string rather than sending it
-to your browser. This can be useful if you want to process the data in
-some way. If you set the parameter to TRUE (boolean) it will return
-data. The default behavior is false, which sends it to your browser.
-Remember to assign it to a variable if you want the data returned::
-
- $string = $this->load->view('myfile', '', TRUE); \ No newline at end of file
diff --git a/user_guide_src/source/general/welcome.rst b/user_guide_src/source/general/welcome.rst
deleted file mode 100644
index b6f473c2b..000000000
--- a/user_guide_src/source/general/welcome.rst
+++ /dev/null
@@ -1,32 +0,0 @@
-######################
-Welcome to CodeIgniter
-######################
-
-CodeIgniter is an Application Development Framework - a toolkit - for
-people who build web sites using PHP. Its goal is to enable you to
-develop projects much faster than you could if you were writing code
-from scratch, by providing a rich set of libraries for commonly needed
-tasks, as well as a simple interface and logical structure to access
-these libraries. CodeIgniter lets you creatively focus on your project
-by minimizing the amount of code needed for a given task.
-
-***********************
-Who is CodeIgniter For?
-***********************
-
-CodeIgniter is right for you if:
-
-- You want a framework with a small footprint.
-- You need exceptional performance.
-- You need broad compatibility with standard hosting accounts that run
- a variety of PHP versions and configurations.
-- You want a framework that requires nearly zero configuration.
-- You want a framework that does not require you to use the command
- line.
-- You want a framework that does not require you to adhere to
- restrictive coding rules.
-- You are not interested in large-scale monolithic libraries like PEAR.
-- You do not want to be forced to learn a templating language (although
- a template parser is optionally available if you desire one).
-- You eschew complexity, favoring simple solutions.
-- You need clear, thorough documentation. \ No newline at end of file