http ошибка 500 aws bitnami wordpress hosting [дубликат]

1) Так называемая проблема «Mutable Default Argument» - это, в общем, специальный пример, демонстрирующий, что: «Все функции с этой проблемой также страдают от аналогичной проблемы побочного эффекта от фактического параметра». Это противоречит правилам

Пример:

def foo(a=[]):                 # the same problematic function
    a.append(5)
    return a

>>> somevar = [1, 2]           # an example without a default parameter
>>> foo(somevar)
[1, 2, 5]
>>> somevar
[1, 2, 5]                      # usually expected [1, 2]

Решение: копия Совершенно безопасным решением является copy или deepcopy входной сигнал сначала, а затем делать все с копией.

def foo(a=[]):
    a = a[:]     # a copy
    a.append(5)
    return a     # or everything safe by one line: "return a + [5]"

Многие встроенные изменяемые типы имеют метод копирования, такой как some_dict.copy() или some_set.copy(), или могут быть скопированы легко, как somelist[:] или list(some_list) , Каждый объект также может быть скопирован с помощью copy.copy(any_object) или более тщательным с помощью copy.deepcopy() (последний полезен, если изменяемый объект состоит из изменяемых объектов). Некоторые объекты основаны на побочных эффектах, таких как «файл», и не могут быть осмысленно воспроизведены копией. копирование

Пример проблемы для аналогичного вопроса SO

class Test(object):            # the original problematic class
  def __init__(self, var1=[]):
    self._var1 = var1

somevar = [1, 2]               # an example without a default parameter
t1 = Test(somevar)
t2 = Test(somevar)
t1._var1.append([1])
print somevar                  # [1, 2, [1]] but usually expected [1, 2]
print t2._var1                 # [1, 2, [1]] but usually expected [1, 2]

Он не должен быть ни сохранен ни в одном ] public экземпляра, возвращаемого этой функцией. (Предполагая, что атрибуты private экземпляра не должны быть изменены извне этого класса или подкласса по соглашению, т. Е. _var1 является частным атрибутом)

Заключение: Параметры входных параметров shouldn 'изменяются на месте (мутированные), и они не должны быть привязаны к объекту, возвращаемому функцией. (Если мы предпочитаем программирование без побочных эффектов, которые настоятельно рекомендуются, см. Wiki о «побочном эффекте» (первые два абзаца имеют смысл в этом контексте.).)

2) Только если побочный эффект на фактический параметр требуется, но нежелателен по параметру по умолчанию, тогда полезным решением является def ...(var1=None): if var1 is None: var1 = [] Подробнее ..

3) В некоторых случаях используется изменчивое поведение параметров по умолчанию .

44
задан Charles 22 August 2011 в 18:36
поделиться

9 ответов

Сканировать исходные файлы, чтобы найти @.

С сайта документации php

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

< / BLOCKQUOTE>
48
ответ дан Luc M 21 August 2018 в 06:28
поделиться
  • 1
    Это было так. CodeIgniter, по-видимому, любит использовать их в этой среде, помешайте еще одну причину, по которой мне не нравится CodeIgniter. – ryanzec 22 August 2011 в 16:50
  • 2
    это точно. в моем случае CodeIgniter return @mysql_connect(... маскировал тот факт, что мне не удалось установить модуль mysql php на новый сервер. глупый я, потраченные часы, извлеченные уроки. – rymo 21 June 2012 в 07:22
  • 3
    @LucM Это гораздо проще сказать, чем сделать для чего-то вроде CodeIgniter. Существуют тысячи символов @, разбросанных по их кодовой базе, так как они также используются для комментариев. Поэтому предложение об удалении @ без разбора эффективно бесполезно. Может быть, урок здесь не в использовании CodeIgniter. – Jake 7 May 2017 в 20:58
  • 4
    @Jake большинство IDE разрешают регулярное выражение в поиске и замене, а также найти в пути. Так что бесполезно вообще. – M H 3 October 2017 в 16:22
  • 5
    @MichaelHanon Как я уже упоминал в своем комментарии от 7 мая тысячи этих символов, разбросанных по всему CodeIgniter, поэтому индивидуальная проверка каждого результата поиска и замены невозможна, и даже если бы это был процесс, он все же был бы подвержен ошибкам из-за чистого числа , Как вы указали, они должны быть там по какой-то причине, поэтому, возможно, лучший совет - не просто удалить их всех. – Jake 6 October 2017 в 21:39

Возможно, что-то отключает вывод ошибки. (Я понимаю, что вы пытаетесь сказать, что другие скрипты правильно выводят свои ошибки в журнал ошибок?)

Вы можете начать отладку скрипта, указав, где он выходит из сценария (начните с добавления echo 1; exit; в первая строка скрипта и проверка того, выводит ли браузер 1, а затем перемещает эту строку вниз).

6
ответ дан akirk 21 August 2018 в 06:28
поделиться

Вот еще одна причина, по которой ошибки могут быть не видны:

У меня была такая же проблема. В моем случае я скопировал источник из производственной среды. Следовательно, переменная ENVIRONMENT, определенная в index.php, была установлена ​​на 'production'. Это заставило error_reporting установить значение 0 (без регистрации). Просто установите его на 'development', и вы должны начать видеть сообщения об ошибках в журнале apache.

Выключенный из 500 был вызван отсутствием в поле базы данных двоеточия: -)

