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?
Esta es una incompatibilidad hacia atrás en la propia biblioteca. PHP 8.1 ya no permite la autovivificación de valores falsos-y
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 = [];