Форма обратной связи PHP без каких-либо результатов [дубликат]

Вот что мы все хотим:

function Enum(constantsList) {
    for (var i in constantsList) {
        this[constantsList[i]] = i;
    }
}

Теперь вы можете создать свои перечисления:

var YesNo = new Enum(['NO', 'YES']);
var Color = new Enum(['RED', 'GREEN', 'BLUE']);

Посредством этого константы могут быть выполнены обычным способом (YesNo .YES, Color.GREEN), и они получают последовательное значение int (NO = 0, YES = 1; RED = 0, GREEN = 1, BLUE = 2).

Вы также можете добавлять методы по используя Enum.prototype:

Enum.prototype.values = function() {
    return this.allValues;
    /* for the above to work, you'd need to do
            this.allValues = constantsList at the constructor */
};

Edit - небольшое улучшение - теперь с varargs: (к сожалению, он не работает должным образом в IE: S ... должен придерживаться предыдущей версии)

function Enum() {
    for (var i in arguments) {
        this[arguments[i]] = i;
    }
}

var YesNo = new Enum('NO', 'YES');
var Color = new Enum('RED', 'GREEN', 'BLUE');
103
задан hakre 10 December 2012 в 07:23
поделиться

15 ответов

Ошибки и предупреждения обычно появляются в ....\logs\php_error.log или ....\logs\apache_error.log в зависимости от ваших настроек php.ini.

Также полезные ошибки часто направляются в браузер, но поскольку они не являются действительными html, они не отображается.

Итак, "tail -f "ваши файлы журналов, и когда вы получаете пустой экран, используйте параметры меню IE" view "->" source ", чтобы просмотреть исходный вывод.

46
ответ дан Jens 28 August 2018 в 01:16
поделиться

Вы также можете запустить файл в терминале (командной строке) следующим образом: php -f filename.php.

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

0
ответ дан Aamnah 28 August 2018 в 01:16
поделиться

Я также видел такие ошибки, когда конфигурационный файл fastcgi_params или fastcgi.conf неправильно включен в конфигурацию сервера. Итак, исправление для меня было глупо:

include /etc/nginx/fastcgi_params;

Принял мне час , чтобы узнать это ...

0
ответ дан anarcat 28 August 2018 в 01:16
поделиться

Для тех, кто использует nginx и имеет белый экран даже для файла с <?php echo 123;. В моем случае у меня не было этой опции для PHP в файле конфигурации nginx:

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

Этот параметр не был в файле fastcgi_params, поэтому PHP не работал и ошибок не было в журналах.

0
ответ дан AVKurov 28 August 2018 в 01:16
поделиться

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

error_reporting(E_ALL & ~E_DEPRECATED); or error_reporting(0);

И, таким образом, переопределение настроек .htaccess.

0
ответ дан Denegen 28 August 2018 в 01:16
поделиться

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

function shutdown(){
  var_dump(error_get_last());
}

register_shutdown_function('shutdown');

добавление этого кода в начало вашего index.php поможет вам отладить проблемы.

18
ответ дан Eduardo Oliveira 28 August 2018 в 01:16
поделиться

Я всегда использую этот синтаксис в самом начале скрипта php.

ini_set('error_reporting', E_ALL);
ini_set('display_errors', 'On');  //On or Off
28
ответ дан FDisk 28 August 2018 в 01:16
поделиться

Попробуйте настроить уровень сообщений об ошибках в ваших действительных файлах php. Или, как предложили другие, проверьте настройки сервера - это может быть что-то в php.ini или какое-то ограничение в отношении вашего хоста. Не просто полагайтесь на .htaccess. Кроме того, при поиске и устранении неисправностей print_r любые переменные, которые могут показаться подозрительными.

2
ответ дан Lewis LaCook 28 August 2018 в 01:16
поделиться

Следующий код должен отображать все ошибки:

<?php

// ----------------------------------------------------------------------------------------------------
// - Display Errors
// ----------------------------------------------------------------------------------------------------
ini_set('display_errors', 'On');
ini_set('html_errors', 0);

// ----------------------------------------------------------------------------------------------------
// - Error Reporting
// ----------------------------------------------------------------------------------------------------
error_reporting(-1);

// ----------------------------------------------------------------------------------------------------
// - Shutdown Handler
// ----------------------------------------------------------------------------------------------------
function ShutdownHandler()
{
    if(@is_array($error = @error_get_last()))
    {
        return(@call_user_func_array('ErrorHandler', $error));
    };

    return(TRUE);
};

register_shutdown_function('ShutdownHandler');

// ----------------------------------------------------------------------------------------------------
// - Error Handler
// ----------------------------------------------------------------------------------------------------
function ErrorHandler($type, $message, $file, $line)
{
    $_ERRORS = Array(
        0x0001 => 'E_ERROR',
        0x0002 => 'E_WARNING',
        0x0004 => 'E_PARSE',
        0x0008 => 'E_NOTICE',
        0x0010 => 'E_CORE_ERROR',
        0x0020 => 'E_CORE_WARNING',
        0x0040 => 'E_COMPILE_ERROR',
        0x0080 => 'E_COMPILE_WARNING',
        0x0100 => 'E_USER_ERROR',
        0x0200 => 'E_USER_WARNING',
        0x0400 => 'E_USER_NOTICE',
        0x0800 => 'E_STRICT',
        0x1000 => 'E_RECOVERABLE_ERROR',
        0x2000 => 'E_DEPRECATED',
        0x4000 => 'E_USER_DEPRECATED'
    );

    if(!@is_string($name = @array_search($type, @array_flip($_ERRORS))))
    {
        $name = 'E_UNKNOWN';
    };

    return(print(@sprintf("%s Error in file \xBB%s\xAB at line %d: %s\n", $name, @basename($file), $line, $message)));
};

$old_error_handler = set_error_handler("ErrorHandler");

// other php code

?>

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

151
ответ дан m4dm4x1337 28 August 2018 в 01:16
поделиться

Если ошибка указана в PHP-коде, вы можете использовать функцию error_reporting () в вашем коде, чтобы установить для всего отчета.

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

-1
ответ дан Milan Babuškov 28 August 2018 в 01:16
поделиться

откройте свой php.ini, убедитесь, что он установлен:

display_errors = On

перезагружает ваш сервер.

4
ответ дан Otiel 28 August 2018 в 01:16
поделиться

, используя @inexistent_function_call(); в вашем коде, заставит intepreter спокойно умереть и прервать разбор скриптов. Вы должны проверить недопустимые функции и попытаться не использовать оператор подавления ошибок (@ char)

0
ответ дан Quamis 28 August 2018 в 01:16
поделиться

Это проблема загрузки или конфигурации времени выполнения

. Важно признать, что во время этапа компиляции или синтаксического анализа происходит синтаксическая ошибка или синтаксическая ошибка, что означает, что PHP закладывает деньги до того, шанс выполнить любой из ваших кодов. Поэтому, если вы изменяете конфигурацию PHP display_errors во время выполнения (это включает в себя что угодно: от использования ini_set в вашем коде до использования .htaccess, который является файлом конфигурации во время выполнения), тогда загружаются только загруженные настройки конфигурации по умолчанию.

Как всегда избегать WSOD в разработке

Чтобы избежать WSOD, вы хотите убедиться, что загруженный файл конфигурации имеет display_errors и error_reporting установлен на -1 ( это эквивалент E_ALL, потому что он обеспечивает включение всех битов независимо от того, какая версия PHP вы используете ). Не печатайте постоянное значение E_ALL, потому что это значение может быть изменено между разными версиями PHP.

Загруженная конфигурация - это либо ваш загруженный файл php.ini, либо ваш apache.conf или httpd.conf или файл virtualhost. Эти файлы читаются только один раз на этапе запуска (когда вы сначала запускаете apache httpd или php-fpm, например) и только переопределены изменениями конфигурации времени выполнения. Убедившись, что display_errors = 1 и error_reporting = -1 в загруженном файле конфигурации гарантируют, что вы никогда не увидите WSOD независимо от синтаксиса или ошибки синтаксического анализа, которые происходят до изменения времени выполнения, например ini_set('display_errors', 1); или error_reporting(E_ALL); может иметь место.

Как найти загруженные файлы конфигурации (php.ini)

Чтобы найти загруженные файлы конфигурации, просто создайте новый файл PHP только с помощью следующего кода ...

<?php
phpinfo();

Затем укажите ваш браузер и посмотрите на загруженный файл конфигурации и дополнительные файлы .ini, которые обычно находятся в верхней части вашего phpinfo() и будут содержать абсолютный путь ко всем ваши загруженные файлы конфигурации.

Если вы видите (none) вместо файла, это означает, что у вас нет файла php.ini в файле Configuration (php.ini). Таким образом, вы можете загрузить фон php.ini в комплекте с PHP отсюда и скопировать его в свой путь к файлу конфигурации как php.ini, затем убедитесь, что ваш пользователь php имеет достаточные разрешения для чтения из этого файла. Вам нужно будет перезагрузить httpd или php-fpm, чтобы загрузить его. Помните, что это файл development php.ini, который поставляется в комплекте с источником PHP. Так что, пожалуйста, не используйте его в производстве!


Просто не делайте этого в производстве

Это действительно лучший способ избежать WSOD в разработке. Любой, кто предположил, что вы положили ini_set('display_errors', 1); или error_reporting(E_ALL); наверху вашего PHP-скрипта или используете .htaccess, как вы это делали, не поможет вам избежать WSOD при возникновении синтаксиса или синтаксического анализа (как в вашем случае здесь ), если ваш загруженный файл конфигурации отключен display_errors.

Многие люди (и фондовые установки PHP) будут использовать файл production-ini, который по умолчанию отключен display_errors, что обычно приводит к это то самое разочарование, которое вы испытали здесь. Поскольку PHP уже отключился, когда он запускается, он сталкивается с синтаксической или синтаксической ошибкой и не дает ничего для вывода. Вы ожидаете, что ваш ini_set('display_errors',1); в верхней части вашего PHP-скрипта должен был избежать этого, но не имеет значения, не может ли PHP не разобрать ваш код, потому что он никогда не достигнет времени исполнения.

16
ответ дан Sherif 28 August 2018 в 01:16
поделиться

Вы уверены, что PHP действительно набирает настройку «display_errors» из .htaccess? Проверьте выход функции phpinfo(), чтобы убедиться.

Кроме того, вы должны проверить, чтобы убедиться, что вы не использовали «@», это может затмить ваши ошибки, если вы использовали '@include ...' или '@some_function (...)', где-то рядом с трассировкой стека.

2
ответ дан too much php 28 August 2018 в 01:16
поделиться

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

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

Отредактировано для показа APPLICATON_LIVE

/*
APPLICATION_LIVE will be used in process to tell if we are in a development or production environment.  It's generally set as early as possible (often the first code to run), before any config, url routing, etc.
*/

if ( preg_match( "%^(www.)?livedomain.com$%", $_SERVER["HTTP_HOST"]) ) {
    define('APPLICATION_LIVE', true);
} elseif ( preg_match( "%^(www.)?devdomain.net$%", $_SERVER["HTTP_HOST"]) ) {
    define('APPLICATION_LIVE', false);
} else {
    die("INVALID HOST REQUEST (".$_SERVER["HTTP_HOST"].")");
    // Log or take other appropriate action.
}


/*
--------------------------------------------------------------------
DEFAULT ERROR HANDLING
--------------------------------------------------------------------
Default error logging.  Some of these may be changed later based on APPLICATION_LIVE.
*/
error_reporting(E_ALL & ~E_STRICT);
ini_set ( "display_errors", "0");
ini_set ( "display_startup_errors", "0");
ini_set ( "log_errors", 1);
ini_set ( "log_errors_max_len", 0);
ini_set ( "error_log", APPLICATION_ROOT."logs/php_error_log.txt");
ini_set ( "display_errors", "0");
ini_set ( "display_startup_errors", "0");

if ( ! APPLICATION_LIVE ) {
    // A few changes to error handling for development.
    // We will want errors to be visible during development.
    ini_set ( "display_errors", "1");
    ini_set ( "display_startup_errors", "1");
    ini_set ( "html_errors", "1");
    ini_set ( "docref_root", "http://www.php.net/");
    ini_set ( "error_prepend_string", "<div style='color:red; font-family:verdana; border:1px solid red; padding:5px;'>");
    ini_set ( "error_append_string", "</div>");
}
14
ответ дан Uwe Keim 28 August 2018 в 01:16
поделиться
Другие вопросы по тегам:

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