¿Por qué get_env() trata mi variable de entorno booleana como una cadena?

3 minutos de lectura

Actualicé mi instancia de WordPress de 4.5 a 4.8 y, por alguna razón, mi variable de entorno booleana ahora regresa como una cadena de “falso” en lugar de false. Dado que mi versión de PHP no ha cambiado, estoy un poco desconcertado por el cambio. Sin embargo, lo que es más importante, sobre el futuro, ¿cuál es la mejor manera de administrar los valores booleanos en PHP a través de variables de entorno?

Aquí está la línea .env que tengo:

WP_FORCE_SSL_ADMIN=false

Aquí está la línea que tenía en mi wp-config.php que está regresando true debido a la conversión de cadenas.

define('FORCE_SSL_ADMIN', getenv('WP_FORCE_SSL_ADMIN'));

Aquí está el var_dump:

["WP_FORCE_SSL_ADMIN"]=>
string(5) "false"

Sé que simplemente puedo refactorizar la definición para tener en cuenta la conversión de cadena, pero me molesta que no entiendo qué cambió cuando nada debería haberlo hecho. Esto funcionó bien para wordpress versión 4.5.

¿Busca una respuesta para explicar el mejor método para pasar variables booleanas de mi entorno a PHP, o siempre tengo que tener en cuenta la conversión de cadenas?

  • WordPress4.8 probablemente no está pasando INI_SCANNER_TYPED al analizar el .env expediente – EDITAR Leí totalmente mal la pregunta, mi error.

    – ʰᵈˑ

    12 de septiembre de 2017 a las 16:17


  • Mmm…. Documentos PHP dilo getenv devuelve un cuerda (o FALSE si no existe), por lo que aparentemente siempre tendrá que tener en cuenta la conversión de cadenas.

    – nombre_usuario_aleatorio

    12 de septiembre de 2017 a las 16:18


  • También leí eso. Debe ser que WP cambió la forma en que interpreta FORCE_SSL_ADMIN para que ya no interprete la cadena “falso” como falso. Suspiro…

    – gdbj

    12/09/2017 a las 16:25

  • Dudo que. Que define La línea es 100% PHP, nada que ver con PHP en absoluto. supongo que eras no recogiendo la variable de entorno en primer lugar, razón por la cual estaba regresando FALSE (booleano), por lo que parecía estar haciendo lo que querías, pero en realidad no lo estaba viendo todo.

    – nombre_usuario_aleatorio

    12/09/2017 a las 16:26

  • cierto, pero WP es el que usa la variable creada por define? Supongo que PHP siempre almacenó la cadena “falso”, pero WP es el que usa esa variable de manera diferente. Esto tiene sentido ya que el cambio está relacionado con mi actualización.

    – gdbj

    12/09/2017 a las 16:35

avatar de usuario
gdbj

En caso de que alguien venga aquí buscando la respuesta de cómo lo resolví, lo que hice fue simplemente hacer una comparación con la cadena de “verdadero”.

define('FORCE_SSL_ADMIN', strtolower(getenv('WP_FORCE_SSL_ADMIN')) === "true");

Si bien esto funciona, todavía no me parece del todo correcto, como si me faltara algo.

  • Buena respuesta, pero solo funciona para “verdadero”, no para “VERDADERO”, “Verdadero”, etc., que son valores válidos

    – Ramesh Navi

    25 de agosto de 2020 a las 3:42


  • Es un truco en cualquier caso.

    – gdbj

    26 de agosto de 2020 a las 21:45

  • @RameshNavi Agregué strtolower() alrededor de getenv() método, que debería resolver ese problema.

    – Jabarí

    24 de febrero de 2021 a las 5:43

¿Ha sido útil esta solución?