RESOLVIDO: Regressão de envio de formulário: migração de PHP5.2 para PHP5.4

Recentemente migrei um site de uma instância do PHP 5.2.x para um novo servidor executando o PHP 5.4.x. À primeira vista, o site funcionou perfeitamente. Percorrer todos os fluxos de usuários primários; não consegui ver nenhum erro grave; Eu me senti muito bem com a facilidade da migração.

No entanto, logo ficou claro que não era tão bom quanto eu pensava.

Um dos principais fluxos de usuário era uma série de formulários que coletam e transmitem dados não seguros como campos ocultos (eu sei, não é uma grande implementação, mas já tem muitos anos e todo mundo tem um ou dois esqueletos no armário, haha) . Na ação de envio do PHP para esses formulários, eu capturo explicitamente todos os índices relevantes da variável $ _POST e os gravo nas variáveis ​​locais.

Por exemplo:

$firstname = $_POST['firstname'];
$lastname
= $_POST['lastname'];
$phone_number
= $_POST['phone_number'];

Claro, minha tendência natural na época era nomear a variável local da mesma forma que o índice no array global $ _POST, em vez de fazer um loop e fazer algo mais dinâmico.

Eu ainda não tinha conhecido register_globals , que é uma diretiva do PHP que cria equivalentes de variáveis ​​locais de todos os índices em cabeçalhos de resposta HTTP.

Nessa circunstância específica, eu havia coletado cerca de 15 ou 16 índices individualmente, mas mal sabia que havia perdido um. No PHP5.2, o valor padrão para register_globals é ON . Como resultado, na verdade nunca tive que compor a coleção de dados e colocá-los em variáveis ​​locais; tudo estava acontecendo por padrão. Como register_globals estava ativado, ele silenciosamente pegou o que eu havia perdido. É mais ou menos garantido que a variável $ missing_ foi criada a partir de $ POST [‘missing_variable’].

Quando mudei o site para o PHP 5.4.x, ficou óbvio que um dos meus valores de variável estava faltando e não foi transmitido no fluxo. Depois de resolução de problemas, eu não poderia para a vida de me determinar como o site tinha trabalhado antes, porque era óbvio que eu nunca recebidos esta variável particular.

Então me deparei com isso ao ler as notas de versão do PHP5.3 e PHP5.4: http://ca2.php.net/manual/en/security.globals.php . O recurso register_globals foi DESCONTINUADO a partir do PHP 5.3.0 e totalmente REMOVIDO a partir do PHP5.4.0. Como resultado, o PHP não estava mais criando para mim a variável local que eu havia perdido. Ele apenas criou aqueles que eu defini explicitamente.

Terminei o dia tendo aprendido uma lição com a ignorância de minha juventude. 🙂