2
ответ дан Aswin Kumar 21 August 2018 в 06:28
поделиться

Для проектов Symfony обязательно проверяйте файлы в приложении / журналах проекта.

. Подробнее см. в этом сообщении: Отладка 500 ошибок в Symfony 2

Btw, другие фреймворки или CMS используют этот тип поведения.

3
ответ дан Community 21 August 2018 в 06:28
поделиться

Другой случай, который произошел со мной, я сделал CURL на некоторых моих страницах и получил внутреннюю ошибку сервера, и ничего не было в журналах apache, даже когда я включил все отчеты об ошибках.

My проблема в том, что в CURL я установил curl_setopt($CR, CURLOPT_FAILONERROR, true);

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

1
ответ дан eric.itzhak 21 August 2018 в 06:28
поделиться

Убедитесь, что ваши права на файл верны. Если у apache нет разрешения на чтение файла, он не может записать в журнал.

0
ответ дан Johnny Ruin 21 August 2018 в 06:28
поделиться
  • 1
    Apache должен иметь корневые разрешения независимо от ОС и поэтому должен иметь возможность писать в любой файл, неважно, что это собственный файл журнала. – Ashley Wrench 6 February 2017 в 18:42
  • 2
    У Apache никогда не должно быть прав root. Это будет серьезное нарушение безопасности. – Monkey King 16 February 2018 в 11:42

Скопируйте и вставьте следующее в новый файл .htaccess и поместите его в корневую папку вашего веб-сайта:

php_flag  display_errors                  on
php_flag  display_startup_errors          on

Ошибки будут отображаться непосредственно на вашей странице.

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

4
ответ дан Meloman 21 August 2018 в 06:28
поделиться
  • 1
    Простой и простой способ показать сообщение об ошибке. – Sunry 25 May 2018 в 23:41

Вам нужно включить журнал ошибок PHP.

Это связано с некоторым случайным сбоем на веб-сервере, когда у вас есть ошибка php, она выдает внутреннюю ошибку 500 (у меня такая же проблема) .

Если вы посмотрите в журнале ошибок PHP, вы должны найти свое решение.

см. здесь в документе о том, как включить его в php.ini

0
ответ дан Neal 21 August 2018 в 06:28
поделиться
  • 1
    Я думаю, вы неправильно поняли этот вопрос .. его журнал ошибок PHP включен, но эта конкретная ошибка внутреннего сервера 500 не регистрировалась. У меня есть эта проблема в Laravel для ошибки, возникшей при попытке доступа к приватному методу. Другие 500 ошибок регистрируются, но не тот ... не может понять, почему :( – geoidesic 9 November 2016 в 18:27

В прошлом у меня не было журналов ошибок в двух случаях:

  1. Пользователь, под которым выполнялся Apache, не имел прав на изменение файла php_error_log.
  2. Ошибка 500 произошла из-за плохой конфигурации .htaccess, например неправильных настроек модуля перезаписи. В этой ситуации ошибки записываются в файл Apache error_log.
5
ответ дан sgnsajgon 21 August 2018 в 06:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: