Cómo Actualizar PHP4 y PHP5 en adelante

En algún momento lo tenías que hacer. PHP4 se dejó de soportar hace más de 10 años.

Te contamos algunos de los problemas de compatibilidad que podés llegar a encontrar, y cómo resolverlos.

Afortunadamente, la mayoría requiere cambios menores en tu código.

Estos consejos son válidos también para actualizar PHP 5.2/5.3 hacia arriba también.

Auto Prepend

La funcionalidad de auto_prepend de PHP te permite definir un archivo para ser incluído automáticamente en todos los archivos de tu sitio, sin necesidad de qué modifiques el código de cada uno.

Crear un archivo .user.ini en la raíz de tu sitio web (ej. /htdocs)

; Agregar automáticamente un include() de php al inicio de cada archivo
; http://php.net/auto-prepend-file
auto_prepend_file = /www/CUENTA/autoprepend.php

A la hora de adaptar un sitio web para funcionar con nuevas versiones puede ser de mucha utilidad para aplicar los ajustes sugeridos más abajo. Dentro de autoprepend.php se puede colocar código PHP a criterio.

Sesiones

La función session_register() no existe más, ya que implica la definición de variables globales. Esto es algo que por seguridad se ha eliminado. Si bien lo ideal sería reescribir el código para no utilizarlas, cambiando $var por $_SESSION[‘var’] en todos lados, una alternativa es redefinir manualmente la función, con el siguiente código:

session_register()

Fatal error: Call to undefined function session_register() in /www/tucuenta/carpeta/archivo.php on line X

if(!function_exists('session_register')) {
    function session_register($name){
        global $$name;
        $_SESSION[$name] = $$name;
        $$name = &$_SESSION[$name]; 
    }
}

MySQLi vs MySQL

Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /www/tucuenta/carpeta/archivo.php on line X

mysql_connect

mysql_connect puede simplemente reemplazarse por mysqli_connect

$link = mysql_connect( 'host', 'username', 'password');

pasa a ser:

$link = mysqli_connect( 'host', 'username', 'password');
mysql_*

La mayoría de las funciones pueden reescribirse facilmente. Sin embargo hay que tener presente que muchas de ellas ahora llevan $link como primer parámetro, que antes estaba implícido.

mysql_affected_rows -> mysqli_affected_rows($link);
mysql_close -> mysqli_close($link);
mysql_data_seek -> mysqli_data_seek($result, $offset);
mysql_errno -> mysqli_errno($link);
mysql_error -> mysqli_error($link);
mysql_fetch_array -> mysqli_fetch_array($result, $type);
mysql_fetch_assoc -> mysqli_fetch_assoc($result);
mysql_fetch_lengths -> mysqli_fetch_lengths($result);
mysql_fetch_object -> mysqli_fetch_object($result, $class, $params);
mysql_fetch_row -> mysqli_fetch_row($result);
mysql_field_seek -> mysqli_field_seek($result, $number);
mysql_free_result -> mysqli_free_result($result);
mysql_get_client_info -> mysqli_get_client_info($link);
mysql_get_host_info -> mysqli_get_host_info($link);
mysql_get_proto_info -> mysqli_get_proto_info($link);
mysql_get_server_info -> mysqli_get_server_info($link);
mysql_info -> mysqli_info($link);
mysql_insert_id -> mysqli_insert_id($link);
mysql_num_rows ->  mysqli_num_rows($result);
mysql_ping -> mysqli_ping($link);
mysql_query -> mysqli_query($link, $query);
mysql_escape_string -> mysqli_real_escape_string($link);
mysql_real_escape_string -> mysqli_real_escape_string($link);
mysql_select_db - > mysqli_select_db($link, $database);
mysql_set_charset -> mysqli_set_charset( $link, $charset);
mysql_stat -> mysqli_stat($link);
mysql_thread_id -> mysqli_thread_id($link);
mysql_field_name

Esta función no existe más en mysqli. Si bien hay metodos alternativos, una forma simple de solventar este error es crear una función mysqli_field_name manualmente, y reemplazar mysql_field_name por mysqli_field_name donde sea necesario.

function mysqli_field_name($result, $field_offset)
{
    $properties = mysqli_fetch_field_direct($result, $field_offset);
    return is_object($properties) ? $properties->name : null;
}

Register Globals

Las variables de GET, POST, COOKIE y SESSION no se registran más automáticamente como variables globales. Es decir un parametro en URL por ejemplo index.php?var=HOLA no definirá automáticamente una variable $var con valor “HOLA”, sino $_GET[‘var] = “HOLA”

Se puede emular el comportamiento anterior con la siguiente linea de código:

extract($_REQUEST);

Comments are closed.