A Cautionary Tale of Woe: The Bug That Got Away
A semana pasada, lanzou unha versión actualizada do meu Índice Creador plugin para o WordPress. Eu me orgullo na miña codificación, probas de detección de fallos e habilidades. Que todo derrubou nunha única noite.
Para cortar unha longa historia curta, a nova revisión requirida unha función auxiliar para amosar entradas post. A función de auxiliar só foi chamado por unha función e, polo tanto, elixido para incluír a función de auxiliar como un neno desa función. Esta é unha práctica común en moitas linguas, xa que os paquetes perfectamente todas as funcións e os seus axudantes nas proximidades. A función dos pais por como se chama cada vez que unha páxina é exhibida e remata inmediatamente a páxina non inclúe o sitio web tag iniciador mapa.
Ok O tempo pasa. É agora 02:00. O código está listo para proba. Sei que a función sae pai inmediatamente se non atopar a marca de iniciador. Este feito xa traballara, e eu fun moi lonxe, polo tanto, debe seguir traballando. Non? Eu comproba a páxina do mapa do sitio, probe todas as opcións de novos e antigos e probar que o código está funcionando como esperaba. Eu rapidamente sincronizar o repositorio SVN e executar para a cama durmir un pouco antes do sol nacer.
Na mañá seguinte, decide para comprobar un gran sitio sei que usa o meu plugin. Non hai ningún substituto para o exame do mundo real. Si, todo parece bo. Nese punto eu notei un posto no mapa do sitio que parecían interesantes. Prema na ligazón categoría e foi regalado co primeiro posto na categoría e, a continuación, unha mensaxe de erro grande Nasty php. Mmm. Mirei para outro sitio de grande porte. Mmm. Quizais unha coincidencia. Imos ollar para outro. Oh non!
Entón, o que deu mal? Lembre que a función do neno? Eu oín dicir que os nenos poden ser mal e acabou por ser verdade neste caso. Se unha páxina do blog, páxina de categoría, páxina tag ou mesmo unha casa páxina foi exhibido, varios artigos aparecerán nunha soa páxina. WordPress fai iso finxindo que cada post é unha mini-páxina e ligazóns de todas as páxinas mini-xuntos para formar unha gran páxina. Isto significa que a miña función pai chámase varias veces. Normalmente, non un problema. Pero agora que a función contén funcións neno, estas funcións neno son creadas cada vez que a función dos pais se chama (aínda que eles non son usados). Polo tanto, cando o entón segundo post aparece, a páxina traba con unha mensaxe de erro duplicar a función de nome. O resultado Netto era que un pequeno erro nunha función aparentemente non relacionados causou varios sitios moi grande para ir para abaixo.
A moral da historia: se vostede é un administrador de sitio, asegúrese de realizar o conxunto completo de probas tras cada actualización de plugins, non importa o grande ou pequeno que a extensión pode ser.



















