사실 CGI는 CLI 앱입니까? 생각했기 때문에 시도했습니다.
문득 깨달음
이번에 CGI는 말하지 않는다? 몰라? 그런 코타 좋아요.
문득 생각했어요, CGI와 CLI 앱은 본질적으로 같은 것이 아닐까.
왜냐하면 PHP는 이런 식으로 써 브라우저로 액세스하면
いろはにほへと
라고 나오지 않습니까?그리고 이것을
php index.php
같아서 두드려도 いろはにほへと
index.php
<?php
echo 'いろはにほへと';
그래, 알아차렸어요.
사실 CGI는 본질적으로는 CLI 앱이 아닐까…
오히려 무엇이 다를까요?
메커니즘을 조사해 보겠습니다.
신경이 쓰였기 때문에 어떤 구조로 움직이고 있는지 가볍게 조사하기 위해서, 굳이 C 언어로 CGI를 만들어 보는 것에.
지금까지 C 언어로 CGI 라든지 광인이 하는 일은 인상이 있었습니다만, 의외로 해 보면 큰 일은 없다고 할까, 아무튼 큰 것을 만들지 않았기 때문에 당연합니다만…
이것이 무엇을 하고 있는가 하면(자), 환경 변수를 취해 와 표준 출력에 토하고 있을 뿐이므로, 어딘가에서 어떻게 봐도 CLI 앱입니다.
index.c
#include <stdio.h>
// getenv
#include <stdlib.h>
// strcmp
#include <string.h>
/*
get path for after hostname
*/
char* getPath(void) {
char *path = getenv("REQUEST_URI");
return path;
}
int main(void) {
// put http header
printf("Content-type: text/plain\n\n");
char *path = getPath();
// show current path
printf("Current path: %s\n", path);
// routing, required .htaccess to serve on apache
if (strcmp(path, "/foo") == 0) {
printf("hoge");
} else if (strcmp(path, "/bar") == 0) {
printf("piyo");
} else {
printf("fuga");
}
return 0;
}
실제로 움직여 보았습니다.
CGI로
CLI로서
도착한 결론
아마도 이것은 동작 환경이 중요하고, 아마 CGI와 CLI 앱을 만드는데 큰 차이는 없을까요? 라는 것이 도착한 결론입니다.
이야마 인수를
argv
로부터 취할지 환경 변수로부터 취하는지는 상당히 다른 생각도 합니다만, 기본적으로 표시하고 싶은 것을 표준 출력에 토하는 점은 동일하고, 따로 CGI 로 TCP 소켓을 건드리는 것도 아니다 그래서, 비슷한 것은? 라고 생각한 대로.이것은 어쩌면 HTTP 서버를 통해 표준 출력이 HTTP 응답으로 출력되고 X 서버를 통과하면 화면에 프린터 서버를 통과하면 종이와 같은 상태로 어디서 서버를 통해 표준 출력을 할지에 나와 오는 곳이 바뀌는 건가? 라고 느꼈습니다. (세밀한 말을 하면 더 복잡해 보인다)
어쩌면 Apache 라든지의 HTTP 서버는 TCP 소켓을 좋은 느낌으로 해 주고, HTTP 헤더를 환경 변수에 넣어 CGI 스크립트를 기동이라고 하는 곳을 해 주고 있는 것이 아닐까 생각했기 때문에, 여가 시간에 TCP 통신으로부터 시작하는 HTTP 서버의 구현에서도 해보고 싶은 곳이군요…
덤
어쨌든 PHP의 CGI를 CLI로 움직일 수있는 사람입니다.
index.php
<?php
echo $_SERVER['REQUEST_URI'];
Reference
이 문제에 관하여(사실 CGI는 CLI 앱입니까? 생각했기 때문에 시도했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Lycolia/items/a1a6e1abf1edd066caea텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)