aleksand44
@aleksand44

Как пофиксить белый экран на самописной cms?

Всем добрый день.
Переношу сейчас один сайт на локальный сервер себе. Скачал директорию,базу данных.
Нашел файл где прописывается путь к базе данных. Прописал.Полазил в базе данных, поискал поле аналогичное с базами данных вордпресс, где прописывается имя домена. Не нашел ничего подобного.
Вроде бы все, но сайт выдает 500 ошибку. Удалил .htaccess. Теперь выдает лишь белый экран. Что еще нужно сделать или как узнать что я сделал не так?
  • Вопрос задан
  • 384 просмотра
Пригласить эксперта
Ответы на вопрос 2
e_kupchak
@e_kupchak
Веб-разработчик
Включение вывода всех ошибок и предупреждений в файле php.ini
error_reporting = E_ALL
display_errors = On
display_startup_errors = On

Включение вывода всех ошибок и предупреждений в коде PHP-скриптов
Включить вывод уведомлений и предупреждений можно, добавив в начало нужного .php файла следующие строки:
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);

Включение вывода всех ошибок и предупреждений в файле .htaccess
php_value display_errors 1
php_value display_startup_errors 1
php_value error_reporting E_ALL
Ответ написан
Комментировать
glebovgin
@glebovgin
Full Stack Web Developer
Есть в PHP крайне полезная функция register_shutdown_function(), которая поможет разобраться с ошибками. Но не забывайте, что сообщения об ошибках должны видеть только вы, а не все подряд при заходе на сайт. Вот пример:

<?
register_shutdown_function( "fatal_handler" );

function fatal_handler() {
	$errfile = "unknown file";
	$errstr  = "shutdown";
	$errno   = E_CORE_ERROR;
	$errline = 0;
	
	$error = error_get_last();
	
	if( $error !== NULL) {
		$errno   = $error["type"];
		$errfile = $error["file"];
		$errline = $error["line"];
		$errstr  = $error["message"];
		
		echo format_error( $errno, $errstr, $errfile, $errline);
	}
}

function format_error( $errno, $errstr, $errfile, $errline ) {
	$trace = print_r( debug_backtrace( false ), true );
	
	$content = '<table style="background-color: #FFFFFF;margin: 0 auto;">
	<thead><th style="width: 100px;">Item</th><th>Description</th></thead>
	<tbody>
	<tr>
	<th>Error</th>
	<td><pre>'.$errstr.'</pre></td>
	</tr>
	<tr>
	<th>Errno</th>
	<td><pre>'.$errno.'</pre></td>
	</tr>
	<tr>
	<th>File</th>
	<td>'.$errfile.'</td>
	</tr>
	<tr>
	<th>Line</th>
	<td>'.$errline.'</td>
	</tr>
	<tr>
	<th>Trace</th>
	<td><pre>'.$trace.'</pre></td>
	</tr>
	</tbody>
	</table>';
	
	return $content;
}


Это самый простой вариант использования. Добавьте этот код в общий для всей CMS файл и в случае ошибки увидите подробный отчет о проблеме вместо пустого экрана. И не стесняйтесь допилить код под собственные нужды.

п.с. если хотите это обернуть в класс, то вот каркас

class PHPFatalError 
{
	public function set_handler() {
		register_shutdown_function(array($this, 'handle_shutdown'));
	}
	
	public function handle_shutdown() {
		if (($error = error_get_last())) {
			// echo сообщения о деталях ошибки
		}
	}
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы