Migrando do PHP 4 para o PHP 5
Apêndices
FAQ
PHP Manual

# Questões Diversas

Aqui estão algumas questôes que nós não pudemos colocar em outra categoria. Aqui você encontra elas.

1. Como eu posso utilizar os manuais compactados com o bz2 no Windows?
2. O que faz & antes de um argumento na declaração de uma função, ex. asort()?
3. Como eu lido com register_globals?

Como eu posso utilizar os manuais compactados com o bz2 no Windows?

  Se você não tiver uma ferramenta de arquivos para trabalhar com arquivos bz2 » download a ferramenta de linha de comando da Redhat (por favor veja maiores informações abaixo).

  Se você não gostar de usar uma ferramenta de linha de comando, você pode tentar ferramentas gratuitas como » Stuffit Expander, » UltimateZip, » 7-Zip, ou » Quick Zip. Se você tiver ferramentas como » WinRAR ou » Power Archiver, você pode facilmente descomprimir arquivos bz2 com elas. Se você usa o Total Commander, (anteriormente Windows Commander), um plugin para o bz2 esta disponível gratuitamente em » Total Commander.

  A ferramenta de linha de comando bzip2 da Redhat:

  Usuários Win2k Sp2 obtenha a versão 1.0.2, todos os outros usuários de windows a versão 1.00. Após o download renomeie o executável para bzip2.exe. Para sua conveniencia, coloque em um diretório que esteja no seu path, ex. C:\Windows aonde C representra o drive que você instalou o Windows.

  Nota: lang significa a sua língua( Português do Brasil: pt_BR) e x para o formato desejado, ex.: pdf. Para descompactar php_manual_lang.x.bz2 siga estas instruções simples:

  - abra uma janela com o prompt de comando
  - Use o comando cd para a pasta onde você guardou o php_manual_lang.x.bz2
  - digite bzip2 -d php_manual_lang.x.bz2, descompactando php_manual_lang.x na mesma pasta

  Caso você tenha feito o download de php_manual_lang.tar.bz2 com vários arquivos html nele, o procedimento é o mesmo. A unica diferença é que você obtém um arquivo php_manual_lang.tar. O formato tar format é conhecido e tratado com as ferramentas de arquivos mais comuns para o Windows, por exemplo » WinZip.

O que faz & antes de um argumento na declaração de uma função, ex. asort()?

  Indica que o argumento é passado por referência e a função provavelmente irá modifica-lo de acordo com a documentação. Você pode passar apenas variáveis desta forma e você não precisa passa-los com & na chamada da função (e o mesmo esta obsoleto).

Como eu lido com register_globals?

  Para informações sobre as implicações de segurança de register_globals, leia o capitulo de segurança em Using register_globals.

  É preferível usar superglobals, do que depender de register_globals estar ativo.

  Se você esta em um servidor compartilhado com register_globals desativado e você precisa usar alguma aplicação de legado, a qual requira que esta opção esteja ativada, ou você esta em algum servidor de hospedagem, aonde isto esteja ativo, mas você quer eliminar os riscos de segurança, você pode precisar emular a definição contrária com o PHP. É sempre uma boa idéia primeiro perguntar se seria possível mudar a opção de configuração do PHP de alguma maneira, mas se não for possível, então você pode usar estes trechos de código para compatibilidade.

  Exemplo #1 Emulando Register Globals

  Isto irá emular register_globals On. Se você alterou a sua diretiva variables_order, considere mudar $superglobals de acordo.

  `<?php
  // Emular 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($superglobal, EXTR_SKIP);
  }
  }
  ?>`

  Isto irá emular register_globals Off. Tenha em mente que este código deve ser chamado bem no início do seu script, ou após session_start() se você o usa para iniciar a sua sessão.

  `<?php
  // Emula register_globals off
  function unregister_GLOBALS()
  {
  if (!ini_get('register_globals')) {
  return;
  }
  // Might want to change this perhaps to a nicer error
  if (isset($_REQUEST['GLOBALS']) || isset($_FILES['GLOBALS'])) {
  die('GLOBALS overwrite attempt detected');
  }
  // Variables that shouldn't be unset
  $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();
  ?>`

Migrando do PHP 4 para o PHP 5
Apêndices
FAQ
PHP Manual