Un servidor web está preparado para enviar archivos al cliente (navegador web) a través del protocolo HTTP
La versión 2.4 mejora notablemente el uso de memoria para competir con NginX
En sistemas con muchísimas peticiones, más rendimiento y menos consumo significa menos servidores, es decir menos dinero.
Php Hypertext Pre-processor
Aunque en sus inicios se llamó:
Personal Home Pages
Existe una comunidad muy activa y muchísima documentación, gran parte en español: http://php.net/
Todas las funciones y métodos de la documentación tienen la misma estructura:
Observación: PHP por sí mismo no almacena información de una petición a otra, ya que en cada petición del navegador, el proceso (y la memoria asignada) se crea y se destruye.
Incrementa el rendimiento de dos formas:
Se desarrolló en 2003 para el sitio web LiveJournal
Está basado en una tabla hash en memoria distribuida de varios servidores.
El tiempo de acceso a un valor de la tabla es algo inferior a un acceso a disco, pero nos garantiza que la información está sincronizada entre todos los servidores.
Reducir el número de archivos es muy importante. Por ejemplo, tener toda la configuración en un único archivo en vez de varios ahorrará tiempo de acceso a disco.
Distribución inteligente de código en nuestros ficheros, de tal forma que no se cargue código innecesario.
Utilizar funciones nativas siempre que sea posible, ya que al estar implementadas en C++ se ejecutan hasta 100 veces más rápido que en PHP.
Optimizar el uso de recursos: memoria, archivos abiertos, etc.
Facebook empezó utilizando PHP en sus servidores, para ahorrar costes inventó HipHop PHP
Para que el servidor ejecute php necesitaremos:
<!-- código HTML-->
<?php
/* Código PHP */
for ($i = 0; $i < 10; $i++) {
echo $i.' ';
}
?>
<!-- más código HTML-->
El punto y coma para separar sentencias es obligatorio.
$
$mi_bool = false;
$mi_cadena = 'mi cadena de texto';
$mi_objeto = new stdClass();
$mi_numero = 1234;
$mi_array = Array(
'edad'=>25,
'nombre'=>'Mengano',
'colores'=> array(
'rojo',
'verde',
'azul'
)
);
$mi_array['colores'][2]; // 'azul'
Para enviar información por pantalla contamos con:
echo expresión
- Muestra el contenido de una variable stringprint_r($objeto)
- Muestra una representación de cualquier cosa que le pasemos: una variable, array, objeto, etc.
echo "hola";
echo "<h1>Mi título</h1>"
echo $mi_variable;
$mi_array = array('nombre'=>'Fulano');
print_r($mi_array);
$mi_objeto = new stdClass();
print_r($mi_objeto);
Se pueden utilizar comillas dobles y simples, sin embargo, las comillas dobles tienen un procesamiento extra:
// Mejora la legibilidad del código añadiendo variables
$edad = 75;
echo "Fulanito tiene $edad años"; // Fulanito tiene 75 años
// Para expresiones complejas hay que utilizar llaves { }
$persona = new Persona();
echo "Fulanito tiene {$persona->getEdad()} años";
Para mejorar el rendimiento, es preferible usar las simples si no vamos a utilizar características especiales.
Hay varias formas de incluir archivos externos:
include('mi_archivo.php'); // Se incluye en el punto en el que se llama
include_once('mi_archivo.php'); // Se incluye en el punto en el que se
// llama y no se incluirá en llamadas
// posteriores esto es útil para incluir
// librerías
require('mi_archivo.php'); // igual que include pero PETA si el archivo
// no existe
require_once('mi_archivo'); // igual que incluide_once pero peta si el
// archivo no existe
class MiClase extends MiOtraClasepadre {
const MI_CONSTANTE = 'constante de clase';
private $atributo_privado = 'valor';
public $atributo_publico = 'valor';
public function metodo_publico($parametro) {
return 'Mi parámetro: '.$parametro;
}
}
$mi_clase = new MiClase();
echo $mi_clase->metodo_publico();
PHP soporta interfaces. Una clase puede implementar múltiples interfaces. Documentación: http://www.php.net/manual/es/language.oop5.interfaces.php
interface iTemplate {
public function setVariable($name, $var);
public function getHtml($template);
}
// Implementar la interfaz
// Ésto funcionará
class Template implements iTemplate {
}
Los traits son un mecanismo muy potente de herencia que soluciona el problema típico de la herencia múltiple.
Básicamente un trait permite definir una clase a partir de varias clases padre simultáneamente eligiendo los métodos y atributos deseados.
trait ezcReflectionReturnInfo {
function getReturnType() { /*1*/ }
function getReturnDescription() { /*2*/ }
}
class ezcReflectionMethod extends ReflectionMethod {
use ezcReflectionReturnInfo;
/* ... */
}
class ezcReflectionFunction extends ReflectionFunction {
use ezcReflectionReturnInfo;
/* ... */
}
El manejo de estructuras de datos complejas es extremadamente sencillo con la versatilidad de los arrays. Documentación: http://php.net/manual/en/function.array.php
Es posible utilizar arrays como:
Serializar y deserializar objetos y arrays a JSON es trivial con las funciones:
$array = array('nombre' => 'Fulano');
$json = json_encode($array);
$array = json_decode($json);
Object-Relational Mapping
Abstrae la implementación de la base de datos. Es decir, si utilizo el ORM en vez de llamar directamente a la base de datos, puedo cambiarla sin tener que cambiar mi código. Sería posible cambiar entre MySQL, PostgreSQL, Oracle, SQL Server, ... de forma transparente.
PDO tiene conectores para:
Documentación: http://es.php.net/pdo
function getFruit($conn) {
$sql = 'SELECT name, color, calories FROM fruit ORDER BY name';
foreach ($conn->query($sql) as $row) {
print $row['name'] . "\t";
print $row['color'] . "\t";
print $row['calories'] . "\n";
}
}
Documentación: http://es1.php.net/manual/es/book.mysql.php
- Ver rama Step2 del proyecto BlogPHP -
https://github.com/GerardoOscarJT/BlogPHP/tree/step2
Es un cliente web escrito en PHP, para gestionar y administrar bases de datos MySQL.
Es un cliente web de escritorio, para gestionar y administrar bases de datos MySQL.
Sitio web: http://www.mysql.com/products/workbench/
Con la popularidad cada vez más creciente de JavaScript y el alto rendimiento de la máquina virtual de Google, la V8, no tardó en aparecer un lunático en escribir un servidor en JavaScript.
Documentación: http://nodejs.org/api/
V8 es la máquina virtual de JavaScript utilizada en Google Chrome. Es código libre. V8 tiene un rendimiento excepcional ya que compila JavaScript al código máquina de la arquitectura del procesador en el que se ejecuta.
var http = require('http');
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('Hello World\n');
}).listen(8000);
console.log('Server running at http://127.0.0.1:8000/');
Sitio web: http://www.memsql.com/
Hay situaciones en las que:
Para solucionar estos nuevos problemas, se han diseñado las bases de datos basadas en documentos, también conocidas como noSQL
MongoDB es la solución más extendida para bases de datos noSQL. Documentación http://www.mongodb.org/
Algunos de los sitios que usan MongoDB: