{"id":51,"date":"2025-10-23T23:00:47","date_gmt":"2025-10-23T23:00:47","guid":{"rendered":"https:\/\/bitacora.lado.mx\/?p=51"},"modified":"2025-10-23T23:04:33","modified_gmt":"2025-10-23T23:04:33","slug":"el-error-de-subir-10000-paginas-html","status":"publish","type":"post","link":"https:\/\/bitacora.lado.mx\/index.php\/2025\/10\/23\/el-error-de-subir-10000-paginas-html\/","title":{"rendered":"El error de subir 10000 p\u00e1ginas HTML"},"content":{"rendered":"\n<p>En varios proyectos, especialmente creados entre los a\u00f1os 2000 y 2005, generan tantas p\u00e1ginas est\u00e1ticas que algunos desarrolladores cometen la tonter\u00eda de subir miles de archivos HTML al servidor, con la idea de que sea todo r\u00e1pido y f\u00e1cil de darle mantenimiento, nada m\u00e1s errado que la realidad.<\/p>\n\n\n\n<p>Esta pr\u00e1ctica puede ocasionar m\u00e1s contras que pros, y ahora explico el porqu\u00e9 no se debe hacer, y si se hace, como resolverlo usando lenguajes din\u00e1micos y\/o gestores de contenidos.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Problema de rendimiento y gestionar archivos<\/strong><br>Cuando una persona sube 10 mil archivos en HTML, con sus estilos en CSS y dem\u00e1s elementos como im\u00e1genes, audios y video; el servidor debe:<br>&#8211; Indexar cada archivo dentro del sistema de archivos<br>&#8211; Abrir y cerrar cientos o miles de conexiones de lectura cuando un usuario solicita una sola p\u00e1gina.<br>&#8211; Procesar m\u00e1s tiempo en cada b\u00fasqueda, adem\u00e1s de tener latencia en respaldar toda la informaci\u00f3n y provoca problemas al sincronizar la informaci\u00f3n<br>Todo esto genera:<br>&#8211; Cargas lentas del servidor, m\u00e1s si es uno con sistema de disco duro mec\u00e1nico (HDD) o de almacenamiento compartido (servidores virtuales, por ejemplo).<br>&#8211; Problemas al respaldar, ya que miles de archivos peque\u00f1os, es m\u00e1s tardado y costoso<br>&#8211; Riesgos de archivos corrompidos al pasar del tiempo, e incluso de p\u00e9rdida de archivos completos, esto si la estructura de las carpetas no est\u00e1 bien organizada.<br>Traducci\u00f3n: El sistema de archivos no est\u00e1 dise\u00f1ado para ser una base de datos.<br><\/li>\n\n\n\n<li><strong>Dificultad para mantener y actualizar contenido<\/strong><br>Si llega el caso que se necesita cambiar el encabezado, algo del men\u00fa o el pie de p\u00e1gina de este sitio web. Se tiene que hacer esta modificaci\u00f3n en al menos 10,000 archivos HTML, teniendo que: <br>&#8211; Editar cada archivo manualmente<br>&#8211; Usar un script que busque y reemplace ese texto en masa, arriesg\u00e1ndose a tener errores.<br>&#8211; Si se cambia el dise\u00f1o, ya sea por alguna temporalidad, se deben regenerar todos los archivos<br>&#8211; Si se cambia solamente una URL, o alguna estructura, muchos enlaces se romper\u00edan, haciendo ilegible el visualizar el sitio.<br>Traducci\u00f3n: El mantenimiento se vuelve insoportable, al borde de renunciar el proyecto por este dilema.<br><\/li>\n\n\n\n<li><strong>Consumo excesivo de espacio y tiempos para sacarlo a producci\u00f3n<\/strong><br>Por m\u00e1s chico que sea el archivo HTML, termina ocupando espacio adicional en el disco, debido a la estructura de bloques que tiene tanto el sistema de archivos como el sistema operativo del servidor.<br>Y ya ni hablemos de:<br>&#8211; Las transferencias de archivos por FTP o SSH, ya que se vuelven lentas; mucho m\u00e1s si se usan conexiones inestables.<br>&#8211; Y las actualizaciones o movimientos para sacar esto a producci\u00f3n, pueden tardar horas enteras.<br>Traducci\u00f3n: Esta transferencia impacta en costos de almacenamiento y tiempos de operaci\u00f3n.<br><\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Soluci\u00f3n: generar contenido din\u00e1mico con PHP.<\/h2>\n\n\n\n<p>En lugar de crear 10,000 archivos HTML est\u00e1ticos, puedes usar <strong>PHP<\/strong> para generar contenido din\u00e1mico.<\/p>\n\n\n\n<p>Se puede usar cualquier otro lenguaje de programaci\u00f3n din\u00e1mico, pero para este prop\u00f3sito del art\u00edculo, quer\u00eda enfocarlo con PHP.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">C\u00f3mo funciona<\/h3>\n\n\n\n<p>En lugar de almacenar miles de archivos, guardas la <strong>informaci\u00f3n<\/strong> (t\u00edtulo, contenido, fecha, imagen, etc.) en una <strong>base de datos<\/strong>.<br>Luego, una sola plantilla PHP o WordPress genera la p\u00e1gina de forma din\u00e1mica al ser solicitada.<\/p>\n\n\n\n<p>Ejemplo b\u00e1sico en PHP:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\/\/ archivo: pagina.php\n$id = $_GET&#91;'id']; \/\/ ID del contenido\n$conexion = new mysqli(\"localhost\", \"usuario\", \"contrase\u00f1a\", \"base_datos\");\n$resultado = $conexion->query(\"SELECT * FROM paginas WHERE id = $id\");\n$pagina = $resultado->fetch_assoc();\n\necho \"&lt;h1>{$pagina&#91;'titulo']}&lt;\/h1>\";\necho \"&lt;p>{$pagina&#91;'contenido']}&lt;\/p>\";\n?>\n<\/code><\/pre>\n\n\n\n<p>Esto reemplaza a miles de archivos HTML est\u00e1ticos. Solo necesitas un archivo PHP que transmita todo en su respectiva proporci\u00f3n, y puede modificar todo de manera sencilla.<\/p>\n\n\n\n<p>Al final este sitio ser\u00e1 <strong>m\u00e1s r\u00e1pido<\/strong>, ya que el contenido din\u00e1mico se puede cachear autom\u00e1ticamente, el mantenimiento ser\u00e1 <strong>infinitamente m\u00e1s sencillo<\/strong> y puede escalar sin saturar el servidor de archivos.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En varios proyectos, especialmente creados entre los a\u00f1os 2000 y 2005, generan tantas p\u00e1ginas est\u00e1ticas que algunos desarrolladores cometen la tonter\u00eda de subir miles de archivos HTML al servidor, con la idea de que sea todo r\u00e1pido y f\u00e1cil de darle mantenimiento, nada m\u00e1s errado que la realidad. Esta pr\u00e1ctica puede ocasionar m\u00e1s contras que [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,7,5,9],"tags":[],"class_list":["post-51","post","type-post","status-publish","format-standard","hentry","category-apache","category-lamp","category-mysql","category-php"],"_links":{"self":[{"href":"https:\/\/bitacora.lado.mx\/index.php\/wp-json\/wp\/v2\/posts\/51","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bitacora.lado.mx\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bitacora.lado.mx\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bitacora.lado.mx\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bitacora.lado.mx\/index.php\/wp-json\/wp\/v2\/comments?post=51"}],"version-history":[{"count":3,"href":"https:\/\/bitacora.lado.mx\/index.php\/wp-json\/wp\/v2\/posts\/51\/revisions"}],"predecessor-version":[{"id":54,"href":"https:\/\/bitacora.lado.mx\/index.php\/wp-json\/wp\/v2\/posts\/51\/revisions\/54"}],"wp:attachment":[{"href":"https:\/\/bitacora.lado.mx\/index.php\/wp-json\/wp\/v2\/media?parent=51"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bitacora.lado.mx\/index.php\/wp-json\/wp\/v2\/categories?post=51"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bitacora.lado.mx\/index.php\/wp-json\/wp\/v2\/tags?post=51"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}