(PHP) isset() vs empty() vs is_null()

IT/Programming/PHP 2014. 10. 29. 15:16

isset(), empty(), is_null() 은 모두 해당 변수에 값이 들어있는지 안들어있는지를 체크하는 함수이다.

하지만 이 3가지 함수 모두 <비어있다> 를 판단하는 기준이 서로 조금씩 달라 혼선이 생길 수 있다.

 

아래의 테이블을 참고하도록 한다.

 

 

PHP 5.3.8 기준으로 테스트되었다.

비어있는 칸은 bool(false) 를 의미한다.

 

 

 

 

 

 

PHP Manual

isset() - http://php.net/manual/en/function.isset.php

empty() - http://php.net/manual/en/function.empty.php

is_null() - http://php.net/manual/en/function.is-null.php

 

참고 링크 :

https://www.virendrachandak.com/techtalk/php-isset-vs-empty-vs-is_null/

 

 

설정

트랙백

댓글

(PHP) $_SERVER['REMOTE_ADDR'] 이 ::1 을 반환할 때

IT/Programming/PHP 2014. 10. 22. 13:33

PHP 에서 $_SERVER['REMOTE_ADDR'] 이 ::1 을 반환하는 경우가 있다.

이는 IPv6 에서의 자기 자신을 가리키는 loopback address 이다. 즉, IPv4 의 127.0.0.1 과 똑같은 주소라고 보면 된다.

 

이를 해결하기 위해서는 IPv4 인터페이스로 사이트를 접속하거나 (이를테면 http://localhost/ 가 아닌 http://127.0.0.1/), 바인딩하는 호스트의 정보를 IPv4 형식으로 바꾸면 된다. 이 포스트에서는 Apache의 httpd.conf의 사이트 바인딩 정보 수정, IIS 사이트 바인딩 정보 수정, hosts 파일의 정보 수정, inet_ntop() 함수를 이용한 컨버팅 4가지의 해결방법을 소개한다.

 

 

Apache의 경우 :

httpd.conf 에서 Listen 항목을 찾아본다.

Listen 80  과 같이 적혀있다면, Listen 127.0.0.1:80  의 형식으로 변경하고 Apache를 재시작한다.

 

IIS의 경우 :

 

 

IIS(인터넷 정보 서비스) 관리자를 열고, 사이트 항목에 들어가보면 자신이 열어놓은 웹 사이트의 바인딩 정보를 볼 수 있다. 지금은 필자가 이미 127.0.0.1:80 으로 바인딩을 해둔 상태이지만, 지금 문제가 발생하고 있는 독자들은 아마도 :80 (http) 로 바인딩 되어 있을 것이다. 해당 항목을 오른쪽 클릭 - 바인딩 메뉴를 누르자.

 

 

편집(E) 를 눌러 IP 주소 항목에 127.0.0.1 을 작성하고 확인한 후, 사이트를 재시작하거나 IIS 를 재시작하면 문제는 해결된다.

 

 

hosts 파일 수정 :

hosts 파일을 찾아서 localhost 를 127.0.0.1 로 대응시켜주는 구문을 넣어주면 된다. 아래의 구문을 참고한다.

127.0.0.1       localhost  

 

 

설정

트랙백

댓글

[XE] 흰 페이지만 보일 때 && 1.5 버젼 이후 모듈 사용 주의사항

IT/Programming/PHP 2014. 9. 14. 18:24

제로보드 XE 에서 1.5 버젼 이전에 사용하던 모듈이 1.5 버젼 이후의 버젼으로 코어를 업데이트 했을 때 모듈들이 아무것도 없는 화면을 보이면서 페이지가 작동을 하지 않는 문제가 발생하고 있다.

 

이는 1.5 버젼 이후부터 __ZBXE__ 스위치가 __XE__ 로 변경되었기 때문이다.

다음의 패치 이슈를 참고 하도록 하자. : 

Issue 2607:

독립 php 페이지에서 세션공유시

   http://code.google.com/p/xe-core/issues/detail?id=2607

 

config.inc.php 를 XE 세션 공유를 위하여 require() 등으로 가져올 때, 아래의 구문에 의하여 exit() 이 되어버린다.

 

    if(!defined('__XE__'))
    {
     exit();

    }

 

기존에 사용하던 모듈(지금 문제가 발생하고 있는 모듈) 의 소스코드를 보면 아래와 같이 define이 되어있는 구문이 있을 것이다.

define('__ZBXE__',true);

 

define('__XE__', true); 구문을 require() 로 config.inc.php 를 가져오기 전에 추가해주면 해당 문제는 해결된다.

 

ex)

// Define XE Module
define('__ZBXE__',true);
define('__XE__',true);           // 추가
require_once("./config/config.inc.php");

 

 

다만, 이를 사용하는 다른 페이지가 있을 수 있으니 기존에 사용하던 __ZBXE__ 문은 삭제하지 않도록 하자. (호환성의 문제가 있을 수 있으니..)

 

** 물론, config.inc.php 를 수정하여 __XE__ 를 define 해주는 등 전역으로 문제를 해결할 수 있는 방법이 있긴 하지만, __ZBXE__가 __XE__ 로 변경되는 것은 공식적인 사항이므로 모듈 페이지를 손을 보는 것이 올바르다.

** 그리고 config.inc.php 와 같은 전역적으로 사용하는 페이지는 수정하지 않는 것이 바람직하다. 또한, xe 패치 시 자동으로 패치가 이루어지는 페이지이기도 하니 되도록이면 손을 대지 않도록 하자.

 

 

설정

트랙백

댓글

PHP 예전 버전 다운로드

IT/Programming/PHP 2014. 4. 4. 16:45

http://windows.php.net/downloads/releases/archives/

설정

트랙백

댓글

(PHP) Cannot send session cache limiter - headers already sent

IT/Programming/PHP 2013. 6. 9. 08:41

Warning: session_start(): Cannot send session cache limiter - headers already sent


 

해당 에러는 session_start() 구문을 PHP 코드의 맨 위에 넣지 않아서 생기는 문제이다. 헤더가 구성될 때 세션이 구성이 되어야 하는데, 다른 php 작업들로 인하여 이미 헤더가 전송된 상태에서 세션을 전달할 수 없기 때문이다. 해결 방법은 간단하다. php 코드를 시작 부에 session_start() 를 넣어주면 된다.

 

<?php session_start(); echo("blahblah.."); ?>

만약, 그래도 문제가 지속된다면 php.ini 에서 output_buffering 속성을 on 으로 바꿔주고 웹 서버를 재시작하면 해결된다.

설정

트랙백

댓글