CLI SAPI完全忽略了header()
函數。但它對Apache和CGI SAPI有影響。
簡而言之,CLI SAPI不會在sapi_*_header_*
函數中實現任何邏輯。每例如,對於CLI SAPI,在php_cli.c
:
static int sapi_cli_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC) /* {{{ */
{
/* We do nothing here, this function is needed to prevent that the fallback
* header handling is called. */
return SAPI_HEADER_SENT_SUCCESSFULLY;
}
/* }}} */
所有這些功能基本恢復NULL
,0
或僞造成功的消息。
對於CGI SAPI,在cgi_main.c
:
static int sapi_cgi_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC)
{
char buf[SAPI_CGI_MAX_HEADER_LENGTH];
sapi_header_struct *h;
zend_llist_position pos;
zend_bool ignore_status = 0;
int response_status = SG(sapi_headers).http_response_code;
// Lots of other code...
}
可以使用php-cgi
二進制和一些數組操作很容易使這項工作:
server.php
$script_to_run = 'script.php';
exec('php-cgi '.escapeshellarg($script_to_run), $output);
$separator = array_search("", $output);
$headers = array_slice($output, 0, $separator);
$body = implode("\r\n", array_slice($output, $separator+1));
print_r($headers);
print $body;
的script.php
header('Content-Type: text/plain');
echo 'Hello, World!';
輸出:
Array
(
[0] => X-Powered-By: PHP/5.3.8
[1] => Content-Type: text/plain
)
Hello, World!
[從手冊:](http://docs.php.net/manual/en/function.header.php)*標題將只有在支持SAPI的SAPI正在使用時纔可以訪問和輸出。* – Gordon
您能否打印由服務器腳本發送給瀏覽器的樣本響應,該響應將包含標題和正文? –