Estamos actualizando PHP a la versión 8.1. Usando la base de datos del servidor MS Sql. Todo parece funcionar correctamente, pero veo mensajes repetidos en el archivo de registro:
[03-feb-2022 11:51:18 America/New_York] PHP en desuso: la conversión automática de falso a matriz está en desuso en C:...\includes\adodb\drivers\adodb-mssqlnative.inc.php en la línea 154
Actualicé adodb a la versión 5.22, pero eso no impidió que se registraran los mensajes. El archivo ini tiene
extension=php_sqlsrv_81_nts_x64.dll extension=php_pdo_sqlsrv_81_nts_x64.dll¿Alguien sabe cómo arreglar este problema?
Este es un problema conocido de incompatibilidad con versiones anteriores que afecta a la biblioteca ADOdb versión 5.22.1 y anteriores. PHP 8.1 le advierte sobre la autovivificación de valores falsos y alguna versión futura de PHP arrojará un error cuando lo haga.
PHP permite de forma nativa la autovivificación (creación automática de matrices a partir de valores falsos). Esta función es muy útil y se usa en muchos proyectos de PHP, especialmente si la variable no está definida. Sin embargo, hay una pequeña rareza que permite crear una matriz a partir de un valor falso y nulo.
Y dan este ejemplo
// From false $arr = false; $arr[] = 2;Fui y encontré el archivo en cuestión y esta es la función en la que se encuentra
function ServerInfo() { global $ADODB_FETCH_MODE; static $arr = false; if (is_array($arr)) return $arr; if ($this->fetchMode === false) { $savem = $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; } elseif ($this->fetchMode >=0 && $this->fetchMode <=2) { $savem = $this->fetchMode; } else $savem = $this->SetFetchMode(ADODB_FETCH_NUM); $arrServerInfo = sqlsrv_server_info($this->_connectionID); $ADODB_FETCH_MODE = $savem; $arr['description'] = $arrServerInfo['SQLServerName'].' connected to '.$arrServerInfo['CurrentDatabase']; $arr['version'] = $arrServerInfo['SQLServerVersion'];//ADOConnection::_findvers($arr['description']); return $arr; }El problema es que empieza con
static $arr = false;y luego intenta autovivificar una no matriz (línea 154 en su error)
$arr['description'] = $arrServerInfo['SQLServerName'].' connected to '.$arrServerInfo['CurrentDatabase'];Debería poder arreglarlo (en teoría) asegurándose de que sea una matriz (algo que deberían haber hecho de todos modos). Agregue esto encima de esa línea para convertirlo en uno antes de que intente agregar
if(!is_array($arr)) $arr = [];