+54 11 5258-8400
Login

Cómo Actualizar PHP4 y PHP5 en adelante

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. Y si no le encontrás la vuelta, contactanos y te vamos a ayudar!

Estos consejos son válidos también para deshacerte 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);
Related Post
Conociendo Laravel: el framework que revolucionó PHP

Si siguen ahí después de leer el título quiere decir que todavía no perdieron las esperanzas de encontrar un buen Framework en PHP. La discusión entre “framework si” o “framework no” es larga y creo que los fundamentos más fuertes de los detractores se basan en las opciones disponibles de hoy en día. Pero en […]

Read more
Cómo utilizar el API de ELSERVER.COM: PHP en acción

En un post anterior vimos los conceptos básicos sobre el API de ELSERVER.COM: como listar, crear, modificar y eliminar elementos a través de llamadas HTTP. Sin embargo, no lo aplicamos a ningún lenguaje de programación en particular. Hoy vamos a avanzar en ese sentido: vamos a ver cómo integrar llamadas al API en nuestras aplicaciones […]

Read more
[Mejoras_Programadas] Cambio de versiones PHP :: 01/03/2013 ::

Te informamos que a partir del 1 de Marzo de 2013 estaremos actualizando a todos los sitios de la plataforma a la versión 5.4 de PHP. Esto significa que: Todos los clientes pasarán a tener la versión PHP 5.4. La misma ya está incorporada como opción en el Panel de Control. Mantendremos sólo las versiones PHP 4.4.9 (la […]

Read more

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

LAYOUT

SAMPLE COLOR

Please read our documentation file to know how to change colors as you want

BACKGROUND COLOR

BACKGROUND TEXTURE