Windows에서 모든 환경 변수의 값을 표시하는 방법. Windows에서 모든 환경 변수의 값을 표시하는 방법 변수의 값을 화면에 출력

분명히 집에 옷장이나 서랍장이 있습니다. 사용 원칙은 간단합니다. 지금 당장은 필요하지 않지만 잠시 후에 필요할 수 있는 것을 넣습니다.

변수는 정확히 같은 방식으로 배열됩니다. 당신은 그것들에 약간의 가치를 두고 필요할 때까지 거기에 저장할 수 있습니다.

변수 생성

다음과 같이 변수에 값을 넣을 수 있습니다.

위의 코드에서 $name 변수를 생성하고 Ivan 값을 입력한 다음 $age 변수를 생성하고 값 20을 할당했습니다.

"변수"라는 이름은 스크립트 실행 중에 값이 변경될 수 있음을 의미합니다.

일부 언어에서는 변수를 사용하기 전에 먼저 "선언"해야 합니다. PHP에는 선언이 없습니다. 값을 입력하는 순간 변수가 생성됩니다.
그러나 PHP 프로그래머는 종종 "변수 생성" 대신 "변수 선언"이라고 말합니다.

또한 "값을 변수에 넣기" 대신에 "값을 할당하기"라고 종종 말합니다.
그 이유는 간단합니다. 변수에 값을 저장하는 기호 = 덕분에 "할당 연산자"라고 합니다. 따라서 "할당"이라는 용어.

변수 명명 규칙

1. 변수 이름은 $ 기호로 시작합니다.

2. 두 번째 문자는 문자 또는 밑줄 _일 수 있습니다.

변수 이름은 대소문자를 구분합니다. $name과 $Name은 다른 변수입니다.

변수 값을 화면에 표시

우리에게 이미 알려진 echo 명령을 사용하여 변수를 표시할 수 있습니다.

echo 명령을 사용하면 한 번에 여러 값을 표시할 수 있습니다.

쉼표로 구분하여 echo에 2개의 값을 전달했습니다. 따라서 원하는 만큼 많은 값을 전달할 수 있습니다. 다음 두 예제는 동일한 결과를 생성합니다.

또한 PHP에는 변수 출력을 위한 속기 구문이 있습니다. 대신에

PHP 5.4 이전에는 단축 구문이 PHP 설정에서 short_open_tag 지시문이 활성화된 경우에만 작동했으며 단축된 여는 태그도 사용할 수 있습니다.

변수 값 확인

echo 명령은 변수의 현재 값을 확인하는 데 항상 편리한 것은 아닙니다. 예를 들어 빈 문자열 ""을 표시하려고 하면 화면에 아무 것도 표시되지 않습니다. 빈 변수 또는 작동하지 않는 코드에서 그 이유가 무엇인지 명확하지 않습니다.

따라서 var_dump() 함수는 변수 값을 확인하는 데 사용됩니다.

스크립트 실행 결과:

문자열(5) "바샤" 문자열(0) ""

보시다시피 PHP는 변수의 내용뿐만 아니라 문자 수, 심지어 변수의 유형(문자열)까지 출력합니다. 다음 강의에서 데이터 유형에 대해 자세히 살펴보겠습니다.

변수 제거

unset() 함수를 사용하여 기존 변수를 제거할 수 있습니다.

이제 조금 연습할 시간입니다.

거의 모든 PHP 문제에는 여러 솔루션이 있을 수 있습니다. 따라서 귀하의 결정이 이 사이트에 기록된 것과 다르다고 해서 귀하가 잘못한 것이 전혀 아닙니다.

다음과 같은 스크립트를 작성합니다.
1. 제목과 내용이라는 이름의 변수와 일부 값을 생성합니다.
2. h1 태그 내부의 title 변수 값과 div 태그 내부의 content 변수 값을 표시합니다.

솔루션 표시

", $제목, ""; 에코 "

", $콘텐츠, "
"; ?>

이 결정이 유일한 올바른 결정이 아니라는 사실에 다시 한 번 주목하고 싶습니다. 예를 들어 다음 코드는 동일한 결과를 생성합니다.

Windows의 환경 변수(environment)에는 시스템 설정 및 사용자 환경에 대한 다양한 정보가 포함되어 있습니다. 사용자, 시스템 및 프로세스 환경 변수가 구분됩니다.

Windows에서 환경 변수의 내용을 보는 가장 쉬운 방법은 시스템 속성( sysdm.cpl) -> 고급 -> 환경 변수.보시다시피 열린 섹션에는 두 개의 섹션이 있습니다. 위쪽에는 사용자의 환경 변수가 포함되고 아래쪽에는 시스템 변수가 포함됩니다.

또한 환경 변수는 시스템 레지스트리에 저장됩니다. 사용자 변수는 . 전신 - 안으로 HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\환경.

Windows 명령줄에서 모든 환경 변수의 값을 표시할 수 있습니다. 명령은 간단합니다.

이 명령은 환경 변수와 해당 값을 나열합니다.

PowerShell에서 모든 환경 변수를 표시하려면 다음 명령을 사용할 수 있습니다.

하나의 변수 값만 표시하려면 echo 명령을 사용해야 하며 변수 이름을 퍼센트 기호로 묶어야 합니다. 예를 들어,

에코 %systemroot%

설정 > c:\tmp\env_var.txt

특정 프로세스의 환경 변수는 무료로 얻을 수 있습니다. 프로세스 익스플로러 유틸리티(Sysinternals에서). 프로세스 속성을 열고 탭으로 이동하십시오. 환경.

이 단원에서는 PHP 변수의 범위에 중점을 둡니다. 로컬 범위와 전역 범위의 차이점을 설명하고, 함수 내에서 전역 변수에 액세스하는 방법, 완전 전역으로 작업하고 정적 변수를 만드는 방법을 보여줍니다.

PHP 학습을 시작하고 함수 및 개체 작업을 시작하면 변수 범위가 약간 혼란스럽습니다. 다행스럽게도 이와 관련하여 PHP의 규칙은 이해하기가 매우 쉽습니다(다른 프로그래밍 언어에 비해).

범위란 무엇입니까?

변수 범위는 변수가 정의되고 액세스할 수 있는 컨텍스트입니다. PHP에는 두 가지 변수 범위가 있습니다.

  • 글로벌- 변수는 스크립트의 어디에서나 액세스할 수 있습니다.
  • 현지- 변수는 변수가 정의된 함수 내에서만 액세스할 수 있습니다.

변수 범위, 특히 로컬 범위는 코드 관리를 크게 단순화합니다. 모든 변수가 전역 변수인 경우 스크립트의 어디에서나 변경할 수 있습니다. 스크립트의 다른 부분이 같은 이름을 가진 변수를 사용하는 경우가 매우 많기 때문에 이로 인해 혼돈과 큰 스크립트가 생성될 수 있습니다. 범위를 로컬 컨텍스트로 제한하여 변수에 액세스할 수 있는 코드의 경계를 정의하여 코드를 보다 강력하고 모듈식으로 만들고 디버그하기 쉽게 만듭니다.

전역 범위를 가진 변수를 전역 변수라고 하고, 지역 범위를 가진 변수를 지역 변수라고 합니다.

다음은 전역 변수와 지역 변수의 작동 방식에 대한 예입니다.

"; ) sayHello(); echo "\$globalName 값: "$globalName"
"; echo "\$localName 값: "$localName"
"; ?>

안녕 해리! $globalName 값: "Zoya" $localName 값: ""

이 스크립트에서는 두 개의 변수를 만들었습니다.

  • $globalName- 그것 글로벌변하기 쉬운
  • $localName- 그것 현지 sayHello() 함수 내부에서 생성되는 변수입니다.

변수와 함수가 생성된 후 스크립트는 "Hi Harry!"를 출력하는 sayHello() 를 호출합니다. . 그런 다음 스크립트는 echo 함수를 사용하여 두 변수의 값을 출력하려고 시도합니다. 결과는 다음과 같습니다.

  • 왜냐하면 $globalName함수 외부에서 생성되었으며 스크립트의 모든 위치에서 사용할 수 있으므로 "Zoya"가 표시됩니다.
  • $localName sayHello() 함수 내에서만 사용할 수 있습니다. 에코 표현식이 함수 외부에 있기 때문에 PHP는 로컬 변수에 대한 액세스를 허용하지 않습니다. 대신, PHP는 코드가 $localName 이라는 새 변수를 생성할 것이라고 가정합니다. 이 변수는 기본적으로 빈 문자열입니다. 이것이 echo에 대한 두 번째 호출이 $localName 변수에 대해 "" 값을 출력하는 이유입니다.

함수 내에서 전역 변수에 액세스

전역 변수에 액세스하려면 기능 외부그녀의 이름을 쓰십시오. 그러나 전역 변수에 액세스하려면 함수 내부, 먼저 global 키워드를 사용하여 함수에서 변수를 전역으로 선언해야 합니다.

Function myFunction() ( global $globalVariable; // 전역 변수 $globalVariable에 액세스)

그렇지 않으면 PHP는 로컬 변수를 생성하거나 사용한다고 가정합니다.

다음은 함수 내에서 전역 변수를 사용하는 예제 스크립트입니다.

"; 글로벌 $globalName; echo "안녕하세요 $globalName!
"; ) sayHello(); ?>

실행되면 스크립트는 다음을 출력합니다.

안녕 해리! 안녕 조야!

sayHello() 함수는 global 키워드를 사용하여 $globalName 변수를 전역으로 선언합니다. 그런 다음 변수에 액세스하고 해당 값을 출력할 수 있습니다("Zoya").

초전역이란 무엇입니까?

PHP에는 다양한 정보를 포함하는 미리 정의된 전역 배열의 특수 집합이 있습니다. 이러한 배열을 호출합니다. 초전역,내부 함수 공간을 포함하여 스크립트의 어디에서나 액세스할 수 있고 global 키워드를 사용하여 정의할 필요가 없기 때문입니다.

다음은 PHP 버전 5.3에서 사용할 수 있는 완전 전역 목록입니다.

  • $GLOBALS - 스크립트의 모든 전역 변수 목록(초전역 제외)
  • $_GET - 브라우저가 GET 요청으로 제출한 모든 양식 필드 목록을 포함합니다.
  • $_POST - POST 요청을 사용하여 브라우저에서 제출한 모든 양식 필드 목록을 포함합니다.
  • $_COOKIE - 브라우저에서 보낸 모든 쿠키 목록을 포함합니다.
  • $_REQUEST - $_GET, $_POST, $_COOKIE 배열에 포함된 모든 키/값 조합을 포함합니다.
  • $_FILES - 브라우저에서 다운로드한 모든 파일 목록을 포함합니다.
  • $_SESSION - 현재 브라우저에 대한 세션 변수를 저장하고 사용할 수 있습니다.
  • $_SERVER - 실행 중인 스크립트의 파일 이름 및 브라우저의 IP 주소와 같은 서버에 대한 정보를 포함합니다.
  • $_ENV - CGI 변수와 같이 PHP에 전달되는 환경 변수 목록을 포함합니다.
예를 들어 $_GET을 사용하여 스크립트의 요청 URL 문자열에 포함된 변수 값을 가져와 페이지에 표시할 수 있습니다.

URL http://www.example.com/script.php?yourName=Fred로 위의 스크립트를 실행하면 다음과 같이 출력됩니다.

헤이 프레드!

경고!실제 스크립트에서는 보안이 취약하므로 이 데이터 전송을 사용해서는 안 됩니다. 항상 데이터를 확인하거나 필터링해야 합니다.

$GLOBALS superglobal은 global 키워드를 사용할 필요 없이 함수에서 전역 변수에 대한 액세스를 구성할 수 있으므로 사용하기 매우 편리합니다. 예를 들어:

"; ) sayHello(); // "Hello Zoya!" 표시 ?>

정적 변수: 주변 어딘가에 있습니다.

함수 내에서 로컬 변수를 만들면 함수가 실행되는 동안에만 존재합니다. 함수가 종료되면 지역 변수가 사라집니다. 함수가 다시 호출되면 새로운 지역 변수가 생성됩니다.

대부분의 경우 이것은 훌륭하게 작동합니다. 따라서 함수는 자급자족하며 호출될 때마다 항상 동일한 방식으로 작동합니다.

그러나 함수 호출 간에 해당 값을 "기억"하는 로컬 변수를 만드는 것이 편리한 상황이 있습니다. 이러한 변수를 정적이라고 합니다.

함수에서 정적 변수를 생성하려면 변수 이름 앞에 static 키워드를 사용하고 초기값을 지정해야 합니다. 예를 들어:

기능 myFunction() ( 정적 $myVariable = 0; )

정적 변수를 사용하는 것이 편리한 상황을 고려하십시오. 호출될 때 위젯을 생성하고 이미 생성된 위젯의 수를 출력하는 함수를 생성한다고 가정해 보겠습니다. 로컬 변수를 사용하여 다음과 같은 코드를 작성할 수 있습니다.


"; echo createWidget() . " 이미 생성했습니다.
"; echo createWidget() . " 이미 생성했습니다.>
"; ?>

하지만 함수가 호출될 때마다 $numWidgets 변수가 생성되므로 다음과 같은 결과를 얻습니다.

일부 위젯을 생성합니다... 1 이미 생성했습니다. 1 우리는 이미 만들었습니다. 1 우리는 이미 만들었습니다.

그러나 정적 변수를 사용하면 한 함수 호출에서 다음 호출까지 값을 유지할 수 있습니다.

"; echo createWidget() . " 이미 생성했습니다.
"; echo createWidget() . " 이미 생성했습니다.
"; echo createWidget() . " >우리는 이미 생성했습니다.
"; ?>

이제 스크립트는 예상 결과를 생성합니다.

일부 위젯을 생성합니다... 1 이미 생성했습니다. 2 우리는 이미 만들었습니다. 3 우리는 이미 만들었습니다.

정적 변수는 함수 호출 간에 값을 유지하지만 스크립트가 실행되는 동안에만 유효합니다. 스크립트 실행이 완료되면 모든 정적 변수와 로컬 및 전역 변수가 소멸됩니다.

그게 다야! PHP 문서를 자주 참조하십시오.

13년 전

조심해야 할 약간의 문제:

RegisterGlobals 및 관련 항목을 끄고 get_defined_vars()를 사용하면 다음과 같은 내용이 표시될 수 있습니다.

정렬
[ 글로벌 ] => 배열
[ 글로벌 ] => 배열
* 재귀 *
[_POST] => 배열()
[_GET] => 배열()
[_COOKIE] => 배열()
[ _FILES ] => 배열()
)

[_POST] => 배열()
[_GET] => 배열()
[_COOKIE] => 배열()
[ _FILES ] => 배열()

)
?>

$_SERVER가 거기에 없다는 것을 주목하세요. php는 어디선가 사용되는 경우에만 superglobal $_SERVER를 로드하는 것 같습니다. 다음과 같이 할 수 있습니다:

인쇄"

" .htmlspecialchars(print_r(get_defined_vars(), true )) . "
" ;
인쇄"
" .htmlspecialchars (print_r ($_SERVER , true )) . "
" ;
?>

그러면 $_SERVER가 두 목록 모두에 나타납니다. 어느 쪽이든 나쁜 일이 일어나지 않을 것이기 때문에 "실제로 문제가 아닌 것 같지만"그럼에도 불구하고 흥미로운 호기심입니다.

6 년전

get_defined_vars()는 함수를 호출한 지점에서만 변수를 가져오므로 현재 범위 내에서 정의된 변수를 가져오는 간단한 방법이 있습니다.

// PHP 스크립트의 맨 위
$vars = get_defined_vars();

// 이제 할 일을 하세요
$foo = "푸" ;
$바 = "바" ;

// 현재 범위에 정의된 모든 변수 가져오기
$vars = array_diff(get_defined_vars(), $vars);

에코 "

"
;
print_r($vars);
에코 "
" ;
?>

15 년 전

다음은 디스플레이 또는 이메일용 디버그 보고서를 생성하는 기능입니다.
get_defined_vars를 사용합니다. 없이 자세한 스냅샷을 얻는 데 적합합니다.
사용자 입력에 의존합니다.

함수 generateDebugReport ($method , $defined_vars , $email = "정의되지 않음" )(
// 표시하거나 이메일로 보낼 디버그 보고서를 만드는 기능입니다.
// 사용법: generateDebugReport(method,get_defined_vars(),email);
// 여기서 방법은 "브라우저" 또는 "이메일"입니다.

// "get_defined_vars"에 의해 반환된 키에 대한 무시 목록을 만듭니다.
// 예를 들어 HTTP_POST_VARS, HTTP_GET_VARS 등은
// 중복(_POST, _GET과 동일)
// 보안상의 이유로 무시하려는 변수도 포함합니다. PHPSESSID.
$ignorelist =array("HTTP_POST_VARS" , "HTTP_GET_VARS" ,
"HTTP_COOKIE_VARS" , "HTTP_SERVER_VARS" ,
"HTTP_ENV_VARS" , "HTTP_SESSION_VARS" ,
"_ENV" , "PHPSESSID" , "SESS_DBUSER" ,
"SESS_DBPASS" , "HTTP_COOKIE" );

$timestamp = date("m/d/y h:m:s" );
$message = "디버그 보고서 생성됨 $timestamp \n" ;

// 올바른 측정을 위해 마지막 SQL 오류를 가져옵니다. 여기서 $link는 리소스 식별자입니다.
// mysql_connect용. 데이터베이스 또는 추상화 설정을 주석 처리하거나 수정하십시오.
글로벌 $링크 ;
$sql_error = mysql_error($link);
if($sql_error )(
$message .= "\nMysql 메시지:\n" . mysql_error($링크);
}
// MySQL 종료

// 재귀 함수를 사용할 수 있습니다. 당신은 아이디어를 얻을 ;-)
foreach($key로 $defined_vars => $val )(
if(is_array ($val ) && !in_array ($key , $ignorelist ) && count ($val ) > 0 )(
$message .= "\n $키 배열(키=값):\n" ;
foreach($subkey로 $val => $subval )(
if(!in_array($subkey, $ignorelist) && !is_array($subval))(
$message .= $subkey . "=" . $subval . "\N" ;
}
elseif(! in_array ($subkey , $ignorelist ) && is_array ($subval ))(
foreach($subval as $subsubkey => $subsubval )(
if(!in_array ($subsubkey , $ignorelist ))(
$message .= $subsubkey . "=" . $subsubval . "\N" ;
}
}
}
}
}
그렇지 않으면(!
is_array ($val ) && ! in_array ($key , $ignorelist ) && $val )(
$message .= "\n변수" . $키. "=" . $val. "\N" ;
}
}

If($method == "브라우저" )(
echo nl2br($message);
}
elseif($method == "이메일" )(
if($email == "미정의" )(
$email = $_SERVER["SERVER_ADMIN"];
}

$mresult = 메일($email , "" 에 대한 디버그 보고서 . $_ENV [ "HOSTNAME" ]. "" , $message );
if($m결과 == 1 )(
에코 "디버그 보고서가 성공적으로 전송되었습니다.\n";
}
또 다른(
에코 "디버그 보고서를 보내지 못했습니다.\n";
}
}
}
?>

17년 전

get_defined_vars 개체를 XML로 변환하는 간단한 루틴입니다.

함수 obj2xml ($v , $indent = "" ) (
동안 (목록($key , $val ) = 각 ($v )) (
if ($key == "__attr" ) 계속;
// __attr 확인
if (is_object ($val -> __attr )) (
동안 (목록($key2 , $val2 ) = 각 ($val -> __attr )) (
$attr .= " $key2 =\" $val2 \"" ;
}
}
그렇지 않으면 $attr = "" ;
if (is_array ($val ) || is_object ($val )) (
print(" $인덴트< $key$attr >\N");
obj2xml($val , $indent . " " );
print(" $인덴트\N");
}
그렇지 않으면 인쇄(" $indent< $key$attr >$값\N");
}
}

//예시 객체
$x -> 이름 -> 첫 번째 = "John" ;
$x -> 이름 -> 성 = "스미스" ;
$x -> arr [ "과일" ] = "바나나" ;
$x -> arr [ "채소" ] = "당근" ;
$y -> 고객 = $x ;
$y -> 고객 -> __attr -> id = "176C4" ;

$z = get_defined_vars();
obj2xml($z["y"]);
?>
다음을 출력합니다:


남자
스미스


바나나
당근

11년 전

참고로 get_defined_vars()는 변수 참조 집합을 반환하지 않습니다(원하는 대로). 예를 들어:

// 변수 정의
$my_var = "푸" ;

// 정의된 변수 목록을 가져옵니다.
$define_vars = get_defined_vars();

// 이제 반환된 배열을 통해 값을 변경하려고 합니다.
$defined_vars [ "my_var" ] = "바" ;

echo $my_var , "\n" ;

?>

"foo"(원래 값)를 출력합니다. "get_defined_vars()에 참조할 수 있는 선택적 인수가 있으면 좋겠지만 다소 전문적인 요청이라고 생각합니다. 다음과 같이 직접(덜 편리하게) 수행할 수 있습니다.

$define_vars = 배열();
$var_names = array_keys(get_defined_vars());

foreach ($var_names를 $var_name으로)
{
$define_vars [ $var_name ] =& $ $var_name ;
}

?>

1 년 전

get_defined_vars에 있는 "this"에 대해 전에 여기에 게시했습니다.

그것은 "항상 거기에 있지는 않지만 어떤 경우에는 설명할 수 없이 나타날 것입니다.

PHP -r"
클래스 테스트(
공개 함수 a() (var_dump(array_keys(get_defined_vars()));$a = 123;)
공개 함수 b() (var_dump(array_keys(get_defined_vars()));$this;)
}
$t = 새로운 테스트();
$t->a();
$t->b();
"

정렬()
배열("이것")

이것은 PHP 7.2에서는 발생하지 않지만 PHP 5.6에서는 발생합니다.

1 년 전

여기의 일부 주석은 이 함수가 참조를 반환하지 않는다고 지적합니다. 그러나 이름을 반환하고 이름은 "참조"입니다.

여기에서 참조로 변환하는 제안은 권장하지 않습니다.

공개 함수 x($a, $b, $c) (
foreach(array_keys(get_defined_vars())를 $key로)
if($key !== "이것")
$this->y($($key));
}

공개 함수 y(&$input) (
$입력++;
}

$() 대신 $$를 사용할 수도 있습니다.

나는 매우 일반적인 코드를 만들기 위해 내 시간에 몇 가지 엉뚱한 일을 했지만 위와 같은 것을 할 필요가 없었습니다. 작동하지 않을 수도 있습니다(그러나 $a[$key]와 다르지 않기 때문에 그래야 합니다).

$$key++도 할 수 있지만 끔찍하게 나쁘지 않은 코드를 본 적이 없습니다(동적이 유익하지 않은 경우 동적 사용).

그런 일을 하고 있다면 추가 조사를 하십시오.

13년 전

조심해야 할 약간의 문제:

RegisterGlobals 및 관련 항목을 끄고 get_defined_vars()를 사용하면 다음과 같은 내용이 표시될 수 있습니다.

정렬
[ 글로벌 ] => 배열
[ 글로벌 ] => 배열
* 재귀 *
[_POST] => 배열()
[_GET] => 배열()
[_COOKIE] => 배열()
[ _FILES ] => 배열()
)

[_POST] => 배열()
[_GET] => 배열()
[_COOKIE] => 배열()
[ _FILES ] => 배열()

)
?>

$_SERVER가 거기에 없다는 것을 주목하세요. php는 어디선가 사용되는 경우에만 superglobal $_SERVER를 로드하는 것 같습니다. 다음과 같이 할 수 있습니다:

인쇄"

" .htmlspecialchars(print_r(get_defined_vars(), true )) . "
" ;
인쇄"
" .htmlspecialchars (print_r ($_SERVER , true )) . "
" ;
?>

그러면 $_SERVER가 두 목록 모두에 나타납니다. 어느 쪽이든 나쁜 일이 일어나지 않을 것이기 때문에 "실제로 문제가 아닌 것 같지만"그럼에도 불구하고 흥미로운 호기심입니다.

6 년전

get_defined_vars()는 함수를 호출한 지점에서만 변수를 가져오므로 현재 범위 내에서 정의된 변수를 가져오는 간단한 방법이 있습니다.

// PHP 스크립트의 맨 위
$vars = get_defined_vars();

// 이제 할 일을 하세요
$foo = "푸" ;
$바 = "바" ;

// 현재 범위에 정의된 모든 변수 가져오기
$vars = array_diff(get_defined_vars(), $vars);

에코 "

"
;
print_r($vars);
에코 "
" ;
?>

15 년 전

다음은 디스플레이 또는 이메일용 디버그 보고서를 생성하는 기능입니다.
get_defined_vars를 사용합니다. 없이 자세한 스냅샷을 얻는 데 적합합니다.
사용자 입력에 의존합니다.

함수 generateDebugReport ($method , $defined_vars , $email = "정의되지 않음" )(
// 표시하거나 이메일로 보낼 디버그 보고서를 만드는 기능입니다.
// 사용법: generateDebugReport(method,get_defined_vars(),email);
// 여기서 방법은 "브라우저" 또는 "이메일"입니다.

// "get_defined_vars"에 의해 반환된 키에 대한 무시 목록을 만듭니다.
// 예를 들어 HTTP_POST_VARS, HTTP_GET_VARS 등은
// 중복(_POST, _GET과 동일)
// 보안상의 이유로 무시하려는 변수도 포함합니다. PHPSESSID.
$ignorelist =array("HTTP_POST_VARS" , "HTTP_GET_VARS" ,
"HTTP_COOKIE_VARS" , "HTTP_SERVER_VARS" ,
"HTTP_ENV_VARS" , "HTTP_SESSION_VARS" ,
"_ENV" , "PHPSESSID" , "SESS_DBUSER" ,
"SESS_DBPASS" , "HTTP_COOKIE" );

$timestamp = date("m/d/y h:m:s" );
$message = "디버그 보고서 생성됨 $timestamp \n" ;

// 올바른 측정을 위해 마지막 SQL 오류를 가져옵니다. 여기서 $link는 리소스 식별자입니다.
// mysql_connect용. 데이터베이스 또는 추상화 설정을 주석 처리하거나 수정하십시오.
글로벌 $링크 ;
$sql_error = mysql_error($link);
if($sql_error )(
$message .= "\nMysql 메시지:\n" . mysql_error($링크);
}
// MySQL 종료

// 재귀 함수를 사용할 수 있습니다. 당신은 아이디어를 얻을 ;-)
foreach($key로 $defined_vars => $val )(
if(is_array ($val ) && !in_array ($key , $ignorelist ) && count ($val ) > 0 )(
$message .= "\n $키 배열(키=값):\n" ;
foreach($subkey로 $val => $subval )(
if(!in_array($subkey, $ignorelist) && !is_array($subval))(
$message .= $subkey . "=" . $subval . "\N" ;
}
elseif(! in_array ($subkey , $ignorelist ) && is_array ($subval ))(
foreach($subval as $subsubkey => $subsubval )(
if(!in_array ($subsubkey , $ignorelist ))(
$message .= $subsubkey . "=" . $subsubval . "\N" ;
}
}
}
}
}
그렇지 않으면(!
is_array ($val ) && ! in_array ($key , $ignorelist ) && $val )(
$message .= "\n변수" . $키. "=" . $val. "\N" ;
}
}

If($method == "브라우저" )(
echo nl2br($message);
}
elseif($method == "이메일" )(
if($email == "미정의" )(
$email = $_SERVER["SERVER_ADMIN"];
}

$mresult = 메일($email , "" 에 대한 디버그 보고서 . $_ENV [ "HOSTNAME" ]. "" , $message );
if($m결과 == 1 )(
에코 "디버그 보고서가 성공적으로 전송되었습니다.\n";
}
또 다른(
에코 "디버그 보고서를 보내지 못했습니다.\n";
}
}
}
?>

17년 전

get_defined_vars 개체를 XML로 변환하는 간단한 루틴입니다.

함수 obj2xml ($v , $indent = "" ) (
동안 (목록($key , $val ) = 각 ($v )) (
if ($key == "__attr" ) 계속;
// __attr 확인
if (is_object ($val -> __attr )) (
동안 (목록($key2 , $val2 ) = 각 ($val -> __attr )) (
$attr .= " $key2 =\" $val2 \"" ;
}
}
그렇지 않으면 $attr = "" ;
if (is_array ($val ) || is_object ($val )) (
print(" $인덴트< $key$attr >\N");
obj2xml($val , $indent . " " );
print(" $인덴트\N");
}
그렇지 않으면 인쇄(" $indent< $key$attr >$값\N");
}
}

//예시 객체
$x -> 이름 -> 첫 번째 = "John" ;
$x -> 이름 -> 성 = "스미스" ;
$x -> arr [ "과일" ] = "바나나" ;
$x -> arr [ "채소" ] = "당근" ;
$y -> 고객 = $x ;
$y -> 고객 -> __attr -> id = "176C4" ;

$z = get_defined_vars();
obj2xml($z["y"]);
?>
다음을 출력합니다:


남자
스미스


바나나
당근

11년 전

참고로 get_defined_vars()는 변수 참조 집합을 반환하지 않습니다(원하는 대로). 예를 들어:

// 변수 정의
$my_var = "푸" ;

// 정의된 변수 목록을 가져옵니다.
$define_vars = get_defined_vars();

// 이제 반환된 배열을 통해 값을 변경하려고 합니다.
$defined_vars [ "my_var" ] = "바" ;

echo $my_var , "\n" ;

?>

"foo"(원래 값)를 출력합니다. "get_defined_vars()에 참조할 수 있는 선택적 인수가 있으면 좋겠지만 다소 전문적인 요청이라고 생각합니다. 다음과 같이 직접(덜 편리하게) 수행할 수 있습니다.

$define_vars = 배열();
$var_names = array_keys(get_defined_vars());

foreach ($var_names를 $var_name으로)
{
$define_vars [ $var_name ] =& $ $var_name ;
}

?>

1 년 전

get_defined_vars에 있는 "this"에 대해 전에 여기에 게시했습니다.

그것은 "항상 거기에 있지는 않지만 어떤 경우에는 설명할 수 없이 나타날 것입니다.

PHP -r"
클래스 테스트(
공개 함수 a() (var_dump(array_keys(get_defined_vars()));$a = 123;)
공개 함수 b() (var_dump(array_keys(get_defined_vars()));$this;)
}
$t = 새로운 테스트();
$t->a();
$t->b();
"

정렬()
배열("이것")

이것은 PHP 7.2에서는 발생하지 않지만 PHP 5.6에서는 발생합니다.

1 년 전

여기의 일부 주석은 이 함수가 참조를 반환하지 않는다고 지적합니다. 그러나 이름을 반환하고 이름은 "참조"입니다.

여기에서 참조로 변환하는 제안은 권장하지 않습니다.

공개 함수 x($a, $b, $c) (
foreach(array_keys(get_defined_vars())를 $key로)
if($key !== "이것")
$this->y($($key));
}

공개 함수 y(&$input) (
$입력++;
}

$() 대신 $$를 사용할 수도 있습니다.

나는 매우 일반적인 코드를 만들기 위해 내 시간에 몇 가지 엉뚱한 일을 했지만 위와 같은 것을 할 필요가 없었습니다. 작동하지 않을 수도 있습니다(그러나 $a[$key]와 다르지 않기 때문에 그래야 합니다).

$$key++도 할 수 있지만 끔찍하게 나쁘지 않은 코드를 본 적이 없습니다(동적이 유익하지 않은 경우 동적 사용).

그런 일을 하고 있다면 추가 조사를 하십시오.



관련 기사: