About XHP and how to install on Mac OS X

XHP란 Facebook에서 개발한 PHP Extention이다. 자세한 설명은 아래 링크 참조..^^
http://durl.kr/772rm 
XHP를 사용하면
첫째, 가독성이 좋은 PHP코드를 개발할 수 있다.

예를 들면
<?php
if ($_POST['name']) {
?>
    <span>Hello, <?=$_POST['name']?>.</span>
<?php
} else {
?>
    <form method="post">
    What is your name?<br>
    <input type="text" name="name">
    <input type="submit">
    </form>
<?php
}

보통 이렇게 프로그래밍 하게 되는데 빨갛게 표시한 부분 때문에 머리가 아프다. 하지만 이것을 XHP를 사용해서 개발하면 아래처럼 된다.

<?php
// note: includes omitted
if ($_POST['name']) {
  echo <span>Hello, {$_POST['name']}</span>;
} else {
  echo
    <form method="post">
      What is your name?<br />
      <input type="text" name="name" />
      <input type="submit" />
    </form>;
}

echo문을 사용해서 가독성이 많이 좋아 졌다. XHP가 HTML 문법을 이해할 수 있기 때문에 가능하다.


두번째로, 컴파일 타임에 HTML에 문제가 있으면 에러를 발생시키기 때문에 잘못된(malformed or invalid) HTML 문서가 서비스 되는 것을 막을 수 있다. XHP가 만든 HTML 문서는 항상 well-formed document 이다.
<?php
require 'php-lib/init.php';
$href = 'http://www.facebook.com';
echo <a href={$href}><b>Facebook</a></b>;

이것은 잘못된 HTML 인데 XHP를 사용하면 아래와 같은 에러를 발생시킨다.
Parse error: syntax error, mismatched tag , expecting in /Users/simpnet2/Projects/www/index.php on line 4

<설치 방법>

MacPort로 apache2와 php5 를 설치.(Mac의 웹공유는 끈다.)
아래 링크에 누군가가 친절하게 설명해 두었다.
http://2tbsp.com/content/install_apache_2_and_php_5_macports

XHP 소스 코드를 아래 링크에서 받는다.
https://github.com/facebook/xhp
/opt/local/bin/phpize #port로 PHP를 설치했다.
configure
make
sudo make install

/opt/local/etc/php5/php.ini-development 파일을 php.ini 로 이름을 바꾸고
extension=xhp.so
를 추가한다.
php --ini 를 실행하면 어떤 php.ini 파일을 가져오는지 확인할 수 있다. 
 php -r 'echo "XHP!\n"; exit; <a />;'
를 실행해서 에러없이 출력되는지 확인한다.
 
XHP를 clone 받은 디렉토리에서 php-lib 디렉토리를 복사해서 서버 홈 디렉토리에 붙혀 넣는다.
그리고 홈디렉토리에 index.php 파일을 생성해서
<?php
require 'php-lib/init.php';
$href = 'http://www.facebook.com';
echo <a href={$href}>Facebook</a>;
 
를 입력하고 저장한다. 그리고 브라우저에서 잘 뜨는지 확인해 본다. 
 
만약  
Strict Standards: Static function xhp_x__base::__xhpAttributeDeclaration() should not be abstract in ...
어쩌고 하는 에러가 발생하면 php.ini 파일을 열어서 
error_reporting = E_ALL & ~E_DEPRECATED
으로 바꿔준다.
 

댓글

이 블로그의 인기 게시물

미적분과 차원

자바 로깅

apache rewrite_module 로그