User:Margarett/What the white screen of death means: Difference between revisions From Online Manual

Jump to: navigation, search
No edit summary
No edit summary
Line 36: Line 36:
</nowiki>}}
</nowiki>}}
After you fix the underlying problem you should revert this change.
After you fix the underlying problem you should revert this change.
===PHP Errors===
To identify whether a PHP error is the cause of the white screen of death, you need to check the server error_log file.  If you see any PHP errors here, these are likely to be the cause of the problem.  In order to resolve this issue, please ask for help by posting in [http://www.simplemachines.org/community/index.php#c3|the appropriate support board] for the version of SMF your forum uses.
===Oversold Hosts===
The issue appears to be that when a page is loaded, and the script tries to load one (or more) additional files to perform sub-tasks, the system runs out of allocated memory.
The reason this is happening is because those of you encountering this issue are very likely running your site on an overselling host.  This means that the host you chose sells sites with "unlimited" stuff, such as bandwidth, or disk space.  The truth is that nobody could actually afford to sell "unlimited" everything (or anything).  Hosts need to pay for expenses and make money.  The host that you chose may ''advertise'' "unlimited", but in reality, they have severely limited your account, because they put far too many "unlimited" accounts on the same physical, or virtual, machine.  They then apply "hidden" limits, and shut your forum down, when your usage exceeds these limits.  Even though you are, therefore, meant to have been offered an "unlimited" service, you have not.
It is important to realize that there is a limit to how much memory a given script can access, and that every host has a limit like this.  A ''real'' host, however, has a reasonable amount, and will not put far too many accounts on a single server such that they overuse the available resources, and a ''real'' host will discuss how much you require if you truly need to exceed that amount.
In your case, the host has set this limit low. So low, in fact, that the [[{{Latest docs}}package manager|package manager]] cannot load ''Subs-Post.php'' to process the [[Bulletin board code|BBC tags]] in the readme file of the [[modification|mod]].  If that inclusion is bypassed, the script next chokes on the loading of ''Subs-Package.php'', which cannot be bypassed because that file contains the instructions needed to process the Mod package.


==How to Solve the Problem==
==How to Solve the Problem==
You now have three choices:
How to solve the problem depends specifically on what the problem is. The most common causes are:
 
# Ask your host to increase your available memory.
# Switch to a non-overselling host. There are a large number of those hosts listed in our [http://www.simplemachines.org/community/index.php?board=4.0/ Hosts and Hosting] boards. These hosts may be slightly more expensive than the one that you originally chose, but, as is often the case, you do get what you pay for.
# See below for options that you ''can'' try (none are guaranteed to work) if you want to stay on your current host.
 
===Increase Memory Allocation Externally===
You can try and use a ''.htaccess'' file to overwrite the memory limit, but if the server controls it (which is probably the case, since SMF tries to set it high enough using ''ini_set'' when installing a mod package), then it probably will not work, and you are stuck with the server PHP memory limit. 
 
Using  ''phpinfo()'' should also tell you if PHP runs in CGI mode or as an Apache module (''mod_php''). If it runs in CGI mode, htaccess will not work. If PHP runs as an Apache module, use htaccess to set the PHP memory limit:
 
*Creating a [[Phpinfo() - What's that, then|''phpinfo.php'' file]], will tell you your PHP memory limit.
{{code|1=<nowiki><?php phpinfo(); ?></nowiki>}}
 
*In ''.htaccess'', you can try to add the following:
{{code|1=<nowiki>php_value memory_limit 64M</nowiki>}}


*If you add this and get a 500 Internal Server Error, then your host is running PHP in CGI Mode, and you will have to increase the memory_limit in the ''php.ini'' file.
===PHP Code Errors===
{{code|1=<nowiki>memory_limit = 64M</nowiki>}}
You should only see these errors when you are editing your forum's code or when installing/uninstalling MODs. Your log should tell you something like (these are just examples!):
If you are not allowed to have a custom ''php.ini'' file, you will have to ask your host to do this.
{{code|1=<nowiki>Parse error: syntax error, unexpected $end in /home/user/public_html/forum/index.php on line 175</nowiki>}}
{{code|1=<nowiki>Fatal error: Call to undefined function getInitialInformation() in /home/user/public_html/forum/index.php on line 175</nowiki>}}
''(error, file name, file path and and line number might of course vary)''


===Increase Memory Allocation in the File(s)===
===PHP Memory Errors===
You can try to increase the memory allocation in the files and functions directly.
This error occurs when the code execution tries to allocate more memory than the system is configured to grant. Your log should tell you something like:
{{code|1=<nowiki>Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 826064718 bytes) in /home/user/public_html/forum/index.php on line 175</nowiki>}}
''(memory quantities, file name, file path and and line number might of course vary)''


*In ''/Sources/Class-Package.php'', find:
{{code|1=<nowiki>
// If we're using this try to get some more memory.
@ini_set('memory_limit', '32M');
</nowiki>}}
*Replace with
{{code|1=<nowiki>
// If we're using this try to get some more memory.
@ini_set('memory_limit', '128M');
</nowiki>}}


*in ''/Sources/Admin.php'', find
{{code|1=<nowiki>
// Get one of the admin information files from Simple Machines.
function DisplayAdminFile()
{
global $context, $modSettings, $smcFunc;


@ini_set('memory_limit', '32M');
==Ask us for Support==
</nowiki>}}
Please ask us for support by posting in [http://www.simplemachines.org/community/index.php#c3|the appropriate support board] for the version of SMF your forum uses. Please make sure you provide us a [http://wiki.simplemachines.org/smf/What_is_a_phpinfo%28%29_file|phpinfo] with your request.
*Replace with
{{code|1=<nowiki>
// Get one of the admin information files from Simple Machines.
function DisplayAdminFile()
{
global $context, $modSettings, $smcFunc;


@ini_set('memory_limit', '128M');
</nowiki>}}


[[Category:FAQ]]
[[Category:FAQ]]

Revision as of 13:44, 3 June 2016

What is the White Screen of Death

A white screen when opening a page in SMF (or in any other PHP-based application) means that an irrecoverable error occurred, which caused the execution of the script to be halted before any content is outputted to your browser.

There are mainly two reasons for this to happen. The first is that there is a PHP error in the code of your forum (which you might get if you are performing changes in the code, installing a MOD, etc). The second is that PHP cannot use the necessary memory for the task being requested.

Why do I see a white page and not the error itself?

In short: your PHP configuration prevents that to happen. In a live and fully functional web site your guests aren't expected to see errors (if they occur) which might reveal file paths or other sensible information, which a meaningful error information should actually display. For this reason, some hosts specifically configure PHP to not show errors on screen.

How to Get More Information

There are several ways to get more information. We present you some of them but please be aware that they might not exist in your specific server configuration.

Contact your Host

Assuming you don't run your own server, contacting your host is the easiest way to get information. Your host should have access to all your logs so they should be able to give you detailed information. This is, however, a slow process because you need to wait for their reply.

Check your Logs

When a PHP error occurs, it is logged in a file in your server's hard drive. Depending on your configuration, you should have that file also in your home directory. Use your FTP client and search for a file which is usually called "error_log", "error.log" (or variations of this). If you don't find such file, that's because your server is not configured to create it. Contact your host and ask them to enable this option as it is a very helpful debug tool.

Try to Output More Information

It is possible to tell PHP to output the error information directly to your browser. To do so, edit SMF's index.php (make sure you create a backup) with your favourite text editor and find:


// Get everything started up...
define('SMF', 1);

Replace with:


error_reporting(E_ALL);
ini_set('display_errors', 1);

// Get everything started up...
define('SMF', 1);

After you fix the underlying problem you should revert this change.

How to Solve the Problem

How to solve the problem depends specifically on what the problem is. The most common causes are:

PHP Code Errors

You should only see these errors when you are editing your forum's code or when installing/uninstalling MODs. Your log should tell you something like (these are just examples!):

Parse error: syntax error, unexpected $end in /home/user/public_html/forum/index.php on line 175
Fatal error: Call to undefined function getInitialInformation() in /home/user/public_html/forum/index.php on line 175

(error, file name, file path and and line number might of course vary)

PHP Memory Errors

This error occurs when the code execution tries to allocate more memory than the system is configured to grant. Your log should tell you something like:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 826064718 bytes) in /home/user/public_html/forum/index.php on line 175

(memory quantities, file name, file path and and line number might of course vary)


Ask us for Support

Please ask us for support by posting in appropriate support board for the version of SMF your forum uses. Please make sure you provide us a [1] with your request.



Advertisement: