Preguntas Varias

Cap铆tulo 62. Preguntas Varias

Puede que existan algunas preguntas que no podemos colocar en otras categor铆as. Este es el lugar en donde puede encontrarlas.

1. 驴C贸mo puedo manipular los manuales comprimidos mediante bz2 en Windows?
2. 驴Qu茅 significa un signo & al lado de un argumento en la declaraci贸n de una funci贸n, como p.ej. asort()?
3. 驴C贸mo manejo el par谩metro register_globals?

1. 驴C贸mo puedo manipular los manuales comprimidos mediante bz2 en Windows?

Si no cuenta con una herramienta de archivaci贸n que pueda manejar archivos bz2, descargue la herramienta de l铆nea de comandos de RedHat (por favor refi茅rase a la inforamci贸n presentada m谩s adelante).

Si no desea usar una herramienta de l铆nea de comandos, puede probar herramientas gratuitas como Stuffit Expander, UltimateZip, 7-Zip, o Quick Zip. Si dispone de herramientas como WinRAR o Power Archiver, puede descomprimir f谩cilmente archivos bz2 con ellas. Si usa Total Commander (anteriormente Windows Commander), un m贸dulo adicional para ese programa se encuentra disponible de forma gratuita desde el sitio de Total Commander.

La herramienta bzip2 de l铆nea de comandos por Redhat:

Los usuarios de Win2k Sp2 deben obtener la versi贸n m谩s reciente, 1.0.2, todos los dem谩s usuarios de Windows deben obtener la versi贸n 1.00. Despu茅s de la descarga, renombre el ejecutable a bzip2.exe. Para mayor conveniencia, col贸quelo en un directorio que sea parte de sus rutas predeterminadas, p.ej. C:\Windows, en donde C representa la unidad en donde se encuentra su instalaci贸n de windows.

Nota: lang representa su lenguaje, y x el formato deseado, p.ej: pdf. Para descomprimir el archivo php_manual_lang.x.bz2 siga las siguientes instrucciones:

  • abra una ventana con el int茅rprete de comandos

  • cambie de directorio hacia la carpeta en donde almacen贸 el archivo php_manual_lang.x.bz2 descargado

  • invoque bzip2 -d php_manual_lang.x.bz2, extrayendo de este modo php_manual_lang.x en la misma carpeta

En caso de que haya descargado el archivo php_manual_lang.tar.bz2 con varios archivos html en su interior, el procedimiento es el mismo. La 煤nica diferencia es que recibe un archivo php_manual_lang.tar. Se conoce que el formato tar es tratado por la mayor铆a de archivadores en Windows, como por ejemplo WinZip.

2. 驴Qu茅 significa un signo & al lado de un argumento en la declaraci贸n de una funci贸n, como p.ej. asort()?

Quiere decir que el argumento es pasado por referencia y es probable que la funci贸n modifique el argumento de acuerdo con la documentaci贸n. S贸lo puede pasar variables de este modo y no necesita pasarlas con el signo & en la llamada de la funci贸n (tal cosa es considerada obsoleta).

3. 驴C贸mo manejo el par谩metro register_globals?

Para informaci贸n sobre las implicaciones de seguridad de register_globals, lea el cap铆tulo de seguridad sobre el Uso de register_globals.

Es recomendable usar superglobales, en lugar de depender en la activaci贸n de register_globals.

Si se encuentra en un servidor compartido con register_globals desactivado y necesita usar aplicaciones antiguas, que requieren que esta opci贸n est茅 activada, o se encuentra en alg煤n servidor de hospedaje en donde esta caracter铆stica est谩 habilitada, pero quisiera eliminar los riesgos de seguridad, puede que necesite emular el valor opuesto en PHP. Siempre es buena idea preguntar primero si es posible cambiar la opci贸n de alguna forma en la configuraci贸n de PHP, pero si no es posible, entonces puede usar estos segmentos de compatibilidad.

Ejemplo 62-1. Emulaci贸n de Register Globals

Esto emula el comportamiento de register_globals On.

<?php
// Emular register_globals on
if (!ini_get('register_globals')) {
    
$superglobales = array($_SERVER, $_ENV,
        
$_FILES, $_COOKIE, $_POST, $_GET);
    if (isset(
$_SESSION)) {
        
array_unshift($superglobales, $_SESSION);
    }
    foreach (
$superglobales as $superglobal) {
        
extract($superglobal, EXTR_SKIP);
    }
}
?>

Esto emula register_globals Off. Tenga en cuenta que este c贸digo debe ser llamado al comienzo absoluto de su script.

<?php
// Emular register_globals off
function retirar_registros_GLOBALS()
{
    if (!
ini_get('register_globals')) {
        return;
    }

    
// Puede que desee cambiar esto por un error mas amigable
    
if (isset($_REQUEST['GLOBALS']) || isset($_FILES['GLOBALS'])) {
        die(
'Se ha detectado un intento de sobreescritura en GLOBALS');
    }

    
// Variables que no deben ser eliminadas
    
$noEliminar = array('GLOBALS',  '_GET',
                        
'_POST',    '_COOKIE',
                        
'_REQUEST', '_SERVER',
                        
'_ENV',     '_FILES');

    
$entrada = array_merge($_GET,    $_POST,
                           
$_COOKIE, $_SERVER,
                           
$_ENV,    $_FILES,
                           isset(
$_SESSION) && is_array($_SESSION) ? $_SESSION : array());

    foreach (
$entrada as $c => $v) {
        if (!
in_array($c, $noEliminar) && isset($GLOBALS[$c])) {
            unset(
$GLOBALS[$c]);
        }
    }
}

retirar_registros_GLOBALS();

?>