| modification, are permitted provided that the conditions mentioned |
| in the accompanying LICENSE file are met. |
+--------------------------------------------------------------------+
- | Copyright (c) 2004-2005, Michael Wallner <mike@php.net> |
+ | Copyright (c) 2004-2006, Michael Wallner <mike@php.net> |
+--------------------------------------------------------------------+
*/
*
* Redirect to the given url.
*
- * The supplied url will be expanded with http_build_uri(), the params array will
+ * The supplied url will be expanded with http_build_url(), the params array will
* be treated with http_build_query() and the session identification will be appended
* if session is true.
*
* The HTTP response code will be set according to status.
* You can use one of the following constants for convenience:
* - HTTP_REDIRECT 302 Found
+ * - HTTP_REDIRECT_AUTO 303 See Other for POST, else 302 Found
* - HTTP_REDIRECT_PERM 301 Moved Permanently
* - HTTP_REDIRECT_POST 303 See Other
* - HTTP_REDIRECT_TEMP 307 Temporary Redirect
* Please see http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3
* for which redirect response code to use in which situation.
*
- * To be RFC compliant, "Redirecting to <a>URI</a>." will be displayed,
+ * To be RFC compliant, "Redirecting to <a>URL</a>." will be displayed,
* if the client doesn't redirect immediatly, and the request method was
* another one than HEAD.
*
size_t query_len = 0;
zend_bool session = 0, free_params = 0;
zval *params = NULL;
- long status = 302;
+ long status = HTTP_REDIRECT_AUTO;
char *query = NULL, *url = NULL, *URI, *LOC, *RED = NULL;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sa!/bl", &url, &url_len, ¶ms, &session, &status) != SUCCESS) {
if (query_len) {
spprintf(&LOC, 0, "Location: %s?%s", URI, query);
- if (SG(request_info).request_method && strcmp(SG(request_info).request_method, "HEAD")) {
- spprintf(&RED, 0, "Redirecting to <a href=\"%s?%s\">%s?%s</a>.\n", URI, query, URI, query);
- }
+ spprintf(&RED, 0, "Redirecting to <a href=\"%s?%s\">%s?%s</a>.\n", URI, query, URI, query);
} else {
spprintf(&LOC, 0, "Location: %s", URI);
- if (SG(request_info).request_method && strcmp(SG(request_info).request_method, "HEAD")) {
- spprintf(&RED, 0, "Redirecting to <a href=\"%s\">%s</a>.\n", URI, URI);
- }
+ spprintf(&RED, 0, "Redirecting to <a href=\"%s\">%s</a>.\n", URI, URI);
}
efree(URI);
zval_dtor(params);
FREE_ZVAL(params);
}
-
+
+#ifndef ZEND_ENGINE_2
+ if (!status && SG(request_info).request_method && !strcasecmp(SG(request_info).request_method, "POST")) {
+ status = HTTP_REDIRECT_POST;
+ }
+#endif
+
RETURN_SUCCESS(http_exit_ex(status, LOC, RED, 1));
}
/* }}} */