PHP is often used as part of a LAMP installation to accommodate a web application such as a CMS.
PHP should be installed out of the box on a remote web hosting account, but if you are setting up your own server you will have to install it yourself. First, install and test Apache and MySQL. Then use your distribution’s package management tool to install PHP. Distributions have different names for the appropriate packages; examples include:
- Mandriva 2010.2: task-lamp-php
- Ubuntu 12.10: php5
CHECKING YOUR INSTALLATION
Whether PHP was installed by your web host or you did it yourself, confirm that it is working with a phpinfo.php file. If PHP is working you will see a report of its current configuration. The first thing you should check is the value of “Server API”. If the value is “CGI”, that means the server is running PHP as a CGI module. If the value is “Apache”, that means ther server is running PHP as an Apache module. Both are valid methods to run PHP but how we configure it requires us to know which method is being used.
You will usually have to configure your PHP installation. Many PHP applications recommend or require a particular configuration. If your PHP installation will be used in an insecure environment such as a world-accessible web server, security and common sense demand that you not use the insecure default configuration. And if you are setting up a local server for testing purposes, you will want to duplicate whatever configuration the production server will require.
Use phpinfo.php as described above to view the current configuration, and then make changes as required. You can change PHP’s configuration in either php.ini or in .htaccess depending upon how your server runs PHP and whether or not you have complete control of your server. My own preference is to use php.ini for PHP configuration and keep .htaccess free of non-Apache stuff. Whatever your preference, be consistent: you don’t want the headache of a system with PHP configuration split across multiple files.
Using php.ini is an option if you have complete control of your server, or if your remote server runs PHP as a CGI module. Changes to the system php.ini (often found at /etc/php.ini) are effective system wide. This is the only file on local installations that I have had success in editing. Changes to the account php.ini (often found at apache_docroot/cgi-bin/php.ini) are effective account wide. This is the file I usually edit on a remote installation, although not all hosting companies implement this. Changes to a php.ini elsewhere in the Apache docroot are said to affect only that directory and are not recursive, although I have yet to find a hosting company that implements this.
As root, back up the original php.ini file with a different name such as php-original.ini. Open php.ini for editing, change values as needed, and save. Here’s a simple example php.ini:
[PHP] ; Example php.ini for Joomla on a shared hosting account disable_functions = show_source, system, shell_exec, passthru, exec, popen, proc_open display_errors = Off output_buffering = Off ; Joomla Extension Manager requires this allow_url_fopen = On ; Set basedir to (1) Apache docroot and (2) backup directory outside docroot open_basedir = /home/USER/public_html:/home/USER/backup ; Define temporary directory for uploads upload_tmp_dir = /home/USER/public_html/tmp ; Per-extension configuration needed per documentation or experience ; CiviCRM memory_limit = 64M
Regarding the open_basedir variable, my web host’s environment uses a colon to separate values. Your host’s environment may differ.
Once you’ve made your changes to php.ini, restart apache and reload phpinfo.php in your browser to confirm that the new values have taken.
Using .htaccess is an option if you have complete control of your server, or if your remote server runs PHP as an Apache module. Changes to .htaccess (usually found in the Apache docroot) are recursive to subdirectories.
As root, back up the original .htaccess file with a different name such as .htaccess-original. Open .htaccess for editing and add the PHP values in the form:
# Set PHP variables php_flag display_errors Off php_flag register_globals Off
Consult your web host for exact syntax. For example, Pair Networks uses “php_flag” as shown, while InMotion Hosting uses “php_value” instead.