[php] 양식 제출시 PHP $ _POST 배열이 비어 있음

내 개발 상자 (Ubuntu / PHP5 + / MySQL5 +)에서 완벽하게 작동하는 사용자 지정 CMS가 있습니다.

방금 클라이언트의 프로덕션 상자로 옮겼고 이제 모든 양식 제출이 빈 $ _POST 배열로 표시됩니다.

데이터가 실제로 전달 file_get_contents('php://input');되고 있고 데이터가 잘 표시 되는지 확인하는 트릭을 찾았 습니다. $_POST/ $_REQUEST배열은 항상 비어 있습니다.

또한 방화범 ( application/x-www-form-urlencoded; charset=utf-8)을 통해 콘텐츠 유형 헤더가 올바른지 확인했습니다 .

이 문제는 양식이 AJAX를 통해 제출되는지 또는 일반 양식 제출인지에 관계없이 발생합니다.

어떤 도움이라도 대단히 감사합니다!



답변

이 질문은 양식을 통한 POST에 관한 것이지만 JSON 콘텐츠 유형으로 게시 할 때 유사한 문제에 대한 답변을 찾고 있습니다. 시간이 많이 걸리므로 답을 찾고 공유하고 싶었습니다.

JSON 콘텐츠 유형을 사용할 때 $ _POST 배열이 채워지지 않습니다 (내가 믿는 다중 파트 형식에서만).

문제를 해결하기 위해 작업 한 내용은 다음과 같습니다.

$rest_json = file_get_contents("php://input");
$_POST = json_decode($rest_json, true);

이것이 누군가를 돕기를 바랍니다!


답변

또 다른 가능한 원인이 있습니다. 제 양식이 WWW없이 domain.com에 제출되었습니다. “WWW”를 추가하기 위해 자동 리디렉션을 설정했습니다. 프로세스에서 $ _POST 배열이 비워졌습니다. 이 문제를 해결하려면 www.domain.com에 제출하기 만하면되었습니다.


답변

비슷한 문제가있었습니다. 간단한 수정으로 판명되었습니다. 내가 가진 형태로

<form action = “directory”method = “post”>

여기서 directory는 디렉토리의 이름입니다. 내 POST 어레이가 완전히 비어 있습니다. 내 브라우저에서 URL을 보았을 때 끝에 슬래시가 표시되었습니다.

내 작업 끝에 슬래시를 추가하면 트릭이 발생했습니다.

<form action = “directory /”method = “post”>

내 $ _POST 어레이가 다시 가득 찼습니다!


답변

php.ini에서 다음을 확인하십시오.

  • track_vars (아주 오래된 PHP 버전에서만 사용 가능) On
  • variables_order 편지를 포함 P
  • post_max_size 적절한 값 (예 : 8MB)으로 설정됩니다.
  • (수호신 패치를 사용하는 경우) suhosin.post.max_varssuhosin.request.max_vars대형 충분합니다.

내 두 번째 제안이 문제를 해결할 것이라고 생각합니다.


답변

HTTP에서 HTTPS로 게시 할 때 $_POST비어있는 것으로 나타났습니다 . 이것은 양식을 테스트하는 동안 발생했지만 그것을 깨닫기까지 시간이 걸렸습니다.


답변

비슷하지만 약간 다른 문제를 발견했으며 문제를 이해하는 데 2 ​​일이 걸렸습니다.

  • 제 경우에도 POST 배열이 비어 있습니다.

  • 그런 다음 file_get_contents ( ‘php : // input’); 그리고 그것도 비어있었습니다.

나중에 브라우저가 POST 제출 후로드 된 페이지를 새로 고치면 양식 데이터를 다시 제출할지 확인을 요청하지 않는 것을 발견했습니다. 직접 새로 고침 페이지였습니다. 그러나 양식 URL을 다른 URL로 변경하면 POST를 제대로 전달하고 페이지를 새로 고치려고 할 때 데이터를 다시 제출하도록 요청했습니다.

그런 다음 실제 URL에 무엇이 잘못되었는지 확인했습니다. URL에 결함이 없었지만 URL에 index.php가없는 폴더를 가리키고 있으며 index.php에서 POST를 확인했습니다.

여기에서 /에서 /index.php 로의 리디렉션으로 인해 POST 데이터가 손실되고 URL에 index.php를 추가하여 테스트 된 URL이 발생하는지 의심했습니다.

작동했습니다.

누군가가 도움이 될 수 있도록 여기에 게시했습니다.


답변

이 시점에서 우아한 해결책은 없지만이 문제에 직면 한 다른 사람들의 향후 참조를 위해 내 결과를 공유하고 싶었습니다. 문제의 원인은 .htaccess 파일에있는 2 개의 재정의 된 php 값이었습니다. 파일 업로드에 대한 파일 크기 제한을 기본 8MB에서 더 큰 값으로 늘리기 위해이 두 값을 간단히 추가했습니다. 기본보다 크든 작든 htaccess 파일에이 두 값만 있으면 문제가 발생하는 것으로 나타났습니다. .

php_value post_max_size xxMB
php_value upload_max_filesize xxMB

모든 suhosin.post.xxx/suhosin.upload.xxx vars에 대한 제한을 높이기 위해 추가 변수를 추가했지만 불행히도이 문제에 영향을 미치지 않았습니다.

요약하면 여기서 “이유”를 설명 할 수는 없지만 근본 원인을 확인했습니다. 내 느낌은 이것이 궁극적으로 suhosin / htaccess 문제이지만 불행히도 위의 2 PHP 재정의 값을 제거하는 것 외에는 해결할 수 없었던 문제입니다.

내가 이것을 알아내는 데 몇 시간을 죽였을 때 이것이 미래의 누군가에게 도움이되기를 바랍니다. 시간을내어 도와 주신 모든 분들께 감사드립니다 (MrMage, Andrew)