fix(header): el entorno se detecta en linea, sin depender de otro fichero
Segundo intento. El primero (92f092d, revertido en9a4906e) metia una funcion `esEntornoLocal()` en `funciones.php` y la llamaba desde `header.php`. Tumbo villagrancanaria.com con un Fatal error nada mas desplegarse. POR QUE FALLO, QUE ES LO QUE HAY QUE RECORDAR **Cada web puede tener PERSONALIZADO cualquier fichero del core, y el sync lo respeta.** villagrancanaria tenia su propio `funciones.php` (38 KB frente a los 17 KB del nucleo: carga de modulos por AJAX, `dame_registros` en vez de `CocoDB::get`, globales propias). Al sincronizar recibio el `header.php` nuevo —que no estaba personalizado— y conservo su `funciones.php` viejo. Resultado: `Call to undefined function esEntornoLocal()`, fatal, pagina entera caida. Y lo hizo por el camino que no probe: las paginas de builder van por `slug.php` -> `builder_saas/controlador.php` -> `header.php`, que NO pasa por `funciones.php`. Yo verifique solo el camino de `index.php`. Conclusion de diseño: **no se puede añadir una funcion a un fichero del core y llamarla desde otro**. No hay garantia de que los dos lleguen a la misma web, y cuando no llegan el fallo es FATAL, no degradado. Una linea duplicada es preferible a una dependencia que el sync puede no entregar. QUE HACE AHORA `$esEntornoLocal = is_file(dirname(__FILE__) . "/.acai")`, en linea, sin funcion compartida ni includes. La señal es la presencia del `.acai`: Forge lo escribe en cada copia local y NUNCA viaja a produccion (esta en el `exclude` del manifest de push-core y fuera de la allowlist del sync per-web). Se detecta LOCAL explicitamente y todo lo demas es produccion: si la señal fallara, lo seguro es respetar `pagina_publicada`. local -> siempre se ve prod + publicada -> se ve prod + sin publicar + ?pruebas -> se ve, con el cartel rojo prod + sin publicar + visitante -> mantenimiento Sustituye a un `if (1)` hardcodeado que desactivaba la comprobacion entera, y al `header.php.prod` que se habia empezado a mantener y que ADEMAS estaba MAL: al comentar el `if(1){...}else{`, el cuerpo del else pasaba a ejecutarse siempre y un visitante de una web PUBLICADA recibia `die(mantenimiento)`. Nadie lo vio porque un `.prod` solo corre en produccion. VERIFICADO sobre webs reales y por LOS DOS CAMINOS, incluido el del builder: builder + local -> 403238 bytes, la web builder + prod publicada -> 403238 bytes, la web index.php + local -> 78104 bytes, la web index.php + prod sin publicar-> 1943 bytes, mantenimiento Cero fatal errors. Sintaxis con el PHP 8.3 de Plesk, el del hosting. OJO AL DESPLEGAR: esto hace que la pagina de mantenimiento empiece a funcionar de verdad. Hoy el `if (1)` la desactiva en todas las webs, produccion incluida, asi que cualquier web con `pagina_publicada = 0` se esta viendo entera y pasara a mostrar mantenimiento. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019gLX53DZJXGPFCf6DJTPWQ
This commit is contained in:
co-authored by
Claude Opus 5
parent
9a4906edfc
commit
f81c5a26e1
+32
-17
@@ -56,23 +56,38 @@ $config_header = array(
|
||||
'alternate' => @$alternate
|
||||
);
|
||||
|
||||
if (1){
|
||||
|
||||
if (@$customCode) echo modulo('custom-header',$config_header); else echo tpl('cabecera',$config_header);
|
||||
}else{
|
||||
if (!isset($_SESSION["pruebas"])){
|
||||
die(tpl('mantenimiento',$config_header));
|
||||
|
||||
}else{
|
||||
if (@$customCode) echo modulo('custom-header',$config_header); else echo tpl('cabecera',$config_header);
|
||||
if (isset($_SESSION["pruebas"])){
|
||||
if ($configuracionRecord["pagina_publicada"]==0){
|
||||
?>
|
||||
<div style="position:absolute;top:0px;width:150px;background-color:red;color:#fff;font-size:12px;padding:0 10px;z-index:99999999;transform:translateZ(1000px);">SITIO EN PRUEBAS</div>
|
||||
<?
|
||||
}
|
||||
}
|
||||
// ¿Quien ve la web y quien ve la pagina de mantenimiento?
|
||||
//
|
||||
// La señal de entorno es la PRESENCIA del `.acai` en la raiz: Forge lo escribe en
|
||||
// cada copia local y NUNCA viaja a produccion (esta en el `exclude` del manifest
|
||||
// de push-core y fuera de la allowlist del sync per-web).
|
||||
//
|
||||
// Se comprueba EN LINEA, sin funcion compartida, y es a proposito: cada web puede
|
||||
// tener PERSONALIZADO cualquier fichero del core y el sync lo respeta. Si esta
|
||||
// señal viviera en `funciones.php` (o en cualquier otro fichero), una web con ese
|
||||
// fichero personalizado recibiria este `header.php` pero no la funcion, y el
|
||||
// resultado seria un Fatal error que tumba la pagina entera. Paso de verdad el
|
||||
// 2026-09-01 con villagrancanaria.com. La duplicacion de una linea es preferible
|
||||
// a una dependencia que el sync puede no entregar.
|
||||
//
|
||||
// Se detecta LOCAL explicitamente y todo lo demas se trata como produccion: si la
|
||||
// señal fallara, lo seguro es respetar `pagina_publicada`.
|
||||
//
|
||||
// local -> siempre se ve (ahi no existe "publicada"
|
||||
// ni ?pruebas: son conceptos de produccion)
|
||||
// prod + publicada -> se ve
|
||||
// prod + sin publicar + ?pruebas -> se ve, con el cartel rojo
|
||||
// prod + sin publicar + visitante -> mantenimiento
|
||||
$esEntornoLocal = is_file(dirname(__FILE__) . "/.acai");
|
||||
|
||||
if ($esEntornoLocal || @$configuracionRecord["pagina_publicada"] || isset($_SESSION["pruebas"])) {
|
||||
if (@$customCode) echo modulo('custom-header',$config_header); else echo tpl('cabecera',$config_header);
|
||||
if (!$esEntornoLocal && isset($_SESSION["pruebas"]) && @$configuracionRecord["pagina_publicada"] == 0) {
|
||||
?>
|
||||
<div style="position:absolute;top:0px;width:150px;background-color:red;color:#fff;font-size:12px;padding:0 10px;z-index:99999999;transform:translateZ(1000px);">SITIO EN PRUEBAS</div>
|
||||
<?
|
||||
}
|
||||
|
||||
} else {
|
||||
die(tpl('mantenimiento',$config_header));
|
||||
}
|
||||
?>
|
||||
|
||||
Reference in New Issue
Block a user