我正在使用php://input
从file_get_contents
读取POST数据,但我注意到某些客户端没有发送正确的标头信息,即Content-Length
标头更长比内容发送的实际长度。这导致file_get_contents
等待占用宝贵的Apache线程。
我能够使用以下代码模拟该问题:
<?php
$ctx = stream_context_create(array(
'http' => array(
'timeout' => 1,
)
) );
$input = file_get_contents('php://input', 0, $ctx);
print_r( $input );
使用以下测试命令调用脚本:
time curl -H 'Content-Type: application/json' -H 'Content-Length: 100' -X POST --verbose -k -d 'This is test data.' http://localhost/form.php
您可能会注意到,我将Content-Length
设置为100,而实际测试数据长度仅为18。
我已尝试使用file_get_contents
上的上下文来设置超时,但出于某种原因,这不会被考虑在内。
如何在合理的时间内(例如1或2秒)使file_get_contents
超时?