Отладка белого экрана смерти Друпала? - PullRequest
12 голосов
/ 17 мая 2011

У меня есть установка Drupal, которая ранее отлично работала на моем локальном хосте. Однако теперь, после форматирования моего компьютера, он просто показывает пустой экран (полностью белый).

Итак, мой вопрос: как я могу увидеть, где что-то идет не так, если я даже не могу войти на сервер?

Единственные ошибки, которые я могу найти (взяты из журналов ошибок Apache):

[Tue May 17 05:05:04 2011] [notice] Parent: child process exited with status 255 -- Restarting.
[Tue May 17 05:05:04 2011] [notice] Digest: generating secret for digest authentication ...
[Tue May 17 05:05:04 2011] [notice] Digest: done
[Tue May 17 05:05:07 2011] [notice] Apache/2.2.11 (Win32) DAV/2 mod_ssl/2.2.11 OpenSSL/0.9.8i PHP/5.2.9 configured -- resuming normal operations
[Tue May 17 05:05:07 2011] [notice] Server built: Dec 10 2008 00:10:06
[Tue May 17 05:05:07 2011] [notice] Parent: Created child process 6992

В Watchdog нет ошибок ...

Я использую Xamp 1.7.1 (PHP 5.2) и Drupal 6.

Мне просто нужно упомянуть, что, как только я пытаюсь загрузить сайт на свою локальную машину, apache также падает. Я добавил это:

error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

И это все еще просто показывает экран смерти? Где я могу увидеть ошибки?

Я также нашел это в apache access.log:

127.0.0.1 - - [17/May/2011:05:22:14 +0200] "GET /greekmerchant/src/ HTTP/1.1" 200 3
127.0.0.1 - - [17/May/2011:05:25:45 +0200] "GET /greekmerchant/src/update.php HTTP/1.1" 302 -
127.0.0.1 - - [17/May/2011:05:25:46 +0200] "GET /greekmerchant/src/update.php?op=info HTTP/1.1" 200 -

... после попытки доступа к update.php. Это также просто идет на белый экран.

У меня есть это в моем файле конфигурации sql:

[mysqld]
port= 3306
socket= "C:/xampp/mysql/mysql.sock"
basedir="C:/xampp/mysql" 
tmpdir="C:/xampp/tmp" 
datadir="C:/xampp/mysql/data"
skip-locking
key_buffer = 16M
max_allowed_packet = 128M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
log_error="mysql_error.log"

И ...

[mysqldump]
quick
max_allowed_packet = 128M

Кроме того, моя память PHP установлена ​​на 1024 МБ.

Кто-нибудь понял, почему это просто умирает? Это действительно проблема с памятью? Что еще я могу сделать, чтобы мне показывали ошибки? Я все еще ничего не вижу даже после включения регистрации ошибок.

Обновление:

Веб-сайт запускается на моем локальном компьютере, если я удаляю папку с файлами. Поэтому, по какой-то причине, когда ему нужно получить доступ к файлам в папке с файлами, ему не хватает памяти. Зачем? Или, еще лучше, что может быть причиной такого чрезмерного использования памяти?

Ответы [ 9 ]

13 голосов
/ 17 мая 2011

В руководствах Drupal есть целая страница, посвященная отладке " Белый Экран Смерти ". В двух словах: включите отчеты об ошибках, добавив в начало файла index.php следующее:

error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

... и проверьте логи, которые вы уже начали делать. Эти два шага, как правило, определяют проблему в большинстве случаев. Если это не указывает на решение, продолжайте читать страницу справочника, чтобы получить больше советов.

Если бы мне пришлось делать какие-то предположения, я бы сказал, что в вашем случае, вероятно, ошибка нехватки памяти.

4 голосов
/ 01 марта 2014

Я знаю, что может быть поздно, но это помогло мне. В большинстве случаев модуль вызывает WSOD, я не мог просто отключить модули для проверки того, что это было, так как я мог потерять данные в процессе. Что я сделал, чтобы отредактировать эту функцию в module.inc

function module_invoke_all($hook) {
  $args = func_get_args();
  // Remove $hook from the arguments.
  unset($args[0]);
  $return = array();
  foreach (module_implements($hook) as $module) {

        print "Starting loading $module <br />";

        $function = $module . '_' . $hook;
        if (function_exists($function)) {
          $result = call_user_func_array($function, $args);
          if (isset($result) && is_array($result)) {
            $return = array_merge_recursive($return, $result);
          }
          elseif (isset($result)) {
            $return[] = $result;
          }
        }

        print "Finished loading $module <br />";

  }

  return $return;
}

И я добавил эти 2 оператора печати в приведенном выше коде, затем обновил страницу, модуль, который не достиг оператора «Завершить загрузку $ module», - тот, у которого проблема ... он был разработан в моем случае .

Найдя модуль, вы можете зайти в системную таблицу и найти этот модуль, установить его статус = 0 и начальную загрузку = 0 или выполнить запрос:

UPDATE system SET status = 0, bootstrap = 0 WHERE name = 'module_name' LIMIT 1

Ссылка: Отладка Drupal White Screen of Death (WSOD)

1 голос
/ 24 сентября 2012

В моем php.ini я изменил эти переменные:

error_reporting = E_ALL & ~E_DEPRECATED
display_errors = On 
display_startup_errors = On

Выполненная:

sudo apachectl restart

Как избавиться от этих ошибок на всех моих сайтах на Drupal.

1 голос
/ 28 мая 2011

Предполагая, что это хост Linux, это может быть проблема с разрешениями, если на вашем хосте работает suPHP или какая-либо другая форма suexec. Убедитесь в правильности владения файлами и в режиме доступа.

У вас также может быть неверный файл .htaccess, попробуйте удалить его, чтобы проверить это.

1 голос
/ 27 мая 2011

Мой совет - взять все содержимое вашего модуля и папки с темами и загрузить их на рабочий стол. Эти темы и модули по-прежнему установлены только временно отключены. Если ваш сайт возвращается, то, скорее всего, это ошибка модуля или темы. Может быть, кто-то пропустил заключительную скобку '}'. Если вы уверены, что с модулями или темами нет проблем, поместите их обратно в папку без каких-либо потерь. Это не больно, потому что вы ничего не потеряете. Если вы обнаружите, что это проблема с модулем, начните помещать их одну за другой в папку, обновляя ее по пути. Как только на сайте появятся белые экраны, вы обнаружите свою проблему, и обновление модуля может помочь.

Я всегда пробую это в первую очередь, так как установка drupal довольно надежна, вам нужно беспокоиться о модулях и темах.

В отличие от других ответов здесь, это не будет точно определять проблему, но если вы ленивы, как я, и не хотите модифицировать конфигурационные файлы и включать ошибки, то это путь, или, по крайней мере, начать здесь, затем идти и измените конфиги, когда все остальное терпит неудачу.

1 голос
/ 24 мая 2011

Содержимое рендеринга темы ('страницы') пусто, и этого достаточно, чтобы получить WOD.

Используйте это , чтобы помочь вам, он находит пару общих проблем, связанных с WOD.

Также попробуйте восстановить права доступа, лучше всего использовать drush и набрать:

drush php-eval 'node_access_rebuild();'

Также используйте drush для просмотра установленных модулей, с

drush sm

отключить ВСЕ пользовательские модули и выполнить поиск.

drush disable <modulename>

И пока вы находитесь в drush, очистите кеш:

drush cc

Если вы считаете, что проблема в cron, у меня были огромные проблемы с плохо написанными крючками cron, на случай, если это ваша проблема, supercron станет вашим другом для этого.

У вас должно быть достаточно памяти, если у вас нет модуля, который ведет себя очень плохо.

* Обновление для устранения неполадок

Если проблема возникает при запуске update.php, откройте update.php в текстовом редакторе и раскомментируйте следующую строку:

ini_set('display_errors', FALSE);

См. на этой странице , чтобы найти множество других исправлений wsod. В частности, если вы используете path-auto, исправление, упомянутое на этой странице, стоит посмотреть.

1 голос
/ 17 мая 2011

Проверьте настройки отчетов об ошибках для PHP.Может потребоваться включить отчеты об ошибках.

Это может помочь: http://drupal.org/node/158043

0 голосов
/ 16 ноября 2018

Проверьте содержимое каталога вашей темы (каталог или файл).

В теме marinelli отсутствие логики для папок вызывает такие проблемы.

0 голосов
/ 20 сентября 2014

Был WSOD, который просто не сказал бы мне, что случилось. После включения display_errors / display_startup_errors / error_reporting ошибок не обнаружено. В журнале ошибок PHP ничего не было. В журнале ошибок сервера ничего не было. Просто WSOD и пойди разберись.

Мне, наконец, удалось убедить Drupal в отображении сообщений об ошибках, было включить $update_free_access = FALSE; и перейти к /update.php. Это показало, что не было ожидающих обновлений, но перечислило целую кучу ошибок в базе данных, которые были результатом неправильного импорта данных.

enter image description here

...