}
/* }}} */
-/* {{{ proto bool http_match_modified([int timestamp])
+/* {{{ proto 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.
PHP_FUNCTION(http_match_modified)
{
long t = -1;
+ zend_bool for_range = 0;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &t) != SUCCESS) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|lb", &t, &for_range) != SUCCESS) {
RETURN_FALSE;
}
t = (long) time(NULL);
}
- RETURN_BOOL(http_modified_match("HTTP_IF_MODIFIED_SINCE", t) || http_modified_match("HTTP_IF_UNMODIFIED_SINCE", t));
+ if (for_range) {
+ RETURN_BOOL(http_modified_match("HTTP_IF_UNMODIFIED_SINCE", t));
+ }
+ RETURN_BOOL(http_modified_match("HTTP_IF_MODIFIED_SINCE", t));
}
/* }}} */
-/* {{{ proto bool http_match_etag(string etag)
+/* {{{ proto 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.
{
int etag_len;
char *etag;
+ zend_bool for_range = 0;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &etag, &etag_len) != SUCCESS) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|b", &etag, &etag_len, &for_range) != SUCCESS) {
RETURN_FALSE;
}
- RETURN_BOOL(http_etag_match("HTTP_IF_NONE_MATCH", etag) || http_etag_match("HTTP_IF_MATCH", etag));
+ if (for_range) {
+ RETURN_BOOL(http_etag_match("HTTP_IF_MATCH", etag));
+ }
+ RETURN_BOOL(http_etag_match("HTTP_IF_NONE_MATCH", etag));
}
/* }}} */
convert_to_string_ex(&zdata);
http_send_header("Accept-Ranges: bytes");
- RETURN_SUCCESS(http_send_data(zdata));
+ RETURN_SUCCESS(http_send_data(Z_STRVAL_P(zdata), Z_STRLEN_P(zdata)));
}
/* }}} */
*/
PHP_FUNCTION(http_send_file)
{
- zval *zfile;
+ char *file;
+ int flen = 0;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &zfile) != SUCCESS) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &file, &flen) != SUCCESS) {
+ RETURN_FALSE;
+ }
+ if (!flen) {
RETURN_FALSE;
}
- convert_to_string_ex(&zfile);
http_send_header("Accept-Ranges: bytes");
- RETURN_SUCCESS(http_send_file(zfile));
+ RETURN_SUCCESS(http_send_file(file));
}
/* }}} */
* 0 => array(
* 'Status' => '200 Ok',
* 'Content-Type' => 'text/plain',
+
* 'Content-Language' => 'en-US'
* ),
* 1 => "Hello World!"
*/
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);
* - 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 take
* </pre>
*
* The optional third parameter will be filled with some additional information
* }
* return false;
* }
- *
* if (!http_auth_basic_cb('auth_cb')) {
* die('<h1>Authorization failed</h1>');
* }
/* }}}*/
/* {{{ Sara Golemons http_build_query() */
-#ifndef ZEND_ENGINE_2
+#ifndef ZEND_ENGINE_2
/* {{{ proto string http_build_query(mixed formdata [, string prefix])
Generates a form-encoded query string from an associative array or object. */
* End:
* vim600: noet sw=4 ts=4 fdm=marker
* vim<600: noet sw=4 ts=4
- */
\ No newline at end of file
+ */
+