php를 htaccess 없이 사용
rewrite 기능은 경로를 재 작성하는데 주로 유용하게 쓰여요.
노드js나 커스텀으로 만든 웹 서버 어플리케이션에서는 htaccess를 지원하기 곤란한 상황이 생기는데요.
사실 htaccess는 좀 요즘 보기 드문 문법 .. 그 밖에 .. 추가 구현에 필요한 노력.
htaccess를 쓰지 않으면 안 되는 것도 아니므로 과감하게 버리는 것도 좋은 선택이지 않겠나요.
사실 이건 또 asp.net 얘기에요.
php를 asp.net에 이케이케 붙였지만 직접 사용하면서 발견한 곤란한 점이 자꾸 건드리다 보니 처음과 많이 달라졌어요!
그럼에도 아직 남겨 놓은 부분이 있는데 .. 이거 벌집을 잘못 건드린 느낌이어요.
htaccess 기능을 route.php 파일 이름의 스크립트가 대신해요. 여기서 재귀 작동은 버렸어요. htaccess는 하위 폴더에 위치해도 중첩하게 작동하는데 개발자나 컴퓨터에게 좋은 방식은 아니라고 봐요!
http 404에 대한 처리도 필요하여 스크립트에 리턴 값을 판정하고 페이지 없음을 나타내면서 php 미들웨어가 먼저 실행되어서 닷넷 경로도 항상 route.php를 먼저 실행하는 문제점도 있었고 ..
이렇게 .. php에 아무런 처리도 하지 않는 경우에도 인터프리터를 일단 실행 .. (+ 1개 멀티 스레드 소비)
순서 | 1 | 2 | 3 |
|---|---|---|---|
요청 | PhpMiddleWare [>종료] | AspController [>종료] | 404 [>종료] |
그러면서 아 .. 봐버렸다. [1] php_execute_script 함수 내부에는 심지어 스크립트에서 리턴 시킨 벨류를 버려요. 최종적으로 zend_execute_scripts 함수의 두번째 인자에 zval 구조체의 파래미터를 넘겨주는데 변수 이름이 심지어 retval .. 정말 어질어질 하여요. 그 밖에 사용하지 않는 부분을 빼고 재작성하면 코드는 10줄 내외이어요.
[1] php-src/main/main.c at master · php/php-src · GitHub
asp.net 미들웨어는 RequestDelegate를 실행하면 다음 미들웨어를 처리하는 체인 형태의 구조인데 결국에는 다음번 최종 체인인 asp.net을 먼저 처리한 다음 context.Response.HasStarted 상태를 확인하고 종료하도록 했어요.
php는 무거운 편이어요. 차라리 이렇게 하는 것이 낫지 않겠나요. (대충.. 최소응답 시간 asp 6ms, php 18ms)
순서 | 1 | 2 | 3 |
|---|---|---|---|
요청 | AspController [>종료] | PhpMiddleWare [>종료] | 404 [>종료] |
일단 요청에 대한 출력을 건드리면 저 값은 true 가 되는데 php처리기는 처음부터 고성능을 염두 한 것이 아니어서 분기문 등 .. 뭐 .. 느려져도 신경 안 쓸래요 ..
이런 부분들에 고집을 부릴 수록 몸이 고생을 하는 것이지 않겠나요.
