Conexión a mysql desde PHP

Bueno, voy a poner algo bastante básico a la hora de interactuar con una base de datos desde php. Lo más común es utilizar MySql junto con PHP.
Para realizar dicha unión es necesario crear una conexión entre PHP y MySql.

A continuación pongo un procedimiento al que enviamos una variable que servirá de intermediaria entre PHP y MySql.

//PARA CONECTAR A LA BASE DE DATOS
function mysql_conecta(&$link){
  //datos de conexión
  //servidor(si es local "localhost")     
  $mysql_server='tu_servidor';
  //el usuario
  $mysql_login='tu_usuario';
  //la contraseña
  $mysql_pass='tu_contraseña';
  //el nombre de la base de datos
  $mysql_db='tu_db';    

  //conectamos
  if($link=@mysql_connect($mysql_server, $mysql_login, $mysql_pass)){
      //seleccionamos la base de datos
      @mysql_select_db($mysql_db, $link);
  }else{
      print "
El servidor se encuentra ocupado, disculpen las molestias";
      exit();
 }
}

Una vez que tenemos el «puente» ya podemos ejecutar consultas mediante las funciones que PHP incorpora.
Las funciones más utilizadas son :
mysql_query, sirve para enviar sentencias sql y almacenar los resultados de dichas sentencias.
mysql_fetch_array, sirve para convertir el objeto devuelto por mysql_query en un array en la que las claves son los nombres de los campos.
Existen muchas otras también muy útiles. Ver resto de funciones php-mysql.

Voy a poner un ejemplo de pedir un listado de nombres y apellidos de una base de datos:

//realizamos la conexión
conecta($link);
//pedimos los datos mediante mysql_query enviando una consulta y el conector
$respuesta=mysql_query("select nombre, apellido from tabla_nombres", $link);
//recorremos los datos convirtiéndolos en un array por campos
while($fila=mysql_fetch_array($respuesta)){
  //mostramos
  echo "
Nombre: ".$fila["nombre"]."  Apellido: ".$fila["apellido"];
}

Convertir un switch/nido de ifs en un array

Optimizar un switch o nido de ifs en una array tiene sus ventajas a la hora de optimizar/visualizar el código.

Por ejemplo tanto si tenemos un nido de ifs …

If($tipo_animal==0){
  $nombre="Cangrejo";
}elseif($tipo_animal==1){
  $nombre="Oso";
}elseif($tipo_animal==2){
  $nombre="Lobo";
}elseif($tipo_animal==3){
  $nombre="Ballena";
}elseif($tipo_animal==4){
  $nombre="Caballo";
}else ....

… como si tenemos un switch …

Switch ($tipo_animal)
case 0:
$nombre="Cangrejo";
break;
case 1:
$nombre="Oso";
break;
case 2:
$nombre="Lobo";
break;
case 3:
$nombre="Ballena";
break;
case 4:
$nombre="Caballo";
break;
...

Podemos simplificar el código creando un array:

//crea un array con los nombres, posición 0 tiene Cangrejo, 1 Oso ... etc ... etc ...
$nombre_animal=array('Cangrejo','Oso','Lobo','Ballena','Caballo', '...');
//accediendo así
$nombre=$nombre_animal[$tipo_animal];

Si por el contario nuestra array necesita otro tipo de clave podemos asignársela también como si de una colección se tratase:

//crea un array con los nombres, clave animal1 tiene Cangrejo, animal2 Oso ... etc ... etc ...
$nombre_animal=array('animal1'=>'Cangrejo', 'animal2'=>'Oso', 'animal3'=>'Lobo', 'animal4'=>'Ballena', 'animal5'=>'Caballo', '...');
//accediendo así
$nombre=$nombre_animal[$clave_animal];

PHP tiene un gran surtido de funciones para la utilización de arrays.
Documentación PHP.net

Subir archivos de más de 2 megas en php

Antes que nada decir que aquí no voy a enseñar como subir archivos, sino como permitir subir archivos mayores de 2 megas centrándome únicamente en la configuración necesaria para poder hacerlo. Si andas buscando un script para subir archivos desde PHP «googlea» y encontrarás.

En PHP el tamaño máximo por defecto para subir archivos es de 2 megas.
Si deseamos aumentar el tamaño deberemos de cambiar la configuración de algunos parámetros.

¿Qué tengo que modificar?
El archivo php.ini contiene la configuración de PHP. En concreto los parámetros son:

  • post_max_size: tamaño máximo de los datos enviados por POST.
  • upload_max_filesize: tamaño máximo al subir archivos.
  • max_execution_time: tiempo máximo de ejecución de cada script en segundos.
  • max_input_time: tiempo máximo de sepera en la recepción de datos.

Voy a citar algunos métodos para modificar dichos parámetros.


1.-Configurar directamente el php.ini

Editando directamente los parámetros del archivo php.ini se soluciona el problema.

Vamos a poner de ejemplo 10 Mb como máximo al subir archivos y un tiempo de espera y ejecución de 15 minutos, es decir 900 segundos.

Buscamos los parámetros dentro del archivo.

;;;;;;;;;;;;;;;;;;;

; Resource Limits ;

;;;;;;;;;;;;;;;;;;;

max_execution_time = 900

max_input_time = 900

; Maximum size of POST data that PHP will accept.
post_max_size = 10M

; Maximum allowed size for uploaded files.

upload_max_filesize = 10M

2- Crear un archivo .htaccess

Otra forma es cambiar la configuración desde un archivo .htaccess. Crea el archivo y escribe el siguiente código :


php_value upload_max_filesize 100M

php_value post_max_size 100M

php_value max_execution_time 1000

php_value max_input_time 1000


Si no sabes crear un archivo .htaccess desde windows te dejo un tutorial de como hacerlo.

Ahora súbelo a la raíz de tu servidor y ya esta.


3.- Cambiar la configuración en tiempo de ejecución.

La forma más personalizada es mediante código PHP. Y digo que es la más personalizada porque te permite cambiar la configuración desde cualquier parte del código PHP. Utilizando la «función» ini_set.



ini_set(‘post_max_size’,‘100M’);
ini_set(‘upload_max_filesize’,‘100M’);
ini_set(‘max_execution_time’,‘1000’);
ini_set(‘max_input_time’,‘1000’);

// script de subir archivos
?>

Realizar copia de seguridad de archivos web

Para realizar copias de seguridad, en linux, de nuestros archivos web cada cierto tiempo, deberemos de crear una tarea en el cron. Si no sabes como crearla pásate por aquí.

Yo suelo utilizar php para realizar dichas tareas:

//ruta archivo de salida
$C_FILE_ARCHIVO = "/ruta/backups/file_backup_".date("y_m_d_H_i_s").".tar.bz2";

//archivo o directorio a comprimir
$C_FILE_COMPRIME="eldirectoriodemiweb.com/";

//instrucción de guardado
system('tar -c "'.$C_FILE_COMPRIME.'" | bzip2 > "'.$C_FILE_ARCHIVO.'"');

Cualquier duda preguntarla.

6 métodos para abrir direcciones web desde PHP

Vía sockets:

//función que solicita la web mediante socket
function getcontent($server, $file='/index.php', $port=80){
$contenido = "";
$ip = gethostbyname($server);
$fp = fsockopen($ip, $port);
if(!$fp){
return "Inaccesible";
}else{
$crlf = "\r\n";
$cabecera= 'GET ' . $file . ' HTTP/1.0' . $crlf
.'Host: ' . $server . $crlf
.$crlf;
fputs($fp, $cabecera);
while (!feof($fp)){
$contenido .= fgets($fp, 1024);
}
fclose($fp);
$contenido = substr($contenido , strpos($contenido , "\r\n\r\n") + 4);
return $contenido;
}
}
echo getcontent('www.evobas.org');
?>

Vía file_get_contents:

$contenido=file_get_contents('http://www.kobox.org/index.php');
echo $contenido;

Vía file:

$contenido=implode('',file('http://www.indomita.org/index.html'));
echo $contenido;

Vía fopen:

$f='http://blog-indomita.blogspot.com/index.html';
$fp=fopen($f,'r');
$contenido='';
if(!$fp){
$contenido="Inaccesible";
}else{
while(!feof($fp))
$contenido.=fgets($fp,1024);
fclose($fp);
}
echo $contenido;

Vía Curl:

$ch = curl_init("http://www.ventadiscos.indomita.org/index.php");
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$contenido = curl_exec ($ch);
curl_close ($ch);
echo $contenido;

Vía Control de Salida ob_:

ob_start();
include("http://www.google.com");
$contenido=ob_get_contents();
ob_clean();
echo $contenido;

Algunos métodos necesitan tener activada la opción allow_url_fopen de PHP (php.ini).