Documente Academic
Documente Profesional
Documente Cultură
EXTR_REFS
Extrae las variables como referencias. Esto significa que los valores de las
variables importadas estn todava referenciados por los valores del parPHP 4, PHP
5, PHP 7)
extract Importar variables a la tabla de smbolos actual desde un array
Descripcin
int extract ( array &$array [, int $flags = EXTR_OVERWRITE [, string $prefix = NULL
]] )
Importa variables desde un array a la tabla de smbolos actual.
Comprueba cada clave para ver si tiene un nombre de variable vlido. Tambin
comprueba las colisiones con las variables existentes en la tabla de smbolos.
Parmetros
array
Un array asociativo. Esta funcin trata a las claves como nombres de variables y a
los valores como valores de variables. Por cada par clave/valor crear una variable
en la tabla de smbolos actual, sujeta a los parmetros flags y prefix.
flags
La manera en que las claves no-vlidas/numricas y las colisiones son tratadas est
determinda por el parmetro flags. Puede ser uno de los valores siguientes:
EXTR_OVERWRITE
Si hay una colisin, sobrescribe la variable existente.
EXTR_SKIP
Si hay una colisin, no sobrescribe la variable existente.
EXTR_PREFIX_SAME
Si hay una colisin, prefija el nombre de la variable con prefix.
EXTR_PREFIX_ALL
Prefija todos los nombres de variables con prefix.
EXTR_PREFIX_INVALID
Slo prefija los nombres de variables no-vlidas/numricas con prefix.
EXTR_IF_EXISTS
Sobrescribe la variable slo si ya existe en la tabla de smbolos actual, de otro
modo no hace nada. Esto es til para definir una lista de variables vlidas y
despus extraer slo aquellas variables que se definieron fuera de $_REQUEST, por
ejemplo.
EXTR_PREFIX_IF_EXISTS
Crea nombres de variables con prefijo slo si la versin no prefijametro array. Se
puede usar esta bandera por s misma o combinarla con cualquier otra bandera usando
el operador OR en flags.
Si no se especifica flags, se asume que es EXTR_OVERWRITE.
prefix
Observe que prefix slo es requerido si flags es EXTR_PREFIX_SAME, EXTR_PREFIX_ALL,
EXTR_PREFIX_INVALID o EXTR_PREFIX_IF_EXISTS. Si el resultado prefijado no es un
nombre de variable vlido, sta no es importada a la tabla de smbolos actual. Los
prefijos son separados de las claves del array mediante un caracter de subrayado.
Valores devueltos
Devuelve el nmero de variables importadas con xito a la tabla de smbolos.
Ejemplos
<?php
$tamao = "grande";
$var_array = array("color" => "azul",
"tamao" => "medio",
"forma" => "esfera");
extract($var_array, EXTR_PREFIX_SAME, "wddx");
?>
El resultado del ejemplo sera:
Notas
Advertencia
No use extract() en datos que no son de confianza, como las entradas de usuario
(esto es, $_GET, $_FILES, etc.). Si lo hace, por ejemplo si quiere ejecutar
temporalmente cdigo antiguo que dependa de register_globals temporalmente,
asegrese de usar uno de los valores de flags que no sobrescriban, como EXTR_SKIP,
y sepa que debera realizar la extraccin en el mismo orden que fue definido en
variables_order dentro de php.ini.
Nota:
Si an tiene register_globals y est activado, si utiliza extract() en $_FILES y
especifica EXTR_SKIP, puede obtener resutados no deseados.
Advertencia
Esto es una prctica no recomendada y slo est documentada aqu por razones de
complementacin. El uso de register_globals est obsoleto y las llamadas a
extract() en informacin que no es de confianza tal como $_FILES es, como se
observ arriba, un riesgo potencial de seguridad. Si se encuentra con esto,
significa que est usando al menos dos malas prcticas de cdigo.
<?php
var_dump($archivoprueba);
extract($_FILES, EXTR_SKIP);
var_dump($archivoprueba);
var_dump($archivoprueba['tmp_name']);
?>
Se esperara ver algo como lo siguiente:
string(14) "/tmp/phpgCCPX8"
array(5) {
["name"]=>
string(10) "somefile.txt"
["type"]=>
string(24) "application/octet-stream"
["tmp_name"]=>
string(14) "/tmp/phpgCCPX8"
["error"]=>
int(0)
["size"]=>
int(4208)
}
string(14) "/tmp/phpgCCPX8"
Sin embargo, en su lugar se ve algo como esto:
string(14) "/tmp/phpgCCPX8"
string(14) "/tmp/phpgCCPX8"
string(1) "/"
Esto es a causa del hecho de que, ya que register_globals est activado,
$archivoprueba ya existe en el mbito global cuando se llam a extract(). Y ya que
EXTR_SKIP est especificado, $archivoprueba no es sobrescrito con el contenido del
array $_FILES por lo que $archivoprueba permanece como cadena. Ya que a las cadenas
se puede acceder usando la sintaxis de array y la cadena no numrica tmp_name es
interpretada como 0, PHP ve $archivoprueba['tmp_name'] como $archivoprueba[0].
Ver tambin
up
down
16 CertaiN 3 years ago
[New Version]
Example Usage:
<?php
$_GET['A']['a'] = ' CORRECT(including some spaces) ';
$_GET['A']['b'] = ' CORRECT(including some spaces) ';
$_GET['A']['c'] = "Invalid UTF-8 sequence: \xe3\xe3\xe3";
$_GET['A']['d']['invalid_structure'] = 'INVALID';
$_GET['unneeded_item'] = 'UNNEEDED';
var_dump(filter_struct_utf8(INPUT_GET, array(
'A' => array(
'a' => '',
'b' => FILTER_STRUCT_TRIM,
'c' => '',
'd' => '',
),
'B' => FILTER_STRUCT_FORCE_ARRAY,
'C' => FILTER_STRUCT_FORCE_ARRAY | FILTER_STRUCT_TRIM,
)));
?>