programing

PHP 오류를 표시하려면 어떻게 해야 하나요?

minecode 2022. 10. 21. 21:30
반응형

PHP 오류를 표시하려면 어떻게 해야 하나요?

파일PHP ini 파일)을 했습니다.php.ini 및 )의 개요display_errors도 「에러 리포트」가 됩니다.E_ALLApache Web ★★★★★★★★★★★★★★★★★★★★★★★★」

이 행들을 스크립트의 맨 위에 배치했는데 단순한 해석 오류조차 포착하지 못했습니다.들어 변수를 할 때 변수에는 「」가 ."$"는 진술을 끝내지 ";"단, 모든 스크립트에서 이러한 오류에 대한 빈 페이지가 표시되지만 브라우저 출력에 오류가 있는지 확인해야 합니다.

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

이제 뭘 해야 하죠?

이 방법은 항상 유효합니다.

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

단, PHP가 해석 오류를 표시하는 것은 아닙니다.이 오류를 표시하는 유일한 방법은 다음 행으로 php.ini를 수정하는 것입니다.

display_errors = on

수 )php.ini에 이 을 에 .htaccess을 이용하다)

php_flag display_errors 1

실행 시 오류 출력을 활성화하면 파일을 실제로 실행하기 전에 구문 분석하기 때문에 구문 분석 오류를 잡을 수 없습니다.display_errors가 켜져 있고 erroriate error_reporting 수준이 사용되도록 실제 서버 구성을 변경해야 합니다.php.ini에 액세스할 수 없는 경우 서버에 따라서는 .htaccess 또는 이와 유사한 기능을 사용할 수 있습니다.

질문은 추가 정보를 제공할 수 있습니다.

php.ini 내부:

display_errors = on

그런 다음 웹 서버를 다시 시작합니다.

모든 오류를 표시하려면 다음 작업을 수행해야 합니다.

1.으로 1. PHP 스크립트)에 다음 행을 합니다.index.php

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

2. (a) 이 스크립트에 구문 오류가 없는지 확인합니다.

--또는--

( 2. (b) 설정display_errors = On 안에서php.ini

그렇지 않으면 두 줄도 못 달려요!

(커맨드 라인에서) 다음을 실행하여 스크립트에 구문 오류가 없는지 확인할 수 있습니다.

php -l index.php

다른 PHP 스크립트의 스크립트를 포함하면 포함된 스크립트에 구문 오류가 표시됩니다.예를 들어 다음과 같습니다.

index.php

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

// Any syntax errors here will result in a blank screen in the browser

include 'my_script.php';

my_script.php

adjfkj // This syntax error will be displayed in the browser

웹 에서는 PHP의 할 수 ..htaccessfilename을 클릭합니다.

다음 행을 추가할 수 있습니다.

php_value display_errors 1

저는 당신과 같은 문제가 있었고 이 솔루션으로 해결되었습니다.

"오류 보고" 또는 "표시 오류"에 대한 모든 설정이 PHP 7에서 작동하지 않는 것으로 나타날 수 있습니다.에러 처리가 변경되었기 때문입니다.대신 다음을 시도해 보십시오.

try{
     // Your code
} 
catch(Error $e) {
    $trace = $e->getTrace();
    echo $e->getMessage().' in '.$e->getFile().' on line '.$e->getLine().' called from '.$trace[0]['file'].' on line '.$trace[0]['line'];
}

또는 예외와 오류를 한 번에 파악하려면(PHP 5와 하위 호환성이 없음):

try{
     // Your code
} 
catch(Throwable $e) {
    $trace = $e->getTrace();
    echo $e->getMessage().' in '.$e->getFile().' on line '.$e->getLine().' called from '.$trace[0]['file'].' on line '.$trace[0]['line'];
}

이 조작은 유효합니다.

<?php
     error_reporting(E_ALL);
     ini_set('display_errors', 1);    
?>

용도:

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

이 방법이 가장 좋지만 구문 오류가 발생하면 출력이 공백이므로 콘솔을 사용하여 구문 오류를 확인하십시오.PHP 코드를 디버깅하는 가장 좋은 방법은 콘솔을 사용하는 것입니다. 다음을 수행하십시오.

php -l phpfilename.php

index.php 파일로 설정합니다.

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

PHP 파일이 있는 폴더에 php.ini라는 파일을 만듭니다.

php.ini 내부에 다음 코드를 추가합니다(코드를 표시하는 간단한 오류입니다).

display_errors = on

display_startup_errors = on

현재 PHP 7을 실행하고 있기 때문에 여기에 제시된 답변은 더 이상 정확하지 않습니다.Frank Forte가 PHP 7에 대해 언급할 때, 유일하게 문제가 없는 것은 Frank Forte입니다.

한편, 시행/캐치를 사용하여 오류를 캐치하는 대신 use include라는 트릭을 사용할 수 있습니다.

다음은 세 가지 코드입니다.

파일: tst1.php

<?php
    error_reporting(E_ALL);
    ini_set('display_errors', 'On');
    // Missing " and ;
    echo "Testing
?>

PHP 7에서 실행하면 아무것도 표시되지 않습니다.

자, 이걸 써보세요.

파일: tst2.php

<?php
    error_reporting(E_ALL);
    ini_set('display_errors', 'On');
    include ("tst3.php");
?>

파일: tst3.php

<?php
    // Missing " and ;
    echo "Testing
?>

다음으로 오류 보고서를 설정하는 tst2를 실행하고 tst3을 포함합니다.다음과 같이 표시됩니다.

해석 오류: 구문 오류, 예기치 않은 파일 끝, 예상 변수(T_VARILE) 또는 ${(T_DILLY_OPEN_CURLY_BRACES) 또는 tst3의 {$(T_CURLY_OPEN)입니다.4행의 php

보통 PHP 프로젝트에서는 다음과 같은 코드를 사용합니다.

if(!defined('ENVIRONMENT')){
    define('ENVIRONMENT', 'DEVELOPMENT');
}

$base_url = null;

if (defined('ENVIRONMENT'))
{
    switch (ENVIRONMENT)
    {
        case 'DEVELOPMENT':
            $base_url = 'http://localhost/product/';
            ini_set('display_errors', 1);
            ini_set('display_startup_errors', 1);
            error_reporting(E_ALL|E_STRICT);
            break;

        case 'PRODUCTION':
            $base_url = 'Production URL'; /* https://google.com */
            error_reporting(0);
            /* Mechanism to log errors */
            break;

        default:
            exit('The application environment is not set correctly.');
    }
}

위의 답변을 모두 따르더라도(또는 php.ini 파일을 편집할 수 없음) 오류 메시지를 받을 수 없는 경우 오류 보고를 활성화하는 새로운 PHP 파일을 만들고 문제 파일을 포함시켜 보십시오.예:

error_reporting(E_ALL);
ini_set('display_errors', 1);
require_once('problem_file.php');

모든 것이 제대로 설정되었음에도 불구하고php.ini 시나리오는 다음과 같습니다.

//file1.php
namespace a\b;
class x {
    ...
}

//file2.php
namespace c\d;
use c\d\x; //Dies because it's not sure which 'x' class to use
class x {
    ...
}

via'a a via via via via via via via via via via via via via php.ini ★★★★★★★★★★★★★★★★★」.htaccessPHP 스크립트에 구문 분석 오류가 포함되어 있을 때 오류를 표시하는 것은 운이 없습니다.그런 다음 명령줄에서 다음과 같이 파일을 보풀로 처리해야 합니다.

find . -name '*.php' -type f -print0 | xargs -0 -n1 -P8 php -l | grep -v "No syntax errors"

가 너무 할 수 php.ini ★★★★★★★★★★★★★★★★★」.htaccess또, 다음의 방법으로 값을 변경할 수 없는 경우도 있습니다.ini_set다음 PHP 스크립트를 사용하여 확인할 수 있습니다.

<?php
if( !ini_set( 'display_errors', 1 ) ) {
  echo "display_errors cannot be set.";
} else {
  echo "changing display_errors via script is possible.";
}

다음과 같은 작업을 수행할 수 있습니다.

기본 인덱스 파일에서 다음 매개 변수를 설정합니다.

    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);

그런 다음 요건에 따라 표시할 항목을 선택할 수 있습니다.

모든 오류, 경고 및 알림:

    error_reporting(E_ALL); OR error_reporting(-1);

모든 오류:

    error_reporting(E_ERROR);

모든 경고의 경우:

    error_reporting(E_WARNING);

모든 통지에 대하여:

    error_reporting(E_NOTICE);

자세한 내용은 여기를 참조하십시오.

독자적인 커스텀에러 핸들러를 추가할 수 있습니다.이것에 의해, 디버깅 정보를 추가할 수 있습니다.또한 이메일로 정보를 보내도록 설정할 수 있습니다.

function ERR_HANDLER($errno, $errstr, $errfile, $errline){
    $msg = "<b>Something bad happened.</b> [$errno] $errstr <br><br>
    <b>File:</b> $errfile <br>
    <b>Line:</b> $errline <br>
    <pre>".json_encode(debug_backtrace(), JSON_PRETTY_PRINT)."</pre> <br>";

    echo $msg;

    return false;
}

function EXC_HANDLER($exception){
    ERR_HANDLER(0, $exception->getMessage(), $exception->getFile(), $exception->getLine());
}

function shutDownFunction() {
    $error = error_get_last();
    if ($error["type"] == 1) {
        ERR_HANDLER($error["type"], $error["message"], $error["file"], $error["line"]);
    }
}

set_error_handler ("ERR_HANDLER", E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);
register_shutdown_function("shutdownFunction");
set_exception_handler("EXC_HANDLER");

추가 옵션을 포함하여 승인되었습니다.PHP 파일의 my DEVLOWEND apache vhost (.htaccess가 실가동되지 않도록 할 수 있는 경우):

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

단, PHP가 해석 오류를 표시하는 것은 아닙니다.이 오류를 표시하는 유일한 방법은 다음 행으로 php.ini를 수정하는 것입니다.

display_errors = on

수 )php.ini에 이 을 에 .htaccess을 이용하다)

// I've added some extra options that set E_ALL as per https://www.php.net/manual/en/errorfunc.configuration.php.
php_flag log_errors on
php_flag display_errors on
php_flag display_startup_errors on
php_value error_reporting 2147483647
php_value error_log /var/www/mywebsite.ext/logs/php.error.log

위의 코드는 동작합니다.

error_reporting(E_ALL);

다만, 파일의 전화기의 코드를 편집해 주세요.

error_reporting =on

빠른 디버깅일 경우 사용할 수 있는 최선의/간단/빠른 솔루션은 코드를 예외로 둘러싸는 것입니다.생산 속도가 빠른 것을 확인하고 싶을 때는 그렇게 하고 있습니다.

try {
    // Page code
}
catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}
    <?php
    // Turn off error reporting
    error_reporting(0);

    // Report runtime errors
    error_reporting(E_ERROR | E_WARNING | E_PARSE);

    // Report all errors
    error_reporting(E_ALL);

    // Same as error_reporting(E_ALL);
    ini_set("error_reporting", E_ALL);

    // Report all errors except E_NOTICE
    error_reporting(E_ALL & ~E_NOTICE);
    ?>

에는 </FONT CHANGE:/FONT CHANGE:/FONT CHANGE:>가php.inidisplay_disabled로 설정되었습니다.다만, 개발 환경에서는, 트러블 슈팅에 display_errors 를 유효하게 할 수 있습니다.

그냥 쓰세요:

error_reporting(-1);

이를 수행하려면 php.ini 파일을 변경하고 다음을 추가합니다.

display_errors = on
display_startup_errors = on

또는 다음 코드를 사용할 수도 있습니다.이것은 항상 나에게 효과가 있기 때문입니다.

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

Xdebug가 설치되어 있는 경우 다음 설정으로 모든 설정을 덮어쓸 수 있습니다.

xdebug.force_display_errors = 1;
xdebug.force_error_reporting = -1;

force_display_module

입력: int, 기본값: 0, Xdebug > = 2.3 이 설정이 1로 설정되어 있으면 PHP의 display_display의 설정에 관계없이 오류가 항상 표시됩니다.

force_error_module

입력: int, 기본값: 0, Xdebug > = 2.3 이 설정은 error_debug와 같은 비트 마스크입니다.이 비트 마스크는 error_reporting으로 표시되는 비트 마스크와 논리적으로 OR 처리되어 표시되는 에러가 더미네이트 됩니다.이 설정은 php.ini에서만 실행할 수 있으며 ini_set()에서 응용 프로그램이 어떤 작업을 수행하든 특정 오류를 강제로 표시할 수 있습니다.

다음 코드를 사용할 수 있습니다.

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

E_NOTICE를 제외한 모든 오류를 보고합니다.

error_reporting(E_ALL & ~E_NOTICE);

모든 PHP 오류 표시

error_reporting(E_ALL);  or ini_set('error_reporting', E_ALL);

모든 오류 보고 끄기

error_reporting(0);

명령줄에 있는 경우 실행할 수 있습니다.php와 함께-ddisplay_errors=1설정을 덮어쓰다php.ini:

php -ddisplay_errors=1 script.php
     error_reporting(1);
     ini_set('display_errors', '1');
     ini_set('display_startup_errors', '1');
     error_reporting(E_ALL);

이것을 페이지 맨 위에 놓으세요.

코드 상단에 입력

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

그리고 php.ini 파일에 다음과 같이 삽입합니다.

display_errors = on

효과가 있을 거야.

간단한 방법으로 디스플레이에 Php 오류를 표시할 수 있습니다.우선 아래 코드를 php.ini 파일에 입력해 주세요.

display_errors = on;

(php.ini에 액세스 할 수 없는 경우는, 이 행을 .htaccess 에 넣는 것도 동작합니다).

php_flag display_errors 1

또는 index.php 파일에서 다음 코드를 사용할 수도 있습니다.

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

Unix CLI 에서는, 에러만을 파일에 리다이렉트 하는 것이 매우 실용적입니다.

./script 2> errors.log

스크립트에서 다음 중 하나를 사용합니다.var_dump()또는 평소와 동등(STDOUT 및 STDERR 모두 출력을 수신함)하지만 로그 파일에만 쓰려면 다음과 같이 하십시오.

fwrite(STDERR, "Debug infos\n"); // Write in errors.log^

그런 다음 다른 셸에서 라이브 변경:

tail -f errors.log

또는 간단히 말하면

watch cat errors.log

언급URL : https://stackoverflow.com/questions/1053424/how-do-i-get-php-errors-to-display

반응형