�빫�� ����� ���

Posts tagged ‘PHP’

PHP 유감


6월부터인가 낚시를 시작한 이후로 정신없이 11월까지 왔네요. 낚시에 빠져 산 건 아닌데, 평소 생활에 취미 하나 더해지니 이건 뭐.. 생활이 24시간 중에 20시간이 소요되네요. 대낚시, 루어낚시 다 재미있더군요, 평생 취미로 좋다 싶어요.
그건 그거고.

요새 알바로 웹페이지를 한군데 만들고, 다음 일을 준비하고자 프레임웍과 관리시스템을 혼자서 만들고 있는데, 이 php라는 놈의 특성이 저하고 잘 맞지 않는건지 모듈화해서 구조적이며 쉽게 사용할 수 있는 방법을 찾기가 꽤 어렵더군요. 좋은 프레임웍은 많습니다. 특히 CodeIngniter가 간결하고 깔끔해서 눈에 확 띄었는데, 그걸 쓰자니 제가 프레임웍에 끌려다닐까 하는 옹졸한 기우로 프레임웍을 만들기로 했죠.

모든 uri 요청은 웹 root의 index.php에서만 받도록해서 파라미터를 파싱해서 필요한 모듈을 불러오는 방법으로 구현하기로 했습니다. php는 다른 모듈(파일)을 불러오기 위해 include 함수(replace, replace_once)를 사용하는데, 이 함수는 다른 언어와는 다르게 요청된 파일을 요청한 파일의 일부분으로 합쳐지게 되는 동작을 합니다. index.php 에서 include “config.php”를 하면 config.php와 index.php가 index.php 하나인 것 처럼 동작을 하지요. php의 특성이고, 따라서 좋은 점도 있는데요, class 또는 function을 만들어서 include해서 사용하자니 덩치가 점점 커지는 것 같고, 안그래도 debug하기 어려운 웹환경에서 에러를 잡아나가는게 너무 더디더군요. java 환경에서 작업할 때 원격 디버그 등의 환경이 없다면 작성한 함수 또는 클래스를 main함수를 포함한 어플리케이션에 붙여서 디버깅하는 방법을 쓰곤 하는데, php는 그것도 어렵죠.

php가 5.0 이후로부터는 보안상의 이유로 에러메세지를 뱉어내는 옵션이 기본적으로 disable 되어 있지요. php를 선택한 이유가 거의 모든 호스팅업체에서 사용할 수 있다는 대중성인데, php를 5년만에 사용해서 그런지, 개발속도가 c/c++이나 java 어플리케이션을 제작할 때 보다 훨씬 더디게 진행되는게, 조금씩 지쳐갑니다. 5년 전에는 php가 배열처리하거나 문자열 처리할 때 참 편하다고 느꼈었는데, 요새 거의 모든 언어와 라이브러리가 php보다 훨씬 상회하는 기능을 갖고 있어서 불편하게만 느껴지는군요. 특히 연관배열과 index 배열이 제가 코딩하면서도 저를 헷갈리게 만드네요. 매번 함수 레퍼런스 보는 것 때문에 개발속도가 쳐지는 건지도 모르겠습니다.

내일은 python으로 웹개발할 때 웹페이지와 파이썬 코드가 어느정도까지 잘 분리되는지 확인해봐야겠습니다. 그것 말고도 하스켈을 주목하고 있긴 한데, 보통 호스팅 업체에서는 지원하지 않으니 좀 어렵네요. 제가 서비스하면 또 모르지요. -_-; 아직 투자할 만큼 주머니가 넉넉하지는 않아서 음..

분명 PHP가 좋은 언어이긴 하지만 요즘들어서는 너무 불편하게만 느껴집니다. /아쉽

Warning: file_get_contents() 에러


이 블로그는 나야나에서 유료 웹호스팅으로 사용하고 있는 중인데요, 플러그인을 설치해서 사용하려고 하는 도중
Warning: file_get_contents() [function.file-get-contents]: URL file-access is disabled in the server configuration … 과 같은 에러가 나오는 군요.
구글링해보니 PHP 설정을 변경하여야 한답니다. 그래서 나야나측에 변경요청을 문의한 상태인데 만약 변경이 안된다면 바로 호스팅을 다른 곳으로 옮겨버릴까 하는 생각을 하고 있습니다.
기다려봐야죠.

[PHP] 자유롭게 검색할 수 있도록 폼에서 쿼리문 추출하기

// 검색을 위해 입력된 폼에서 쿼리문을 만들어내는 함수

function combiQuery($tablename, $attributes, $order) { // table name으로 인자를 받는다.

global $HTTP_POST_VARS; // POST 연관배열을 전역변수로 선언하고

for($i = 0; $i < count($HTTP_POST_VARS); $i++) { // count를 계산

if(current($HTTP_POST_VARS)) $formcount++;

next($HTTP_POST_VARS);

}

reset($HTTP_POST_VARS); // 배열 포인터를 처음으로 돌림

if($formcount != 0) { // 입력된 폼이 하나 이상일 때

$query = “select “.$attributes.” from “.$tablename.” where”; // 쿼리문에 where 절 삽입

for($i = 0; $i < count($HTTP_POST_VARS); $i++) { // 폼의 최대값만큼 루프를 돌며

if(current($HTTP_POST_VARS)) { // POST 연관배열에 값이 있을 때

$query .= ” “.key($HTTP_POST_VARS).” like ‘%”.current($HTTP_POST_VARS).”%’”; // 쿼리문에 like 조건 절 삽입

$formcount–; // n개의 조건이면 n-1만큼 and 절 삽입

if($formcount != 0) $query .= ” and”; // n개의 조건이면 n-1만큼 and 절 삽입

next($HTTP_POST_VARS); // POST 연관배열의 다음 값.. 계속해서 연관배열의 값을 조사하여 루프

}

else next($HTTP_POST_VARS); // 연관배열의 현재 참조시 값이 없으면 다시 루프

}

$query .= ” order by “.$order;

}

else $query = “select “.$attributes.” from “.$tablename.” order by “.$order; // 폼에 값이 없을 때 기본 쿼리문

return $query; // 계산된 쿼리문 리턴

}

 

———————————————–

그러니까 method가 post로 넘어온 폼은 $HTTP_POST_VARS에 저장된는데 이것을 처리해서 쿼리를 만들어내는 함수이다.

폼에 여러 개의 textbox가 있을 때 or로 검색 가능하게 하는 것이지.

문제는 textbox에 아무것도 들어있지 않아도 완전한 null이 아니라는 것이다.

(그래서 count()를 해 보면 textbox나 기타 폼의 숫자만큼 count된다. 따라서 그만큼 루프.)

따라서 새로운 배열에 복사하는데 값이 “”(just like null ^^)가 아닐 때 current()를 사용하여 값을 복사.

복사한 배열의 index가 0일 때는 where절이 붙지 않고

index가 n 일 때 n-1 만큼의 and 절이 붙는다.

그래서 formcount를 계산하여 formcount가 n-1만큼 and절을 삽입한다.

이것이 이 함수의 비법이다.

 

^^v

 

 

 

* 정말 먼 옛날에 만들었던 코드이다. 2003년 즈음이던가..