From: Michael Wallner This function returns a valid HTTP date regarding RFC 822/1123
+ This function returns a valid HTTP date regarding RFC 822/1123 This function returns an absolute URI constructed from url.
-If the url is already abolute but a different proto was supplied,
-only the proto part of the URI will be updated. If url has no
-path specified, the path of the current REQUEST_URI will be taken.
-The host will be taken either from the Host HTTP header of the client
-the SERVER_NAME or just localhost if prior are not available. Some examples:
- This function returns an absolute URI constructed from url.http.c
-void HTTPi_Response::__construct(bool cache, bool gzip)
-
-bool HTTPi_Response::setCache(bool cache)
-
-bool HTTPi_Response::getCache()
-
-bool HTTPi_Response::setGzip(bool gzip)
-
-bool HTTPi_Response::getGzip()
-
-bool HTTPi_Response::setCacheControl(string control[, bool raw = false])
-
-string HTTPi_Response::getCacheControl()
-
-bool HTTPi::setContentType(string content_type)
-
-string HTTPi_Response::getContentType()
-
-bool HTTPi_Response::setContentDisposition(string filename[, bool inline = false])
-
-array HTTPi_Response::getContentDisposition()
-
-bool HTTPi_Response::setETag(string etag)
-
-string HTTPi_Response::getETag()
-
-bool HTTPi_Response::setData(string data)
-
-string HTTPi_Response::getData()
-
-bool HTTPi_Response::setStream(resource stream)
-
-resource HTTPi_Response::getStream()
-
-bool HTTPi_Response::setFile(string file)
-
-string HTTPi_Response::getFile()
-
-int HTTPi_Response::getSize()
-
-string http_date([int timestamp])
-http_functions.c
+string http_date([int timestamp])
+
looking like: "Wed, 22 Dec 2004 11:34:47 GMT"string http_absolute_uri(string url[, string proto])
-
-url = "page.php" => http://www.example.com/current/path/page.php
-url = "/page.php" => http://www.example.com/page.php
-url = "/page.php", proto = "https" => https://www.example.com/page.php
+
string http_absolute_uri(string url[, string proto])
+
+If the url is already abolute but a different proto was supplied,
+only the proto part of the URI will be updated. If url has no
+path specified, the path of the current REQUEST_URI will be taken.
+The host will be taken either from the Host HTTP header of the client
+the SERVER_NAME or just localhost if prior are not available.
+
+Some examples: url = "page.php" => http://www.example.com/current/path/page.php
+ url = "/page.php" => http://www.example.com/page.php
+ url = "/page.php", proto = "https" => https://www.example.com/page.php
This function negotiates the clients preferred language based on its -Accept-Language HTTP header. It returns the negotiated language or -the default language if none match.
The qualifier is recognized and languages without qualifier are rated highest.
The supported parameter is expected to be an array having -the supported languages as array values.
Example: -
--<?php
+
$langs = array(
'en-US',// default
'fr',
'fr-FR',
'de',
'de-DE',
'de-AT',
'de-CH',
);
include './langs/'. http_negotiate_language($langs) .'.php';
?> - -string http_negotiate_language(array supported[, string default = 'en-US'])
+This function negotiates the clients preferred language based on its
+Accept-Language HTTP header. It returns the negotiated language or
+the default language if none match.
+
+The qualifier is recognized and languages without qualifier are rated highest.
+
+The supported parameter is expected to be an array having
+the supported languages as array values.
+
+Example:-
+<?php
$langs = array(
'en-US',// default
'fr',
'fr-FR',
'de',
'de-DE',
'de-AT',
'de-CH',
);
include './langs/'. http_negotiate_language($langs) .'.php';
?>
+
+
+
string http_negotiate_charset(array supported[, string default = 'iso-8859-1'])
-This function negotiates the clients preferred charset based on its -Accept-Charset HTTP header. It returns the negotiated charset or -the default charset if none match.
The qualifier is recognized and charset without qualifier are rated highest.
The supported parameter is expected to be an array having -the supported charsets as array values.
Example: -
--<?php
+
$charsets = array(
'iso-8859-1', // default
'iso-8859-2',
'iso-8859-15',
'utf-8'
);
$pref = http_negotiate_charset($charsets);
if (!strcmp($pref, 'iso-8859-1')) {
iconv_set_encoding('internal_encoding', 'iso-8859-1');
iconv_set_encoding('output_encoding', $pref);
ob_start('ob_iconv_handler');
}
?> - -string http_negotiate_charset(array supported[, string default = 'iso-8859-1'])
+This function negotiates the clients preferred charset based on its
+Accept-Charset HTTP header. It returns the negotiated charset or
+the default charset if none match.
+
+The qualifier is recognized and charset without qualifier are rated highest.
+
+The supported parameter is expected to be an array having
+the supported charsets as array values.
+
+Example:-
+<?php
$charsets = array(
'iso-8859-1', // default
'iso-8859-2',
'iso-8859-15',
'utf-8'
);
$pref = http_negotiate_charset($charsets);
if (!strcmp($pref, 'iso-8859-1')) {
iconv_set_encoding('internal_encoding', 'iso-8859-1');
iconv_set_encoding('output_encoding', $pref);
ob_start('ob_iconv_handler');
}
?>
+
+
+
bool http_send_status(int status)
+bool http_send_status(int status)
Send HTTP status code.
-bool http_send_last_modified([int timestamp])
-This converts the given timestamp to a valid HTTP date and -sends it as "Last-Modified" HTTP header. If timestamp is +
bool http_send_last_modified([int timestamp])
+This converts the given timestamp to a valid HTTP date and
-
+sends it as "Last-Modified" HTTP header. If timestamp is
omitted, current time is sent.bool http_match_modified([int timestamp])
-Matches the given timestamp against the clients "If-Modified-Since" resp. +
bool http_send_content_type([string content_type = 'application/x-octetstream'])
+Sets the content type.
+bool http_send_content_disposition(string filename[, bool inline = false])
+Set the Content Disposition. The Content-Disposition header is very useful
+
+if the data actually sent came from a file or something similar, that should
+be "saved" by the client/user (i.e. by browsers "Save as..." popup window).bool http_match_modified([int timestamp[, for_range = false]])
+Matches the given timestamp against the clients "If-Modified-Since" resp.
-
"If-Unmodified-Since" HTTP headers.bool http_match_etag(string etag)
-This matches the given ETag against the clients +
bool http_match_etag(string etag[, for_range = false])
+This matches the given ETag against the clients
-
"If-Match" resp. "If-None-Match" HTTP headers.bool http_cache_last_modified([int timestamp_or_expires]])
-If timestamp_or_exires is greater than 0, it is handled as timestamp -and will be sent as date of last modification. If it is 0 or omitted, -the current time will be sent as Last-Modified date. If it's negative, -it is handled as expiration time in seconds, which means that if the -requested last modification date is not between the calculated timespan, +
bool http_cache_last_modified([int timestamp_or_expires]])
+If timestamp_or_exires is greater than 0, it is handled as timestamp
-
+and will be sent as date of last modification. If it is 0 or omitted,
+the current time will be sent as Last-Modified date. If it's negative,
+it is handled as expiration time in seconds, which means that if the
+requested last modification date is not between the calculated timespan,
the Last-Modified header is updated and the actual body will be sent.bool http_cache_etag([string etag])
-This function attempts to cache the HTTP body based on an ETag, -either supplied or generated through calculation of the MD5 -checksum of the output (uses output buffering).
If clients "If-None-Match" header matches the supplied/calculated -ETag, the body is considered cached on the clients side and +
bool http_cache_etag([string etag])
+This function attempts to cache the HTTP body based on an ETag,
-
+either supplied or generated through calculation of the MD5
+checksum of the output (uses output buffering).
+
+If clients "If-None-Match" header matches the supplied/calculated
+ETag, the body is considered cached on the clients side and
a "304 Not Modified" status code is issued.string ob_httpetaghandler(string data, int mode)
-For use with ob_start(). -Note that this has to be started as first output buffer. +
string ob_httpetaghandler(string data, int mode)
+For use with ob_start().
-
+Note that this has to be started as first output buffer.
WARNING: Don't use with http_send_*().void http_redirect([string url[, array params[, bool session,[ bool permanent]]]])
-Redirect to a given url. -The supplied url will be expanded with http_absolute_uri(), the params array will -be treated with http_build_query() and the session identification will be appended -if session is true.
Depending on permanent the redirection will be issued with a permanent -("301 Moved Permanently") or a temporary ("302 Found") redirection -status code.
To be RFC compliant, "Redirecting to URI." will be displayed, +
void http_redirect([string url[, array params[, bool session,[ bool permanent]]]])
+Redirect to a given url.
-
+The supplied url will be expanded with http_absolute_uri(), the params array will
+be treated with http_build_query() and the session identification will be appended
+if session is true.
+
+Depending on permanent the redirection will be issued with a permanent
+("301 Moved Permanently") or a temporary ("302 Found") redirection
+status code.
+
+To be RFC compliant, "Redirecting to URI." will be displayed,
if the client doesn't redirect immediatly.bool http_send_data(string data)
+bool http_send_data(string data)
Sends raw data with support for (multiple) range requests.
-bool http_send_file(string file)
+bool http_send_file(string file)
Sends a file with support for (multiple) range requests.
-bool http_send_stream(resource stream)
+bool http_send_stream(resource stream)
Sends an already opened stream with support for (multiple) range requests.
-bool http_content_type([string content_type = 'application/x-octetstream'])
-Sets the content type.
-bool http_content_disposition(string filename[, bool inline = false])
-Set the Content Disposition. The Content-Disposition header is very useful -if the data actually sent came from a file or something similar, that should -be "saved" by the client/user (i.e. by browsers "Save as..." popup window).
-string http_chunked_decode(string encoded)
-This function decodes a string that was HTTP-chunked encoded. +
string http_chunked_decode(string encoded)
+This function decodes a string that was HTTP-chunked encoded.
-
Returns false on failure.array http_split_response(string http_response)
-This function splits an HTTP response into an array with headers and the -content body. The returned array may look simliar to the following example:
--<?php
+
array(
0 => array(
'Status' => '200 Ok',
'Content-Type' => 'text/plain',
'Content-Language' => 'en-US'
),
1 => "Hello World!\"
);
?> - -array http_split_response(string http_response)
+This function splits an HTTP response into an array with headers and the
+content body. The returned array may look simliar to the following example:-
+<?php
array(
0 => array(
'Status' => '200 Ok',
'Content-Type' => 'text/plain',
'Content-Language' => 'en-US'
),
1 => "Hello World!"
);
?>
+
+
+
array http_parse_headers(string header)
- -array http_get_request_headers(void)
- -string http_get(string url[, array options[, array &info]])
-Performs an HTTP GET request on the supplied url.
The second parameter is expected to be an associative -array where the following keys will be recognized: -
-- redirect: int, whether and how many redirects to follow -- unrestrictedauth: bool, whether to continue sending credentials on -redirects to a different host -- proxyhost: string, proxy host in "host[:port]" format -- proxyport: int, use another proxy port as specified in proxyhost -- proxyauth: string, proxy credentials in "user:pass" format -- proxyauthtype: int, HTTP_AUTH_BASIC and/or HTTP_AUTH_NTLM -- httpauth: string, http credentials in "user:pass" format -- httpauthtype: int, HTTP_AUTH_BASIC, DIGEST and/or NTLM -- compress: bool, whether to allow gzip/deflate content encoding -(defaults to true) -- port: int, use another port as specified in the url -- referer: string, the referer to sends -- useragent: string, the user agent to send -(defaults to PECL::HTTP/version (PHP/version))) -- headers: array, list of custom headers as associative array -like array("header" => "value") -- cookies: array, list of cookies as associative array -like array("cookie" => "value") -- cookiestore: string, path to a file where cookies are/will be stored -The optional third parameter will be filled with some additional information -in form af an associative array, if supplied, like the following example: -
--<?php
+
array (
'effective_url' => 'http://localhost',
'response_code' => 403,
'total_time' => 0.017,
'namelookup_time' => 0.013,
'connect_time' => 0.014,
'pretransfer_time' => 0.014,
'size_upload' => 0,
'size_download' => 202,
'speed_download' => 11882,
'speed_upload' => 0,
'header_size' => 145,
'request_size' => 62,
'ssl_verifyresult' => 0,
'filetime' => -1,
'content_length_download' => 202,
'content_length_upload' => 0,
'starttransfer_time' => 0.017,
'content_type' => 'text/html; charset=iso-8859-1',
'redirect_time' => 0,
'redirect_count' => 0,
'private' => '',
'http_connectcode' => 0,
'httpauth_avail' => 0,
'proxyauth_avail' => 0,
)
?> - -array http_parse_headers(string header)
+ +array http_get_request_headers(void)
+ +string http_get(string url[, array options[, array &info]])
+Performs an HTTP GET request on the supplied url.
+
+The second parameter is expected to be an associative
+array where the following keys will be recognized:- redirect: int, whether and how many redirects to follow
+ - unrestrictedauth: bool, whether to continue sending credentials on
+ redirects to a different host
+ - proxyhost: string, proxy host in "host[:port]" format
+ - proxyport: int, use another proxy port as specified in proxyhost
+ - proxyauth: string, proxy credentials in "user:pass" format
+ - proxyauthtype: int, HTTP_AUTH_BASIC and/or HTTP_AUTH_NTLM
+ - httpauth: string, http credentials in "user:pass" format
+ - httpauthtype: int, HTTP_AUTH_BASIC, DIGEST and/or NTLM
+ - compress: bool, whether to allow gzip/deflate content encoding
+ (defaults to true)
+ - port: int, use another port as specified in the url
+ - referer: string, the referer to sends
+ - useragent: string, the user agent to send
+ (defaults to PECL::HTTP/version (PHP/version)))
+ - headers: array, list of custom headers as associative array
+ like array("header" => "value")
+ - cookies: array, list of cookies as associative array
+ like array("cookie" => "value")
+ - cookiestore: string, path to a file where cookies are/will be stored
+ - resume: int, byte offset to start the download from;
+ if the server supports ranges
+ - maxfilesize: int, maximum file size that should be downloaded;
+ has no effect, if the size of the requested entity is not known
+ - lastmodified: int, timestamp for If-(Un)Modified-Since header
+ - timeout: int, seconds the request may take
+ - connecttimeout: int, seconds the connect may takeThe optional third parameter will be filled with some additional information
+in form af an associative array, if supplied, like the following example:-
+<?php
array (
'effective_url' => 'http://localhost',
'response_code' => 403,
'total_time' => 0.017,
'namelookup_time' => 0.013,
'connect_time' => 0.014,
'pretransfer_time' => 0.014,
'size_upload' => 0,
'size_download' => 202,
'speed_download' => 11882,
'speed_upload' => 0,
'header_size' => 145,
'request_size' => 62,
'ssl_verifyresult' => 0,
'filetime' => -1,
'content_length_download' => 202,
'content_length_upload' => 0,
'starttransfer_time' => 0.017,
'content_type' => 'text/html; charset=iso-8859-1',
'redirect_time' => 0,
'redirect_count' => 0,
'private' => '',
'http_connectcode' => 0,
'httpauth_avail' => 0,
'proxyauth_avail' => 0,
)
?>
+
+
+
string http_head(string url[, array options[, array &info]])
-Performs an HTTP HEAD request on the suppied url. -Returns the HTTP response as string. +
string http_head(string url[, array options[, array &info]])
+Performs an HTTP HEAD request on the suppied url.
-
+Returns the HTTP response as string.
See http_get() for a full list of available options.string http_post_data(string url, string data[, array options[, &info]])
-Performs an HTTP POST request, posting data. -Returns the HTTP response as string. +
string http_post_data(string url, string data[, array options[, &info]])
+Performs an HTTP POST request, posting data.
-
+Returns the HTTP response as string.
See http_get() for a full list of available options.string http_post_array(string url, array data[, array options[, array &info]])
-Performs an HTTP POST request, posting www-form-urlencoded array data. -Returns the HTTP response as string. +
string http_post_array(string url, array data[, array options[, array &info]])
+Performs an HTTP POST request, posting www-form-urlencoded array data.
-
+Returns the HTTP response as string.
See http_get() for a full list of available options.bool http_auth_basic(string user, string pass[, string realm = "Restricted"])
-Example: -
--<?php
+
if (!http_auth_basic('mike', 's3c|r3t')) {
die('<h1>Authorization failed!</h1>');
}
?> - -bool http_auth_basic(string user, string pass[, string realm = "Restricted"])
+Example:
-
+<?php
if (!http_auth_basic('mike', 's3c|r3t')) {
die('<h1>Authorization failed!</h1>');
}
?>
+
+
+
bool http_auth_basic_cb(mixed callback[, string realm = "Restricted"])
-Example: -
--<?php
+
function auth_cb($user, $pass)
{
global $db;
$query = 'SELECT pass FROM users WHERE user='. $db->quoteSmart($user);
if (strlen($realpass = $db->getOne($query)) {
return $pass === $realpass;
}
return false;
}
if (!http_auth_basic_cb('auth_cb')) {
die('<h1>Authorization failed</h1>');
}
?> - -bool http_auth_basic_cb(mixed callback[, string realm = "Restricted"])
+Example:
-
+<?php
function auth_cb($user, $pass)
{
global $db;
$query = 'SELECT pass FROM users WHERE user='. $db->quoteSmart($user);
if (strlen($realpass = $db->getOne($query)) {
return $pass === $realpass;
}
return false;
}
if (!http_auth_basic_cb('auth_cb')) {
die('<h1>Authorization failed</h1>');
}
?>
+
+
+
Generated at: Thu, 17 Feb 2005 22:42:18 +0100
+string http_build_query(mixed formdata [, string prefix])
+Generates a form-encoded query string from an associative array or object.
+
+http_methods.c
+void HTTPi_Response::__construct(bool cache, bool gzip)
+ +bool HTTPi_Response::setCache(bool cache)
+ +bool HTTPi_Response::getCache()
+ +bool HTTPi_Response::setGzip(bool gzip)
+ +bool HTTPi_Response::getGzip()
+ +bool HTTPi_Response::setCacheControl(string control[, bool raw = false])
+ +string HTTPi_Response::getCacheControl()
+ +bool HTTPi::setContentType(string content_type)
+ +string HTTPi_Response::getContentType()
+ +bool HTTPi_Response::setContentDisposition(string filename[, bool inline = false])
+ +array HTTPi_Response::getContentDisposition()
+ +bool HTTPi_Response::setETag(string etag)
+ +string HTTPi_Response::getETag()
+ +bool HTTPi_Response::setData(string data)
+ +string HTTPi_Response::getData()
+ +bool HTTPi_Response::setStream(resource stream)
+ +resource HTTPi_Response::getStream()
+ +bool HTTPi_Response::setFile(string file)
+ +string HTTPi_Response::getFile()
+ +void HTTPi_Request::__construct([string url[, long request_method = HTTP_GET]])
+ +void HTTPi_Request::__destruct()
+ +bool HTTPi_Request::setOptions(array options)
+ +array HTTPi_Request::getOptions()
+ +bool HTTPi_Request::setURL(string url)
+ +string HTTPi_Request::getUrl()
+ +bool HTTPi_Request::setMethod(long request_method)
+ +long HTTPi_Request::getMethod()
+ +bool HTTPi_Request::setContentType(string content_type)
+ +string HTTPi_Request::getContentType()
+ +bool HTTPi_Request::setQueryData(mixed query_data)
+ +string HTTPi_Request::getQueryData()
+ +bool HTTPi_Request::addQueryData(array query_params)
+ +void HTTPi_Request::unsetQueryData()
+ +bool HTTPi_Request::addPostData(array post_data)
+ +bool HTTPi_Request::setPostData(array post_data)
+ +array HTTPi_Request::getPostData()
+ +void HTTPi_Request::unsetPostData()
+ +bool HTTPi_Request::addPostFile(string name, string file[, string content_type = "application/x-octetstream"])
+ +array HTTPi_Request::getPostFiles()
+ +void HTTPi_Request::unsetPostFiles()
+ +array HTTPi_Request::getResponseData()
+ +array HTTPi_Request::getResponseHeaders()
+ +string HTTPi_Request::getResponseBody()
+ +array HTTPi_Request::getResponseInfo()
+ +bool HTTPi_Request::send()
+ +
+Generated at: Fri, 4 Mar 2005 14:02:55 +0100
- + \ No newline at end of file diff --git a/funcsummary.php b/funcsummary.php new file mode 100644 index 0000000..f5330e6 --- /dev/null +++ b/funcsummary.php @@ -0,0 +1,87 @@ +%s\n", highlight_string($m[1], true)); +} +function mf($f, &$m) +{ + return preg_match_all( + '/\/\* *\{\{\{ *proto (.*?)(\n|$)(.*?)PHP_(?:FUNCTION|METHOD)\((.*?)\)/s', + file_get_contents($f), $m); +} +function ff($t) +{ + $t = preg_replace('/^ \* /m', '', trim($t, "*/ \n")); + $t = preg_replace_callback('/(\<\?php.*?\?\>)/s', 'hl', $t); + $t = nl2br(preg_replace('/\n *\* */', "\n", $t)); + $t = preg_replace('/(\
\n)+\(\
\n)+/', '', $t); + $t = preg_replace('/(\
\n)+\<\/pre\>(\
\n)+/', '', $t); + return sprintf('
%s
', ltrim($t, ' *')); +} + +$preface = <<<_PREFACE + + +Function Summary of ext/%s + + + +_PREFACE; + +$footer = <<<_FOOTER +Generated at: %s
+ + +_FOOTER; + +if ($_SERVER['argc'] < 2) { + die("Usage: {$_SERVER['argv'][0]}[ ...]\n"); +} + +printf($preface, basename(getcwd())); + +foreach (array_slice($_SERVER['argv'], 1) as $f) { + if (mf($f, $m)) { + printf(" %s
\n", basename($f)); + foreach ($m[1] as $i => $p) { + printf("%s
\n%s\n", $m[4][$i], $p, ff($m[3][$i])); + } + print "
\n"; + } +} + +printf($footer, date('r')); +?> \ No newline at end of file diff --git a/http.c b/http.c index fdeb84f..7cb3c4c 100644 --- a/http.c +++ b/http.c @@ -478,6 +478,7 @@ PHP_RSHUTDOWN_FUNCTION(http) efree(HTTP_G(ctype)); HTTP_G(ctype) = NULL; } + #ifdef HTTP_HAVE_CURL if (HTTP_G(curlbuf).data) { efree(HTTP_G(curlbuf).data); @@ -486,6 +487,7 @@ PHP_RSHUTDOWN_FUNCTION(http) HTTP_G(curlbuf).free = 0; } #endif + return SUCCESS; } /* }}} */ diff --git a/http_api.c b/http_api.c index b5c9164..d0acbf3 100644 --- a/http_api.c +++ b/http_api.c @@ -1572,7 +1572,7 @@ PHP_HTTP_API STATUS _http_auth_credentials(char **user, char **pass TSRMLS_DC) #ifndef ZEND_ENGINE_2 /* {{{ php_url_encode_hash - Author: Sarah Golemon*/ + Author: Sara Golemon */ PHP_HTTP_API STATUS php_url_encode_hash_ex(HashTable *ht, smart_str *formstr, const char *num_prefix, int num_prefix_len, const char *key_prefix, int key_prefix_len, diff --git a/http_functions.c b/http_functions.c index f1b991d..2e72ab8 100644 --- a/http_functions.c +++ b/http_functions.c @@ -643,9 +643,7 @@ PHP_FUNCTION(http_parse_headers) */ PHP_FUNCTION(http_get_request_headers) { - if (ZEND_NUM_ARGS()) { - WRONG_PARAM_COUNT; - } + NO_ARGS; array_init(return_value); http_get_request_headers(return_value); @@ -682,9 +680,9 @@ PHP_FUNCTION(http_get_request_headers) * - cookies: array, list of cookies as associative array * like array("cookie" => "value") * - cookiestore: string, path to a file where cookies are/will be stored - * - resume: int, byte offset to start the download from; + * - resume: int, byte offset to start the download from; * if the server supports ranges - * - maxfilesize: int, maximum file size that should be downloaded; + * - maxfilesize: int, maximum file size that should be downloaded; * has no effect, if the size of the requested entity is not known * - lastmodified: int, timestamp for If-(Un)Modified-Since header * - timeout: int, seconds the request may take @@ -899,7 +897,6 @@ PHP_FUNCTION(http_auth_basic) * } * return false; * } - * * if (!http_auth_basic_cb('auth_cb')) { * die(' Authorization failed
'); * } diff --git a/package.xml b/package.xml index 1b19cd7..e36653d 100644 --- a/package.xml +++ b/package.xml @@ -31,10 +31,13 @@diff --git a/php_http.h b/php_http.h index 55b5989..447a09b 100644 --- a/php_http.h +++ b/php_http.h @@ -18,7 +18,7 @@ #ifndef PHP_EXT_HTTP_H #define PHP_EXT_HTTP_H -#define PHP_EXT_HTTP_VERSION "0.6.0-dev" +#define PHP_EXT_HTTP_VERSION "0.6.0" /* make compile on Win32 */ #include "php_streams.h" 0.6.0 -2005-02-00 +2005-03-04 alpha