Questions diverses

Il y'a quelques questions inclassables. Vous les trouverez ici.

Comment puis-je manipuler le manuel compressé en bzip2 sous Windows ?

Si vous n'avez pas d'outil d'archivage prenant en charge les fichiers au format bz2, » téléchargez l'outil en ligne de commande à partir de Redhat (merci de lire les informations plus bas).

Si vous préférez ne pas utiliser d'outil en ligne de commande, vous pouvez essayer des outils gratuits comme » Stuffit Expander, » UltimateZip, » 7-Zip, ou » Quick Zip. Si vous avez des outils comme » WinRAR ou » Power Archiver, vous pouvez facilement décompresser les fichiers bz2 avec. Si vous utilisez Total Commander (autrefois Windows Commander), un plugin bz2 est disponible gratuitement sur le site de » Total Commander.

L'outil en ligne commande bzip2 de Redhat :

Les utilisateurs du service pack 2 de Win2K doivent prendre la version 1.0.2, tous les autres utilisateurs de Windows doivent prendre la version 1.00. Après avoir téléchargé, renommez l'exécutable en bzip2.exe. Pour votre convenance, mettez-le dans un dossier dans votre path, c'est à dire C:\Windows où C représente votre disque où Windows est installé.

Note : Dans ce qui suit, lang représente votre langue et x le format désiré, par exemple : pdf. Pour décompresser php_manual_lang.x.bz2 suivez les instructions suivantes :

  • ouvrez un invite de commande
  • déplacez-vous dans le dossier où se trouvent les fichiers php_manual_lang.x.bz2
  • lancez la commande bzip2 -d php_manual_lang.x.bz2, pour extraire php_manual_lang.x dans ce même dossier

Dans le cas où vous avez téléchargé le fichier php_manual_lang.tar.bz2 avec beaucoup de fichiers HTML à l'intérieur, la procédure est la même. La seule différence est que vous obtiendrez un fichier php_manual_lang.tar. Le format tar est connu pour être pris en compte par la plupart des archiveurs de Windows, comme » WinZip.

Que signifie le caractère "&" devant les arguments dans les déclarations des fonctions comme la fonction asort() ?

Cela signifie que cet argument est passé par référence et que la fonction le modifiera, comme expliqué dans la documentation. Vous pouvez passer uniquement des variables de cette façon et vous n'avez pas besoin de les passer avec le caractère "&" dans l'appel de la fonction (car obsolète).

Comment puis-je gérer la directive register_globals ?

Pour plus d'informations concernant l'implication sur la sécurité de la directive register_globals, lisez le chapitre sur la sécurité concernant l'utilisation de register_globals.

Il est préférable d'utiliser les superglobals, plutôt que de remettre à on la directive register_globals.

Si vous êtes sur un serveur mutualisé avec la directive register_globals de positionnée à off et que vous devez utiliser des applications qui requièrent que cette option soit à on ou si vous êtes hébergés sur un serveur qui a cette directive d'activée mais que vous voudriez éliminer ce risque sécuritaire, vous devriez émuler l'argument opposé avec PHP. C'est toujours une bonne idée que de demander tout d'abord s'il est possible de modifier cette option dans la configuration de PHP mais si cela n'est pas possible, vous pouvez utiliser ces astuces de compatibilité.

Exemple #1 Émulation des Register Globals

Ceci émulera la directive register_globals à On. Si vous modifiez la directive variables_order, modifiez la variable $superglobals pour qu'elle corresponde à votre nouvelle directive..

<?php
// Émulation de register_globals à on
if (!ini_get('register_globals')) {
    
$superglobals = array($_SERVER$_ENV,
        
$_FILES$_COOKIE$_POST$_GET);
    if (isset(
$_SESSION)) {
        
array_unshift($superglobals$_SESSION);
    }
    foreach (
$superglobals as $superglobal) {
        
extract($superglobalEXTR_SKIP);
    }
}
?>

Ceci émulera register_globals à Off. Gardez à l'esprit que ce code doit être appelé au tout début de votre script ou après la fonction session_start() si vous l'utilisez pour commencer votre session.

<?php
// Émulation de register_globals à off
function unregister_GLOBALS()
{
    if (!
ini_get('register_globals')) {
        return;
    }

    
// Vous pouvez vouloir modifier cela pour avoir une erreur plus jolie
    
if (isset($_REQUEST['GLOBALS']) || isset($_FILES['GLOBALS'])) {
    die(
'Tentative d\'effacement des GLOBALS détectée');
    }

    
// Les variables à ne jamais effacer
    
$noUnset = array('GLOBALS',  '_GET',
    
'_POST',    '_COOKIE',
    
'_REQUEST''_SERVER',
    
'_ENV',     '_FILES');

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

    foreach (
$input as $k => $v) {
        if (!
in_array($k$noUnset) && isset($GLOBALS[$k])) {
            unset(
$GLOBALS[$k]);
        }
    }
}

unregister_GLOBALS();

?>