Cập nhật:Làm cách nào để chuyển dữ liệu POST tới PHP-CGI?
Trong một cơn tuyệt vọng, tôi đã làm như sau trong một vỏ:
REDIRECT_STATUS=true
SCRIPT_FILENAME=/var/www/...
REQUEST_METHOD=POST
GATEWAY_INTERFACE=CGI/1.1
export REDIRECT_STATUS
export SCRIPT_FILENAME
export REQUEST_METHOD
export GATEWAY_INTERFACE
echo "test=1" | php-cgi
... và VẪN không $_POST
biến được hiển thị trong kết quả của việc này:
<?php var_dump($_POST); ?>
Tôi đang cố tạo một máy chủ web nhỏ có giao diện với php-cgi
nhị phân. Tuy nhiên, mọi thứ sẽ không tốt lắm. Mã nhị phân php-cgi
xử lý chính xác các yêu cầu GET. Khi nói đến các yêu cầu POST, mảng $_POST
bị trống, ngay cả khi mọi thứ đang được POST.
Tôi đã kiểm tra các tiêu đề HTTP được đưa vào mã nhị phân php-cgi
và chúng thực sự bao gồm dữ liệu POST và tiêu đề Content-type: application/x-www-form-urlencoded
.
Điều gì có thể giữ mã nhị phân php-cgi
khi thấy có dữ liệu POST được bao gồm trong yêu cầu?
tôi tiến bộ, tôi đã đào lên một số nội dung từ PHP source code:
-
468: static int sapi_cgi_read_post(char *buffer, uint count_bytes TSRMLS_DC)
(. Tôi không có ý tưởng mà chức năng này được gọi từ)
Sau khi đọc câu trả lời dưới đây, tôi đã cố gắng:
<?php
var_dump($HTTP_RAW_POST_DATA);
?>
... mà mang lại kết quả:
NULL
... chỉ ra rằng một điều gì đó thậm chí còn xa lạ hơn là ở nơi làm việc ở đây.
tôi nhận được gần gũi hơn ... Tôi tìm thấy chức năng này trong /main/php_content_types.c:
SAPI_API SAPI_POST_READER_FUNC (php_default_post_reader)
... và nó có vẻ là mã mà xử lý các yêu cầu POST.
Thời gian để chọn thông qua nguồn PHP: P –
Tôi không có câu trả lời, nhưng dữ liệu POST phải đến bằng thông qua stdin. –
Máy chủ web của bạn có thực hiện đúng đặc điểm kỹ thuật CGI 1.1 không? – joschi