*/
/* $Id$ */
-#define ZEND_ENGINE_2
+
#define _WINSOCKAPI_
#define ZEND_INCLUDE_FULL_WINDOWS_HEADERS
PHP_FE(http_redirect, NULL)
PHP_FE(http_send_status, NULL)
PHP_FE(http_send_last_modified, NULL)
+ PHP_FE(http_send_content_type, NULL)
+ PHP_FE(http_send_content_disposition, NULL)
PHP_FE(http_match_modified, NULL)
PHP_FE(http_match_etag, NULL)
PHP_FE(http_cache_last_modified, NULL)
PHP_FE(http_cache_etag, NULL)
- PHP_FE(http_content_type, NULL)
- PHP_FE(http_content_disposition, NULL)
PHP_FE(http_send_data, NULL)
PHP_FE(http_send_file, NULL)
PHP_FE(http_send_stream, NULL)
# define OBJ_PROP(o) o->zo.properties
# define DCL_PROP(a, t, n, v) zend_declare_property_ ##t(ce, (#n), sizeof(#n), (v), (ZEND_ACC_ ##a) TSRMLS_CC)
# define UPD_PROP(o, t, n, v) zend_update_property_ ##t(o->zo.ce, getThis(), (#n), sizeof(#n), (v) TSRMLS_CC)
+# define SET_PROP(o, n, z) zend_update_property(o->zo.ce, getThis(), (#n), sizeof(#n), (z) TSRMLS_CC)
# define GET_PROP(o, n) zend_read_property(o->zo.ce, getThis(), (#n), sizeof(#n), 0 TSRMLS_CC)
/* {{{ HTTPi */
HTTPi_ME(redirect, http_redirect, NULL)
HTTPi_ME(sendStatus, http_send_status, NULL)
HTTPi_ME(sendLastModified, http_send_last_modified, NULL)
+ HTTPi_ME(sendContentType, http_send_content_type, NULL)
+ HTTPi_ME(sendContentDisposition, http_send_content_disposition, NULL)
HTTPi_ME(matchModified, http_match_modified, NULL)
HTTPi_ME(matchEtag, http_match_etag, NULL)
HTTPi_ME(cacheLastModified, http_cache_last_modified, NULL)
DCL_PROP(PROTECTED, string, eTag, "");
DCL_PROP(PROTECTED, string, dispoFile, "");
DCL_PROP(PROTECTED, string, cacheControl, "public");
+ DCL_PROP(PROTECTED, string, data, "");
+ DCL_PROP(PROTECTED, string, file, "");
+ DCL_PROP(PROTECTED, long, stream, 0);
DCL_PROP(PROTECTED, long, lastModified, 0);
DCL_PROP(PROTECTED, long, dispoInline, 0);
DCL_PROP(PROTECTED, long, cache, 0);
DCL_PROP(PROTECTED, long, gzip, 0);
-
+
DCL_PROP(PRIVATE, long, raw_cache_header, 0);
+ DCL_PROP(PRIVATE, long, send_mode, -1);
}
#define httpi_response_destroy_object _httpi_response_destroy_object
zend_hash_destroy(OBJ_PROP(o));
FREE_HASHTABLE(OBJ_PROP(o));
}
+ efree(o);
}
#define httpi_response_new_object _httpi_response_new_object
{
zend_object_value ov;
httpi_response_object *o;
-
+
o = ecalloc(sizeof(httpi_response_object), 1);
o->zo.ce = ce;
-
- ALLOC_HASHTABLE(o->zo.properties);
- zend_hash_init(o->zo.properties, 0, NULL, ZVAL_PTR_DTOR, 0);
-
+
+ ALLOC_HASHTABLE(OBJ_PROP(o));
+ zend_hash_init(OBJ_PROP(o), 0, NULL, ZVAL_PTR_DTOR, 0);
+ zend_hash_copy(OBJ_PROP(o), &ce->default_properties, (copy_ctor_func_t) zval_add_ref, NULL, sizeof(zval *));
+
ov.handle = zend_objects_store_put(o, httpi_response_destroy_object, NULL, NULL TSRMLS_CC);
ov.handlers = &httpi_response_object_handlers;
-
+
return ov;
}
PHP_ME(HTTPi_Response, setGzip, NULL, ZEND_ACC_PUBLIC)
PHP_ME(HTTPi_Response, getGzip, NULL, ZEND_ACC_PUBLIC)
-/*
+
PHP_ME(HTTPi_Response, setData, NULL, ZEND_ACC_PUBLIC)
PHP_ME(HTTPi_Response, getData, NULL, ZEND_ACC_PUBLIC)
PHP_ME(HTTPi_Response, setStream, NULL, ZEND_ACC_PUBLIC)
PHP_ME(HTTPi_Response, getStream, NULL, ZEND_ACC_PUBLIC)
- PHP_ME(HTTPi_Response, send, NULL, ZEND_ACC_PUBLIC)*/
-
+ PHP_ME(HTTPi_Response, send, NULL, ZEND_ACC_PUBLIC)
+
{NULL, NULL, NULL}
};
{
zend_bool do_cache = 0, do_gzip = 0;
getObject(httpi_response_object, obj);
-
+
if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|bb", &do_cache, &do_gzip)) {
// throw exception
return;
}
-
+
UPD_PROP(obj, long, cache, do_cache);
UPD_PROP(obj, long, gzip, do_gzip);
}
{
zend_bool do_cache = 0;
getObject(httpi_response_object, obj);
-
+
if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "b", &do_cache)) {
RETURN_FALSE;
}
-
+
UPD_PROP(obj, long, cache, do_cache);
RETURN_TRUE;
}
{
zval *do_cache = NULL;
getObject(httpi_response_object, obj);
-
+
if (ZEND_NUM_ARGS()) {
WRONG_PARAM_COUNT;
}
-
+
do_cache = GET_PROP(obj, cache);
RETURN_BOOL(Z_LVAL_P(do_cache));
}
{
zend_bool do_gzip = 0;
getObject(httpi_response_object, obj);
-
+
if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "b", &do_gzip)) {
RETURN_FALSE;
}
-
+
UPD_PROP(obj, long, gzip, do_gzip);
RETURN_TRUE;
}
{
zval *do_gzip = NULL;
getObject(httpi_response_object, obj);
-
+
if (ZEND_NUM_ARGS()) {
WRONG_PARAM_COUNT;
}
-
+
do_gzip = GET_PROP(obj, gzip);
RETURN_BOOL(Z_LVAL_P(do_gzip));
}
int cc_len;
zend_bool raw = 0;
getObject(httpi_response_object, obj);
-
+
if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|b", &ccontrol, &cc_len, &raw)) {
RETURN_FALSE;
}
-
+
if ((!raw) && (strcmp(ccontrol, "public") && strcmp(ccontrol, "private") && strcmp(ccontrol, "no-cache"))) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cache-Control '%s' doesn't match public, private or no-cache", ccontrol);
RETURN_FALSE;
}
-
+
UPD_PROP(obj, long, raw_cache_header, raw);
UPD_PROP(obj, string, cacheControl, ccontrol);
RETURN_TRUE;
{
zval *ccontrol;
getObject(httpi_response_object, obj);
-
+
if (ZEND_NUM_ARGS()) {
WRONG_PARAM_COUNT;
}
-
+
ccontrol = GET_PROP(obj, cacheControl);
RETURN_STRINGL(Z_STRVAL_P(ccontrol), Z_STRLEN_P(ccontrol), 1);
}
char *ctype;
int ctype_len;
getObject(httpi_response_object, obj);
-
+
if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &ctype, &ctype_len)) {
RETURN_FALSE;
}
-
+
if (!strchr(ctype, '/')) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Content type '%s' doesn't seem to contain a primary and secondary part", ctype);
+ php_error_docref(NULL TSRMLS_CC, E_WARNING,
+ "Content type '%s' doesn't seem to contain a primary and a secondary part", ctype);
RETURN_FALSE;
}
-
+
UPD_PROP(obj, string, contentType, ctype);
+
RETURN_TRUE;
}
/* }}} */
{
zval *ctype;
getObject(httpi_response_object, obj);
-
+
if (ZEND_NUM_ARGS()) {
WRONG_PARAM_COUNT;
}
-
+
ctype = GET_PROP(obj, contentType);
RETURN_STRINGL(Z_STRVAL_P(ctype), Z_STRLEN_P(ctype), 1);
}
int file_len;
zend_bool is_inline = 0;
getObject(httpi_response_object, obj);
-
+
if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|b", &file, &file_len, &is_inline)) {
RETURN_FALSE;
}
-
+
UPD_PROP(obj, string, dispoFile, file);
UPD_PROP(obj, long, dispoInline, is_inline);
RETURN_TRUE;
zval *file;
zval *is_inline;
getObject(httpi_response_object, obj);
-
+
if (ZEND_NUM_ARGS()) {
WRONG_PARAM_COUNT;
}
-
+
file = GET_PROP(obj, dispoFile);
is_inline = GET_PROP(obj, dispoInline);
-
+
array_init(return_value);
add_assoc_stringl(return_value, "filename", Z_STRVAL_P(file), Z_STRLEN_P(file), 1);
add_assoc_bool(return_value, "inline", Z_LVAL_P(is_inline));
char *etag;
int etag_len;
getObject(httpi_response_object, obj);
-
+
if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &etag, &etag_len)) {
RETURN_FALSE;
}
-
+
UPD_PROP(obj, string, eTag, etag);
RETURN_TRUE;
}
{
zval *etag;
getObject(httpi_response_object, obj);
-
+
if (ZEND_NUM_ARGS()) {
WRONG_PARAM_COUNT;
}
-
+
etag = GET_PROP(obj, eTag);
RETURN_STRINGL(Z_STRVAL_P(etag), Z_STRLEN_P(etag), 1);
}
/* }}} */
+/* {{{ proto bool HTTPi_Response::setData(string data)
+ *
+ */
+PHP_METHOD(HTTPi_Response, setData)
+{
+ zval *the_data;
+ char *etag;
+ getObject(httpi_response_object, obj);
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &the_data)) {
+ RETURN_FALSE;
+ }
+
+ convert_to_string_ex(&the_data);
+ SET_PROP(obj, data, the_data);
+ UPD_PROP(obj, long, lastModified, http_lmod(the_data, SEND_DATA));
+ UPD_PROP(obj, long, send_mode, SEND_DATA);
+ RETURN_TRUE;
+}
+/* }}} */
+
+/* {{{ proto string HTTPi_Response::getData()
+ *
+ */
+PHP_METHOD(HTTPi_Response, getData)
+{
+ zval *the_data;
+ getObject(httpi_response_object, obj);
+
+ if (ZEND_NUM_ARGS()) {
+ WRONG_PARAM_COUNT;
+ }
+
+ the_data = GET_PROP(obj, data);
+ RETURN_STRINGL(Z_STRVAL_P(the_data), Z_STRLEN_P(the_data), 1);
+}
+/* }}} */
+
+/* {{{ proto bool HTTPi_Response::setStream(resource stream)
+ *
+ */
+PHP_METHOD(HTTPi_Response, setStream)
+{
+ zval *the_stream;
+ php_stream *the_real_stream;
+ char *etag;
+ getObject(httpi_response_object, obj);
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &the_stream)) {
+ RETURN_FALSE;
+ }
+
+ php_stream_from_zval(the_real_stream, &the_stream);
+
+ SET_PROP(obj, stream, the_stream);
+ UPD_PROP(obj, long, lastModified, http_lmod(the_real_stream, SEND_RSRC));
+ UPD_PROP(obj, long, send_mode, SEND_RSRC);
+ RETURN_TRUE;
+}
+/* }}} */
+
+/* {{{ proto resource HTTPi_Response::getStream()
+ *
+ */
+PHP_METHOD(HTTPi_Response, getStream)
+{
+ zval *the_stream;
+ getObject(httpi_response_object, obj);
+
+ if (ZEND_NUM_ARGS()) {
+ WRONG_PARAM_COUNT;
+ }
+
+ the_stream = GET_PROP(obj, stream);
+ RETURN_RESOURCE(Z_LVAL_P(the_stream));
+}
+/* }}} */
+
+/* {{{ proto bool HTTPi_Response::setFile(string file)
+ *
+ */
+PHP_METHOD(HTTPi_Response, setFile)
+{
+ zval *the_file;
+ getObject(httpi_response_object, obj);
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &the_file)) {
+ RETURN_FALSE;
+ }
+
+ convert_to_string_ex(&the_file);
+
+ UPD_PROP(obj, string, file, Z_STRVAL_P(the_file));
+ UPD_PROP(obj, long, lastModified, http_lmod(the_file, -1));
+ UPD_PROP(obj, long, send_mode, -1);
+ RETURN_TRUE;
+}
+/* }}} */
+
+/* {{{ proto string HTTPi_Response::getFile()
+ *
+ */
+PHP_METHOD(HTTPi_Response, getFile)
+{
+ zval *the_file;
+ getObject(httpi_response_object, obj);
+
+ if (ZEND_NUM_ARGS()) {
+ WRONG_PARAM_COUNT;
+ }
+
+ the_file = GET_PROP(obj, file);
+ RETURN_STRINGL(Z_STRVAL_P(the_file), Z_STRLEN_P(the_file), 1);
+}
+/* }}} */
+
+PHP_METHOD(HTTPi_Response, send)
+{
+ zval *do_cache, *do_gzip;
+ getObject(httpi_response_object, obj);
+
+ do_cache = GET_PROP(obj, cache);
+ do_gzip = GET_PROP(obj, gzip);
+
+ /* caching */
+ if (Z_LVAL_P(do_cache)) {
+ zval *cctrl, *etag, *lmod, *ccraw;
+
+ etag = GET_PROP(obj, eTag);
+ lmod = GET_PROP(obj, lastModified);
+ cctrl = GET_PROP(obj, cacheControl);
+ ccraw = GET_PROP(obj, raw_cache_header);
+
+ if (Z_LVAL_P(ccraw)) {
+ http_cache_etag(Z_STRVAL_P(etag), Z_STRLEN_P(etag), Z_STRVAL_P(cctrl), Z_STRLEN_P(cctrl));
+ http_cache_last_modified(Z_LVAL_P(lmod), Z_LVAL_P(lmod) ? Z_LVAL_P(lmod) : time(NULL), Z_STRVAL_P(cctrl), Z_STRLEN_P(cctrl));
+ } else {
+ char cc_header[42] = {0};
+ sprintf(cc_header, "%s, must-revalidate, max-age=0", Z_STRVAL_P(cctrl));
+ http_cache_etag(Z_STRVAL_P(etag), Z_STRLEN_P(etag), cc_header, strlen(cc_header));
+ http_cache_last_modified(Z_LVAL_P(lmod), Z_LVAL_P(lmod) ? Z_LVAL_P(lmod) : time(NULL), cc_header, strlen(cc_header));
+ }
+ }
+
+ /* gzip */
+ if (Z_LVAL_P(do_gzip)) {
+ /* ... */
+ }
+
+ /* content type */
+ {
+ zval *ctype = GET_PROP(obj, contentType);
+ if (Z_STRLEN_P(ctype)) {
+ http_send_content_type(Z_STRVAL_P(ctype), Z_STRLEN_P(ctype));
+ } else {
+ http_send_content_type("application/x-octetstream", sizeof("application/x-octetstream") - 1);
+ }
+ }
+
+ /* content disposition */
+ {
+ zval *dispo_file = GET_PROP(obj, dispoFile);
+ if (Z_STRLEN_P(dispo_file)) {
+ zval *dispo_inline = GET_PROP(obj, dispoInline);
+ http_send_content_disposition(Z_STRVAL_P(dispo_file), Z_STRLEN_P(dispo_file), Z_LVAL_P(dispo_inline));
+ }
+ }
+
+ /* send */
+ {
+ zval *send_mode = GET_PROP(obj, send_mode);
+ switch (Z_LVAL_P(send_mode))
+ {
+ case SEND_DATA:
+ {
+ RETURN_SUCCESS(http_send_data(GET_PROP(obj, data)));
+ }
+
+ case SEND_RSRC:
+ {
+ php_stream *the_real_stream;
+ zval *the_stream = GET_PROP(obj, stream);
+ php_stream_from_zval(the_real_stream, &the_stream);
+ RETURN_SUCCESS(http_send_stream(the_real_stream));
+ }
+
+ default:
+ {
+ RETURN_SUCCESS(http_send_file(GET_PROP(obj, file)));
+ }
+ }
+ }
+}
+
#endif /* ZEND_ENGINE_2 */
/* {{{ http_module_entry */
}
/* }}} */
+/* {{{ proto bool http_send_content_type([string content_type = 'application/x-octetstream'])
+ *
+ * Sets the content type.
+ *
+ */
+PHP_FUNCTION(http_send_content_type)
+{
+ char *ct;
+ int ct_len = 0;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &ct, &ct_len) != SUCCESS) {
+ RETURN_FALSE;
+ }
+
+ if (!ct_len) {
+ RETURN_SUCCESS(http_send_content_type("application/x-octetstream", sizeof("application/x-octetstream") - 1));
+ }
+ RETURN_SUCCESS(http_send_content_type(ct, ct_len));
+}
+/* }}} */
+
+/* {{{ proto 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).
+ *
+ */
+PHP_FUNCTION(http_send_content_disposition)
+{
+ char *filename;
+ int f_len;
+ zend_bool send_inline = 0;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|b", &filename, &f_len, &send_inline) != SUCCESS) {
+ RETURN_FALSE;
+ }
+ RETURN_SUCCESS(http_send_content_disposition(filename, f_len, send_inline));
+}
+/* }}} */
+
/* {{{ proto bool http_match_modified([int timestamp])
*
* Matches the given timestamp against the clients "If-Modified-Since" resp.
send_modified = last_modified;
}
- http_send_header("Cache-Control: private, must-revalidate, max-age=0");
-
- if (http_modified_match("HTTP_IF_MODIFIED_SINCE", last_modified)) {
- if (SUCCESS == http_send_status(304)) {
- zend_bailout();
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not send 304 Not Modified");
- RETURN_FALSE;
- }
- }
- RETURN_SUCCESS(http_send_last_modified(send_modified));
+ RETURN_SUCCESS(http_cache_last_modified(last_modified, send_modified, HTTP_DEFAULT_CACHECONTROL, sizeof(HTTP_DEFAULT_CACHECONTROL) - 1));
}
/* }}} */
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &etag, &etag_len) != SUCCESS) {
RETURN_FALSE;
}
-
- http_send_header("Cache-Control: private, must-revalidate, max-age=0");
-
- if (etag_len) {
- http_send_etag(etag, etag_len);
- if (http_etag_match("HTTP_IF_NONE_MATCH", etag)) {
- if (SUCCESS == http_send_status(304)) {
- zend_bailout();
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not send 304 Not Modified");
- RETURN_FALSE;
- }
- }
- }
-
- /* if no etag is given and we didn't already start ob_etaghandler -- start it */
- if (!HTTP_G(etag_started)) {
- RETURN_BOOL(HTTP_G(etag_started) = (SUCCESS == http_start_ob_handler(_http_ob_etaghandler, "ob_etaghandler", 4096, 1)));
- }
- RETURN_TRUE;
+
+ RETURN_SUCCESS(http_cache_etag(etag, etag_len, HTTP_DEFAULT_CACHECONTROL, sizeof(HTTP_DEFAULT_CACHECONTROL) - 1));
}
/* }}} */
php_error_docref(NULL TSRMLS_CC, E_WARNING, "ob_httpetaghandler can only be used once");
RETURN_STRINGL(data, data_len, 1);
}
- http_send_header("Cache-Control: private, must-revalidate, max-age=0");
+ http_send_header("Cache-Control: " HTTP_DEFAULT_CACHECONTROL);
HTTP_G(etag_started) = 1;
}
}
/* }}} */
-/* {{{ proto bool http_content_type([string content_type = 'application/x-octetstream'])
- *
- * Sets the content type.
- *
- */
-PHP_FUNCTION(http_content_type)
-{
- char *ct, *content_type;
- int ct_len = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &ct, &ct_len) != SUCCESS) {
- RETURN_FALSE;
- }
-
- if (!ct_len) {
- RETURN_SUCCESS(http_send_header("Content-Type: application/x-octetstream"));
- }
-
- /* remember for multiple ranges */
- if (HTTP_G(ctype)) {
- efree(HTTP_G(ctype));
- }
- HTTP_G(ctype) = estrndup(ct, ct_len);
-
- content_type = (char *) emalloc(strlen("Content-Type: ") + ct_len + 1);
- sprintf(content_type, "Content-Type: %s", ct);
-
- RETVAL_BOOL(SUCCESS == http_send_header(content_type));
- efree(content_type);
-}
-/* }}} */
-
-/* {{{ proto 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).
- *
- */
-PHP_FUNCTION(http_content_disposition)
-{
- char *filename, *header;
- int f_len;
- zend_bool send_inline = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|b", &filename, &f_len, &send_inline) != SUCCESS) {
- RETURN_FALSE;
- }
-
- if (send_inline) {
- header = (char *) emalloc(strlen("Content-Disposition: inline; filename=\"\"") + f_len + 1);
- sprintf(header, "Content-Disposition: inline; filename=\"%s\"", filename);
- } else {
- header = (char *) emalloc(strlen("Content-Disposition: attachment; filename=\"\"") + f_len + 1);
- sprintf(header, "Content-Disposition: attachment; filename=\"%s\"", filename);
- }
-
- RETVAL_BOOL(SUCCESS == http_send_header(header));
- efree(header);
-}
-/* }}} */
-
/* {{{ proto string http_chunked_decode(string encoded)
*
* This function decodes a string that was HTTP-chunked encoded.
{
ZEND_INIT_MODULE_GLOBALS(http, php_http_init_globals, NULL);
REGISTER_INI_ENTRIES();
- /*
- REGISTER_LONG_CONSTANT("HTTP_GET", HTTP_GET, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_HEAD", HTTP_HEAD, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("HTTP_POST", HTTP_POST, CONST_CS | CONST_PERSISTENT);
- */
+
#ifdef HTTP_HAVE_CURL
REGISTER_LONG_CONSTANT("HTTP_AUTH_BASIC", CURLAUTH_BASIC, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("HTTP_AUTH_DIGEST", CURLAUTH_DIGEST, CONST_CS | CONST_PERSISTENT);
#endif
#ifdef ZEND_ENGINE_2
+ /*
+ REGISTER_LONG_CONSTANT("HTTP_GET", HTTP_GET, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("HTTP_HEAD", HTTP_HEAD, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("HTTP_POST", HTTP_POST, CONST_CS | CONST_PERSISTENT);
+ */
HTTP_REGISTER_CLASS(HTTPi, httpi, NULL, ZEND_ACC_FINAL_CLASS);
HTTP_REGISTER_CLASS_EX(HTTPi_Response, httpi_response, NULL, 0);
#endif