Error: database connection failed

If you get errors like "database connection failed" or "could not connect to the database you specified", here are some possible reasons and some possible solutions.

Your database server isn't installed or running. To check this for MySQL try typing the following command line

$telnet database_host_name 3306

You should get a cryptic response which includes the version number of the MySQL server.

If you are attempting to run two instances of Moodle on different ports, use the ip address of the host (not localhost) in the $CFG->dbhost setting, e.g. $CFG->dbhost = 127.0.0.1:3308.

You don't have the PHP mysql or postgresql extensions installed (please refer to FAQ re. whether PHP is installed).

You haven't created a Moodle database and assigned a user with the correct privileges to access it.

The Moodle database settings are incorrect. The database name, database user or database user password in your Moodle configuration file config.php are incorrect. Use phpMyAdmin to set up and check your MySQL installation.

Check that there are no apostrophes or non-alphabetic letters in your MySQL username or password.

You are using MySQL version 4.1 or higher but the PHP MySQL extension is pre-4.1 (check in your phpinfo output). In this case the default password hashing algorithm is incompatible with that available in the PHP mysql extension versions 4.x.x. Use these MySQL commands to change the passwords to the old format:

Also, consider upgrading your PHP MySQL extension. See this MySQL document for further information on how to deal with this problem.

You are using Fedora core 3 or some other Linux system with SELinux installed and enabled. See the following URL for information on how to disable SELinux: http://fedora.redhat.com/projects/selinux/ If you don't want to disable SELinux, you have to allow httpd process to create network connections:

setsebool httpd_can_network_connect true

Mac OSX users -- if you are running MySQL on a Mac OSX, try changing $CFG->dbhost from 'localhost' to '127.0.0.1'

See also: MySQL page on common errors which lists several possible scenarios for connection failure, with advice on how to fix the problems.

I can't log in with message "Please verify that the current setting of session.save_path is correct"

This error occurs when PHP is having problems saving its session files. You may also see these other error messages displayed on the screen or in your log files:

Parse error: parse error, unexpected T_VARIABLE in /path/to/moodle/config.php on line 94
Fatal error: Call to undefined function: get_string() in /path/to/moodle/mod/resource/lib.php
on line 11

then you have probably left out a semi-colon or closing quote from a line in config.php (previous to line 94).

Another possibility is that you edited config.php in a program like Word and saved it as a HTML web page, instead of using a plain text editor like Notepad.

Another thing to check, particularly if you are using additional plugins, is whether any of the php scripts use short open tags (<? ?>) instead of proper ones (<?php ?>). Short tags are bad for various reasons, so first contact the author of that extension to tell them about the problem. Then either replace short tags with conventional ones, or set this line in php.ini:

short_open_tag = On

You should never find short tags in core moodle code. If you do, please file a bug in the tracker.

When I go to the admin page, I get told to make dirroot blank!

then you have encountered a small bug that occurs on some servers. The problem is with the error-checking mechanism, not with your actual path. To fix it, find this line (line 66) in the file admin/index.php:

if ($dirroot != $CFG->dirroot) {

and change it to this:

if (!empty($dirroot) and $dirroot != $CFG->dirroot) {

Why do I keep getting error messages about "headers already sent"?

If you see errors like this:

Warning: Cannot add header information - headers already sent by
(output started at /webs/moodle/config.php:87) in /webs/moodle/lib/moodlelib.php
on line 1322

Warning: Cannot add header information - headers already sent by
(output started at /webs/moodle/config.php:87) in /webs/moodle/lib/moodlelib.php
on line 1323

Warning: Cannot add header information - headers already sent by
(output started at /webs/moodle/config.php:87) in /webs/moodle/login/index.php
on line 54

you have blank lines or spaces after the final

?>

in your config.php file. Sometimes text editors add these - for example Notepad on Windows - so you may have to try a different text editor to remove these spaces or blank lines completely.

Error: "500:Internal Server Error"

There are several possible causes for this error. It is a good idea to start by checking your web server error log which should have a more comprehensive explanation. However, here are some known possibilities....

1. Syntax error: There is a syntax error in your .htaccess or httpd.conf files. The way in which directives are written differs depending on which file you are using. You can test for configuration errors in your Apache files using the command:

#apachectl configtest

2. PHPsuexec: Your server does not support .htaccess files, especially if it is running PHPsuexec, which is an Apache module used for increasing the security of a site on a hosted system. In this situation:

- you may also see a 403: Forbidden error.

- the webserver executes under your own username and all files have a maximum permissions level of 755. Check that this is set for your Moodle directory in your control panel or (if you have access to the shell) use this command:

#chmod -R 755 moodle

- use a PHP.INI file instead of a .htaccess in the directory where the Moodle PHP script is being executed. For example: if you are receiving a memory exhausted error when your server is executing the file moodle/admin/cron.php, use a PHP.INI file to change your memory_limit and copy it to the moodle/admin directory. Remember that for PHP4, PHP.INI files are per-directory, so you'll need to copy it to each sub-directory. If you are using PHP5 or higher on a shared host, check with your host on whether they support custom PHP.INI files, and how to create them. The syntax used in a PHP.INI file is different from a .htaccess file and you need to take out php_value/php_flag at the beginning of the line and use an equals sign to assign a value, e.g.

This error means that the php memory_limit value is not enough for the php script. The memory_limit value is the "allowed memory size" - 64M in the example above (67108864 bytes / 1024 = 65536 KB. 65536 KB / 1024 = 64 MB). You will need to increase the php memory_limit value until this message is not shown anymore. There are two methods of doing this.

On a hosted installation you should ask your host's support how to do this. However, many allow .htaccess files. If yours does, add the following line to your .htaccess file (or create one in the moodle directory if it does not already exist):

php_value memory_limit <value>M
Example: php_value memory_limit 40M

If you have your own server with shell access, edit your php.ini file (make sure it's the correct one by checking in your phpinfo output) as follows:

memory_limit <value>M
Example: memory_limit 40M

For later versions of Moodle you could be looking at figures in the region of 512M for all functions to work properly (backup and restore are particularly memory hungry). It is sensible to monitor the memory usage on your server if using these large settings.

Remember that you need to restart your web server to make changes to php.ini effective. An alternative is to disable the memory_limit by using the command memory_limit 0.

If you can access your server files, go to the 'moodledata' folder, go to the 'cache' folder inside and erase all the contents there (usually only two files). Moodle will delete the frozen session with the redirect loop and Moodle will work again.

Your computer is taking too much time to execute the installation scripts.

Press F5 (refresh) until it finishes the installation process.

How can I fix just one bug, without upgrading my whole site?

Suppose:

You are running an older Moodle version.

You are experiencing a particular bug.

You have searched in the tracker, and found that your problem is MDL-abc, and that it has been fixed in the latest version.

For some reason, you cannot upgrade your whole site, even though the latest version probably has security fixes.

Then, how can you get the fix for just this one bug, without upgrading your whole site? Well, if you are prepared to manually patch the code, you can probably get this information from the tracker. Please see this guide.