apache’s httpd 2.2
요즘 사내 프로젝트를 하나 진행하고 있다. 외부에 공개할 녀석이 아니라 각종 패키지를 최신으로 선택했다.
- php 5.1.4
- mysql 5.0.22
- apache 2.2
apache를 설치하곤 UserDir을 설정하려고 했는데 httpc.conf 안에 UserDir 지시자가 없는거다 -_-; 뭔가 해서 찾아보니 httpd.conf에는 기본적인 설정들만 들어있고 어지간한 것들은 Include 를 하도록 되어있군.
# Server-pool management (MPM specific)
#Include conf/extra/httpd-mpm.conf
# Multi-language error messages
#Include conf/extra/httpd-multilang-errordoc.conf
# Fancy directory listings
#Include conf/extra/httpd-autoindex.conf
# Language settings
#Include conf/extra/httpd-languages.conf
# User home directories
Include conf/extra/httpd-userdir.conf
# Real-time info on requests and configuration
#Include conf/extra/httpd-info.conf
# Virtual hosts
#Include conf/extra/httpd-vhosts.conf
# Local access to the Apache HTTP Server Manual
#Include conf/extra/httpd-manual.conf
# Distributed authoring and versioning (WebDAV)
Include conf/extra/httpd-dav.conf
# Various default settings
#Include conf/extra/httpd-default.conf
.. 이런식이다. default httpd.conf가 좀 길긴 했지- 그런데 userdir 설정에 Indexes가 기본값인건 맘에 안든다.
backport of SimpleXML
php 5.x 이상에서는 xml을 쉽게 다루기 위한 인터페이스로 simpleXML 이라는 것을 제공한다. 매우 편해보이는데 php4.x에서는 사용할 수 없을까?
하여 구글신에게 물어보았다.
“backport of simplexml”
역시… 고려해볼만한 세 가지 대안을 찾을 수 있었다.
우선 miniXML. miniXML은 simpleXML과 컨셉이 비슷한 녀석인데, php와 perl 모듈을 제공하고 있다. simpleXML과 API가 달라서 탈락. (하지만 꽤 괜찮아 보인다)
link : http://minixml.psychogenic.com/
그리고 ister.org에서 simpleXML의 backport를 제공하고 있더라. 다운로드해서 살펴봤는데 여러개의 파일로 나눠져 있는데다 클래스명에 Ister라는 prefix를 사용하고 있어서 탈락.
link : http://www.ister.org/code/simplexml44/index.xhtml
joomla(mambo라는 CMS가 fork한 것)에서도 simpleXML의 backport를 제공하길래 살펴봤더니 svn을 통해 체크아웃 할 수가 있길래 얼른 받아봤다. (요즘은 tar를 받아서 압축 푸는것보다 svn이 더 편해~)
단 두 개의 파일만 필요한데다 그나마 한 개의 파일은 JObject라는 간단한 base class라서 이걸로 낙점. API도 거의 같다. joomla가 꽤 활발하게 유지되고 있다는 점도 크게 작용했다.
link : http://dev.joomla.org/index.php?option=com_jd-wiki&Itemid=31&id=guidelines:jsimplexml
anyway- php4에서의 xml_parser() 를 써야 했으면 몇 일 빈둥거렸을지도 몰라!
멍청한 짓 발견
그동안 미루고 미루다가 이슈트래커에 1번으로 등록했던 버그를 고치기로 맘먹었다. 두 달 정도 미뤄둔 것 같은데, 그 동안 몇 번 소스를 열어봤기 때문에 대강 어느 메쏘드가 문제겠구나 하고 감은 잡고 있었다. 그런데 막상 소스코드를 자세히 살펴보니, 예상했던 지점의 문제가 맞긴 했는데 그 내용이 하도 어이없어서 여기에 기록하고 반성하려고 한다.
첫 번째 문제
$goods->setFrom($data);
unset($data[’supertax’], $data[’state’], $data[’fee_shop’], $data[’fee_benefit’]);
$goods->update();
이 메쏘드를 통해서는 supertax, state, fee_shop, fee_benefit가 수정되지 않도록 하려는 의도였는데, 이미 setFrom()으로 값을 줘버린 상태에서 unset() 을 한거다 -_-;; vim에서는 [ddp] 이렇게 세 개의 키로 수정이 됐다 -_-;;
두 번째 문제
if (strpos($var, ’somestring’) != false)) …..
이거, 너무 뻔한거라 민망하다. strpos의 인수 순서는 왜 매번 헷갈리는 것일까? 반환값이 0 이 나올수도 있다는 걸 왜 자꾸 간과하는걸까?
strpos($var, ’somestring’) !== false로 코딩해야 정확하다.
어쨌거나 버그를 고치긴 했는데, 좀 더 조심성을 가져야겠다. 그리고 굉장히 중요한 부분인데도 테스트를 작성하지 않은것도 반성할 점이다.
MVC Framework by zend.com
zend.com에서 배포하는 open-source MVC framework이다.
- php 5.0.3이상 필요 (4.x는 지원하지 않음)
- Zend, Zend_controller, Zend_Db, Zend_Feed, Zend_Filter, Zend_HttpClient, Zend_InputFilter, Zend_Json, Zend_Log, Zend_Mail, Zend_Mime, Zend_Pdf, Zend_Search, Zend_Service, Zend_View, Zend_XmlRpc 등의 클래스로 이루어져 있다.
- Zend_Db는 PDO를 이용한다.
- http://devzone.zend.com/public/view 가 Zend Framework 를 이용해 만들어졌다.
아직까지 파악한 건 이정도- 빨리 설치해서 써보고 싶다!
http://devzone.zend.com/node/view/id/17에서 정보를 좀 더 얻을 수 있다.
PHP Object-Oriented Web Programming #4
오래 전에 써놓은 글인데, 일단 묵혀두기가 좀 그래서 포스팅을 한다. 스스로에게 자극을 줘서 계속 쓰게 하려는 이유가 크다:)
—-
DB_DataObject 의 세팅과 사용.
DB_DataObject는 일단 앞으로의 과정에서 SQL을 직접 다루는 일이 거의 없도록 도와준다. DBDO는 내부적으로 PEAR::DB 패키지를 통해 DBMS를 다루는데 최근 버전에서는 옵션을 통해 PEAR::MDB를 사용할 수도 있다.
DBDO를 사용하려면 우선 몇 가지 작업을 해줘야 한다.
앞서 밝혔듯이 DBDO는 RowDataGateway 패턴을 구현한 것인데, 하나의 객체가 테이블상의 한 로우(=레코드)를 다룰 수 있다는 뜻이다. 따라서 각 테이블의 Row를 표현하는 클래스를 정의해야 한다. 다행히도 이 작업은 자동화되어있다.
PEAR 하위의 DB/DataObject/createTables.php 라는 스크립트를 이용하면 DB의 각 테이블에 1:1로 대응하는 클래스 파일들을 자동으로 생성해준다. createTables.php 를 실행하기 전에 (more…)