How to Override PHP Configuration Options

Share this article

configure PHP
Configuring PHP is easy. You can change almost any aspect of the interpreter within the php.ini configuration file, e.g. modify error handling, increase memory usage, etc. Unfortunately, problems can occur when you move your application to a live hosting environment or are distributing the code to customers. ISPs usually lock down the php.ini configuration file — especially on shared hosting. This could cause your application to fail. Fortunately, it’s not necessary to upgrade to an expensive dedicated server. The two methods below allow you to override PHP settings within your application.

Apache Module Directives

The majority of ISPs provide Apache web server hosting on Linux or Unix platforms. Hopefully, they’ve also granted “AllowOverride Options” or “AllowOverride All” privileges in Apache’s httpd.conf configuration. This allows you to create an .htaccess file within your application’s root folder overrides the default Apache and PHP configuration. Two PHP directives are permitted within .htaccess:
  • php_flag <boolean-flag-name> on|off
  • php_value <flag-name> <flag-value>
php_flag should be used for on/off values, whereas php_value can be used for any others. For example, the following .htaccess file will disable globals, set the maximum file upload size to 20MB, and allow PHP scripts to run for 10 minutes (600 seconds):

php_flag register_globals off
php_value upload_max_filesize 20M
php_value max_execution_time 600
However, the solution will not work in all Apache installations or other web servers such as IIS.

PHP Runtime Configuration

A more portable, server-agnostic solution is PHP’s ini_set function. — it allows you to change a setting within your application at runtime. The function accepts two arguments: ini_set(flag-name, flag-value), e.g.

<?php
ini_set('register_globals', 0);
ini_set('upload_max_filesize', '20M');
ini_set('max_execution_time', 600);
?>
Booleans, numbers and strings can be used interchangeably — PHP will attempt to cast the value to an appropriate type. Several related functions are available: ini_get(flag-name) Returns the configuration value. I’d recommend checking your configuration change and taking appropriate action. Don’t assume ini_get() will always work. ini_get_all([extension]) Returns all configuration values as an associative array. The optional extension parameter returns options specific to that extension, e.g. ‘allow_url_fopen’. get_cfg_var(flag-name) Returns the original configuration value from php.ini (not any overrides set in .htaccess or by ini_set). ini_restore(flag-name)
Returns a configuration option to its original value. Coming soon: How to Handle Unloaded PHP Extensions. Has PHP configuration ever caused you problems when porting an application to another server?

Frequently Asked Questions on Overriding PHP Configuration Settings

What is the purpose of overriding PHP configuration settings?

Overriding PHP configuration settings is a crucial aspect of managing a PHP environment. It allows developers to modify the default settings of PHP to suit their specific needs. For instance, you might need to increase the maximum file upload size, adjust the error reporting level, or change the default time zone. Overriding PHP configuration settings can be done in various ways, including using a local php.ini file, .htaccess file, or even directly within your PHP scripts.

How can I override PHP settings using a local php.ini file?

To override PHP settings using a local php.ini file, you first need to create a php.ini file in the directory where your PHP script is located. Then, you can add the settings you want to override in this file. For example, if you want to increase the maximum file upload size, you can add the following line to your php.ini file: upload_max_filesize = 10M. After saving the changes, the new settings will take effect immediately.

Can I override PHP settings using a .htaccess file?

Yes, you can override PHP settings using a .htaccess file. This is particularly useful when you don’t have access to the main php.ini file. To do this, you need to create a .htaccess file in your web root directory and add the PHP settings you want to override. For example, to change the default time zone, you can add the following line to your .htaccess file: php_value date.timezone "America/New_York".

How can I override PHP settings directly within my PHP scripts?

You can override PHP settings directly within your PHP scripts using the ini_set() function. This function allows you to set the value of a given configuration option. For example, to turn off error reporting, you can add the following line to your PHP script: ini_set('display_errors', '0');.

Why are my changes to the php.ini file not taking effect?

If your changes to the php.ini file are not taking effect, it could be due to several reasons. First, ensure that you have edited the correct php.ini file. PHP installations can have multiple php.ini files, and you need to modify the one that’s being used by your PHP environment. Second, make sure that you have restarted your web server after making the changes. Changes to the php.ini file require a server restart to take effect.

Can I override all PHP settings?

No, not all PHP settings can be overridden. Some settings, such as safe_mode and open_basedir, can only be set in the main php.ini file and cannot be overridden in a local php.ini file, .htaccess file, or within a PHP script.

How can I find out which php.ini file is being used by my PHP environment?

You can find out which php.ini file is being used by your PHP environment by creating a PHP file with the following line of code: phpinfo();. When you access this file through a web browser, it will display a lot of information about your PHP environment, including the path to the php.ini file.

How can I increase the maximum execution time for PHP scripts?

You can increase the maximum execution time for PHP scripts by adding the following line to your php.ini file: max_execution_time = 300. This will set the maximum execution time to 300 seconds. Remember to restart your web server after making the changes.

How can I turn on error reporting in PHP?

You can turn on error reporting in PHP by adding the following lines to your php.ini file: display_errors = On and error_reporting = E_ALL. These settings will enable the display of all PHP errors. Don’t forget to restart your web server after making the changes.

Can I override PHP settings on a shared hosting environment?

Whether you can override PHP settings on a shared hosting environment depends on the hosting provider. Some providers allow you to override certain PHP settings using a local php.ini file or .htaccess file, while others may not allow any changes to the PHP configuration. It’s best to check with your hosting provider for specific details.

Craig BucklerCraig Buckler
View Author

Craig is a freelance UK web consultant who built his first page for IE2.0 in 1995. Since that time he's been advocating standards, accessibility, and best-practice HTML5 techniques. He's created enterprise specifications, websites and online applications for companies and organisations including the UK Parliament, the European Parliament, the Department of Energy & Climate Change, Microsoft, and more. He's written more than 1,000 articles for SitePoint and you can find him @craigbuckler.

apacheconfigurationPHP
Share this article
Read Next
Get the freshest news and resources for developers, designers and digital creators in your inbox each week