[질문] POST 데이터가 Apache에서부터 넘어오지 않습니다.

HiHi의 이미지

안녕하세요~

음.. PHP에서 POST 데이터를 받지 못하는 현상이 생겨 질문드립니다.
클라이언트로 부터 넘어오는 POST 데이터의 형식이 틀려 PHP에서 못받는
경우가 아니라, 아예 POST 데이터를 아파치에서 부터 받지 못하는군요.
POST 데이터의 형식이 틀리다 하더라도, $HTTP_RAW_POST_DATA에는
POST 값이 있어야 하는데 $HTTP_RAW_POST_DATA에도
값이 없군요( php.ini 에서 always_populate_raw_post_data = On 으로 했습니다).

더욱이 문제는 POST 이 항상 안오는게 아니라 열번중에 1번 정도 안오는군요.
하도 이상해서 apache의 스택 트레이스를 걸어 보았더니,
신기한점을 발견 하였습니다.

apache가 POST 데이터를 다 받지도 않았는데, PHP 코드를 호출해서
PHP코드상에서는 $HTTP_RAW_POST_DATA가 없는걸로 나오더군요.

스택 스레이스한걸 중요한 부분만 올려봅니다.

 
...생략
7223  read(6, "POST /myoffice/ezOrgan/OrganInfo/GetDeptMemberList.php HTTP/1.1\r\nAccept: */*\r\nAccept-Language: ko\r\nReferer: http://XX.74.182.XX/myoffice/ezEmail/receiverChoose.php?defaultwin=TO\r\nAccept-Encoding: gzip, deflate\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\r\nHost: XX.74.182.XX\r\nContent-Length: 137\r\nConnection: Keep-Alive\r\nCache-Control: no-cache\r\nCookie: Login[UserID]=hihi; Login[chkID]=2; AUTH_USER=HIHI; AUTH_PASSWORD=13adb4e65fad618975c7dbd8705ecad2; PHPSESSID=3fb2 ....
FD 6 번에서 클라이언트의 HTTP 요청을 받았습니다. 보시다시피 POST 형식이구요.
중요한 Content-Length는 137입니다. 즉 POST 데이터가 있다는 소리겠죠.

...생략
7223  rt_sigaction(SIGPIPE, {SIG_IGN}, {SIG_IGN}, 8) = 0
7223  read(6, "<DATA><DEPTID>ST001</DEPTID><CELL>displayname;description;title;telephonenumber;company</CELL><PROP>mail</PROP><TYPE>user</TYPE></DATA>\r\n", 4096) = 137
FD 6 번에 POST 데이터가 도착했습니다. 137 바이트죠.

...생략
7223 lstat64("/usr/local/apache/htdocs/myoffice/ezOrgan/OrganInfo/GetDeptMemberList.php", {st_mode=S_IFREG|0775, st_size=3970, ...}) = 0
PHP를 처리하기위해 php파일을 엽니다. 이미 POST 값을 읽었기 때문에, $HTTP_RAW_POST_DATA에는 ""<DATA><DEPTID>ST001</DEPTID><CELL>displayname;description;title;telephonenumber;company</CELL><PROP>mail</PROP><TYPE>user</TYPE></DATA>" 값이 들어가 있습니다.

...생략 PHP 처리부분
7223  writev(6, [{"HTTP/1.1 200 OK\r\nDate: Mon, 25 Aug 2003 13:51:42 GMT\r\nServer: Apache/1.3.27 (Unix) PHP/4.3.0\r\nX-Powered-By: PHP/4.3.0\r\nExpires: Thu, 19 Nov 1981 08:52:00 GMT\r\nCache-Control: no-store, no-cache, must-rev...
처리된 PHP 결과를 Client(FD 6)에게 보내줍니다.

이렇게 되면 정상적인 POST 처리가 되었습니다. 보시다시피 아파치가
POST 를 받은 후, PHP를 호출하죠. 다음은 이상하게도
POST가 오지 않았는데, PHP를 호출하는 부분입니다.

...생략
7223  read(6, "POST /myoffice/ezOrgan/OrganInfo/GetDeptMemberList.php HTTP/1.1\r\nAccept: */*\r\nAccept-Language: ko\r\nReferer: http://XX.74.182.XXX/myoffice/ezEmail/receiverChoose.php?defaultwin=TO\r\nAccept-Encoding: gzip, deflate\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\r\nHost: XX.74.182.XXX\r\nContent-Length: 137\r\nConnection: Keep-Alive\r\nCache-Control: no-cache\r\nCookie: Login[UserID]=hihi; Login[chkID]=2; AUTH_USER=HIHI; AUTH_PASS...
FD 6 번에서 클라이언트의 HTTP 요청을 받았습니다. 아까와 마찬가지와 POST 형식이구요.
중요한 Content-Length는 137입니다. 즉 POST 데이터가 있다는 소리겠죠.

7223  rt_sigaction(SIGUSR1, {SIG_IGN}, {0x40ba3830, [], SA_INTERRUPT|0x4000000}, 8) = 0
7223  time(NULL)                        = 1061819515
7223  stat64("/usr/local/apache/htdocs/myoffice/ezOrgan/OrganInfo/GetDeptMemberList.php", {st_mode=S_IFREG|0775, st_size=3970, ...}) = 0
PHP를 처리하기위해 php파일을 엽니다. 아까와는 다르게 POST데이터가 아직 도착하지 않았습니다.

...생략 PHP 처리부분
7223  read(6, "<DATA><DEPTID>ST001</DEPTID><CELL>displayname;description;title;telephonenumber;company</CELL><PROP>mail</PROP><TYPE>user</TYPE></DATA>\r\n", 4096) = 137
지금에서야 POST를 읽었습니다. PHP부분을 수행하는 도중에 POST를 읽은 것이지요. 즉, PHP 코드 에서는 POST 데이터가 없는걸로 수행됩니다.

...생략 PHP 처리 완료
7223  write(6, "HTTP/1.1 200 OK\r\nDate: Mon, 25 Aug 2003 13:51:55 GMT\r\nServer: Apache/1.3.27 (Unix) PHP/4.3.0\r\nX-Powered-By: PHP/4.3.0\r\nExpires: Thu, 19 Nov 1981 08:52:00 GMT\r\nCache-Control: no-store, no-cache, mus...
PHP 처리가 끝났습니다. 단, PHP에서는 POST 데이터가 없는걸($HTTP_RAW_POST_DATA에는 "" 값이 있습니다)로 실행된거죠.

이와 같은 현상이 나타납니다. 서버 환경
apache-2.0.47 + PHP 4.3.3 + Oracle8i
apache-1.3.28 + PHP 4.3.3 + Oracle8i
apache-1.3.27 + PHP 4.3.3 + Oracle8i
apache-1.3.27 + PHP 4.3.0 + Oracle8i
와 같은 조합으로 해보았는데 마찬가지 더군요.

제 생각으로는 아파치에서 POST 데이터를 read 후 PHP 코드를 실행해야 하는것
같은데, 혹시 이런 현상 겪어보신분 조언부탁드립니다.
이틀 동안 개삽질 중입니다. T-T

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.