어떻게 표시할 수 있습니 Static HTML 후에 사용했던 죽습니다()에서 PHP Block?

StackOverflow https://stackoverflow.com/questions/307322

  •  08-07-2019
  •  | 
  •  

문제

말하자 나는 이와 같은 코드:

<html>
<head><title>Title</title></head>
<body>

<?php
if (!$someCondition){
  die();
}
else{
  #Do something
}
?>
</body>
<html>

나는 희망의 목적은 이 코드를 간단합니다.는 경우 특정 조건을 충족(ie 수 없는 데이터베이스에 연결),이 프로그램은 다음해야 죽습니다,하지만 그렇지 않으면 이를 실행해야 합니다.내 문제가 발생하면 죽습니다()함수가 실행됩니다.지 거기에 보내는 첫 번째 세 가지 라인 브라우저지만,마지막 두 개의 노선이 있습니다.

가 함수가 사용할 수 있는 대신에 죽습니다()도록 php 덩어리가 중지됩니다 실행하지만,정적 HTML 스트를 통해 전송?

도움이 되었습니까?

해결책

당신이해야 밖으로 분리하는 헤더 및 글로 별도의 파일과 기능입니다.이 UI 훨씬 쉽게 유지하고 지킨 것에 대한 일관성을 렌더링합니다.커플과 함께 사용하여 예외 처리 당신은 황금입니다.

<?php

printHeader(); // outputs the html header
try
{
    if (some condition)
    {
        throw new Exception("It Died...");
    }
    // More processing here that should not execute if the above condition is true
    // ...
}
catch (Exception e)
{
    echo $e->getMessage();
}
printFooter(); // outputs the html footer

?>

다른 팁

프레젠테이션에서 프로그램 논리를 분리하십시오. MVC, 템플릿에 대해 읽으십시오.

가장 간단한 형태로 다음과 같습니다.

<?php
function logic() {
    if (!$someCondition) {
        return 'display_empty_page';
    } else {
        return 'display_other_stuff';
    }
}

presentation(logic());



다른 경우 어디에서나 die() 또는이를 피할 수없는 (예 : 치명적인 오류 또는 제 3 자 코드 죽음) 출력 핸들러와 관련된 해킹이 있습니다.

ob_start('myhandler'); 
function myhandler($page) {return $page.' extra markup';}
die();

진단/디버깅 목적으로 만 사용하는 것이 좋습니다.

정적 텍스트의 매개 변수를 다이에 전달하십시오.

예를 들어 이것을 변경합니다.

<html>
<head><title>Title</title></head>
<body>

<?php
if (!$someCondition){
  die();
}
else{
  #Do something
}
?>
</body>
<html>

이에:

<html>
<head><title>Title</title></head>
<body>

<?php
if (!$someCondition){
  die("OMG RED ALERT!!!!</body></html>");
}
else{
  #Do something
}
?>
</body>
<html>

아마 예외를 사용할 것입니다. 시도 / 캐치 블록으로 모든 것을 감싸고 데이터베이스 고장과 같은 오류 조건에서 새로운 예외를 던지십시오. 캐치 블록에서는 아무것도 할 수 없지만 (빈 다이 () 메소드와 같은)는 여기에서 사용자에게 오류 메시지를 제시하는 것이 좋습니다.

여기에 있습니다 꽤 좋은 가이드 PHP5의 예외 처리에서는 익숙하지 않거나 PHP4 이후 변경된 내용을 닦아야합니다.

가 있으로 봤을 사용하여 register_shutdown_function (php.net)로딩이 완료 페이지?그것을 처리할 수 있어야 합니다 die()exit().

당신이 보면 PHP 문서 당신은 "exit ()에 해당하는 것" - 즉 프로그램을 종료하고 실제로 무엇이든 할 수있는 기회를주지 않습니다. ZF 이외의 경우에도 응용 프로그램이 죽을 때 할 수있는 일이 많지 않습니다. 해결책은 예외를 사용하는 것입니다.

끊임없는 예외는 본질적으로 다이 () (생성되는 스택 추적 이외)와 동일합니다. 예외가 제공하는 것은 시도/캐치 블록에 넣을 수있는 능력으로 오류를 수정하고 프로그램을 계속할 수있는 기회를 제공합니다 (또는 친숙한 오류 메시지를 표시하고 로그를 생성). zend_controller_front를 사용하고 있다고 가정하면 Zend Framework QuickStart 그들이 예외를 제외하고 적절한 오류 메시지를 표시하는 기본 오류 핸들러를 만드는 방법을 확인하십시오.

작동하지만 내가 찾고있는 것이 아닌 한 가지 방법은 대체하는 것입니다. die() ~와 함께 die("</body></html>"). 반환 할 텍스트가 그보다 더 복잡하다면 변수에 저장 될 수 있습니다. 이것보다 더 좋은 것이 있습니까?

die() 당신이 여기서 원하는 것이 아닐 수도 있습니다. 교체하지 않겠습니까?

if (!$someCondition) { 
    die();
} else {
    /* do stuff */
}

~와 함께

if ($someCondition) {
    /* do stuff */
} else {
    /* output error message/redirect/output nothing/whatever */
}

아니면 예외를 던지거나 잡으시겠습니까?

PHP4로 작업하거나 예외를 귀찮게하고 싶지 않은 경우이 기술을 사용할 수 있습니다.

<html>
<head><title>Title</title></head>
<body>

<?php
do {
    if (!$someCondition){
          break;
    } else {
          #Do something
    }
} while (0);
?>
</body>
<html>

.. 어떤 사람들은이 스타일을 사용하는 것에 반대하는 것처럼 보이지만 적절하게 댓글을 달았지만 문제가 없습니다. 각 다이 () 문서에서 "바닥 글"코드를 복제하는 것보다 훨씬 낫다고 말하고 싶습니다.

<html>
<head><title>Title</title></head>
<body>

<?php
if (!$someCondition){
header ("location:error_page.php?erro_message='This error occured'");

  die();
}
else{
  #Do something
}
?>
</body>
<html>

error_page.php

header
echo $_GET[$error_message];
footer
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top