mirror of
https://github.com/php/php-src.git
synced 2025-08-16 14:08:47 +02:00
Add additional parameter to parse_str for saving result (thanks to
John Bafford <dshadow@zort.net>) @ Added second parameter for parse_str to save result (John Bafford)
This commit is contained in:
parent
5abacc5413
commit
1ccac6ed55
5 changed files with 39 additions and 12 deletions
|
@ -182,7 +182,7 @@ function_entry basic_functions[] = {
|
||||||
PHP_FE(levenshtein, NULL)
|
PHP_FE(levenshtein, NULL)
|
||||||
PHP_FE(chr, NULL)
|
PHP_FE(chr, NULL)
|
||||||
PHP_FE(ord, NULL)
|
PHP_FE(ord, NULL)
|
||||||
PHP_FE(parse_str, NULL)
|
PHP_FE(parse_str, second_arg_force_ref)
|
||||||
PHP_FE(str_pad, NULL)
|
PHP_FE(str_pad, NULL)
|
||||||
PHP_FALIAS(rtrim, chop, NULL)
|
PHP_FALIAS(rtrim, chop, NULL)
|
||||||
PHP_FALIAS(strchr, strstr, NULL)
|
PHP_FALIAS(strchr, strstr, NULL)
|
||||||
|
|
|
@ -775,6 +775,11 @@ PHP_FUNCTION(pathinfo)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (opt == PHP_PATHINFO_DIRNAME || argc < 2) {
|
||||||
|
ret = php_basename(Z_STRVAL_PP(str), len);
|
||||||
|
add_assoc_string(tmp, "dirname", ret, 1);
|
||||||
|
}
|
||||||
|
|
||||||
if (argc == 2) {
|
if (argc == 2) {
|
||||||
zval **element;
|
zval **element;
|
||||||
zend_hash_get_current_data(Z_ARRVAL_P(tmp), (void **)&element);
|
zend_hash_get_current_data(Z_ARRVAL_P(tmp), (void **)&element);
|
||||||
|
@ -2397,23 +2402,45 @@ PHP_FUNCTION(setlocale)
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
/* {{{ proto void parse_str(string encoded_string)
|
/* {{{ proto void parse_str(string encoded_string, [array result])
|
||||||
Parses GET/POST/COOKIE data and sets global variables */
|
Parses GET/POST/COOKIE data and sets global variables */
|
||||||
PHP_FUNCTION(parse_str)
|
PHP_FUNCTION(parse_str)
|
||||||
{
|
{
|
||||||
zval **arg;
|
zval **arg;
|
||||||
|
zval **arrayArg;
|
||||||
|
zval *sarg;
|
||||||
char *res = NULL;
|
char *res = NULL;
|
||||||
|
int argCount;
|
||||||
|
|
||||||
PLS_FETCH();
|
PLS_FETCH();
|
||||||
SLS_FETCH();
|
SLS_FETCH();
|
||||||
|
|
||||||
if (zend_get_parameters_ex(1, &arg) == FAILURE) {
|
argCount = ARG_COUNT(ht);
|
||||||
|
if(argCount < 1 || argCount > 2 || zend_get_parameters_ex(argCount, &arg, &arrayArg) == FAILURE) {
|
||||||
WRONG_PARAM_COUNT;
|
WRONG_PARAM_COUNT;
|
||||||
}
|
}
|
||||||
|
|
||||||
convert_to_string_ex(arg);
|
convert_to_string_ex(arg);
|
||||||
if ((*arg)->value.str.val && *(*arg)->value.str.val) {
|
sarg = *arg;
|
||||||
res = estrndup((*arg)->value.str.val,(*arg)->value.str.len);
|
if (sarg->value.str.val && *sarg->value.str.val) {
|
||||||
|
res = estrndup(sarg->value.str.val, sarg->value.str.len);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(argCount == 1)
|
||||||
|
php_treat_data(PARSE_STRING, res, NULL ELS_CC PLS_CC SLS_CC);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(!ParameterPassedByReference(ht, 2)){
|
||||||
|
php_error(E_WARNING, "Array not passed by reference in call to parse_str()");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Clear out the array that was passed in. */
|
||||||
|
zval_dtor(*arrayArg);
|
||||||
|
array_init(*arrayArg);
|
||||||
|
|
||||||
|
php_treat_data(PARSE_STRING, res, *arrayArg ELS_CC PLS_CC SLS_CC);
|
||||||
}
|
}
|
||||||
php_treat_data(PARSE_STRING, res ELS_CC PLS_CC SLS_CC);
|
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
|
|
|
@ -1007,21 +1007,21 @@ static int php_hash_environment(ELS_D SLS_DC PLS_DC)
|
||||||
case 'p':
|
case 'p':
|
||||||
case 'P':
|
case 'P':
|
||||||
if (!_gpc_flags[0] && !SG(headers_sent) && SG(request_info).request_method && !strcasecmp(SG(request_info).request_method, "POST")) {
|
if (!_gpc_flags[0] && !SG(headers_sent) && SG(request_info).request_method && !strcasecmp(SG(request_info).request_method, "POST")) {
|
||||||
php_treat_data(PARSE_POST, NULL ELS_CC PLS_CC SLS_CC); /* POST Data */
|
php_treat_data(PARSE_POST, NULL, NULL ELS_CC PLS_CC SLS_CC); /* POST Data */
|
||||||
_gpc_flags[0]=1;
|
_gpc_flags[0]=1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'c':
|
case 'c':
|
||||||
case 'C':
|
case 'C':
|
||||||
if (!_gpc_flags[1]) {
|
if (!_gpc_flags[1]) {
|
||||||
php_treat_data(PARSE_COOKIE, NULL ELS_CC PLS_CC SLS_CC); /* Cookie Data */
|
php_treat_data(PARSE_COOKIE, NULL, NULL ELS_CC PLS_CC SLS_CC); /* Cookie Data */
|
||||||
_gpc_flags[1]=1;
|
_gpc_flags[1]=1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'g':
|
case 'g':
|
||||||
case 'G':
|
case 'G':
|
||||||
if (!_gpc_flags[2]) {
|
if (!_gpc_flags[2]) {
|
||||||
php_treat_data(PARSE_GET, NULL ELS_CC PLS_CC SLS_CC); /* GET Data */
|
php_treat_data(PARSE_GET, NULL, NULL ELS_CC PLS_CC SLS_CC); /* GET Data */
|
||||||
_gpc_flags[2]=1;
|
_gpc_flags[2]=1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -209,7 +209,7 @@ SAPI_POST_HANDLER_FUNC(php_std_post_handler)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void php_treat_data(int arg, char *str ELS_DC PLS_DC SLS_DC)
|
void php_treat_data(int arg, char *str, zval* destArray ELS_DC PLS_DC SLS_DC)
|
||||||
{
|
{
|
||||||
char *res = NULL, *var, *val;
|
char *res = NULL, *var, *val;
|
||||||
pval *array_ptr;
|
pval *array_ptr;
|
||||||
|
@ -236,7 +236,7 @@ void php_treat_data(int arg, char *str ELS_DC PLS_DC SLS_DC)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
array_ptr=NULL;
|
array_ptr=destArray;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
#define PARSE_COOKIE 2
|
#define PARSE_COOKIE 2
|
||||||
#define PARSE_STRING 3
|
#define PARSE_STRING 3
|
||||||
|
|
||||||
void php_treat_data(int arg, char *str ELS_DC PLS_DC SLS_DC);
|
void php_treat_data(int arg, char *str, zval* destArray ELS_DC PLS_DC SLS_DC);
|
||||||
void php_import_environment_variables(ELS_D PLS_DC);
|
void php_import_environment_variables(ELS_D PLS_DC);
|
||||||
PHPAPI void php_register_variable(char *var, char *val, pval *track_vars_array ELS_DC PLS_DC);
|
PHPAPI void php_register_variable(char *var, char *val, pval *track_vars_array ELS_DC PLS_DC);
|
||||||
PHPAPI void php_register_variable_ex(char *var, zval *val, pval *track_vars_array ELS_DC PLS_DC);
|
PHPAPI void php_register_variable_ex(char *var, zval *val, pval *track_vars_array ELS_DC PLS_DC);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue