Categoría: Informática

Titorial de PHP

commentarios
Feito o :17 Decembro 2012

Que é PHP.
Instalación.
Tipos de datos.
Constantes.
Etiquetas.
Variables.
Arrays e Estructuras de control.
Funcións.
Arquivos.
Programación orientada a obxectos.
Formularios.
Cookies.
Sesións.
Conexión a bases de datos.
_______________________________________________________________________________________________________________________________________________________________

Que é PHP:
PHP é o acrónimo de PHP Hypertext Preprocessor, e é, unha linguaxe de programación de uso xeral de script ao lado do servidor orixinalmente deseñado para o desenvolvemento web de contido dinámico. Foi unha das primeiras linguaxes de programación do lado do servidor que se podían incorporar directamente nun documento HTML en lugar de chamar a un arquivo externo que procese os datos. O código é interpretado por un servidor web cun módulo de procesador de PHP que xera a páxina Web resultante. PHP pode ser usado na maioría dos servidores web do mesmo xeito que en case todos os sistemas operativos, bases de datos e plataformas sen ningún custo.

Foi creado orixinalmente por Rasmus Lerdorf en 1995. Actualmente a linguaxe segue sendo desenvolvida con novas funcións polo grupo PHP. Esta linguaxe forma parte do software libre publicado baixo a licenza PHP que é incompatible coa Licenza Pública Xeneral de GNU debido ás restricións do uso do termo PHP.

Un exemplo:

<html>

<head>

<title> Exemplo básico PHP</title>

</head>

<body>

<?php

echo ‘Hola mundo’;

?>

</body>

</html>

Para crear unha saída, escribimos o código HTML con certo código PHP embebido (introducido) no mesmo, o cal producirá a saída “Hola mundo”.

O código PHP inclúese entre etiquetas especiais de comezo e final (<?php e ?>) que nos permitirán entrar e saír no modo PHP.

PHP soporta varios tipos de comentarios.

Exemplo:

<?php

echo “Isto é unha proba”; // Isto é o comentario para unha liña

/* Este é un comentario multiliña

máis comentario */

echo “Unha proba máis”; # Isto é un comentario

?>

Instalación:
Neste titorial imos usar só ferramentas libres: Servidor Apache, Base de Datos MySQL e Editor Bluefish. Para editor valería calquera procesador de textos.

Pódese instalar o Servidor Apache seguindo este titorial:http://trisquel-blog.com/?cat=7

Para MySQL serve este enlace:http://trisquel-blog.com/?cat=8

Para PHP5 en Sistemas Linux baseados en Debian:

# aptitude install php5-common libapache2-mod-php5 php5-cli

Aptitude instalará de xeito automático o módulo PHP5 para Apache 2 xunto con todas as súas dependencias, e logo activarao. Apache ten que ser reiniciado para que os trocos teñan efecto.

Para usar PHP con MySQL hai que instalar a súa extensión:

# aptitude install php5-mysql

Neste enlace:http://www.php.net/manual/es/install.unix.php hai máis información sobre a instalación e configuración de PHP.

Para comprobar que temos PHP, no noso editor, escribimos o seguinte código PHP:

<?php

phpinfo();

?>

gardamos o ficheiro co nome infophp.php, pode ser calquera nome agás a extensión que obrigatoriamente é .php, imos o navegador e executámolo, a saída é un cadro coa descrición da configuración de PHP.

Para instalar o Editor Bluefish abonda con:

# aptitude install bluefish

Existe unha aplicación chamada XAMPP que é un servidor independente da plataforma, software libre, que consiste principalmente na base de datos MySQL, o servidor Web Apache e os intérpretes para linguaxes de script: PHP e Perl. O nome provén do acrónimo de X (para calquera dos diferentes sistemas operativos), Apache, MySQL, PHP, Perl. O programa está liberado baixo a licenza GNU e actúa como un servidor Web libre, fácil de usar e capaz de interpretar páxinas dinámicas. Esta dispoñible para GNU/Linux, Solaris, Windows e MacOS X.

Tipos de datos: Integer, Float, Strings, Boolean:
Integer: Valores numéricos enteiros pódense especificar do xeito seguinte:

$a = 1234; # número decimal

$a = -123; # un número negativo

$a = 0123; # número octal

$a = 0×12; # número hexadecimal

Float: Valores numéricos con parte decimal:

$a = 1.234;

$a = 1.2e3;

Strings: Cadeas de caracteres:

$str = “Esto es una cadena”; // Asignando unha cadea.

$str = $str . ” con máis texto”; // Engadindo á cadea.

$str .= “E un carácter de nova liña ao final.\n”; /*Outro xeito de engadir,

inclue un carácter de nova

liña protexido. */

Conversión de cadeas: Cando unha cadea se avalía como un valor numérico, o valor resultante e o tipo determínanse como segue.

A cadea avaliarase como un dobre se contén calquera dos carácteres ‘.’, ‘e’, ou ‘E’. En caso contrario, avaliarase como un enteiro.

O valor vén dado pola porción inicial da cadea. Se a cadea comeza con datos de valor numérico, este será o valor usado. En caso contrario, o valor será 0 (cero). Os datos numéricos válidos son un signo opcional, seguido por un ou máis díxitos (que opcionalmente conteñan un punto decimal), seguidos por un expoñente opcional. O expoñente é unha ‘e’ ou unha ‘E’ seguidos por un ou máis díxitos. Cando a primeira expresión é unha cadea, o tipo da variable dependerá da segunda expresión.
$foo = 1 “10.5″; // $foo é dobre (11.5)

$foo = 1 “-1.3e3″; // $foo é dobre (-1299)

$foo = 1 “bob-1.3e3″; // $foo é enteiro (1)

$foo = 1 “bob3″; // $foo é enteiro (1)

$foo = 1 “10 porquiños”; // $foo é enteiro (11)

$foo = 1 “10 porquiños”; // $foo é enteiro (11)

$foo = “10.0 porcos ” 1; // $foo é enteiro (11)

$foo = “10.0 porcos ” 1.0; // $foo é double (11)

Boolean: Serve para asignar valores lóxicos ( VERDADEIRO ou FALSO):

$certo = TRUE; //O valor de $certo e verdadeiro

$certo = FALSE; //Agora e falso

Constantes:
PHP define varias constantes e proporciona un mecanismo para definir máis en tempo de execución.

As constantes son como as variables, agás que as constantes deben ser definidas usando a función define(), e que non poden ser redefinidas máis tarde con outro valor. As constantes predefinidas (sempre dispoñibles) son:

__FILE__: Nome do arquivo de comandos que está sendo interpretado actualmente. Se se usa dentro dun arquivo que foi incluído ou requirido, entón dáse o nome do arquivo incluído, e non o nome do arquivo pai.

__LINE__: O número de liña dentro do arquivo que está sendo interpretado na actualidade. Se se usa dentro dun arquivo incluído ou requirido, entón dáse a posición dentro do arquivo incluído.

PHP_VERSION: A cadea que representa a versión do analizador de PHP en uso.

PHP_Os: Nome do sistema operativo no cal se executa o analizador PHP.

TRUE: Valor verdadeiro.

FALSE: Valor falso.

E_ERRO: Denota un erro distinto dun erro de interpretación do cal non é posible recuperarse.
E_WARNING: Denota unha condición onde PHP recoñece que hai algo erróneo, pero continuará de todos os xeitos; pode ser capturado polo propio arquivo de comandos.

E_PARSE: O interprete atopou sintaxe inválida no arquivo de comandos. A recuperación non é posible.

E_NOTICE: Ocorreu algo que puido ser ou non un erro. A execución continúa.

Pódense definir constantes adicionais usando a función define().

Exemplo:
define(“EXEMPLO_DE_CONSTANTE”, “Ola mundo.”);

echo CONSTANTE; // Amosa Ola mundo.

Etiquetas:

O xeito que ten PHP de delimitar onde empeza e onde termina o seu código, entre o do HTML, é por medio das etiquetas de comezo e fin de código.

<?php //Comezo

………

?> //Fin do código

Variables:
En PHP, as variables, non fai falta declaralas, represéntanse como un signo de dólar seguido polo nome da variable. O nome da variable é sensible a minúsculas e maiúsculas.
$var = “Bob”;

$Var = “Joe”;

echo “$var, $Var”; // produce a saída “Bob, Joe”

As seguintes variables son creadas polo propio PHP.

Argv: Array de argumentos pasados ao script. Cando o script se executa dende a liña de comandos, isto dá un acceso, ao estilo de C, aos parámetros pasados en liña de comandos. Cando se lle chama mediante o método GET, conterá a cadea da petición.
Argc: Contén o número de parámetros da liña de comandos pasados ao script (se se executa dende a liña de comandos).

PHP_SELF: O nome do ficheiro que contén o script que se esta executando, relativo ao directorio raíz dos documentos. Se PHP se esta executando como intérprete de liña de comandos, esta variable non está dispoñible.

HTTP_COOKIE_VARS: Un array asociativo de variables pasadas ao script actual mediante cookies HTTP. Só está dispoñible se o seguimento de variables foi activado mediante a directiva de configuración track_vars ou a directiva.<?php_track_vars?>.

HTTP_GET_VARS: Un array asociativo de variables pasadas ao script actual mediante o método HTTP GET. Só está dispoñible se –variable tracking– foi activado mediante a directiva de configuración track_vars ou a directiva <?php_track_vars?>.

HTTP_POST_VARS: Un array asociativo de variables pasadas ao script actual mediante o método HTTP POST. Só está dispoñible se –variable tracking– foi activado mediante a directiva de configuración track_vars ou a directiva <?php_track_vars?>.

Ambito das variables:O ámbito dunha variable é o contexto dentro do que a variable está definida, que pode ser global ou local.

As variables globais son aquelas accesibles dende calquera sitio do código PHP mentres que as locais con as que se definen dentro dunha función, logo, só estan dispoñibles dentro dela.

Exemplo:

$a = 1; /* ámbito global */

Function Test () {

echo $a; /* referencia a una variable de ámbito local */

}

Test ();

Este script non producirá saída, xa que a orde echo utiliza unha versión local da variable $a, á que non se lle deu ningún valor no seu ámbito.

Con todo:

$a = 1;

$b = 2;

Function Sum () {

global $a, $b;

$b = $a + $b;

}

Sum ();

echo $b;

Producirá 3 de saída. Ao declarar as variables $a e $b como globais dentro da función todas as referencias a tales variables son a versión global.

Variables externas a PHP (GET e POST): Cando se envía un formulario a un script PHP, as variables de dito formulario pasan a estar dispoñibles de xeito automático no script gracias a PHP.

Exemplo:

<form action=”foo.php3″ method=”post“>

Name: <input type=”text” name=”name”><br>

<input type=”submit”>

</form>

Cando é enviado, PHP creará a variable $name, que conterá o que sexa que se introduciu no campo Name: do formulario.

Arrays e Estructuras de control:
Un array é unha serie de elementos indexados. A diferenza de outras linguaxes, os datos, non teñen porque ser todos do mesmo tipo. Para acceder a cada un dos elementos do array faise por medio do indice. O xeito máis doado de crear un array é como se fora unha variable pero incluíndo o indice entre corchetes, $a[0] = 1; isto creará un array dun só elemento cuxa posición é 0 e que contén o valor 1. O primeiro elemento das matrices en PHP é o 0.

Exemplos:

$a[0] = “abc”;

$a[1] = “def”;

Tamén se pode crear simplemente engadindo valores ao array. Cando se asigna un valor a unha variable array usando corchetes baleiros, o valor engadirase ao final do array.

$a[ ] = “ola”; // $a[2] == “ola”

$a[ ] = “mundo”; // $a[3] == “mundo”

Os arrays pódense ordenar usando as funcións asort(), arsort(), ksort(), rsort(), sort(), uasort(), usort(), e uksort() dependendo do tipo de ordenación que se desexe.

Pódese contar o número de elementos dun array usando a función count().

Pódese percorrer un array usando as funcións next() e prev(). Outra forma habitual de percorrer un array é usando a función each().

Outro xeito de encher un array é:

$a = array(“Luns”,”Martes”,”Mércores”);

Arrays asociativos: Son aqueles que o índice é unha cadea:

$a["color"] = “azul”;

$a["sabor"] = “doce”;

$a["forma"] = “redondeada”;

$a["nome"] = “maza”;

ou

$a=array(“color” => “azul”, “sabor” => “doce”);

Arrays multidimensionais:

$a = array(

“maza” => array(

“color” => “azul”,

“sabor” => “doce”,

“forma” => “redondeada”

),

“laranxa” => array(

“color” => “laranxa”,

“sabor” => “ácido”,

“forma” => “redondeada”

),

“plátano” => array(

“color” => “amarelo”,

“sabor” => “doce”,

“forma” => “lineal”

)

);

echo $a["maza"]["sabor"]; # devolverá “doce”

Estruturas de control:

If: Permite a execución condicional de fragmentos de código. Exemplo:

if ($a > $b)

print “a es mayor que b”;

A sentenza if pódese aniñar de xeito indefinido dentro doutras sentenzas.

Else: A miúdo queremos executar unha sentenza se se cumpre unha certa condición, e unha sentenza distinta se a condición non se cumpre. Exemplo:

if ($a > $b) {

print “a é maior que b”;

} else {

print “a NON é maior que b”;

}

Elseif: como o seu nome suxire, é unha combinación de if e else. Como else, estende unha sentenza if para executar unha sentenza diferente no caso de que a expresión if orixinal avalíase como FALSE. Non entanto, a diferenza de else, executará esa expresión alternativa soamente se a expresión condicional elseif avalíase como TRUE. Exemplo:

if ($a > $b) {

print “a é maior que b”;

} elseif ($a == $b) {

print “a é igual que b”;

} else {

print “a é maior que b”;

}

Sintaxe Alternativa de Estruturas de Control: PHP ofrece unha sintaxe altenativa para algunha das súas estruturas de control; a saber, if, while, for, e switch. En cada caso, a forma básica da sintaxe alternativa é cambiar abrir-chave por dous puntos (:) e pechar-chave por endif;, endwhile;, endfor;, ou endswitch;, respectivamente.

<? php if ($a==5): ?>

A é igual a 5

<?php endif; ?>

No exemplo de arriba, o bloque HTML “A = 5″ aníñase dentro dunha sentenza if escrita na sintaxe alternativa. O bloque HTML mostraríase soamente se $a fóra igual a 5.

A sintaxe alternativa aplícase a else e tamén a elseif. A seguinte é unha estrutura if con elseif e else no formato alternativo:

if ($a == 5):

print “a é igual a 5″;

print “…”;

elseif ($a == 6):

print “a é igual a 6″;

print “!!!”;

else:

print “a non é nin 5 nin 6″;

endif;

While: A forma básica dunha sentenza while é:

while (expr) sentencia

O significado dunha sentenza while é simple. Dille a PHP que execute as sentenzas aniñadas, tanto como a expresión while se avalíe como TRUE. O valor da expresión é verificado cada vez ao comezo do bucle, polo que ata se este valor cambia durante a execución das sentenzas aniñadas, a execución non se deterá ata o final da iteración (cada vez que PHP executa as sentenzas contidas no bucle é unha iteración). Se a expresión while se avalíase como FALSE dende o principio, as sentenzas aniñadas non se executarán nin sequera unha vez.

Como coa sentenza if, pódense agrupar multiples sentenzas dentro do mesmo bucle while encerrando un grupo de sentenzas con chaves, ou usando a sintaxe alternativa:

while (expr): sentenza … endwhile;

O seguintes exemplos imprimen números do 1 ao 10:

/* Exempol 1 */

$i = 1;

while ($i <= 10) {

print $i ; /* o valor impreso sería $i antes do incremento (post-incremento) */

$i++;

}

/* ejemplo 2 */

$i = 1;

while ($i <= 10):

print $i;

$i++;

endwhile;

Do..while: Os bucles do..while son moi similares aos bucles while, agás que as condicións compróbanse ao final de cada iteración no canto de ao principio. A principal diferenza fronte aos bucles regulares while é que se garante a execución da primeira iteración dun bucle do..while, a
condición compróbase só ao final da iteración, mentres que pode non ser necesariamente
executada cun bucle while regular, a condición compróbase ao principio de cada iteración, se esta avalíase como FALSE desde o principio a execución do bucle finalizaría inmediatamente).

Hai unha soa sintaxe para os bucles do..while:

$i = 0;

do {

print $i;

} while ($i>0);

For: A sintaxe dun bucle for é:

for (expr1; expr2; expr3) sentencia

A primeira expresión (expr1) avalíase incondicionalmente unha vez ao principio do bucle.
Ao comezo de cada iteración, avalíase expr2. Se se avalía como TRUE, o bucle continúa e as sentenzas aniñadas execútanse. Se se avalía como FALSE, a execución do bucle finaliza.

Ao final de cada iteración, avalíase (executa) expr3. Cada unha das expresións pode estar baleira. Que expr2 estea baleira significa que o bucle debería correr indefinidamente. Isto poida que non
sexa tan inútil como se podería pensar, posto que a miúdo quérese saír dun bucle usando unha sentenza break condicional no canto de usar a condición de for. Exemplos.

Todos eles mostran números do 1 ao 10:

/* exemplo 1 */

for ($i = 1; $i <= 10; $i ) {

print $i;

}

/* exemplo 2 */

for ($i = 1;;$i ) {

if ($i > 10) {

break;

}

print $i;

}
/* exemplo 3 */

$i = 1;

for (;;) {

if ($i > 10) {

break;

}

print $i;

$i ;

}

/* exemplo 4 */

for ($i = 1; $i <= 10; print $i, $i ) ;

Por suposto, o primeiro exemplo parece ser o mais elegante (ou quizais o cuarto), pero un pode descubrir que ser capaz de usar expresións baleiras en bucles for resulta útil en moitas ocasións.
Foreach: Ten dúas sintaxes:

foreach(expresion_array as $value) sentenza

foreach(expresion_array as $key => $value) sentencia

A primeira forma percorre o array dado por expresion_array. En cada iteración, o valor do elemento
actual asígnase a $value e o punteiro interno do array avánzase nunha unidade (así no seguinte paso, estarase mirando o elemento seguinte).

O segundo xeito fai o mesmo, salvo que a crave do elemento actual será asignada á variable
$key en cada iteración.

As seguintes funcionalidades son idénticas:

reset( $arr );

while( list( , $value ) = each( $arr ) ) {

echo “Valor: $value<br>\n”;

}

foreach( $arr as $value ) {

echo “Valor: $value<br>\n”;

}
As seguintes tamén son funcionalidades idénticas:

reset( $arr );

while( list( $key, $value ) = each( $arr ) ) {

echo “Key: $key; Valor: $value<br>\n”;

}
foreach( $arr as $key => $value ) {

echo “Key: $key; Valor: $value<br>\n”;

}

Algúns exemplos máis do seu uso:

/* foreach exemplo 1: só valor*/

$a = array(1, 2, 3, 17);

foreach($a as $v) {

print “Valor actual de \$a: $v.\n”;

}

/* exemplo 2: valor (con clave impresa para ilustrar) */

$a = array(1, 2, 3, 17);

$i = 0; /* só para propósitos demostrativos */

foreach($a as $v) {

print “\$a[$i] => $k.\*n”;

}

/* exemplo 3: clave e valor */

$a = array(

“un” => 1,

“dous” => 2,

“tres” => 3,

“dezasete” => 17

);

foreach($a as $k => $v) {

print “\$a[$k] => $v.\n”;

}

Break: Remata a execución da estrutura actual for, foreach, while, do-while ou switch. Acepta un argumento numérico opcional o cal indica de cantas estruturas aniñadas encerradas se ten que saír. Exemplo:

$arr = array(‘un’, ‘dous’, ‘tres’, ‘catro’, ‘stop’, ‘cinco’);

while (list(, $val) = each($arr)) {

if ($val == ‘stop’) {

break; /* Pódese escribir tamén break 1. aqui*/

}

echo “$val<br> \n”;

}

/* Usando o argumento opcional. */

$i = 0;

while ( $i) {

switch ($i) {

case 5:

echo “En 5<br>\n”;

break 1; /* Só sae do switch. */

case 10:

echo “En 10; saíndo<br>\n”;

break 2; /* Sae do switch e do while. */

default:

break;

}
}
Continue: Utilízase dentro das estruturas iterativas para saltar o resto da iteración actual do bucle e continuar a execución na avaliación da condición e logo comezar a seguinte iteración.

En PHP a sentenza switch considérase unha estrutura iterativa para os propósitos de continue. A sentenza continue acepta un argumento numérico opcional, que indica cantos niveis de bucles encerrados se han saltar. O valor por omisión é 1, polo que salta ao final do bucle actual. Exemplo:

while (list($clave, $valor) = each($arr)) {

if (!($clave % 2)) { // saltar os membros impares

continue;

}

facer_algo($valor);

}

$i = 0;

while ($i < 5) {

echo “Exterior<br>\n”;

while (1) {

echo “Medio<br>\n”;

while (1) {

echo “Interior<br>\n”;

continue 3;

}

echo “Isto nunca se imprimirá.<br>\n”;

}

echo “Nin isto tampouco.<br>\n”;

}

Switch: A sentenza switch é similar a unha serie de sentenzas IF na mesma expresión. En moitas ocasións, quérese comparar a mesma variable (ou expresión) con nuchos valores diferentes, e executar unha parte de código distinta dependendo da que valor é igual.

Os dous exemplos seguintes son dous xeitos distintos de escribir a mesma cousa, un usa unha serie de sentenzas if, e o outro usa a sentenza switch:

/*exemplo1 */

if ($i == 0) {

print “i é igual a 0″;

}

if ($i == 1) {

print “i é igual a 1″;

}

if ($i == 2) {

print “i é igual a 2″;

}

/*exemplo 2 */

switch ($i) {

case 0:

print “i é igual a 0″;

break;

case 1:

print “i é igual a 1″;

break;

case 2:

print “i é igual a 2″;

break;

}
É importante entender como se executa a sentenza switch para evitar erros. A sentenza switch
executa liña por liña (realmente, sentenza a sentenza). Ao comezo, non se executa código. Só
cando se atopa unha sentenza case cun valor que coincide co valor da expresión switch
PHP comeza a executar as sentenzas. PHP continúa executando as sentenzas ata o final do bloque
switch, ou a primeira vez que vexa unha sentenza break. Se non se escribe unha sentenza break ao final dunha lista de sentenzas case, PHP seguirá executando as sentenzas do seguinte case.

Include: Esta sentenza inclúe e avalía o arquivo especificado.

O seguinte tamén se aplica a require.

Os arquivos son incluídos con base na ruta de acceso dada ou, se ningunha é dada, o include_path especificado. Se o arquivo non se atopa no include_path, include finalmente verificará no propio directorio do script que fai o chamado e no directorio de traballo actual, antes de fallar. O construtor include emitirá unha advertencia se non pode atopar un arquivo, este é un comportamento diferente ao de require, o cal emitirá un erro fatal.

Se unha ruta é definida xa sexa absoluta (comezando cunha letra de unidade ou \ en Windows ou / en sistemas Unix/Linux) ou relativa ao directorio actual (comezando con . ou ..) o include_path será ignorado por completo. Por exemplo, se un nome de arquivo comeza con ../, o interprete buscará no directorio pai para atopar o arquivo solicitado.

Cando se inclúe un arquivo, o código que contén herda o ámbito das variables da liña na cal ocorre a inclusión. Calquera variable dispoñible nesa liña do arquivo que fai o chamado, estará dispoñible no arquivo chamado, desde ese punto en diante. Con todo, todas as funcións e clases definidas no arquivo incluído teñen o ámbito global.
Exemplo:

vars.php //nome do arquivo a incluír

<?php
$cor = ‘verde’;

$froita = ‘mazá’;

?>

test.php // segundo arquivo

<?php

echo “Unha $froita $cor”; // Unha

include ‘vars.php’;

echo “Unha $froita $cor”; // Unha mazá verde

?>

Require: é idéntico a include agás que en caso de fallo producirá un erro fatal de nivel E_COMPILE_ERRO. Noutras palabras, este detén o script mentres que include só emitirá unha advertencia (E_WARNING) o cal permite continuar o script.

Include_once: A sentenza include_once inclúe e avalía o ficheiro especificado durante a execución do script. É un comportamento similar ao da sentenza include, sendo a única diferenza que se o código do ficheiro xa foi incluído, non se volverá a incluír. Como o seu nome indícao, será incluído só unha vez. include_once pode ser usado en casos onde o mesmo ficheiro podería ser incluído e avaliado máis dunha vez durante unha execución particular dun script, así que neste caso, pode axudar a evitar problemas como a redefinición de funcións, reasignación de valores de variables.

Require_once: é idéntica a require agás que PHP verificará se o arquivo xa foi incluído e se é así, non se inclúe (require) de novo.

Funcións:
Unha función pode ser definida usando unha expresión como a seguinte:
function foo ($arg_1, $arg_2, …, $arg_n) {
echo “Función de ejemplo.\n”;
return $retval;
}

A información pode fornecerse ás funcións mediante unhaa lista de parámetros, unha lista de variables e/ou constantes separadas por comas.

PHP soporta pasar parámetros por valor (o comportamento por defecto), por referencia, e parámetros por defecto.

Parámetros por referencia: Por defecto, os parámetros dunha función pásanse por valor, de maneira que se troca o valor do argumento dentro da función, non se ve modificado fóra dela.

Para permitir modificar o valor dos parámetros dunha función, hai que pasalos por referencia, para iso, hai que antepor un ampersand (&) ao nome do parámetro na definición da función.

Exemplo:

function add_some_extra(&$string) {
$string .= ’ e algo máis.’; //O punto antes do signo igual concatena as cadeas
}
$str = ’Isto é unha cadea, ’;
add_some_extra($str);
echo $str; // Saca ’Isto é unha cadea, e algo máis.’

Para pasar unha variable por referencia a unha función que non toma o parámetro por referencia por defecto, tes que antepor un ampersand ao nome do parámetro na chamada á función:

function foo ($bar) {

$bar .= ’e algo máis.’;

}

$str = ’Isto é unha cadea, ’;

foo ($str);

echo $str; // Saca ’Isto é unha cadea, ’

foo (&$str);

echo $str; // Saca ’Isto é unha cadea, e algo máis.’

Parámetros por defecto: Unha función pode definir valores por defecto para os parámetros escalares.

Exemplo:

function makecoffee ($type = “cappucino”) {

return “Facer unha cunca de $type.\n”;

}

echo makecoffee ();

echo makecoffee (“espresso”);

A saída do fragmento anterior é:

Facer unha cunca de cappucino.

Facer unha cunca de espresso.

O valor por defecto ten que ser unha expresión constante, e non unha variable ou membro dunha clase.

Devolver valores: Os valores retórnanse usando a instrución opcional return. Pode devolverse calquera tipo de valor, incluíndo listas e obxectos.

Exemplo:
function square ($num) {

return $num * $num;

}

echo square (4); // saca 16.

Non se poden devolver múltiples valores desde unha función, pero un efecto similar pódese conseguir devolvendo unha lista.

function small_numbers() {

return array (0, 1, 2);

}
list ($zero, $one, $two) = small_numbers();

Arquivos:
Un arquivo ou ficheiro informático é un conxunto de bits almacenado nun dispositivo. Un arquivo é identificado por un nome e a descrición do cartafol ou directorio que o contén.

Ademais de bases de datos e arquivos HTML, PHP tamén permite o uso de ficheiros de texto.
Exemplo:

$ruta = “/carpeta/contador.txt”;

$fp = fopen($ruta, “w+”);

$conta = fread($fp, filesize($ruta));

$conta++;
rewind($fp);
fputs($fp, $conta);

fclose($fp);

Para abrir un arquivo úsase a función fopen(), cos parámetros filename e mode, que dará como resultado o punteiro de arquivos ( file pointer ) que gardaremos na variable $fp.

Filename E o nome do arquivo, no exemplo é contador, que se atopa no cartafol carpeta.

Mode Dinos o que podemos facer cun arquivo:

r Só para ler, punteiro ao inicio.

r+ Ler e escribir, punteiro ao inicio.

w Só para escribir, punteiro ao inicio, se existe borra os datos.

w+ Ler e escribir, punteiro ao inicio, se existe borra os datos.

a Escritura, punteiro ao final, se non existe créao.

a+ Ler e escribir, punteiro ao final, se non existe créao.

A función fread( punteiro, tamaño_da_cadea) recupera do arquivo unha cadea de caracteres e asígnallo a variable $conta , o segundo argumento é a lonxitude da cadea.

fgets( punteiro) fai o mesmo que fread coa diferenza que interpretará como final de cadea o primeiro retorno de carro que atope. A lonxitude máxima da cadea será de 1024 caracteres.

Unha función semellante e file_get_contents( $filename ) coa diferenza que transmite o arquivo enteiro a unha cadea.

$conta++ súmalle 1 ao valor da variable.

rewind( punteiro ) situa o punteiro no principio de arquivo. A función fseek( punteiro, 0) fai o mesmo.

fputs( punteiro, variable ) encargase de sobre-escribir, argumento w+, o contido de $conta no arquivo. Tamén se podería empregar fwrite( punteiro, variable ). file_put_contents( $filename, $variable) escribe unha cadea nun arquivo. Esta función é idéntica que chamar a fopen(), fwrite() e fclose() sucesivamente para escribir información nun arquivo.

Por último fclose( punteiro ) pecha o arquivo.

Isto é un exemplo dun contador de visitas a unha páxina web.

Programación orientada a obxectos:
A programación orientada a obxectos ou POO (OOP segundo as súas siglas en inglés) é un paradigma de programación que usa os obxectos nas súas interaccións, para deseñar aplicacións e programas informáticos.

Características:

Abstracción Illamento dun elemento do seu contexto. Define as características esenciais dun
obxecto.
Encapsulamento Reúne ao mesmo nivel de abstracción, a todos os elementos que poidan considerarse pertencentes a unha mesma entidade.

Modularidade Característica que permite dividir unha aplicación en varias partes máis pequenas
(denominadas módulos), independentes unhas doutras.

Ocultación (illamento) Os obxectos están illados do exterior, protexendo ás súas propiedades para non ser modificadas por aqueles que non teñan dereito a acceder ás mesmas.

Polimorfismo É a capacidade que dá a diferentes obxectos, a posibilidade de contar con métodos, propiedades e atributos de igual nome, sen que os dun obxecto interfiran co doutro.

Herdanza É a relación existente entre dúas ou máis clases, onde unha é a principal (nai) e outras son secundarias e dependen (herdan) delas (clases fillas), onde á vez, os obxectos herdan as características dos obxectos dos cales herdan.

Recolección de lixo É a técnica que consiste en destruír aqueles obxectos cando xa non son necesarios, liberándoos da memoria.

Elementos da POO:

Clase Unha clase é un modelo que se utiliza para crear obxectos que comparten un mesmo
comportamento, estado e identidade.

Obxecto É unha entidade provista de métodos ou mensaxes aos cales responde (comportamento), atributos con valores concretos (estado) e propiedades (identidade).

$persoa = new Persoa();

Método É o algoritmo asociado a un obxecto que indica a capacidade do que este pode facer.
function camiñar() {

……………..

}
Evento e Mensaxe Un evento é un suceso no sistema mentres que unha mensaxe é a comunicación do suceso dirixida ao obxecto.

Propiedades e atributos As propiedades e atributos, son variables que conteñen datos asociados a un obxecto.

$nome = ‘Juan’;

$idade = ’25 anos’;

$altura = ’1,75 metros’;

Clases e obxectos en PHP 5:

Segundo o Manual Oficial de PHP unha clase é unha colección de variables e funcións que traballan con estas variables. As variables defínense utilizando var e as funcións utilizando function.

Exemplo:

class Carro {

var $contido;

function mete($cousa) {

$this->contido = $cousa;

}

function amosa_contido() {

return $this->contido;

}

}

O exemplo define unha clase chamada Carro que consiste en ir metendo artigos no carro e dúas funcións (os métodos da clase), mete e amosa_contido, para meter cousas nel e amosar o contido. A palabra clave this precedida do signo do dólar ,“$”, indica que fai referencia ao propio obxecto. Se o método ou a clase teñen que devolver algún valor empregase a palabra reservada return.

Declaración de Clases abstractas As clases abstractas son aquelas que non necesitan ser instanciadas e que serán herdadas nalgún momento. Defínense antepondo a palabra crave abstract a class:
abstract class NomeDaClaseAbstracta {

……………………………

}
Este tipo de clases, será a que conteña métodos abstractos e xeralmente, a súa finalidade, é a de declarar clases “xenéricas” que necesitan ser declaradas pero ás cales, non se pode outorgar unha definición precisa (diso, encargaranse as clases que a herden).

Herdanza de Clases: Os obxectos poden herdar propiedades e métodos doutros obxectos. Para iso, PHP permite a herdanza de clases, cuxa característica representa a relación existente entre diferentes obxectos. Para definir unha clase como extensión dunha clase “nai” utilízase a palabra crave extends.

class NomeDaClaseMai {

…………………

}
class NomeDaClaseFilla extends NomeDaClaseMai {

/* esta clase herda todos os métodos e propiedades da clase nai */

}

Declaración de Clases finais: PHP 5 incorpora clases finais que non poden ser herdadas por outra. Defínense antepondo a palabra crave final.

final class NomeDaClaseFinal {

# esta clase non poderá ser herdada

}

Obxectos en PHP: Unha vez que as clases foron declaradas, será necesario crear os obxectos, aínda que temos visto que algunhas clases, como as clases abstractas, son só modelos para outras, e polo tanto non necesitan instanciar ao obxecto.

Instanciar unha clase: Para instanciar unha clase, só é necesario utilizar a palabra crave new. O obxecto será creado, asignando esta instancia a unha variable (a cal, adoptará a forma de obxecto). Loxicamente, a clase debe ser declarada antes de ser instanciada.

# declaración da clase

class Persoa {

…..

}

# creación do obxecto instanciando a clase

$persoa = new Persoa();

Propiedades: As propiedades representan certas características do obxecto en si mesmo. Defínense
antepondo a palabra crave var ao nome da variable (propiedade):

class Persoa {

var $nome;

var $idade;

var $xero;

}

As propiedades poden gozar de diferentes características, por exemplo, a visibilidade: poden ser públicas, privadas ou protexidas. A visibilidade das propiedades, é aplicable tamén á visibilidade dos métodos.

Propiedades públicas: As propiedades públicas defínense antepondo a palabra crave public ao nome da variable. Estas, poden ser accedidas desde calquera parte da aplicación, sen restrición.

class Persoa {

public $nome;

public $xero;

}

Propiedades privadas: As propiedades privadas defínense antepondo a palabra crave private ao nome da variable. Estas só poden ser accedidas pola clase que as definiu.

class Persoa {

public $nome;

public $xero;

private $idade;

}
Propiedades protexidas: As propiedades protexidas poden ser accedidas pola propia clase que a definiu, así como polas clases que a herdan, pero non, desde outras partes da aplicación. Estas,
defínense antepondo a palabra crave protected ao nome da variable:

class Persoa {

public $nome;

public $xero;

private $idade;

protected $pasaporte;

}
Propiedades estáticas: As propiedades estáticas representan unha característica de “variabilidade” dos datos, de gran importancia en PHP 5. Unha propiedade declarada como estática, pode ser accedida sen necesidade de instanciar un obxecto. e o seu valor é estático (é dicir, non pode variar nin ser modificado). Esta, defínese antepondo a palabra crave static ao nome da variable:

class PersoaAPositivo extends Persoa {

public static $tipo_sangue = ‘A+’;

}
Acceso ás propiedade dun obxecto: Para acceder ás propiedade dun obxecto, existen varios xeitos de facelo. Todas elas, dependerán do ámbito desde o cal se invoquen así como da súa condición e
visibilidade.

Acceso a variables dende o ámbito da clase: Accédese a unha propiedade non estática dentro da clase, utilizando a palabra reservada $this sendo esta unha referencia ao obxecto mesmo:

$this->nome;

Cando a variable é estática, accédese a ela mediante o operador de resolución de ámbito, dous-puntos dobres “::” antepondo a palabra crave self ou parent segundo se trata dunha variable da mesma clase ou doutra da cal se herdou:

print self::$variable_estatica_de_esta_clase;

print parent::$variable_estatica_de_clase_nai;

Acceso a variables desde o exterior da clase: Accédese a unha propiedade non estática coa seguinte sintaxe: $obxecto->variable Nótese ademais, que este acceso dependerá da visibilidade da variable. Polo tanto, só variables públicas poden ser accedidas desde calquera ámbito fóra da clase herdada.
# creación do obxecto instanciando a clase

$persoa_a_positivo = new PersoaAPositivo();

# acceso á variable NON estática

print $persoa_a_positivo->nome;

Para acceder a unha propiedade pública e estática o obxecto non necesita ser instanciado, permitindo así, o acceso a dita variable mediante a seguinte sintáxis: Clase::$variable_estática

# acceso á variable estática

print PersoaAPositivo::$tipo_sangre;

Outro tipo de “propiedade” dunha clase, son as constantes, aquelas que manteñen o seu valor de forma permanente e sen cambios. A diferenza das propiedades estáticas, as constantes só poden ter unha visibilidade pública.

Pode declararse unha constante de clase como calquera constante normal en PHP 5. O acceso a constantes é exactamente igual que ao doutras propiedades.

Const MIÑA_CONSTANTE = ‘Isto é o que vale a miña contante’;

Métodos en PHP: Convén lembrar, para quen veña da programación estruturada, que o método de unha clase, é un algoritmo igual ao dunha función.

A única diferenza entre método e función, é que chamamos método ás funcións dunha clase (na POO), mentres que chamamos funcións, aos algoritmos da programación estruturada.

A forma de declarar un método é antepondo a palabra crave function ao nome do
método, seguido por un par paréntese de apertura e peche e chaves que pechen o
algoritmo:
# declaración da clase

class Persoa {

#propiedades

#métodos

function doar_sangue() {

…………………………….. .
}

}
Do mesmo xeito que calquera outra función en PHP, os métodos recibirán os parámetros necesarios indicando aqueles requiridos, dentro dos paréntisis:

# declaración da clase

class Persoa {

#propiedades

#métodos

function doar_sangue($destinatario) {

………………………………….

}

}

Métodos públicos, privados, protexidos e estáticos: Os métodos, do mesmo xeito que as propiedades, poden ser públicos, privados e protexidos ou estáticos. A forma de declarar a súa visibilidade tanto como as características desta, é exactamente a mesma que para as propiedades.
static function a() { }

protected function b() { }

private function c() { }

Métodos abstractos: A diferenza das propiedades, os métodos, poden ser abstractos como sucede coas clases.

O Manual Oficial de PHP, refírese aos métodos abstractos, describíndoos do seguinte xeito:

Os métodos definidos como abstractos simplemente declaran a estrutura do método,
pero non poden definir a implementación. Cando se herda dunha clase abstracta, todos
os métodos definidos como abstract na definición da clase parent deben ser redefinidos
na clase child; adicionalmente, estes métodos deben ser definidos coa mesma visibilidade
(ou cunha menos restritiva). Por exemplo, se o método abstracto está definido como
protected, a implementación da función pode ser redefinida como protected ou public,
pero nunca como private.

Para entender mellor os métodos abstractos, poderiamos dicir que os métodos abstractos son aqueles que se declaran inicialmente nunha clase abstracta, sen especificar o algoritmo que implementarán, é dicir, que só son declarados pero non conteñen un “código” que especifique que farán e como o farán.

Métodos máxicos en PHP 5: PHP 5, tráenos unha chea dos auto-denominados “métodos máxicos”. Estes métodos, outorgan unha funcionalidade pre-definida por PHP, que poden achegar valor ás clases e aforrar grandes cantidades de código. Antepoñen ao nome dous guións baixos “__”.

Entre os métodos máxicos, podemos atopar os seguintes:

__construct(): O método __construct() é aquel que será invocado de xeito automático, ao instanciar un obxecto. A súa función é a de executar calquera inicialización que o obxecto necesite antes de ser utilizado.

# declaración da clase

class Produto {

#definición de algunhas propiedades

public $nome;

public $prezo;

protected $estado;

#definición do método set_estado_produto()

protected function set_estado_produto($estado) {

$this->estado = $estado;

}

# construtor da clase

function __construct() {

$this->set_estado_produto(‘en uso’);

}

}
No exemplo anterior, o construtor da clase encárgase de definir o estado do produto como en uso, antes de que o obxecto (Produto) comece a utilizarse. Se se agregasen outros métodos, estes, poderán facer referencia ao estado do produto, para determinar se executar ou non determinada función. Por exemplo, non podería mostrarse á venda un produto “en uso polo sistema”, xa que a este, poderíaselle estar modificando o prezo.

__destruct(): O método __destruct() é o encargado de liberar da memoria, ao obxecto cando xa non é referenciado. Pódese aproveitar este método, para realizar outras tarefas que se estimen necesarias no momento de destruír un obxecto.

# declaración da clase

class Produto {

#definición de algunhas propiedades

public $nome;

public $prezo;

protected $estado;

#definición do método set_estado_produto()

protected function set_estado_produto($estado) {

$this->estado = $estado;

}

# construtor da clase

function __construct() {

$this->set_estado_produto(‘en uso’);

}

# destrutor da clase

function __destruct() {

$this->set_estado_produto(‘liberado’);

print ‘O obxecto foi destruído’;

}
}
Outros métodos máxicos: PHP ofrécenos outros métodos máxicos como __call, __callStatic, __get, __set, __isset, __unset, __sleep, __wakeup, __toString, __invoke, __set_state e __clone.

Pode verse unha descrición e exemplo do seu uso, no sitio web oficial de PHP: http://www.php.net/manual/es/language.oop5.magic.php

Formularios:
Unha das características máis importantes de PHP é que xestiona formularios HTML. O concepto básico que é importante entender é que calquera elemento dos formularios estará dispoñible automaticamente no seu código PHP. Exemplo:

/*Ejemplo #1 Un formulario HTML simple */

<form action=”accion.php” method=”post”>

<p>Seu nome: <input type=”text” name=”nome” /></p>

<p>Súa idade: <input type=”text” name=”idade” /></p>

<p><input type=”submit” /></p>

</form>

Os campos nome e idade do formulario son os datos de entrada. Submit encargase de enviar ao formulario.

/*Ejemplo #2 Imprimir información do noso formulario */

Ola <?php echo htmlspecialchars($_POST['nome']); ?>.

Vostede ten <?php echo (int)$_POST['idade']; ?> anos de idade.

A función htmlspecialchars() asegúrase que todos os caracteres que son especiais en html sexan codificados de maneira que ninguén poida inxectar etiquetas HTML ou Javascript na páxina web. O campo idade, como sabemos que é un número, podemos convertelo nun integer (int) que se desfará de calquera carácter non numérico. As variables $_POST['nome'] e $_POST['idade'] dan acceso aos datos do formulario. Isto é así porque usamos o método POST.

Se se usa o método GET, os datos enviaranse a través da URL e serán visibles, os datos do formulario estarían en $_GET. No seu lugar tamén se pode usar $_REQUEST, se non importa o tipo de datos enviados desde o formulario.

/*Exemplo de variables de formulario máis complexas */

<form action=”array.php” method=”post”>

Name: <input type=”text” name=”personal[name]“><br>

Email: <input type=”text” name=”personal[email]“><br>

Beer: <br>

<select multiple name=”beer[]“>

<option value=”warthog”>Warthog

<option value=”guinness”>Guinness

<option value=”stuttgarter”>Stuttgarter Schwabenbräu

</select>

<input type=”submit”>

</form>

Cookies:
As cookies son un mecanismo para almacenar datos no navegador e así rastrexar ou identificar a usuarios que volven. Pódense crear cookies usando a función SetCookie(). As cookies son parte da cabeceira HTTP, así que se debe chamar á función SetCookie antes de que se envíe calquera saída ao navegador. É a mesma restrición que para a función header(). Calquera cookie que se reciba procedente do cliente será convertida automaticamente nunha variable de PHP como cos datos nos métodos GET e POST.

Se se queren asignar múltiples valores a unha soa cookie, basta con engadir [] ao nome da. Por exemplo:
SetCookie (“MyCookie[ ]“, “Testing”, estafe() 3600);

Nótese que unha cookie substituirá a unha cookie anterior que tivese o mesmo nome no navegador a menos que o camiño (path) ou o dominio fosen diferentes. Así, para unha aplicación de carro da compra poderíase querer manter un contador e ir pasándoo.

Exemplo:

$Count++ ;

SetCookie (“Count”, $Count, time() + 3600);

SetCookie (“Cart[$Count]“, $item, time() + 3600);

Sesións:
As sesións son unha forma sinxela de almacenar datos de usuarios de xeito individual usando un ID de sesión único. Isto pódese usar para facer persistente a información de estado entre peticións de páxinas. Os ID de sesións normalmente son enviados ao navegador mediante cookies de sesión, e o ID úsase para recuperar os datos de sesión existente. A ausencia de un ID o unha cookie de sesión permítelle saber a PHP para crear una nova sesión e xerar un novo ID de sesión.

As sesións seguen un fluxo de traballo sinxelo. Cando unha sesión se inicia, PHP recuperará unha sesión existente usando o ID pasado (normalmente dende unha cookie de sesión) ou, se non se pasa unha sesión, crearase unha sesión nova. PHP encherá a variable superglobal $_SESSION con calquera datos de sesión de que se inicie a sesión. Cando PHP pecha, automáticamente toma o contido d variable superglobal $_SESSION a serializa, e a envía para almacenala usando o xestor de almacenamento de sesións.

Por omisión, PHP usa o xestor interno de almacenamento files, o cal establécese mediante session.save_handler. Este garda os datos de sesión no servidor na localización especificada pola directiva de configuración session.save_path.

As sesións pódese iniciar manualmente usando a función session_start() se a directiva session.auto_start se establece a 1, unha sesión iniciarase automaticamente no momento en que PHP envíe calquera saída ao buffer de saída.

As sesións normalmente péchanse automaticamente cando PHP termina de executar un script, pero pódense pechar manualmente usando a función session_write_close().

/*Exemplo #1 Rexistrar unha variable con _SESSION. $ */

session_start();

if (!isset($_SESSION['count'])) {

$_SESSION['count'] = 0;

} else {

$_SESSION['count'] ;
}
/*Exemplo #2 Deixar de rexistrar unha variable con _SESSION $ */

session_start();
unset($_SESSION['count']);

Conexión a bases de datos:
A partir da versión 4.1 MySQL incorpora a extensión mysqli, esta extensión permítenos o acceso á base de datos mediante funcións, como en versións anteriores, ou mediante obxectos. Antes de facela conexión e mellor crear un arquivo cos seguintes datos:

<?php

$server = “localhost”;

$user = “nome_do_usuario”;

$pwd = “password”;

$bd = “nome_base_datos”;

?>

que identifican ao servidor, usuario, crave e base da datos. Pódemos chamarlle “condat.inc.php” para os exemplos.

/*Exemplo de conexión con funcións

<?php

include(“condat.inc.php”);

$dbh = mysql_connect($server, $user, $pwd);

if(!$dbh) {

echo (“Erro. Fallou a conexión á BBDD”);

exit();

}

$dbs = mysql_select_db($bd);

if(!$dbs) {

echo (“Erro. Non se puido acceder á BBDD. Inténteo máis tarde”);

exit();

}

// Código de entrada de datos

$fecha = date(“Y-m-d H:i:s”);

$nombre = strtoupper( $_POST['nombre'] );

$nombre = htmlspecialchars( $nombre );

$qry = “INSERT INTO anuncios (nombre,fechaa)

VALUES (‘$nombre’,'$fecha’)”;

/*colle a data do sistema e dálle o formato para MySQL, colle o campo nome do formulario, $POST['nombre'], e convérteo a maiúsculas; strouppers, non deixa escribir caracteres HTML; htmlspecialchars e por último mete os datos na base de datos. */

//Código de saída de datos

$result = mysql_query(“SELECT * FROM anuncios ORDER BY fechaa DESC”);

echo “<table align=’center’ border=’1′ bordercolor=’#FF0000′ width=’25%’>\n”;

while( $row=mysql_fetch_array($result) )

{

echo “<tr>”;

echo “<td width=’100%’ align=’left’ >”;

$ano = substr( $row["fechaa"],0,4 );

$mes = substr( $row["fechaa"],5,2 );

$dia = substr( $row["fechaa"],8,2 );

echo ( “<font color=’#ff0000′>&nbsp;&nbsp;Fecha :”.$dia.”-”.$mes.”-”. $ano.”</font>”. “<br>” );

echo ucwords( “<font color=’#ff0000′>&nbsp;&nbsp;Nombre :”. $row["nombre"].”</font>”. “<br>”);

echo”</td>\n”;

}

echo “</table>\n”;

?>

/* $result garda o contido da consulta. mysql_fetch_array e un array que contén as filas e que podemos percorrer con while. Table, tr e td son instrucións HTML para meter os datos que sacamos da base de datos nunha táboa. */

/* Exemplo de conexión con obxectos */

<?php

include(“condat.inc.php”);

$conect = new mysqli( $server, $user, $pwd, $bd ); // obxecto da conexión

if( mysqli_connect_errno() ) {

echo (“Erro na copnexión”);

exit();

}

// Código de entrada de datos

$fecha = date(“Y-m-d H:i:s”);

$nombre = strtoupper( $_POST['nombre'] );

$nombre = htmlspecialchars( $nombre );

$entrar = “INSERT INTO anuncios (nombre,fechaa)

VALUES (‘$nombre’,'$fecha’)”;

//Código de saída de datos

$result = $conect->query(“SELECT * FROM anuncios ORDER BY fechaa DESC”);

/* obxecto da consulta a b.d. */

echo “<table align=’center’ border=’1′ bordercolor=’#FF00FF’ width=’25%’>\n”;

while( $row = $result->fetch_array() ) //fetch_array contén o resultado da consulta

{

echo “<tr>”;

echo “<td width=’100%’ align=’left’ >”;

$ano = substr( $row["fechaa"],0,4 );

$mes = substr( $row["fechaa"],5,2 );

$dia = substr( $row["fechaa"],8,2 );

echo ( “<font color=’#ff0000′>&nbsp;&nbsp;Fecha :”.$dia.”-”.$mes.”-”. $ano.”</font>”. “<br>” );

echo ucwords( “<font color=’#ff0000′>&nbsp;&nbsp;Nombre :”. $row["nombre"].”</font>”. “<br>”);

echo ( “<font color=’#ff0000′>&nbsp;&nbsp;Tel&eacute;fono:”. $row["telefo"].”</font>” . “<br>” );

echo”</td>\n”;

}

echo “</table>\n”;

$result->close;

$conect->close;

?>
O uso da extensión mysqli proporciona dúas clases a hora de traballar con bases de datos MySQL: a clase mysqli e a clase mysqli_result.

Se queres descargar este titorial en pdf: Preme aquí.

Referencias:
Manual de PHP por Stig Sæther Bakken, Alexander Aulbach, Egon Schmid, Jim Winstead, Lars Torben Wilson, Rasmus Lerdorf, Andrei Zmievski, y Jouni Ahto
POO y MVC por Eugenia Bahit.

 

Maqetta, editor WYSIWYG para HTML5

commentarios
Feito o :31 Maio 2011

Maqetta é un editor WYSIWYG deseñado para editar documentos en HTML5 e elaborar aplicacións web.
Desenvolvido por IBM, presentouse na conferencia IBM Impact 2011. Posteriormente, IBM doou o proxecto á Dojo Foundation como un proxecto de software libre e de código aberto.
O editor foi desenvolvido para contar cunha ferramenta de desenvolvemento para HTML5 comparable ás dispoñibles para Adobe Flash e Microsoft Silverlight.


Instalación e Posta en marcha de Maqetta de xeito local en Linux:

Maqetta funciona mellor en Chrome, Firefox-4 e Safari. E é moi importante facer unha instalación limpa.
Antes de instalar unha nova versión Maqetta, imos pechar e reiniciar o navegador e limpar a caché. Estas medidas probablemente non sexan necesarias na maioría dos casos, pero é recomendable, sobre todo, para aqueles que utilizaron versións anteriores de Maqetta.

Instrucións para limpar cachés

Borrar a caché do navegador e o seu “AppCache” (almacenamento fóra de liña):
Chrome:
-Click na icona de ferramentas e seleccionar “Preferences”. Isto abrirá unha nova pestana no navegador:
-Facer click no hipervínculo “Under the Hood”.
-Borrar a caché: Dende “Under the Hood”, facer clic en “Clear Browsing Data” ( Eliminar datos de navegación ). No cadro de diálogo que segue, asegúrese de que “Empty the cache” (Baleirar o caché) está marcada. Pulsar o botón “Clear Browsing Data”.
– Borrar AppCache (almacenamento fóra de liña): Facer click en “Content Settings…” para que apareza o cadro de diálogo de configuración de contidos. En “cookies”, facer click en “Allow local data to be set (recommended)” e pechar Content Settings. En “Buscar”, escribir o nome do servidor desde o que se executa Maqetta. Se está instalado localmente, escribir “localhost”. Se se executa fóra de http://maqetta.org, a continuación, escribir “maqetta”. Se existe unha entrada denominada “Aplicación cachés”, seleccionar na opción “Solicitude de cachés” o tema que corresponde ao servidor Maqetta, e facer click no botón “Eliminar” na parte inferior.
Firefox
-Borrar a caché: En “Ferramentas” facer click en “Limpar agora “.
-Borrar AppCache: En “Preferencias -> Opcións avanzadas -> Rede -> “debaixo de:” Os seguintes sitios web almacenaron datos para o seu uso sen conexión”. Ver se o servidor que alberga Maqetta está na lista. Se se instalou localmente, o servidor é “localhost”. Se o servidor Maqetta está na lista, seleccionar e a continuación click en “Eliminar” (e logo “Borrar datos en liña”).
Safari
– (Só Mac) Baixo o menú “Safari”, invocar a “caché baleira …” comando para borrar tanto o caché do navegador como o caché da aplicación.

Instrucións para instalar e executar localmente.

Comprobe que ten Java, versión 5 (JRE 1.5), ou superior, instalada na súa máquina.
Dende a liña de comandos:

# java -version

Isto permitiralle coñecer se dispón da versión axeitada.
Baixar dende maqetta.org o arquivo maqetta-xxxxx-xx.zip e descomprimilo no cartafol $HOME, isto vai crear un cartafol de nome maquetta-preview, dámoslle permisos de execución:

$ chmod +x maqetta-preview -R

e xa temos o editor instalado, mudámonos alí:

$ cd maqetta-preview

e o executa-la shell:

$ sh maqetta.local.unix.sh

porase en marcha o servidor local Maqetta e amosará a seguinte mensaxe:
!!!!!!!!!!!!!!
NOTE: CLOSING THIS WINDOW WILL
STOP THE MAQETTA SERVER PROCESS
!!!!!!!!!!!!!
Using jar: ./plugins/org.eclipse.equinox.launcher_1.1.1.R36x_v20101122_1400.jar
Using directory: /home/anxo/maqetta/users
Start your browser at: http://localhost:50000/maqetta
osgi>

Só queda lanzar o navegador co: http://localhost:50000/maqetta-preview.
Isto é un pequeno exemplo das súas posibilidades:

O servidor Maqetta continuará funcionando ata que se peche a fiestra de comandos. Unha vez peche a fiestra da shell, o servidor deixará de funcionar. Como xa notarían o editor Maqetta pódese usar en xeito local ou en xeito servidor.

Licenza Creative Commons©

Debian. Posta a punto

commentarios
Feito o :16 Febreiro 2011

– Unha vez instalado o sistema operativo hai que poñelo a punto. Imos facelo para arquitecturas de 64 bits, con isto cubrímo-la de 32 bits tamén. O primeiro que fago despois de instalar un sistema Debian é instalar o paquete alien dende os repositorios oficiais:
# aptitude install alien
Alien permite converter paquetes .rpm en .deb, e viceversa, tarde ou cedo vainos facer falta.

Despois descargamos a derradeira versión do plugin Flash Player, o tar.gz, para Linux 64 bits se fose o caso, dende a páxina de Adobe:
Descomprimímolo:
# tar xvf install_flash_player_10_linux.tar.gz
Contén un arquivo chamado libflashplayer.so que temos que copiar no directorio: /usr/lib/mozilla/plugins/. Ou onde esté /mozilla/plugins.
# cp libflashplayer.so /usr/lib/mozilla/plugins/
Xa podemos dispor da tecnoloxía Flash no noso navegador.
# aptitude install mozilla-plugin-vlc
Listo, o noso navegador xa pode visualizar vídeos.

Agora imos instalar a derradeira versión da máquina virtual Java, JVM, para podermos ver animacións feitas con Java.
Descargámola dende aquí:
Eliximos a opción Linux x64, que é un executable .bin. Eu acostumo a instalalo no cartafol /opt. Copiamos alí o programa:
# cp jre-*-linux-x64.bin /opt
Mudamos o cartafol /opt:
# cd /opt
Dámoslle permisos de execución:
# chmod +x jre-*
Instalamos o programa:
# ./jre-*-linux-X64.bin
Borramos o executable:
# rm jre-*
Agora temos que crear un enlace o plugin libnpjp2.so que se atopa en:/opt/jre1.6.0_23/lib/amd64/. Nas arquitecturas de 32 bits chámase libpluginjava_oji.so.
Imos o cartafol /usr/lib/mozilla/plugins:
# cd /usr/lib/mozilla/plugins
Creamos o enlace:
# ln -s /opt/jre*/lib/amd64/libnpjp2.so

Listo. os navegadores Iceweasel, baseado en Firefox pero máis rápido, Konqueror e Epiphany, os que trae por defecto Debian xa están a punto.

Ata hai pouco, os plugins para navegadores de 64 bits en sistemas x86_64 Linux foron máis ben escasos. O uso de nspluginwrapper permite usar plugins 32 bits, e nativos se se dispón deles, en arquitecturas de 64 bits.
Imos ver de descargalo: e instalalo:
# dpkg -i nspluginwrapper_1.3.0-1_amd64.deb
Isto crea algunhas dependencias:

Imos arranxalo:
# aptitude install ia32-libs ia32-libs-gtk lib32gcc1 libc6-i386
Arranxado.
Un par de exemplos:
Despois de instalar nspluginwrapper, instalamos o Adobe Reader 32 bits, entón temos que correr na liña de comandos o seguinte:
# nspluginwrapper -i /opt/Adobe/Reader8/Browser/intellinux/nppdf.so
Se instalamos noutro sitio o Adobe, hai que trocar o camiño.
Para o plugin Flash Player de 32 bits, dende o cartafol onde o teñamos:
# nspluginwrapper -i /usr/lib/mozilla/plugins/libflashplayer.so
Do mesmo xeito que co Adobe, hai que trocar o camiño, se fose o caso.
Outro exemplo de aplicación de 32 bits é Skype:
Imos descargalo dende a páxina oficial e darlle permisos de execución:
# chmod +x skype*
Instalamos as librerías de 32 bits necesarias.
# aptitude install ia32-libs ia32-libs-gtk libqt4-core libqt4-gui
Forzamos a instalación
# dpkg -i –force-architecture skype*.deb

Por último imos coa tarxeta da rede inalámbrica. Ata de agora nunca tiven atrancos con ela, pero teño lido que as veces hainos. Primeiro imos pescudar cal temos:
# lspci
Isto vainos dar un informe detallado de todos os dispositivos pci do noso ordenador, o que busco é:
06:00.0 Network controller: Intel Corporation PRO/Wireless 3945ABG [Golan] Network Connection (rev 02)
Esta é a identificación da miña tarxeta de rede. Agora vou a páxina web do driver, iwlwifi-3945-ucode-15.32.2.9, e o baixo. Lembrar que isto só serve para esta tarxeta. Descomprimímolo e instalámolo:
# cp iwlwifi-3945-2.ucode /lib/firmware
Xa está configurada a tarxeta de rede.
O firmware é un software integrado no dispositivo polo que en parte tamén é hardware. É o interfaz entre as ordes externas que recibe e a súa electrónica, xa que é o encargado de controlar que se executen correctamente ditas ordes. Máis sobre o firmware, aquí.

Finalmente, son e vídeo. É posible que acha que facer algún troco, eu adoito a instalar, se non se instalaron por defecto, smPlayer e Vlc. Tamén hai que ter en conta as características propias de cada tarxeta, e se fose o caso instalar os drivers correspondentes. Despois prememos na icona do son da barra de tarefas, abrímolo mesturador de son e comprabamos ca canle master está activada, coido que ao oitenta por cento está ben. Outro xeito é ir a liña de comandos, escribir alsamixer e comprobar que esta activada dita canle.
Imos darlle un repaso aos codecs necesarios para tratar os arquivos multimedia e a súa actualización. Abrímo-lo arquivo sources.list que contén os repositorios.
# nano /etc/apt/sources.list
e engadímola seguinte liña:
deb http://www.deb-multimedia.org squeeze main non-free
deste xeito, os codecs actualizaranse sos. Saímos do editor e actualizamos:
# aptitude update
resposta:
Recibironse 11,9 MB en 20s (557 kB/s).
W: Error de GPG: http://www.debian-multimedia.org squeeze Release: As seguintes firmas non se puideron verificar xa que a súa chave pública non está dispoñible: NO_PUBKEY 07DC563D1F41B907

entón importámola chave:
# gpg –keyserver keys.gnupg.net –recv-key 1F41B907 (– son dous guións medios, ollo ao copiar/pegar. )
resposta:
gpg: directorio `/root/.gnupg’ creado
gpg: creado un novo ficheiro de configuración `/root/.gnupg/gpg.conf’
gpg: AVISO: as opcións en `/root/.gnupg/gpg.conf’ aínda non están activas nesta execución
gpg: chaveiro `/root/.gnupg/secring.gpg’ creado
gpg: chaveiro `/root/.gnupg/pubring.gpg’ creado
gpg: solicitando clave 1F41B907 do hkp servidor keys.gnupg.net
gpg: /root/.gnupg/trustdb.gpg: creouse unha base de datos de confianza
gpg: clave 1F41B907: clave pública “Christian Marillat ” importada
gpg: non se atopan chaves absolutamente fiables
gpg: Cantidade total procesada: 1
gpg: importadas: 1

engadímola ao arquivo das chaves, gpg.conf:
# gpg –export –armor 1F41B907 | apt-key add –     (– tamén son dous guións medios. )
OK, é a respota, actualizamos outra vez.
# aptitude update
Logo de ter configurados os repositorios, podemos instalar, dende eles, os codecs multimedia básicos para a reprodución dos formatos de audio e vídeo máis comúns, para facelo escribimos no terminal (logueados como root):
Para 32 bits:
# aptitude install w32codecs libdvdcss2 gstreamer0.10-fluendo-mp3 ffmpeg sox twolame vorbis-tools lame faad gstreamer0.10-ffmpeg gstreamer0.10-plugins-bad avifile-divx-plugin libfacc0
Para 64 bits:
# aptitude install w64codecs libdvdcss2 gstreamer0.10-fluendo-mp3 ffmpeg* sox twolame vorbis-tools lame faad gstreamer0.10-ffmpeg* gstreamer0.10-plugins-bad avifile-divx-plugin libfacc0
(*) Ollo, poden crear dependencias con outras aplicacións.
Para coñecer se temos un codec instalado:
# aptitude search o_nome_codec

Referencia:
http://wiki.debian.org/MultimediaCodecs.

Licenza Creative Commons©

Actualizar Debian 5 “Lenny” a Debian 6 “Squeeze”

commentarios
Feito o :11 Febreiro 2011

-Para facer esta guía usouse un portátil Acer Aspire 5920 cun procesdor Core 2 Duo. O equipo usa un esquema de tres particións, nunha delas hai unha instalación de Lenny actualizada a versión 5.03, a que será obxecto da actualización.
Como en todas as actualizacións, o mellor e facer unha copia de seguridade dos datos críticos: /home/seus_users:

# tar -czvf copia_users.tar.gz /home/users

Tamén se debe facer unha copia de seguridade do contido dos arquivos de configuración:

# tar -czvf host.etc.tar.gz /etc

Isto crea a copia de seguridade. Podense almacenar nunha memoria usb ou en calquer outro dispositivo externo.

O primeiro é editar o arquivo de fontes apt. É convinte que o sistema de paquetes estéa nun estado limpo. Se temos un arquivo de fontes moi complicado, é recomendable poñelo semellante o da instalación orixinal.
Abrir a liña de comandos e editar o: /etc/apt/sources.list

# nano /etc/apt/sources.list
#
deb http://ftp.es.debian.org/debian/ lenny main
deb-src http://ftp.es.debian.org/debian/ lenny main
deb http://security.debian.org/ lenny/updates main
deb-src http://security.debian.org/ lenny/updates main
deb http://volatile.debian.org/debian-volatile lenny/volatile main
deb-src http://volatile.debian.org/debian-volatile lenny/volatile main
# Multimedia estable (actual)
deb http://www.debian-multimedia.org stable main
deb-src http://www.debian-multimedia.org stable main
#Xestor de redes wifi
deb http://www.backports.org/debian lenny-backports main contrib non-free

Isto é o que tiña. Nesta ocasión non seguín as indicacións de Debian e deixeino como estaba.
Actualizamos os paquetes para Lenny. Temos que asegurarnos de que o sistema de paquetes existente está en bo estado antes de se actualizar a Squeeze.

# apt-get update

Primeiro actualizamos Lenny:

# apt-get upgrade

Decímoslle que si a todo, e a contianuación:

# apt-get dist-upgrade

Temos que asegurarnos de que non hai paquetes rotos, nin a espera de ser instalados:

# dpkg –audit
# dpkg –get-selections | grep mantenga

Ningún paquete pode estar esperando. Antes de continuar hai que facer unha proba de uso:

# aptitude

Premer g para que a lista amose os paquetes que precisan ser corrixidos, aparecen algúns arquivos que se instalaron para resolver dependencias. Volvemos premer g e eliminámolos. Premer q para sair.

Imos trocar as fontes apt de Lenny a Squeeze:

# nano /etc/apt/sources.list

Borramos todo o contido e sustituímolo polos repositorios oficiales de Squeeze:
deb http://ftp.es.debian.org/debian/ squeeze main
deb-src http://ftp.es.debian.org/debian/ squeeze main

deb http://security.debian.org/ squeeze/updates main
deb-src http://security.debian.org/ squeeze/updates main

Facemos Ctrl+O, Ctrl+X para gardar e pechar nano, e dende a liña de comandos:

# apt-get update

E logo:

# apt-get upgrade

Decimos si a todo. A miña máquina di que hai que agardar 29 minutos.
29 minutos despois imos coñecer a versión e a arquitectura do núcleo, facemos:

# uname -r

Resultado:2.6.26-2-686. Ainda que o Pc ten unha arquitectura de 64 bits, Amd64 identifica a tódolos porcesadores de 64, o Lenny instalado era a versión para 32 bits. Squeeze teno e conta e así fai a actualización. Cando fixen esta guía o kernel era o 2.6.32-5 Con:

# apt-get install linux-image-2.6.32-5-amd64
Ou
# apt-get install linux-image-2.6.32-5-686

Segundo proceda.
Agora xa queda actualizado o núcleo.
Preparámolo grub2 e udev para o novo sistema:

# update-grub
# apt-get install udev

Reiniciámolo sistema.
Se todo foi ben podemos completar a actualización:

# apt-get dist-upgrade

Agardamos algo máis de dúas horas.
Reiniciamos o sistema. Se temos o grub legacy no sitio do grub2:

# upgrade-from-grub-legacy

Isto instalará grub2 no Master Boot Record (MBR) do disco.

Listo, funciona todo menos o enlace ao Sistema que hai no escritorio, borrámolo e no seu lugar poñemos Dolphin, e o mesmo para o editor de html Quanta, Squeeze non ten soporte para el, substituíno por Bluefish, é máis completo pero necesitaremos un tempo para aprender manexalo. Algunhas iconas do escritorio non teñen imaxe, en propiedades do arquivo atoparemos a máis axeitada.

Mentres se fai a instalación pregúntasenos se queremos actualizar varios arquivos, entre eles algúns de configuración que foron modificados por nos. Moito ollo, substituír algúns deses arquivos pode facernos reinstalar algunha aplicacións. Temos que estar seguros de cales actualizamos. Exemplo:
Supoñamos que pertencemos a unha rede cuxas conexións se xestionan con Samba. Temos configuramos o arquivo smb.conf para esa rede, se o sustituimos pola versión que se nos propón precisaremos volver editar o arquivo e facer de novo a configuración.

Durante a actualización ignorei a seguinte mensaxe:
——————————————————————————————–
Poida que os ficheiros de firmware requiridos non estean dispoñibles
?
? Este sistema executa actualmente a versión 2.6.26-2-686 de Linux, e está
? a ser instalanda a versión 2.6.32-5-686. Poida que os controladores
? incluídos na nova versión requiran ficheiros de firmware
? adicionais:
?
? iwl3945: iwlwifi-3945-2.ucode
? tg3: tigon/tg3_tso5.bin, tigon/tg3_tso.bin, tigon/tg3.bin
?
? A maioría dos ficheiros de firmware non se incluien no sistema porque
? non cumpren as normas de software libre de Debian («Debian Free Software
? Guidelines»). Pode que teña que reconfigurar o xestor de paquetes
? para incluir as seccións «contrib» e «non-free» do arquivo de Debian
?
?
———————————————————————————————

porque o firmware da tarxeta de rede inalámbrica, iwlwifi-3945-2.ucode, sabía co tiña instalado. O caso é que ao facer unha nova actualización:

# aptitude upgrade

tiven unha nova mensaxe sobre tg3:
——————————————————————————————–
update-initramfs: Generating /boot/initrd.img-2.6.32-5-amd64
W: Possible missing firmware /lib/firmware/tigon/tg3_tso5.bin for module tg3
W: Possible missing firmware /lib/firmware/tigon/tg3_tso.bin for module tg3
W: Possible missing firmware /lib/firmware/tigon/tg3.bin for module tg3
——————————————————————————————–

Despois de darlle muchas voltas, e sesións de Google, decidín probar se tiña sen activar os módulos tg3:

# modprobe broadcom
# modprobe tg3

semella que bingo. Un update despois:

# aptitude update

Resultado:
——————————————————————————————–
Unknown media type in type ‘all/all’
Unknown media type in type ‘all/allfiles’
Unknown media type in type ‘uri/mms’
Unknown media type in type ‘uri/mmst’
Unknown media type in type ‘uri/mmsu’
Unknown media type in type ‘uri/pnm’
Unknown media type in type ‘uri/rtspt’
Unknown media type in type ‘uri/rtspu’
Unknown media type in type ‘fonts/package’
Unknown media type in type ‘interface/x-winamp-skin’
—————————————————————————————-

A solución consiste en descargar o paquete firmware-linux-nonfree da páxina oficial de Debian e instalalo. A maioría de firmware incluído nos kernels anteriores de Linux non é libre, este paquete contén o firmware, que anteriormente figuraba no nucleo de Linux e que é compatible coas Directrices de Software Libre de Debian.
Pois xa está. A actualización a Debian 6.0 Squeeze queda rematada.

Referencias:
http://www.debian.org/index.es.html
http://www.howtoforge.com/upgrade-debian-lenny-to-squeeze-in-a-few-simple-steps

Licenza Creative Commons©

Debian. Guía de instalación paso a paso

commentarios
Feito o :28 Decembro 2010


Antes de empezar

A instalación non debe presentar ningún atranco, se temos instalados outros sistemas operativos é recomendable facer unha copia de seguridade dos arquivos importantes.
Os pasos son iguais para instalacións en equipos novos ou con sistemas operativos.
Windows Vista e 7, inclúen un bloqueo na partición que impiden a Debian redimensionala, se non queremos borrala, teremos que reducir o seu tamaño coa ferramenta que para ese propósito trae Windows.
Squeeze é o nome que dá Debian á versión 6 do seu Sistema Operativo. O proceso de instalación é moi doado grazas á súa ferramenta gráfica. A novidade máis importante é o escritorio Kde 4.
Esta guía foi feita para Debian 6.0 “Squeeze” usando o xeito de instalación, netinst -para internet-, pero tamén serve para instalar Debian 5 “Lenny”, Debian 7 “Wheezy, a vindeira versión stable, e sospeito, aínda que non o comprobei, que tamén para Sid e sucesivas. Pódese descargar unha imaxe, dende a páxina oficial de Debian:

   http://www.debian.org/distrib/

Se dispoñemos de conexión a internet a mellor opción de instalación é en modo netinst, ocupa 136 Mb que podemos copiar nun CD/USB para instalar unha parte mínima do sistema e o resto instálase dende os mirror de Debian a través da rede. Non se pode facer a través da rede inalámbrica polo que compre un cable de rede para conectalo router.
Se non dispoñemos de internet, para facer unha instalación completa, son necesarios 8 DVDs ou 52 CDs.

Ben, imos arrincar.


Introducimos o CD/USB e acendemos o ordenador, aparece unha pantalla como a de enriba, eliximos o escritorio e a continuación o modo de instalación gráfico:Graphical Install. E prememos Enter.


Tras a carga do núcleo aparece o asistente gráfico cos idiomas dispoñibles: Entre outros:galego, catalán e español. Eliximos galego. Prememos o botón Continue.


Aquí, escollémola localización: España. Prememos Continuar.


A configuración do teclado: Eleximos español. Prememos Continuar.
O sistema carga as compoñentes dende o CD/USB.
Detecta o hardware da rede.
E tenta configurala rede DHCP.


Como vedes, no meu caso a configuración do router non deixa usala DHCP, di que fallou a configuración automática da rede. De non seres o voso caso omitirianse os pasos do 5 ao 9.
Para os que queiran unha rede con IPs imos a seguinte imaxe. Continuar.


A imaxe fala por si soa. Eleximos a opción resaltada de azul e Prememos: Continuar.


Enderezo ip da nosa máquina. Continuar…


Máscara de rede. Continuar…


Encamiñador, a ip do noso router ou da PC que faga de pasarela. Continuar…


DNSs, as que nos porporcionou o noso ISP. Continuar…


Aquí vai o nome que lle queiramos dar a máquina. Continuar…


Debe selo mesmo para tódolos ordenadores da rede. Continuar…


Contrasinal para root. Cuidadiño. Continuar…


O noso nome de usuario. Continuar…


Contrasinal para a conta de usuario. Continuar…


Escoller o fuso horario. Continuar…

Particionar os discos. Isto é o máis delicado. Precisamos coñecer a nomenclatura dos discos duros en Linux: prefixos hd cos sufixos a,b,c, ou d para indicar a primeira e as sucesivas unidades para discos IDE, CD e DVD. O mesmo para discos ATA substituíndo hd por sd. Un disco duro pódese dividir en varias particións: hda1, hda2…..
Podense dar tres situacións:
Un só disco duro novo ou que se pode borrar enteiro: Eliximos a opción Guiado –usar todo o disco e seleccionamos o único disco duro. Prememos Continuar…
Dous discos, un que se pode borrar e o outro non: Facemos igual que no caso anterior coa diferenza que aparecen todos os discos instalados e eliximos o que queremos para o noso novo sistema.Prememos Continuar…
Un só disco cun ou máis sistemas que non queremos borrar: É o meu caso. Seleccionei manual. Premín Continuar…


Elexín borrala partición número 7, seleccioneina e premín Continuar...


Optei pola opción borrar e repetín o preceso para a partición 8 que a de server para área de intercambio ou swap. Continuar…


Como vedes no troco das duas particións aparece un espazo libre que é no que imos creala nova partición. Continuar…


Esta pantalla permitenos trocalas características da nova partición: sistema de arquivos, punto de montaxe, etiqueta, etc… Continuar…


Chegados ata aquí, vendo que temos as partición 7 e 8 preparadas, eleximos a opción remarcada de azul. Continuar…


Eleximos particionar o espazo libre. Continuar…


Todo nunha partición. Continuar…


Aquí a partición xa queda preparada para recibir o novo S.O. Continuar…


Eleximos o que corresponda. Continuar…


ftp.udc.es, é a da Univesidade da Coruña. Calquera das opcións é boa. Continuar…


Continuar…


Continuar…


Estas son as opcións por defecto. Marcade as que desexedes e paciencia cantas máis marquedes máis tempo lle leva, pode chegar ata unha hora. Continuar…


Isto instala o xestor de arranque para tódolos sistemas operativos do equipo. Continuar…


Se non está xa o poñeremos. Continuar…


Continuar…

Xa está. Squeeze a toda máquina.

Licenza Creative Commons©

Titorial MySQL

commentarios
Feito o :9 Maio 2010

- Que é MySQL?.
- Instalación.
- Configuración e GUI.
- Crear Usuarios e BBDD.
- Primeira ollada ao SQL.
- Táboas. Seguindo con MySQL
- Tipos de datos e Funcións.

Que é MySQL?.- MySQL é un dos servidores de bases de datos máis usados, que segue o esquema cliente/servidor e ao que se pode acceder a través dunha rede, é un sistema xestor de bases de datos relacionais (SGBDR) capaz de atender o mesmo tempo a varias aplicacións ou usuarios. E tamén é, Open Source(Código Aberto).
Unha base de datos é unha estrutura de datos complexos, está formada por táboas, rexistros, campos e as relacións entre eles. Pode ir dende unha simple axenda de teléfonos ata tódolos arquivos da policía ou da Seguridade Social.
Coma exemplo sinxelo de base de datos pode servir o DNI. O armario que garda o DNI podería corresponderse cunha base de datos, cada departamento do armario sería unha táboa, cada DNI viría sendo un rexistro e cada un dos datos que contén o DNI, un campo.

Instalación.-Imos facela a instalación de MySQL 5.0 sobre Debian, pero todo o que imos facer vale para Ubuntu. O xeito recomendado por MySQL para instalar en Linux é utilizando paquetes RPM Podémolos baixar dende aquí. Os RPMs de MySQL están xerados en SuSE Linux 7.3, pero deberían funcionar con calquera versión de Linux que soporte rpm e o uso de glibc. O xeito de instalalos en Debian é co paquete alien dende os repositorios oficiais, primeiro instalamos alien:
#aptitude install alien
E despois convertemos os rmp a deb:
#alien -d paquete.rpm
Ou ben directamente:
#alien -i paquete.rpm
Máis doado é facelo dende os repositorios de Debian, so temos que facer:
# aptitude install mysql-server mysql-client
Na maioría dos casos abonda para conseguir que funcione.
Moi importante: Durante a instalación, imos ter que dar un contrasinal, mentres non o troquemos, será o contrasinal de root para MySQL. Nada que ver co contrasinal do superusuario do sistema. Tampouco estaría de máis comprobar que existen o usuario e o grupo mysql, se fai falta, podémolos crear así:
#groupadd mysql
#useradd -g mysql mysql
Aquí hai unha relación dos sistemas operativos que soportan MySQL.

Configuración e GUI.-MySQL dispón de varias ferramentas con entorno gráfico que axudan na administración e configuración da base de datos. unha das máis sinxelas é MySQL-Administrator, é parte do MySQL e para instalalo so temos que facer:
#aptitude install mysql-admin
Se o executamos dende o menú ou a liña de comandos accedemos a todas estas opcións:

Tamén dispón dun editor chamado MySQL Query Browser que permite crear bases de datos, táboas e facer operacións cos datos almacenados nelas. Instálase así:
#aptitude install mysql-query-browser
O resultado de executalo é:

Hai outros ámbitos gráficos de administración que aínda que non pertencen a MySQL teñen unha gran popularidade. Entre eles imos subliñar:
phpMyAdmin.-É unha ferramenta feita en PHP para administrar MySQL a través de páxinas web. Na actualidade pode crear e eliminar bases de datos, crear, modificar e eliminar táboas, borrar, editar e engadir campos, executar sentenzas SQL, administrar claves, administrar privilexios, exportar datos en varios formatos e está dispoñible en 50 idiomas. É licenza GPL.

Pódese descargar dende aquí ou dende os repositorios Debian.
E como alternativa:
phpMinAdmin.-Ten unhas características semellantes a phpMyAdmin, tamén está feito en PHP, so que é un so módulo e é de uso libre baixo licenza Apache.

Pódese descargar dende aquí.
Ademais dos ámbitos gráficos tamén temos a liña de comandos da consola, que é a que imos usar neste titorial. Abrímola como root e despois imos o MySQL, facémolo segundo a primeira liña sinalada pola frecha vermella da figura de abaixo, como vedes e obrigatorio facelo como root xa que ata de agora é o único usuario, na liña seguinte pídenos o contrasinal, temos que darlle o que lle puxemos na instalación, despois dun saúdo amósanos a liña de comandos de MySQL, xusto enriba da segunda frecha vermella, a que nos amosa o comando para saír, que é quit, tal como vemos abaixo:

Isto dinos que xa estamos dentro do SGBDR.
Para deter o servidor Mysql dende a shell:
msql> mysql.server stop
E para arrancalo:
mysql> mysql.server star
E dende a liña de comandos podemos:
 # /etc/init.d/mysql restart     (reiniciar)
# /etc/init.d/mysql stop          
(parar)
# /etc/init.d/mysql start        
(iniciar)
A seguinte táboa mostra cada un dos indicadores que poderá ver e sintetiza o que din acerca do estado en que se encontra mysql:
Prompt Significado
mysql> Listo para un novo comando.
-> Esperando a seguinte liña un comando de múltiples liñas.
‘ > Esperando a seguinte liña unha cadea que comeza con apostrofo (‘ ‘ ‘).
” > Esperando a seguinte liña unha cadea que comeza con comiñas dobres (‘ ” ‘).
‘ > Esperando a seguinte liña unha cadea que comeza con til (‘ ‘ ‘).
/* > Esperando a seguinte liña un comentario que comeza con /*.
O prompt /* > foi introducido na serie 5.0 a partir de MySQL 5.0.6.
Aí imos escribir todas as instrucións que precisamos para sacarlle partido o noso servidor de bases de datos. Imos ver de tirarlle proveito.

Crear Usuarios e BBDD..-Crear unha conta de usuario e ben doado. A seguinte liña crearía un usuario de nome trisquel e de contrasinal trisquel:
mysql>CREATE USER trisquel@localhost IDENTIFIED BY ‘trisquel’;
A sentenza CREATE USER crea novas contas. Para usala débese ter o privilexio GRANT OPTION para a base de datos. Pódeselle dar un contrasinal á conta coa cláusula opcional IDENTIFIED.
Imos deixar que poida traballar coas bases de datos. A liña seguinte daríalle o noso usuario todos os privilexios sobre tódalas bases de datos do servidor:
mysql>GRANT ALL PRIVILEGES ON * . * TO trisquel@localhost IDENTIFIED BY
->’trisquel’;

Segundo a seguinte, o noso usuario tería todos os privilexios sobre a base de datos db1234:
mysql>GRANT ALL PRIVILEGES ON db1234 . * TO trisquel@localhost
->IDENTIFIED BY ‘trisquel’;

Poño deseguido a táboa dos privilexios:

Segundo a liña de abaixo o noso usuario poderia facer uso da opción SELECT en tódalas bases de datos:
mysql>GRANT SELECT ON * . * TO trisquel@localhost IDENTIFIED BY ‘trisquel’;
Para quitarlle tódolos privilexios:
mysql>REVOKE ALL PRIVILEGES ON *.* FROM trisquel@localhost;
E para desfacernos del pa sempre:
mysql>DROP USER trisquel@localhost;
GRANT e REVOKE permítelles aos administradores do sistema crear contas de usuario MySQL e conceder e revocar dereitos desas contas.
Unha vez que temos conta de usuario imos crear a base de datos. Isto faino a sentenza CREATE:
mysql>CREATE DATABASE db1234;
E para eliminala, DROP:
mysql>DROP DATABASE db1234;
A sentenza SHOW mostranos as bases de datos que existen actualmente no servidor:
mysql>SHOW DATABASES;
Para poder traballar con ela precisamos da sentenza USE, que ao igual que QUIT, non necesita que se poña un punto e coma ao final (aínda que pode facerse). A sentenza USE ten outra particularidade: debe escribirse nunha soa liña:
mysql>USE db1234;
As bases de datos só necesitan ser creadas unha vez, pero deben ser seleccionadas cada vez que se inicia unha sesión. Pode facerse a través do comando USE como se mostra enriba, ou pode indicar a base de datos na liña de comandos ao executar MySQL. Soamente temos que indicar o nome da base de datos a continuación dos parámetros de entrada:
mysql>mysql -u user -p db1234

Primeira ollada ao SQL.-MySQL cumpre co estándar SQL. A linguaxe de consulta estructurada SQL (Structured Query Language) é unha linguaxe declarativa de acceso a bases de datos relacionais que permite especificar diversos tipos de operacións nestas. Unha das súas características é o manexo da álxebra e o cálculo relacional permitindo efectuar consultas co fin de recuperar, dunha forma sinxela, información dunha base de datos, e facer trocos sobre ela. É unha linguaxe de cuarta xeración (4GL).
Imos ver as consultas antes de crear táboas, cargar datos, e recuperalos. Aquí veremos o ingreso de comandos, empregando consultas SQL para ir familiarizándonos con mysql.
Imos empezar cun comando que ordena ao servidor que mostre o seu número de versión e a data actual. Escribímolo a continuación do prompt mysql> e prememos Enter:
mysql>SELECT VERSION(), CURRENT_DATE;

Esta consulta dinos o seguinte:
Unha sentenza SQL acaba nun punto e vírgula. (Hai excepcións coma QUIT, mencionado anteriormente).
O mysql amosa os resultados da consulta en filas e columnas. A primeira fila contén etiquetas para as columnas. O resto das filas son os resultados da consulta. Cada fila supón un rexistro e cada columna un campo.
As palabras clave poden ingresarse en calquera combinación de minúsculas e maiúsculas. Ollade para a palabra reservada SELECT.

Non así os nomes das bases de datos, táboas, etc.

O feito de por unha maiúscula provoca un erro, ese nome de táboa non existe. Isto é así porque Linux fai diferenzas.

Táboas. Seguindo con SQL.-A creación da base de datos foi unha tarefa sinxela, pero ata agora permanece baleira, a execución de SHOW ensinanolo:
mysql>SHOW TABLES;
Obteríamos -> Empty set (0.00 sec)
Imos crear unha táboa:
mysql>CREATE TABLE taboa1 ( Id INT(9) NOT NULL AUTO_INCREMENT ,
–>descri VARCHAR( 100 ) NULL,
–>precio DECIMAL( 9, 3 ) NULL,
–> data DATE NULL ,
–>PRIMARY KEY ( Id ) ) ENGINE = MyISAM;

Para verificar que a táboa foi creada na forma esperada, utilizase a sentenza DESCRIBE:
mysql> DESCRIBE taboa1;
Desfacernos dunha táboa é moi doado e para elo temos DROP:
mysql>DROP taboa1;
Moito ollo DROP borra a táboa, non o contido, iso faino DELETE.
mysql>DELETE FROM taboa1;
Unha forma de encher unha base de datos baleira é cun arquivo de texto que teña un rexistro por liña e os campos separados polo carácter de tabulación ( é o que usa MySQL por defecto ). A seguinte sentenza, se temos un arquivo chamado pepe.txt, faino:
mysql>LOAD DATA LOCAL INFILE ‘/home/anxo/pepe.txt’ INTO TABLE taboa1;
Para ler un arquivo txt delimitado con vírgulas, a sentenza é:
mysql>LOAD DATA INFILE ‘/home/anxo/pepe.txt’ INTO TABLE taboa1
->FIELDS TERMINATED BY ‘,’;
Escribir un arquivo con campos delimitados por vírgulas:
mysql>SELECT * INTO OUTFILE ‘/home/anxo/pepe.txt’
->FIELDS TERMINATED BY ‘,’ FROM taboa1;
Se queremos engadir os rexistros un a un:
mysql>INSERT INTO taboa1 VALUES(1,’Valdorras’,’2010-01-01′,NULL);
As cadeas e as datas van entre comiñas simples. O formato da data é o inglés.
Para actualizar un rexistro:
mysql>UPDATE taboa1 SET descri=’Limia’ WHERE Id=1;
Esta liña trocaría o contido do campo descri condicionado polo valor de Id grazas a cláusula WHERE.
A parte difícil é decidir como vai ser a estrutura da base de datos: que táboas necesitará, e que columnas haberá en cada táboa. Pero esa xa é outra historia.

Tipos de datos e Funcións..-MySQL soporta tipos de datos numéricos, data e hora e cadeas de caracteres. A seguinte táboa contén os enteiros e os rangos que abranguen:

   Tipo Valor Mínimo Valor Máximo
TINYINT -128 127
0 255
SMALLINT -32768 327670
0 65535
MEDIUMINT -8388608 8388607
0 16777215
INT -2147483648 2147483647
0 4294967295
BIGINT -9,2233×10^18 9,2233×10^18
0 18,4467×10^18

Para declarar un enteiro: INT(n), onde n é o número de díxitos con arranxo a táboa precedente.
Despois dos enteiros veñen os decimais, e a forma de declaralos, é:
DECIMAL(E,D)
Onde E<=64, e D<=30, o que se traduce nun número de 64 díxitos, 30 son decimais e o resto forman a parte enteira.
Os tipos de datos DOUBLE, FLOAT e REAL son de vírgula flotante. O tipo DECIMAL é de punto fixo e os cálculos son exactos ata 64 díxitos. Antes de MySQL 5.0.3 permitíanse 254 díxitos, pero a precisión é menor. Os cálculos anteriormente facíanse con punto flotante de dobre precisión, que ten unha precisión de 52 bits (15 díxitos decimais aproximadamente). Neste enderezo hai algúns exemplos de valores de vírgula flotante.
Para representar a data e a hora MySQL ten os seguintes tipos:

Tipo Valor
DATETIME ‘aaaa-mm-dd hh:mm:ss’
DATE ‘dddd-mm-aa’
TIMESTAMP 0000000000000
TIME ‘hh:mm:ss’
YEAR 0000

Todo sobre funcións data e tempo aquí.
Hai que ter en conta que MySQL fai unha validación básica das datas. Así os rangos para ano, mes e día son: 1000 a 9999. 00 a 12 e 00 a31. Isto permitiría almacenar datas coma: 2010-04-31.
Os separadores, entre outros son: ‘-’, ‘/’, ‘.’, ‘@’, para a data, e: ‘:’, ‘+’, ‘*’, ‘^’ para o tempo.
Para o almacenamento de cadeas MySQL dispón dos seguintes tipos:

Tipo Valor
CHAR 0 a 255
VARCHAR 0 a 255
BINARY 0 a 255
VARBINARY 0 a 255
TINYBLOB, TINYTEXT L+1 byte, sendo L < 2^8
BLOB, TEXT L+2 bytes, sendo L < 2^16
MEDIUMBLOB, MEDIUMTEXT L+3 bytes, sendo L < 2^24
LONGBLOB, LONGTEXT L+4 bytes, sendo L < 2^32
ENUM(‘valor1′,’valor2′,…) 1 ou 2 bytes, segundo nº. de valores (65,535 máximo)
SET(‘valor1′,’valor2′,…) 1,2,3,4 ou 8 bytes, segundo nº. de mebros (64 máximo)

A diferenza entre CHAR e VARCHAR está na forma de almacenamento, mentres que as cadeas son de lonxitude variable en VARCHAR, almacenando só os valores necesarios máis 1 byte para a lonxitude, CHAR enche con espazos os lugares baleiros. BINARY e VARBINARY son como CHAR e VARCHAR agás que almacenan bytes en lugar de carácteres.

En MySQL temos as seguintes funcións e operadores de comparación:
OR, ||, XOR Estes operadores son de exclusión, é dabondo con que se cumpra unha das condicións.
&&, AND son de inclusión e teñen que cumprir todas as condicións.
A palabra clave WHERE serve para especificar unha condición de procura, e: =, <, =<, >, >=, <>, son operadores de comparación.
A seguinte imaxe ilustra o seu uso:
A palabra reservada SELECT permítenos seleccionar as columnas nome e vendas, da FROM táboa de nome taboa1, WHERE cuxas vendas fosen maiores > ou igual = a 3000, OR ou as que fosen menores < de 375, AND e maiores > de 120, ou o que é o mesmo comprendidas entre 120 e 375.

NOT ou !, é NOT lóxico, comproba se un valor é ou non nulo. Evaluase a 1 se o operando é 0, e 0 se o operando é diferente de 0, e NOT NULL retorna NULL. Exemplo:

BETWEEN, permite escoller unha serie dentro dun rango de valores. No noso caso tódolas datas entre o 1 e o 3 de xaneiro do 2010.

CASE, WHEN, THEN, ELSE
A sentenza CASE procura o contido dunha constante/variable nunha lista condicionada por WHEN, cando o encontra, THEN asígnalle o valor correspondente, se non, ELSE executa o default. Vémolo millor no exemplo:

IN semellante a un “=” para cada un dos valores.

IS comprobase un valor contra un valor booleano, onde o valor booleano pode ser TRUE, FALSE, ou UNKNOWN.

IN e IS combinados permiten realizar subconsultas.
Selecciona da taboa1 aqueles rexistros cuxo Id non é nulo, e ademáis, non pertenza a taboa zonas.

LIKE, REGEXP permiten o emprego de patróns para facer procuras complexas.
Atopa nomes que conteñan o “a”.

Atopa nomes que empecen por “C”. Pódense facer moreas de patróns cos dous operadores tendo en conta que:
Os patrons SQL, non son case-sensitive, permiten emplear o caracter ‘_’ para representar coincidencia cun carácter individual e ‘%’ como comodín.
Algunhas características das expresións regulares son:
~ ‘.’ Coincidencia con calquera carácter.
~ ‘[...]‘ coincidencia con calquera caracter entre os corchetes. Por exemplo, ‘ [cde] ‘ coincidirá con ‘ c ‘ ‘d’, ou ‘e’. Para unha referencia a un rango de carácteres. ‘ [a-z] ‘ detecta calquera letra coincidente, do mesmo xeito que ‘ [0-9] ‘ o fai con calquera díxito.
~ ‘ * ‘ coincidencia con cero ou máis aparicións dos caracteres que o preceden. Por exemplo, ‘x*’ detecta calquera número de carácteres ‘x’, ‘ [0-9] * ‘ calquera cantidade de díxitos, e ‘.*’ coincidirá con calquera número de calquera carácter.
~ REGEXP terá éxito se o patrón encontra coincidencia en calquera parte do valor examinado (isto difire con LIKE en que este só ten éxito se o patrón concorda con todo o valor).
~ Para que un patrón detecte coincidencias soamente ao final ou o principio do valor, utilizase ‘ ^ ‘ ao principio ou ‘ $ ‘ ao final do patrón.
As operacións de comparación dan un valor de 1 (TRUE), ou 0 (FALSE), ou NULL.

Funcións de agregación de GROUP BY. Se se usa unha función de grupo sen a cláusula GROUP BY, é semellante a agrupar todos os rexistros. Imos ver as máis importantes:
AVG, MAX, MIN, SUM calculan a media, o máximo, o minimo e a suma dunha serie de valores dados e COUNT, da un contador co número de rexistros devoltos por unha consulta. Algúns exemplos:
A primeira das sentenzas devolve todas as filas e columnas contidas na táboa taboa1, a segunda, sen GROUP BY, devolve o valor das funcións agrupando todolos rexistros, e a última, aquí xa con GROUP BY, fai a mesma consulta agrupando por datas.
O comportamento de COUNT é así­ en táboas MyISAM. Para motores de almacenamento transaccionais (InnoDB, BDB), levar un contador de rexistros non é doado xa que poden acontecer múltiples transaccións e cada unha delas pode afectar ao contador.
O motor de almacenamento é a parte do SGDB encargada de crear, actualizar, reparar e borrar os datos. MySQL ten a opción de establecer que motor usar cada vez que se crea unha táboa.
A sentenza:
mysql>SHOW ENGINES;
permítenos ver os motores dispoñibles;

Referencias:
http://dev.mysql.com/doc/refman/5.0/es/index.html
Wikipedia

Licenza Creative Commons©

Titorial do Servidor Apache

commentarios
Feito o :9 Maio 2010

- Algunhas cuestións previas.
- Que é o Apache.
- Requerimentos.
- Instalación do Apache.
- Configuración do Apache.
- Módulos.

Algunhas cuestións previas.- Esta é unha guía básica de instalación e configuración dun Servidor Apache. As probas fixéronse con Debian e Ubuntu, aínda que a maioría do aquí exposto vale para calquera sistema Linux. Imos con algunhas definicións.
WWW.- World Wide Web, protocolo de intercambio de páxinas web, sistema de documentos de hipertexto e/ou hipermedios enlazados e accesibles a través de Internet.
Cun navegador web, un usuario visualiza sitios web compostos de páxinas web que poden conter texto, imaxes, vídeos ou outros contidos multimedia. A visualización dunha páxina web da World Wide Web faise normalmente a través da URL.
A Web foi creada ao redor de 1989 polo inglés Tim Berners-Lee e o belga Robert Cailliau mentres traballaban no CERN en Suíza. Dende entón, Berners-Lee xogou un papel activo guiando o desenvolvemento dos estándares da Web.
HTTP.-HyperText Transfer Protocol. Usado en cada transacción da Web (WWW), segue o esquema petición-resposta entre un cliente e un servidor. Á información transmitida identifícaselle mediante a URL. HTTP foi desenvolvido polo consorcio W3C e a IETF. HTTP define a sintaxe e a semántica que utilizan os elementos da arquitectura Web (clientes, servidores, proxies) para comunicarse.

Esquema Cliente-Servidor

URL.-Uniform Address Locator (localizador de dirección uniforme). Dirección dunha páxina web. Móstrase na barra de dirección do navegador. Existe unha soa URL para cada páxina da World Wide Web.


HTML.-Hyper Text Markup Language ( linguaxe de marcado do hipertexto). É o protocolo máis usado para o manexo de páxinas web, permite que os navegadores poidan lelas.

Que é o Apache.- O servidor Apache é un servidor web HTTP de código aberto para plataformas Unix (BSD, GNU/Linux, etc.), Windows, Macintosh e outras, que implementan o protocolo HTTP. Ten desempeñado un papel moi importante no crecemento da rede mundial, e é o servidor HTTP máis utilizado. Apache é desenvolvido e mantido por unha comunidade de desenvolvedores auspiciada por Apache Software Foundation.
Apache é usado principalmente para enviar páxinas web na World Wide Web. Moitas aplicacións web están deseñadas asumindo como ambiente de implantación a Apache, ou utilizarán características propias deste servidor web.
Apache é o compoñente de servidor web nas plataformas de aplicacións LAMP e XAMPP, xunto a MySQL e as linguaxes de programación PHP/Perl/Python/Ruby. É redistribuído como parte de varios paquetes propietarios de software, incluíndo a base de datos Oracle e o IBM WebSphere Application Server. Mac OS X integra apache como parte do seu propio servidor web e como soporte do seu servidor de aplicacións WebObjects. É soportado dalgún xeito por Lazarus, Kylix e Delphi. Apache é incluído con Novell NetWare 6.5, onde é o servidor web por defecto, e en moitas distribucións Linux. Os programadores de aplicacións web moitas veces utilizan unha versión local do Apache en orde de previsualizar e probar código mentres este é desenvolvido.

Requerimentos.-Os requirimentos mínimos para usar Apache son:
En canto á Ram, en calquera sistema operativo con ámbito gráfico irá ben, e como estamos a falar de Linux moito mellor, aínda que teño lido que cunha memoria de 32 Mb, funciona…?.
Para o disco duro fan falla polo menos 50 MB de espazo libre. Despois da instalación, Apache ocupa aproximadamente 10 Mb, non obstante, a necesidade real de espazo en disco varía considerablemente en función das opcións de configuración que elixamos e dos módulos externos que usemos.

Instalación do Apache.- Para facer funcionar o servidor imos instalar o paquete apache2, algunhas distribucións permiten facelo durante a instalación do propio sistema, se o queremos instalar dende os fontes temos que descargalo dende httpd.apache.org/download.cgi, baixa nun arquivo semellante a httpd-2_x_x.tar.gz, e completar os seguintes pasos sen erros:
Cambiámonos ao cartafol onde o gardamos. Por exemplo $HOME.
      $ cd /home/cartafol
Descomprimímolo.
      $ gzip -d httpd-2_x_xx.tar.gz
Extraemos os arquivos.
      $ tar xvf httpd-2_x_x.tar
Configurámolo.
      $ . /configure –prefix=PREFIX*
Compilámolo.
      $ make
Instalámolo.
      $ make install
*Fai referencia o cartafol onde se instalará o Apache. Por exemplo /usr/local/apache2
É necesario ter instalado o compilador de C. Se non o temos, identificámonos como root e:
      # aptitude install build-essential
Se vos parece moi complicado, témolo máis doado. Podemos baixar dende os repositorios Debian os paquetes correspondentes e como root dende o cartafol en que os descargásemos:
       #dpkg -i *.deb
Isto instalará todos os arquivos con extensión .deb do cartafol.
Tamén os podemos instalar directamente dende os repositorios como root:
Primeiro actualizámolos.
      #aptitude update
Despois instalámolos.
      #aptitude install apache2
E se non vos gusta nada do dito aínda quedan os xestores de paquetes Synaptic e Kpackage, segundo o ámbito gráfico, que permiten seleccionar un por un os paquetes.

Configuración do Apache.-Apache configúrase, en arquivos de texto, mediante directivas . O servidor le un arquivo que contén os tipos mime dos documentos; o nome dese ficheiro establéceo a directiva TypesConfig, e é mime.types por omisión.
MIME Type é unha forma de describir o formato dun ficheiro, consistente nun tipo de formato principal e outro secundario, separados por unha barra, por exemplo text/html.
O arquivo de configuración predeterminado de Apache 2 é apache2.conf e acostuma a atoparse en: /etc/apache2/. Pódese editar para configurar o número de porto, os módulos, os arquivos de rexistros, os hosts virtuais, etc. O usuario e o grupo no Apache veñen indicados polas seguintes directivas:
  User ${APACHE_RUN_USER}
  Group ${APACHE_RUN_GROUP}
Están definidas en /etc/apache2/envvars como:
  User www-data
  Group www-data
Aínda que Apache non adoita a dar problemas cos usuarios, se desexamos trocar de sito o cartafol das páxinas web, hai un comportamento diferente entre Debian e Ubuntu, mentras que no primeiro non fai falla trocar nada, en Ubuntu, hai que trocalo usuario e máis o grupo polo usuario propietario do cartafol, comentando as seguintes liñas:
  #User ${APACHE_RUN_USER}
  #Group ${APACHE_RUN_GROUP}
E Trocándoas por:
  User dono
  Group dono
Non se debe por na directiva User root. Usar root como usuario pode crear grandes buratos de seguridade no servidor.
O paso seguinte é dicirlle ao Apache onde vai estar o cartafol que contén as páxinas web, por defecto adoita ser /var/www, no noso sistema Debian, e tamén, en Ubuntu, é o arquivo default situado en /etc/apache2/sites-available/, buscamos as liñas que conteñen /var/www e trocámolas polo noso path de xeito semellante a:
  DocumentRoot /var/www
e
  <Directory /media/disk/www>
e trocámolas por:
  DocumentRoot /media/disk/www
e
  <Directory /media/disk/www>
Supoñendo que temos unha memoria usb co cartafol www.
Na maioría dos casos abonda . Calquera cambio nestes arquivos require reiniciar o servidor, ou forzar a lectura dos arquivos de configuración novamente. Para iso temos:
      #apache2ctl -k restart
      #apache2ctl -k stop
      #apache2ctl -k start
Unha vez rematado para comprobar que Apache funciona ben:
  http://localhost ou http://127.0.0.1
Se estás noutra máquina:
  http://ip_da_maquina_do_apache ou http://nome_da_maquina
En calquera dos casos o resultado debería ser algo asi:


que é o contido do meu cartafol www. Se o fixeramos sen mudalo cartafol www o resultado seria: It works!.

Módulos.-Como xa se dixo antes, os módulos son unha das características principais do Apache, e unha das razóns de empregalos, é que os requirimentos son en función do uso, probablemente un usuario de PHP non necesite Tomcat. Se se incluísen todas as posibilidades nunha mesma instalación as necesidades de Ram e espazo en Disco medrarían unha barbaridade.
A arquitectura do servidor Apache é moi modular, consta dunha sección core e diversos módulos que achegan moita da funcionalidade que podería considerarse básica para un servidor web. Algúns destes módulos son:

  • mod_ssl – Comunicacións seguras vía TLS.
  • mod_rewrite – Reescritura de direccións. Xeralmente utilizado para transformar páxinas dinámicas como php en páxinas estáticas html.
  • mod_dav – Soporte do protocolo WebDAV (RFC 2518).
  • mod_deflate – Compresión transparente co algoritmo deflate do contido enviado ao cliente./li>
  • mod_auth_ldap – Permite autenticar usuarios contra un servidor LDAP.
  • mod_proxy_ajp – Conector para enlazar co servidor Jakarta Tomcat de páxinas dinámicas en Java (servlets e JSP).

O servidor de base pode ser estendido coa inclusión de módulos externos entre os cales se encontran:

  • mod_perl – Páxinas dinámicas en Perl.
  • mod_php – Páxinas dinámicas en PHP.
  • mod_python – Páxinas dinámicas en Python.
  • mod_rexx – Páxinas dinámicas en REXX e Object REXX.
  • mod_ruby – Páxinas dinámicas en Ruby.
  • mod_security – Filtrado a nivel de aplicación, para seguridade.
  • mod_mono – Páxinas dinámicas en Mono.

Se cadra, un dos módulos máis importantes que non se instalan por defecto e o mod_ssl, usado para a configuración HTTPS. Iste módulo engade unha importante característica ao servidor Apache2, a posibilidade de encriptar as comunicacións. Desta maneira, cando o teu navegador se esta comunicando usando a encriptación SSL, utilizarase o prefixo https:// ao principio da URL na barra de direccións do navegador.
O módulo mod_ssl esta dispoñible no paquete apache2-common. Se tes instalado este paquete, poderás executar como root o seguinte comando nun terminal para activalo:
      # a2enmod ssl
Obteremos por resposta algo como:
Module ssl installed; run /etc/init.d/apache2 force-reload to enable.
  Aquí tes todo o que poidas desexar sobre os módulos
Para aqueles que chegaron ata aquí, teño que decirlles que hai unha aplicación chamada XAMPP, que instala de xeito moi doado Apache, Php e MySQL.

Referencias:
  Documentación do Servidor HTTP Apache 2.0.
  Servidor HTTP Apache.

Licenza Creative Commons©

Tema Panorama porThemocracy