Cadena Php

Una cuestión interesante cuando aprendemos a programar con Php, es aprender el manejo de cadenas Php. Aprender esta técnica de programación con Php puede ser de mucha ayuda en nuestra página web dinámica.

Cadenas Php


Un valor string es una serie de caracteres. En PHP, un caracter es lo mismo que un byte, es decir, hay exactamente 256 tipos de caracteres diferentes. Esto implica también que PHP no tiene soporte nativo de Unicode.

nota: El que una cadena Php se haga muy grande no es un problema. PHP no impone límite práctico alguno sobre el tamaño de las cadenas, así que no hay ninguna razón para preocuparse sobre las cadenas Php largas.

Sintaxis de las cadenas en Php

Un literal de cadena php puede especificarse en tres formas diferentes.

comillas simples

comillas dobles

sintaxis heredoc

Comillas simples

La forma más simple de especificar una cadena Php sencilla es rodearla de comillas simples (el caracter ').

Para especificar una comilla sencilla literal, necesita escaparla con una barra invertida (\), como en muchos otros lenguajes. Si una barra invertida necesita aparecer antes de una comilla sencilla o al final de la cadena en Php, necesitará doblarla. Note que si intenta escapar cualquier otro caracter, ¡la barra invertida será impresa también! De modo que, por lo general, no hay necesidad de escapar la barra invertida misma.

Ejemplo Php:

<?php

echo 'esta es una cadena Php simple';

echo 'También puede tener saltos de línea embebidos

en las cadenas Php de esta forma, ya que

es válido';

// Imprime: Arnold dijo una vez: "I'll be back"

echo 'Arnold dijo una vez: "I\'ll be back"';

// Imprime: Ha eliminado C:\*.*?

echo 'Ha eliminado C:\\*.*?';

// Imprime: Ha eliminado C:\*.*?

echo 'Ha eliminado C:\*.*?';

// Imprime: Esto no va a expandirse: \n una nueva línea

echo 'Esto no va a expandirse: \n una nueva línea';

// Imprime: Las variables no se $expanden $tampoco

echo 'Las variables no se $expanden $tampoco';

?>

Comillas dobles

Si la cadena Php se encuentra rodeada de comillas dobles ("), PHP entiende más secuencias de escape para caracteres especiales:

Heredoc

Otra forma de delimitar cadenas en Php es mediante el uso de la sintaxis heredoc ("<<<"). Debe indicarse un identificador (seguido por un salto de línea) después de la secuencia <<<, luego la cadena Php, y luego el mismo identificador para cerrar la cita.

El identificador de cierre debe comenzar en la primera columna de la línea. Asimismo, el identificador usado debe seguir las mismas reglas que cualquier otra etiqueta en PHP: debe contener solo caracteres alfanuméricos y de subrayado, y debe iniciar con un caracter no-dígito o de subrayado.

Importante: Es muy importante notar que la línea con el identificador de cierre no contenga otros caracteres, excepto quizás por un punto-y-coma (;). Esto quiere decir en especial que el identificador no debe usar sangría, y no debe haber espacios o tabuladores antes o después del punto-y-coma. Es importante también notar que el primer caracter antes del identificador de cierre debe ser un salto de línea, tal y como lo defina su sistema operativo. Esto quiere decir \r en Macintosh, por ejemplo. El delimitador de cierre (posiblemente seguido de un punto-y-coma) debe ser seguido también por una nueva línea.

Si esta regla es rota y el identificador de cierre no es "limpio", entonces no se considera un identificador de cierre y PHP continuará en busca de uno. Si, en tal caso, no se encuentra un identificador de cierre apropiado, entonces un error del analizador sintáctico resultará con el número de línea apuntando al final del script.

No es permitido usar la sintaxis heredoc al inicializar miembros de clase. Use otro tipo de sintaxis en su lugar.

Ejemplo invalido:

<?php

class foo {

public $bar = <<<EOT

bar

EOT;

}

?>

El texto heredoc se comporta tal como una cadena Php entre comillas dobles, sin las comillas dobles. Esto quiere decir que no necesita escapar tales comillas en sus bloques heredoc, pero aun puede usar los códigos de escape listados anteriormente. Las variables son expandidas, aunque debe tenerse el mismo cuidado cuando se expresen variables complejas al interior de un segmento heredoc, al igual que con otras cadenas.

Ejemplo de uso de una cadena heredoc en Php

<?php

$cadena = <<<FIN

Ejemplo de una cadena Php

que se extiende por varias líneas

usando la sintaxis heredoc.

FIN;

/* Un ejemplo más complejo, con variables. */

class foo

{

var $foo;

var $bar;

function foo()

{

$this->foo = 'Foo';

$this->bar = array('Bar1', 'Bar2', 'Bar3');

}

}

$foo = new foo();

$nombre = 'MiNombre';

echo <<<FIN

Mi nombre es "$nombre". Estoy imprimiendo algo de $foo->foo.

Ahora, estoy imprimiendo algo de {$foo->bar[1]}.

Esto debería imprimir una letra 'A' mayúscula: \x41

FIN;

?>

nota: El soporte heredoc fue agregado en PHP 4.

Procesamiento de variables en cadenas Php

Cuando una cadena Php es especificada en comillas dobles o al interior de un bloque heredoc, las variables son interpretadas en su interior.

Existen dos tipos de sintaxis: una simple y una compleja. La sintaxis simple es la más común y conveniente. Esta ofrece una forma de interpretar una variable, un valor array, o una propiedad de un object.

La sintaxis compleja fue introducida en PHP 4, y puede reconocerse por las llaves que rodean la expresión.

Sintaxis simple

Si un signo de dólar ($) es encontrado, el analizador sintáctico tomará ambiciosamente tantos lexemas como le sea posible para formar un nombre de variable válido. Rodee el nombre de la variable de llaves si desea especificar explícitamente el final del nombre.

<?php

$cerveza = 'Heineken';

echo "El sabor de varias $cerveza's es excelente"; // funciona, "'" no es un caracter válido para nombres de variables

echo "Tomó algunas $cervezas"; // no funciona, 's' es un caracter válido para nombres de variables

echo "Tomó algunas ${cerveza}s"; // funciona

echo "Tomó algunas {$cerveza}s"; // funciona

?>

De forma similar, puede hacer que un índice de un array o una propiedad de un object sean interpretados. En el caso de los índices de matrices, el corchete cuadrado de cierre (]) marca el final del índice. Para las propiedades de objetos, se aplican las mismas reglas de las variables simples, aunque con las propiedades de objetos no existe un truco como el que existe con las variables.

<?php

// Estos ejemplos son específicos al uso de matrices al interior de

// cadenas. Cuando se encuentre por fuera de una cadena en Php, siempre rodee

// de comillas las claves tipo cadena de su matriz, y no use

// {llaves} por fuera de cadenas tampoco.

// Mostremos todos los errores

error_reporting(E_ALL);

$frutas = array('fresa' => 'roja', 'banano' => 'amarillo');

// Funciona pero note que esto trabaja de forma diferente por fuera de

// cadenas entre comillas

echo "Un banano es $frutas[banano].";

// Funciona

echo "Un banano es {$frutas['banano']}.";

// Funciona, pero PHP busca una constante llamada banano primero, como

// se describe más adelante.

echo "Un banano es {$frutas[banano]}.";

// No funciona, use llaves. Esto resulta en un error de análisis sintáctico.

echo "Un banano es $frutas['banano'].";

// Funciona

echo "Un banano es " . $frutas['banano'] . ".";

// Funciona

echo "Este cuadro tiene $cuadro->ancho metros de ancho.";

// No funciona.

echo "Este cuadro tiene $cuadro->ancho00 centímetros de ancho.";

?>

Para cualquier cosa más sofisticada, debería usarse la sintaxis compleja.

Sintaxis compleja (llaves)

Esta no es llamada compleja porque la sintaxis sea compleja, sino porque es posible incluir expresiones complejas de esta forma.

De hecho, de esta forma puede incluir cualquier valor que sea parte del espacio de nombres al interior de cadenas de Php. Simplemente escriba la expresión en la misma forma que lo haría si se encontrara por fuera de una cadena, y luego la ubica entre { y }. Ya que no es posible escapar '{', esta sintaxis será reconocida únicamente cuando el caracter $ se encuentra inmediatamente después de {. (Use "{\$" para obtener una secuencia literal "{$"). Algunos ejemplos para aclarar el asunto:

<?php

// Mostremos todos los errores

error_reporting(E_ALL);

$genial = 'fantástico';

// No funciona, imprime: Esto es { fantástico}

echo "Esto es { $genial}";

// Funciona, imprime: Esto es fantástico

echo "Esto es {$genial}";

echo "Esto es ${genial}";

// Funciona

echo "Este cuadro tiene {$cuadro->ancho}00 centímetros de ancho.";

// Funciona

echo "Esto funciona: {$matriz[4][3]}";

// Esto está mal por la misma razón por la que $foo[bar] está mal por

// fuera de una cadena. En otras palabras, aun funciona pero ya que

// PHP busca primero una constante llamada foo, genera un error de

// nivel E_NOTICE (constante indefinida).

echo "Esto está mal: {$matriz[foo][3]}";

// Funciona. Cuando se usan matrices multi-dimensionales, use siempre

// llaves alrededor de las matrices al interior de cadenas

echo "Esto funciona: {$matriz['foo'][3]}";

// Funciona.

echo "Esto funciona: " . $arr['foo'][3];

echo "Puede incluso escribir {$obj->valores[3]->nombre}";

echo "Este es el valor de la variable llamada $nombre: {${$nombre}}";

?>

nota: Las llamadas a funciones y métodos trabajan a partir de PHP 5.

nota: Interpretar variables al interior de cadenas usa más memoria que la concatenación de cadenas. Cuando escriba un script PHP en el cual el uso de memoria sea de cuidado, considere el uso del operador de concatenación (.) en lugar de la interpolación de variables.

Acceso a cadenas Php y modificación por caracter

Los caracteres al interior de una cadena pueden ser consultados y modificados al especificar el desplazamiento, comenzando en cero, del caracter deseado después de la cadena usando corchetes cuadrados tipo-matriz como $cadena[42], así que piense en una cadena como un array de caracteres.

nota: También es posible acceder a los caracteres usando llaves como $cadena{42} para el mismo propósito. Sin embargo, se prefiere el uso de corchetes cuadrados ya que el estilo {corchetes} es considerado obsoleto a partir de PHP 6.

Algunos ejemplos de cadenas

<?php

// Obtener el primer caracter de una cadena

$cadena = 'Esta es una prueba.';

$primer = $cadena[0];

// Obtener el tercer caracter de una cadena

$tercer = $cadena[2];

// Obtener el último caracter de una cadena.

$cadena = 'Esta es también una prueba.';

$ultimo = $cadena[strlen($cadena)-1];

// Modificar el último caracter de una cadena

$cadena = 'Observe el mar';

$cadena[strlen($cadena)-1] = 'l';

// El método alternativo usando {} es obsoleto desde PHP 6

$tercer = $cadena{2};

?>

nota: Al accesar variables de otros tipos mediante [] o {} se devuelve silenciosamente NULL.

Funciones y operadores útiles

Las cadenas pueden ser concatenadas usando el operador '.' (punto). Note que el operador '+' (adición) no funciona para este propósito. Por favor refiérase a la sección Operadores de cadena para más información.

Existen bastantes funciones útiles para la modificación de cadenas en Php.

Existen también funciones para cadenas tipo URL, y funciones para encriptar/descifrar cadenas (mcrypt y mhash).

Conversión a cadena Php

Es posible convertir un valor a una cadena usando el moldeamiento (string), o la función strval(). La conversión a cadena se realiza automáticamente para usted en el contexto de una expresión cuando se necesita una cadena. Esto ocurre cuando usa las funciones echo() o print(), o cuando compara el valor de una variable con una cadena.

Un valor boolean TRUE es convertido a la cadena "1", el valor FALSE se representa como "" (una cadena vacía). De esta forma, usted puede convertir de ida y vuelta entre valores booleanos y de cadena.

Un número integer o de punto flotante (float) es convertido a una cadena que representa el número con sus dígitos (incluyendo la parte del exponente para los números de punto flotante).

nota: El caracter de punto decimal es definido en la localización del script (categoría LC_NUMERIC).

Las matrices son siempre convertidas a la cadena "Array", de modo que no puede volcar los contenidos de un valor array con echo() o print() para ver lo que se encuentra en su interior. Para ver un elemento, usted tendría que hacer algo como echo $arr['foo'].

Los objetos en PHP 4 son convertidos siempre a la cadena "Object". Si quisiera imprimir los valores de variables miembro de un object para efectos de depuración, lea los parágrafos siguientes. Si quiere conocer el nombre de clase del cual un objeto dado es instancia, use get_class(). A partir de PHP 5, el método __toString() es usado si resulta aplicable.

Los recursos son siempre convertidos a cadenas con la estructura "Resource id #1" en donde 1 es el número único del valor resource asignado por PHP durante tiempo de ejecución. Si quisiera obtener el tipo del recurso, use get_resource_type().

NULL se convierte siempre a una cadena vacía.

Como puede apreciar, el imprimir matrices, objetos o recursos no le ofroce información útil sobre los valores mismos. Consulte las funciones print_r() y var_dump() para conocer mejores formas de imprimir valores para depuración.

También puede convertir valores PHP a cadenas y almacenarlas permanentemente. Este método es conocido como seriación, y puede ser efectuado con la función serialize(). También puede seriar valores PHP a estructuras XML, si cuenta con soporte WDDX en su configuración de PHP.

Conversión de cadenas Php a números

Cuando una cadena es evaluada como un valor numérico, el valor resultante y su tipo son determinados como sigue.

La cadena será evaluada como un float si contiene cualquier caracter entre '.', 'e', o 'E'. De otra forma, evaluará como un entero.

El valor es dado por la porción inicial de la cadena. Si la cadena comienza con datos numéricos válidos, éstos serán el valor usado. De lo contrario, el valor será 0 (cero). Un signo opcional es considerado un dato numérico válido, seguido por uno o más dígitos (que pueden contener un punto decimal), seguidos por un exponente opcional. El exponente es una 'e' o 'E' seguida de uno o más dígitos.

<?php

$foo = 1 + "10.5"; // $foo es flotante (11.5)

$foo = 1 + "-1.3e3"; // $foo es flotante (-1299)

$foo = 1 + "bob-1.3e3"; // $foo es entero (1)

$foo = 1 + "bob3"; // $foo es entero (1)

$foo = 1 + "10 Cerditos"; // $foo es entero (11)

$foo = 4 + "10.2 Cerditos"; // $foo es flotante (14.2)

$foo = "10.0 cerdos " + 1; // $foo es flotante (11)

$foo = "10.0 cerdos " + 1.0; // $foo es flotante (11)

?>

Si quisiera probar cualquiera de los ejemplos presentados en esta sección, puede cortar y pegar los ejemplos e insertar la siguiente línea para verificar por sí mismo lo que está sucediendo:

<?php

echo "\$foo==$foo; tipo es " . gettype ($foo) . "<br />\n";

?>

No espere obtener el código de un caractar convirtiéndolo a un entero (como lo haría en C, por ejemplo). Use las funciones ord() y chr() para convertir entre códigos de caracter y caracteres.

Datos de punto flotante en Php

Los números de punto flotante (también conocidos como "flotantes", "dobles" o "números reales") pueden ser especificados usando cualquiera de las siguientes sintaxis:

$a = 1.234;

$b = 1.2e3;

$c = 7E-10;

?>

Formalmente:

LNUM [0-9]+

DNUM ([0-9]*[\.]{LNUM}) | ({LNUM}[\.][0-9]*)

EXPONENT_DNUM ( ({LNUM} | {DNUM}) [eE][+-]? {LNUM})

El tamaño de un flotante depende de la plataforma, aunque un valor común consiste en un máximo de ~1.8e308 con una precisión de aproximadamente 14 dígitos decimales (lo que es un valor de 64 bits en formato IEEE).

Precisión del punto flotante en Php

Es bastante común que algunas fracciones decimales simples como 0.1 o 0.7 no puedan ser convertidas a su representación binaria interna sin perder un poco de precisión. Esto puede llevar a resultados confusos: por ejemplo, floor((0.1+0.7)*10) usualmente devolverá 7 en lugar del esperado 8 ya que el resultado de la representación interna es en realidad algo como 7.9999999999....

Esto se encuentra relacionado al hecho de que es imposible expresar de forma exacta algunas fracciones en notación decimal con un número finito de dígitos. Por ejemplo, 1/3 en forma decimal se convierte en 0.3333333. . ..

Así que nunca confíe en resultados de números flotantes hasta el último dígito, y nunca compare números de punto flotante para conocer si son equivalentes. Si realmente necesita una mejor precisión, es buena idea que use las funciones matemáticas de precisión arbitraria o las funciones gmp en su lugar.

Estados de proceso E/S (I/O) del esclavo de replicación de base de datos Mysql

La siguiente lista muestra los estados más comunes que puede ver en la columna State para un flujo de entrada/salida en el servidor esclavo. Este estado también aparece en la columna Slave_IO_State mostrada por SHOW SLAVE STATUS. Esto significa que puede obtener una vista muy buena de lo que ocurre simplemente usando este comando.

  • Connecting to master

El flujo trata de conectar al maestro.

  • Checking master version

Estado que ocurre brevemente, inmediatamente tras establecer la conexión con el maestro.

  • Registering slave on master

Estado que ocurre brevemente, inmediatamente tras establecer la conexión con el maestro.

  • Requesting binlog dump

Estado que ocurre brevemente, inmediatamente tras establecer la conexión con el maestro. El flujo envía al maestro una petición para los contenidos de su log binario, comenzando por el nombre del log binario pedido y la posición.

  • Waiting to reconnect after a failed binlog dump request

Si la petición del volcado del log binario falla (debido a una desconexión), el flujo pasa a este estado mientras duerme, luego trata de reconectar periódicamente. El intervalo entre reintentos puede especificarse usando la opción --master-connect-retry .

  • Reconnecting after a failed binlog dump request

El flujo está tratando de reconectar con el maestro.

  • Waiting for master to send event

El flujo ha conectado con el maestro y está esperando a que lleguen los eventos del log binario. Esto puede tardar un tiempo largo si el maestro está en espera. Si la espera dura slave_read_timeout segundos, se produce un timeout. En este punto, el flujo considera la conexión rota e intenta reconectar.

  • Queueing master event to the relay log

El flujo ha leído un evento y lo está copiando en el log retardado para que el flujo SQL pueda procesarlo.

  • Waiting to reconnect after a failed master event read

Un error ocurre durante la lectura (debido a una desconexión). El flujo duerme durante master-connect-retry segundos antes de intentar reconectar.

  • Reconnecting after a failed master event read

El flujo trata de reconectar con el maestro. Cuando la conexión se vuelve a establecer, el estado pasa a Waiting for master to send event.

  • Waiting for the slave SQL thread to free enough relay log space

Está usando un valor relay_log_space_limit distinto a cero, y el log retardado ha crecido hasta que su tamaño combinado escede este valor. El flujo de entrada/salida está en espera hasta que el flujo SQL libera suficiente espacio procesando los contenidos del log retardado de forma que pueda leer algunos ficheros de log retardado.

  • Waiting for slave mutex on exit

Estado que ocurre brevemente al parar el flujo.

Replicación de base de datos Mysql

La replicación en MySQL se basa en un servidor maestro que toma nota de todos los cambios en las bases de datos (actualizaciones, borrados, y así) en los logs binarios. Por lo tanto, para usar replicación, debe activar el log binario en el servidor maestro.

Cada servidor esclavo recibe del maestro las actualizaciones guardadas que el maestro ha guardado en su log binario, de forma que el esclavo puede ejecutar las mismas actualizaciones en su copia de los datos.

Es extremadamente importante tener en cuenta que el log binario simplemente es un registro que comienza en un punto fijo en el tiempo en el que activa el log binario. Cualquier esclavo que inicialice necesita copias de las bases de datos del maestro tal y como estaban en el momento en que activó el log binario en el maestro. Si arranca sus esclavos con bases de datos que no están en el mismo estado que las del maestro cuando arrancó el log binario, es muy posible que fallen sus esclavos.

Una forma de copiar los datos del maestro al esclavo es usar el comando LOAD DATA FROM MASTER . Tenga en cuenta que LOAD DATA FROM MASTER funciona sólo si todas las tablas en el maestro usan el motor de almacenamiento MyISAM. Además, este comando adquiere un bloqueo de lectura global, así que no se puede actualizar el maestro mientras las tablas se transfieren al esclavo. Cuando implementemos la copia en caliente sin bloqueo, ya no será necesario el bloqueo global de lectura.

Debido a estas limitaciones, recomendamos que en este punto use LOAD DATA FROM MASTER sólo si el conjunto de datos en el maestro es relativamente pequeño, o si se puede realizar un bloqueo de lectura prolongado en el maestro. Mientras que la velocidad real de LOAD DATA FROM MASTER puede variar de sistema a sistema, una buena regla de estimar cuánto tarda es 1 segundo por 1MB de datos. Esta es una estimación aproximada, pero puede encontrar que es bastante buena si tanto el maestro como el esclavo son equivalentes a Pentium 700MHz y conectados mediante una red a 100Mbps .

Tras inicializar el esclavo con una copia de los datos del maestro, se conecta al maestro y espera a procesar actualizaciones. Si el maestro falla, o el esclavo pierde conectividad con el maestro, el esclavo sigue intentando conectar periódicamente hasta que es capaz de reanudar la espera de actualizaciones. El intervalo de reintento lo controla la opción --master-connect-retry. Por defecto es de 60 segundos.

Cada esclavo registra dónde lo dejó. El servidor maestro tiene conocimiento de cuántos esclavos hay o cuántos están activos en un momento dado.

Utilidades de Sistema Kubuntu Linux

El mantenimiento del sistema de su computadora con Kubuntu Linux es tan fácil como chasquea los dedos usando las herramientas del sistema. Puede agregar o quitar aplicaciones con Kynaptic, agregar un asuario adicional al sistema con KUser. Los usuarios avanzados podrán deleitarse usando Konsole, el emulador de terminal para KDE.

KInfoCenter (Información del Sistema)

El KInfoCenter le provporciona un resumen centralizado y completo de muchos datos de funcionamiento de KDE y de su sistema. El centro de información está constituido por múltiples módulos. Cada módulo es una aplicación separada, pero el centro de información organiza todos esos programas de una manera cómoda lo que le permitirá gestionar su sistema fácilmente.

Adept (Administrador de Paquetes)

Adept es una herramienta gráfica para administrar paquetes basada en KDE y APT. Adept le permite instalar, actualizar y quitar paquetes de una manera fácil para el usuario.

KSysGuard (Monitor del sistema)

KSysGuard es el administrador de tareas y monitor de desempeño de KDE. Esta aplicación tiene una arquitectura del tipo cliente/servidor lo que permite monitorear ordenadores locales como remotos. KSysGuard no es solo un administrador de tareas sino también una herramienta muy poderosa para controlar grandes grupos de máquinas acopladas al servidor.

KCron (Planificador de Tareas)

KCron es una aplicación para planificar el lanzamiento de programas en segundo plano. Es una interfaz gráfica para el usuario del programa cron, el planificador del sistema de UNIX.

Konsole (Programa de Terminal)

Konsole es un emulador de terminal X para KDE. Las avanzadas prestaciones de Konsole incluyen una configuración única y la habilidad de poder usar múltiples terminales (shells) en una sola ventana, evitando así la fragmentación del escritorio.

KUser (Administrador de Usuario)

KUser le permite administrar los grupos y usuarios en su sistema Kubuntu Linux.


Aplicaciones Office en Kubuntu

Kontact (Administrador de la Información Personal)

Kontact es una solución integrada para la gestión de su información personal (PIM). Combina las conocidas aplicaciones de KDE como Kmail, KOrganizer y KAddressBook dentro de una interfaz única para proveer un acceso fácil al correo, planificación, libro de direcciones y otras funcionalidades para organizar su información. Kontact también integra Akregator, un lector RSS para KDE que le permite visualizar diferentes tipos de contenidos, tales como noticias, blogs y otras informaciones disponibles desde los sitios web.

OpenOffice

Kubuntu incluye la muy popular suite de paquetes de oficina de código abierto OpenOffice.org

OpenOffice.org DRAW - Dibujo

Desde algunos trazos hasta un plano complejo, DRAW le brinda las herramientas para comunicarse con gráficos y diagramas.

OpenOffice.org Impress - Presentaciones

Impress es una utilidad fuera de lo común para crear presentaciones multimedia efectivas. Podrá realizar sus presentaciones con toques 2D y 3D, efectos especiales, animaciones, y herramientas de dibujo impactantes. Puede usar sus viejas presentaciones Microsoft PowerPoint, o guardar su trabajo en el formato de PowerPoint para poder enviarla a personas que aun estén usando Microsoft PowerPoint. Alternativamente, puede usarse una utilidad interna para crear versiones Flash (.swf) de las presentaciones.

OpenOffice.org Calc - Hoja de Cálculos

CALC es el programa de hoja de cálculo que usted siempre quiso. Los nuevos usuarios la encontrarán intuitiva y fácil de aprender; los profesionales de datos y los "traga números" apreciarán el amplio rango de funciones avanzadas. CALC es capaz de manipular sus viejas hojas de cálculo de Microsoft Excel, o guardar el trabajo realizado en formato de Excel para ser enviado personas que aun usen Microsoft Excel.

OpenOffice.org Word Writer - Procesador de Texto

WRITER tiene todo lo que se espera de un moderno y completamente equipado procesador de texto o publicador de escritorio. WRITER por supuesto, puede leer todas sus viejos documentos de Microsoft Word, o guardar el trabajo en el formato Microsoft Word para enviarlo a personas que aun usen Microsoft Word.

Multimedia en Kubuntu Linux

Kubuntu Linux incluye aplicaciones de multimedia de alta talla que le dan la posibilidad de organizar y escuchar música digital, quemar discos ópticos (CD, DVD, etc.), y reproducir películas en Linux.

Aplicaciones multimedia en Kubuntu Linux

amaroK (reproductor de audio)

amaroK es el reproductor de audio para KDE. amaroK es un reproductor con muchísimas características que es además potetente y fácil de usar. amaroK es pequeñito, atractivo e inteligente.

K3b (quemador de CD y DVD)

K3b es una aplicación para grabar CD o DVD optimizada para KDE. Provee una interfaz cómoda para el usuario para realizar la mayoría de las tareas de grabación de CD/DVD, así como la creación de un CD de audio partiendo de un juego de ficheros o copiar un CD.

KsCD (reproductor de cd)

KsCD es un reproductor de CD's rápido para KDE, que está conectado a la CDDB (CD Data Base) de internet para poder proporcionarle información sobre el disco que está escuchando. KsCD representa el proyecto KDE de un reproductor de CD simple y pequeño.

KAudioCreator (decodificador de CD)

KAudioCreator es una aplicación de KDE que decodifica los CDs de audio y codifica cada pista a un fichero, permitiéndole pasar sus discos tradicionales a ficheros MP3 por ejemplo.

Kaffeine (reproductor multimedia

Kaffeine es el reproductor multimedia de KDE. Kaffeine soporta varios motores de reproducción, aunque su motor por defecto es Xine. Kaffeine proporciona una interfaz sencilla y amigable y dado que utiliza las librerías de Xine, puede reproducir todo lo que éste pueda reproducir, incluidos DivX, XviD, VCD, DVD, MP3, etc.

JuK (reproductor de música)

JuK es un organizador de música y reproductor para KDE. JuK le permite editar las fichas de sus archivos de música y organizar sus colecciones y listas de música.

KMix (mezclador de sonido)

KMix es un completo programa mezclador para KDE.

Internet en Kubuntu Linux

Conectarse a Internet con Kubuntu Linux nunca será problema, este incluye todo lo que usted necesita.

Krfb (Compartir el Escritorio)

KDE Desktop Sharing le permite invitar a alguien desde una localización remota a mirar y posiblemente controlar su escritorio. Esto puede ser muy útil si usted desea que un amigo desde una localización remota arregle su ordenador con Kubuntu Linux.

Kopete (Mensajero Instantáneo)

Kopete es el cliente de mensajería (IM) de KDE. Le permite comunicarse con sus amigos y compañeros de estudios usando varios servicios de mensajería instantánea. Kopete puede usar varios servicios IM, es mucho mas fácil de aprender y más conveniente que instalar clientes de IM separados para cada servicio.

KPPP (Herramienta para conexión a Internet mediante llamada telefónica)

KPPP es un marcador de llamada telefónica y una interfaz gráfica de pppd. Permite generar un guión interactivo y establecer los ajustes de la red. Automatiza el proceso de marcado a su ISP (Proveedor de Internet) mientras le mantiene convenientemente informado del proceso completo. Tiene además la particularidad de una cuenta elaborada de costos de teléfono, lo que a su vez hace, que usted pueda seguir con facilidad sus costos del trabajo en linea.

Konversation (Chat IRC)

Konversation es un cliente para el protocolo Internet Relay Chat (IRC). Reuna amigos en la red, haga nuevas relaciones y piérdase en conversaciones acerca de su tema favorito.

Krdc (Conexión a Escritorio Remoto)

Krdc es un cliente de aplicación que le permite ver o también controlar una sección de escritorio de otra máquina en la que corra un servidor compatible con VNC. Puede usar a Krdc con un servidor compatible con VNC tal como Krfb.

Akregator (Lector de Entradas RSS)

Akregator es una bandeja de entradas de RSS para KDE. Esta bandeja es una vía conveniente para navegar en difrerentes tipos de actividades, incluyendo noticias, blogs, y otros contenidos desde sitios en linea. En lugar de revisar todos sus sitios web favoritos manualmente por contenido nuevo, Akregator recolecta estos contenidos para usted.

Konqueror (Navegador Web)

Konqueror es el administrador de ficheros definitivo, navegador de web y el visor universal de documentos para KDE. ¡Es todo lo que usted quiere que sea en una aplicación de KDE y más!

KWiFiManager (Administrador de redes inalámbricas locales)

El grupo KWiFiManager está constituido por un juego de herramientas que permiten administrar su LAN inalámbrica bajo KDE. Se pueden explorar las redes inalámbricas y monitorear las propiedades de su conexión de red.

El Menú K en Kubuntu Linux

El menú K le permite navegar e iniciar aplicaciones.

Gráficos

Kubuntu Linux incluye las mejores aplicaciones disponibles para KDE.

Gwenview (Visualizador de Imágenes)

Gwenview es un visor de imágenes rápido y de uso fácil para KDE

Krita (Programa de Dibujo)

Krita es un potente programa de dibujo y pintura para KDE. Sus capacidades avanzadas le permitirán modificar imágenes por muchas vías diferentes.

KPDF (Visualizador PDF)

KPDF es un visor de PDF de KDE basado en el código de xpdf. Debido a esto, KPDF tiene algunas particularidades únicas como modo contínuo, soporte de presentación, etc.

Kooka (Programa de Escaneo y Reconocimiento de Texto=== (OCR))

Kooka es una aplicación de KDE que provee acceso al hardware del escáner usando la librería de SANE. Kooka le ayuda a escanear, guarda la imagen el formato de imágenes correcto y realiza el reconocimiento óptico del los caracteres (Optical Character Recognition (OCR)), usando a gocr, un popular programa de OCR de Código Abierto.

KSnapshot (Capturas de pantalla)

KSnapshot es una simple aplicación para tomar fotos de la pantalla. Está capacitado para tomar tanto la pantalla completa, una ventana en particular o una región selecionada. Estas imágenes pueden ser guardadas en una gran variedad de formatos.

Cerrar Sesión en Kubuntu Linux

Existen varias maneras de cerrar sesión, o "desloguearse". Utilice uno de estos procedimientos si desea cambiar de usuario, apagar su pc o reiniciarla.

Click derecho en un área vacía del escritorio de Kubuntu Linux y luego seleccione la opción Log Out user... (Donde user representa su nombre de usuario).

También puede cerrar sesión haciendo click en el menú K en la barra de herramientas y seleccionar Log Out....

Cualquiera de los métodos descritos arriba resultarán en la aparición de la pantalla de finalización de sesión.

La elección de la opción End Current Session cerrará la misma y lo llevará a la pantalla de Inicio, donde podrá iniciar una sesión nueva, reiniciar su pc o apagarla. La opción Turn Off ComputerRestart Computer. apagará su pc. Finalmente para reiniciar debe elegir la opción Reiniciar



Cerrar una Aplicación en Kubuntu Linux

Cerrar una aplicación en Kubuntu Linux es algo realmente sencillo, de todas maneras usted podrá realizarlo de diversas formas dependiendo de la situación o su preferencia.

  • Para la mayor parte de las aplicaciones, click en el menu File->Quit.
  • Haciendo click en el boton X, ubicado en la esquina superior derecha de la ventana.
  • Click derecho en la barra de título de la ventana y seleccionando la opción Close.
  • Click derecho sobre el cuadro correspondiente a la aplicación en la barra de tareas, luego seleccionar la opción Close.
  • Si prefiere usar comandos con el teclado, puede cerrar una aplicación presionando la combinación de teclas Alt + F4 cuando la ventana se encuentre activa.

Recuerde guardar el trabajo realizado en la aplicación antes de cerrarla.

Iniciar una Aplicación en Kubuntu Linux

Hay varias manera de iniciar una aplicación en Kubuntu Linux, pero para los objetivos de esta guía, nos concentraremos en los métodos mas comunes.

  • A través del menu K. Haciendo click sobre su icono podra acceder a una lista de aplicaciones ordenadas bajo la categoría All Aplications. Allí podrá acceder clickeando sobre alguna de las disponibles.
  • A través del panel de accesos directos. El mismo se encuentra en la barra de herramientas y esta representado por iconos que hacen referencia a las diversas aplicaciones. Podra agregar accesos rápidos para aplicaciones que considere de uso frecuente haciendo click derecho sobre el menú K y seleccionando la opción Panel Menu -> Add to Panel -> Application y seleccionando luego la aplicación deseada
  • Utilizando Katapult. Presione Alt + Space para llamar a Katapult y luego escriba el nombre del programa que desea ejecutar. Presione Enter para que Katapult lo encuentre.

El Escritorio de Kubuntu Linux

Desde el escritorio de Kubuntu Linux podrá acceder a las aplicaciones desde diferentes partes del mismo. Kubuntu Linux pone a su disposición una gran cantidad de herramientas. Sin embargo, usted podrá instalar software adicional desde internet, o desde algún CD según sus necesidades.

El Menú K

El menú azul K en la parte inferior izquierda del escritorio provee una manera fácil de acceder al software instalado en su pc. El menú está comprendido por 3 separadores.

  • Actions (Acciones)
  • All Applications (Contiene todas las aplicaciones)
  • Most Used Applications (Contiene las aplicaciones mas utilizadas)

El último separador se muestra solamente una vez que una o mas aplicaciones fueron ejecutadas. Las aplicaciones pueden ser ejecutadas seleccionándolas de alguna de las categorías dentro del separador All Aplications. Es una buena idea familiarizarce con el menú K. Es una herramienta que usará habitualmente y es útil para saber donde están ubicadas las aplicaciones.

Accesos Directos del Panel

El panel de accesos directos está generalmente localizado a la derecha del menú K. Usualmente se muestran como iconos que representan las acciones o aplicaciones a las que hacen referencia. Al mover el puntero del ratón sobre uno de estos iconos podrá ver una breve descripción del evento o programa. Personalice este panel haciendo click derecho sobre uno de los accesos directos y utilice las opciones que le permitirán mover, eliminar, editar y agregar entradas.

Intercambio de Escritorios

El intercambiador de escritorios es un cuadrado con cuatro secciones numeradas (por defecto). Cada sección representa un escritorio virtual. Las ventanas pueden ser transladadas de un escritorio a otro realizando click derecho sobre la barra de título, luego seleccionando la opción "To desktop" y seleccionando el escritorio deseado del submenú. Pruebe moviendo esta ventana de ayuda a otro escritorio. Observe como un esquema de la ventana es visible en la sección correspondiente. Puede agregar mas escritorios o renombrarlos haciendo click derecho sobre la sección y seleccionando "Configure Desktop".

Papelera de Reciclaje

La papelera de reciclaje contiene archivos que aún están pendientes para su eliminación definitiva. Existe como una medida de seguridad para prevenir la eliminación accidental de archivos. Podrá observar los contenidos de la misma haciendo click sobre su icono.

Reloj

El reloj se encuentra habitualmente en el extremo derecho de la barra de herramientas. El mismo es capaz de mostrar la hora del sistema en diferentes formatos. Haga click derecho sobre el icono del reloj y seleccione la opcion Properties para poder configurarlo.

Botón de ocultación

El botón de ocultación es una pequeña flecha azul que se encuentra en la esquina inferior derecha del escritorio al final de la barra de herramientas. Al hacer click sobre este botón, la barra de herramientas se desliza hacia la derecha y se esconde. Esto es de utilidad si necesita más espacio en su escritorio o simplemente despejar la visión. Para dejar la barra tal y como estaba, tan solo tiene que volver a hacer click sobre este botón.

Iniciar Sesión (Login) en Kubuntu Linux

En el momento que inicie Kubuntu Linux, el sistema le solicitará su nombre de usuario y su contraseña para poder acceder al escritorio. La primera cuenta de usuario se crea durante la instalación de Kubuntu Linux. Debido a que Kubuntu Linux es un sistema multiusuario, este puede ser utilizado por diferentes usuarios. Adicionalmente, usted podrá seleccionar un escritorio diferente o apagar/reiniciar la pc utilizando la opción Session Type y Menu

Por defecto, no es recomendable iniciar una sesión como root (superusuario). Esto es por razones de seguridad. La primera cuenta creada durante la instalación sirve también como la de administrador del ordenador. En ocasiones se le preguntará por la contraseña del superusuario cuando trate de configurar Kubuntu Linux. Usted podra crear cuentas de usuarios de Kubuntu Linux con la aplicación KUser

Datos Enteros en Php

Un integer es un número del conjunto Z = {..., -2, -1, 0, 1, 2, ...}.

Sintaxis

Los enteros pueden ser especificados en notación decimal (base-10), hexadecimal (base-16) u octal (base-8), opcionalmente precedidos por un signo (- o +).
Si usa la notación octal, debe preceder el número con un 0 (cero), para usar la notación hexadecimal, preceda el número con 0x.

Ejemplo: Literales tipo entero

<?php
$a = 1234; // número decimal
$a = -123; // un número negativo
$a = 0123; // número octal (equivalente al 83 decimal)
$a = 0x1A; // número hexadecimal (equivalente al 26 decimal)
?>

Formalmente, la posible estructura para literales enteros es:

decimal     : [1-9][0-9]*
| 0

hexadecimal : 0[xX][0-9a-fA-F]+

octal : 0[0-7]+

integer : [+-]?decimal
| [+-]?hexadecimal
| [+-]?octal


El tamaño de un entero es dependiente de la plataforma, aunque un valor máximo de aproximadamente dos billones es el valor usual (lo que es un valor de 32 bits con signo). PHP no soporta enteros sin signo. El tamaño de un entero puede determinarse a partir de PHP_INT_SIZE, o el valor máximo de PHP_INT_MAX a partir de PHP 4.4.0 y PHP 5.0.5.

aviso : Si un dígito inválido es pasado a un entero octal (p.ej. 8 o 9), el resto del número es ignorado.

Ejemplo: Curiosidad de valores octales

<?php
var_dump(01090); // 010 octal = 8 decimal
?>

Desbordamiento de enteros

Si especifica un número más allá de los límites del tipo integer, será interpretado en su lugar como un float. Asimismo, si realiza una operación que resulta en un número más allá de los límites del tipo integer, un float es retornado en su lugar.

<?php
$numero_grande = 2147483647;
var_dump($numero_grande);
// salida: int(2147483647)

$numero_grande = 2147483648;
var_dump($numero_grande);
// salida: float(2147483648)

// también es cierto para enteros hexadecimales especificados entre 2^31 y 2^32-1:
var_dump( 0xffffffff );
// salida: float(4294967295)

// esto no ocurre con los enteros indicados como hexadecimales más allá de 2^32-1:
var_dump( 0x100000000 );
// salida: int(2147483647)

$millon = 1000000;
$numero_grande = 50000 * $millon;
var_dump($numero_grande);
// salida: float(50000000000)
?>

No hay un operador de división de enteros en PHP. 1/2 produce el float 0.5. Puede moldear el valor a un entero para asegurarse de redondearlo hacia abajo, o puede usar la función round().

<?php
var_dump(25/7); // float(3.5714285714286)
var_dump((int) (25/7)); // int(3)
var_dump(round(25/7)); // float(4)
?>

Conversión a entero

Para convertir explícitamente un valor a integer, use alguno de los moldeamientos (int) o (integer). Sin embargo, en la mayoría de casos no necesita usar el moldeamiento, ya que un valor será convertido automáticamente si un operador, función o estructura de control requiere un argumento tipo integer. También puede convertir un valor a entero con la función intval().

Desde booleans

FALSE producirá 0 (cero), y TRUE producirá 1 (uno).

Desde números de punto flotante

Cuando se realizan conversiones desde un flotante a un entero, el número será redondeado hacia cero.
Si el flotante se encuentra más allá de los límites del entero (usualmente +/- 2.15e+9 = 2^31), el resultado es indefinido, ya que el flotante no tiene suficiente precisión para dar un resultado entero exacto. No se producirá una advertencia, ¡ni siquiera una noticia en este caso!
aviso : Nunca moldee una fracción desconocida a integer, ya que esto en ocasiones produce resultados inesperados.

<?php
echo (int) ( (0.1+0.7) * 10 ); // imprime 7!
?>

Desde otros tipos

El comportamiento de convertir desde entero no es definido para otros tipos. Actualmente, el comportamiento es el mismo que si el valor fuera antes convertido a booleano. Sin embargo, no confíe en este comportamiente, ya que puede ser modificado sin aviso.

Datos Booleanos en Php

Este es el tipo más simple. Un boolean expresa un valor de verdad. Puede ser TRUE or FALSE.
nota: El tipo booleano fue introducido en PHP 4.

Sintaxis:
Para especificar un literal booleano, use alguna de las palabras clave TRUE o FALSE. Ambas son insensibles a mayúsculas y minúsculas.

<?php
$foo = True; // asignar el valor TRUE a $foo
?>

Usualmente se usa algún tipo de operador que deuelve un valor boolean, y luego éste es pasado a una estructura de control.

<?php
// == es un operador que prueba por
// igualdad y devuelve un booleano
if ($accion == "mostrar_version") {
echo "La versión es 1.23";
}

// esto no es necesario...
if ($mostrar_separadores == TRUE) {
echo "<hr>\n";
}

// ...porque se puede escribir simplemente
if ($mostrar_separadores) {
echo "<hr>\n";
}
?>

Conversión a booleano

Para convertir explícitamente un valor a boolean, use el moldeamiento (bool) o (boolean). Sin embargo, en la mayoría de casos no es necesario usar el moldeamiento, ya que un valor será convertido automáticamente si un operador, función o estructura de control requiere un argumento tipo boolean.

Cuando se realizan conversiones a boolean, los siguientes valores son considerados FALSE:

• el boolean FALSE mismo
• el integer 0 (cero)
• el float 0.0 (cero)
• el valor string vacío, y el string "0"
• un array con cero elementos
• un object con cero variables miembro (sólo en PHP 4)
• el tipo especial NULL (incluyendo variables no definidas)
• objetos SimpleXML creados desde etiquetas vacías

Cualquier otro valor es considerado TRUE (incluyendo cualquier resource).

aviso : ¡-1 es considerado TRUE, como cualquier otro número diferente a cero (ya sea negativo o positivo)!

<?php
var_dump((bool) ""); // bool(false)
var_dump((bool) 1); // bool(true)
var_dump((bool) -2); // bool(true)
var_dump((bool) "foo"); // bool(true)
var_dump((bool) 2.3e5); // bool(true)
var_dump((bool) array(12)); // bool(true)
var_dump((bool) array()); // bool(false)
var_dump((bool) "false"); // bool(true)
?>

Tipos de datos en Php

PHP soporta ocho tipos primitivos.

Cuatro tipos escalares:
• boolean
• integer
• float (número de punto-flotante, también conocido como 'double')
• string

Dos tipos compuestos:
• array
• object

Y finalmente dos tipos especiales:
• resource
• NULL

También algunos pseudo-tipos por razones de legibilidad:
• mixed
• number
• callback

Y la pseudo-variable $....

También puede encontrar algunas referencias al tipo "double". Considere al tipo double como el mismo que float, los dos nombres existen solo por razones históricas.

El tipo de una variable usualmente no es declarado por el programador; en cambio, es decidido en tiempo de compilación por PHP dependiendo del contexto en el que es usado la variable.
nota: Si desea chequear el tipo y valor de una cierta expresión, use var_dump().
Si tan solo desea una representación legible para humanos del tipo para propósitos de depuración, use gettype(). Para chequear por un cierto tipo, no use gettype(); en su lugar utilice las funciones is_tipo. Algunos ejemplos:

<?php
$un_bool = TRUE; // un valor booleano
$un_str = "foo"; // una cadena
$un_str2 = 'foo'; // una cadena
$un_int = 12; // un entero

echo gettype($un_bool); // imprime: boolean
echo gettype($un_str); // imprime: string

// Si este valor es un entero, incrementarlo en cuatro
if (is_int($un_int)) {
$un_int += 4;
}

// Si $bool es una cadena, imprimirla
// (no imprime nada)
if (is_string($un_bool)) {
echo "Cadena: $un_bool";
}
?>

Si quisiera forzar la conversión de una variable a cierto tipo, puede moldear la variable, o usar la función settype() sobre ella.
Note que una variable puede ser evaluada con valores diferentes en ciertas situaciones, dependiendo del tipo que posee en cada momento.

Seguridad de el servidor web Apache

Autentificación y autorización de usuarios con el servidor web Apache.

Cuando un servidor web apache recibe una petición de una página web, antes de devolver el resultado, lleva a cabo varias acciones para verificar que la petición esta autorizada.

Las distintas acciones que lleva a cabo para verificar la validez de la aplicación, se pueden agrupar en tres tipos: Autentificación, Autorización y Control de Acceso.

La autentificación de usuarios es el proceso por el cual se verifica la identidad de una persona. De una forma simple, este proceso se puede llevar a cabo mediante un nombre de usuario y una contraseña, pero se pueden llegar a utilizar otros métodos para validar la identidad de una persona, como mediante el uso de certificados, tarjetas etc…

En el servidor web apache la autentificación puede estar gestionada por distintos módulos, dependiendo de la forma de implementación. Si decide llevarla a cabo gestionando ficheros con listas de usuarios y contraseñas (encriptadas), deberá utilizar el módulo mod_auth. Sin embargo, si decide llevarla a cabo mediante base de datos, deberá utilizar los módulos mod_auth_dbm.

La autorización es el proceso por el cual se verifica que un usuario con una identidad conocida, tiene acceso al recurso solicitado. Para llevar a cabo esta acción, se suelen utilizar listas de permisos en las cuales se enumeran cada una de las acciones que puede realizar un usuario, o las que no puede hacer. Normalmente, para simplificar la gestión de estos ficheros, los usuarios se suelen unir en grupos proporcionando los permisos al grupo.

En el servidor web apache la autorización a recursos es gestionada o bien mediante la directiva <directory> en el fichero principal de configuración del servidor web Apache, o bien mediante la configuración de la carpeta a través de ficheros .htaccess.

El control de acceso es el proceso por el cual se verifica que la máquina desde la que se ha hecho la petición, tiene acceso al recurso. Los controles de acceso se utilizan para limitar y controlar las máquinas que tienen acceso a un recurso independientemente del usuario que accede, ya que estos controles se llevan a cabo antes de que se realice el proceso de autentificación.

En el servidor web apache, el control de acceso se puede llevar a cabo mediante las directivas <directory><files>y <location>, o a través del fichero de configuración .htaccess para controlar una carpeta especifica.

En todo caso y para poder llevar a cabo la configuración de las tres características aquí enumeradas, autentificación, autorización y control de acceso, es necesario tener la directiva AllowOverride con el valor AuthConfig, para así permitir el uso de las distintas directivas de autentificación.

Autentificación y autorización de usuarios en el servidor web Apache. Mod_auth

Para configurar el servidor apache para que sea capaz de autentificar a los usuarios y verificar la autorización del mismo al recurso solicitado, es necesario realizar las siguientes acciones:

1. Crear un fichero con usuarios

2. Crear un fichero con grupos (si es necesario)

3. Definir las directivas en el fichero de configuración o mediante un fichero .htaccess

En los ficheros de usuarios del servidor web apache, en cada línea se especifica un usuario, escribiendo el nombre de usuario separado de dos puntos, seguido de la contraseña encriptada con MD5.

En los ficheros de grupos de apache, en cada línea se especifica un grupo escribiendo el nombre del grupo seguido de dos puntos, y a continuación separado por espacios, los nombres de los usuarios.

Es recomendable que tanto los ficheros de usuarios como los de grupos, se encuentren almacenados fuera de los directorios publicados, para que de esta forma nadie pueda descargarlos. Asimismo, solo el usuario root debería estar autorizado a escribir en él, mientras que solo el usuario que ejecuta el servicio web, debería estar autorizado para leerlo.

El fichero de grupos se puede crear manualmente, pero el fichero con los usuarios es recomendable crearlo mediante la utilidad htpasswd, que se encuentra en la carpeta con los binarios de apache.

Para crear un fichero de usuario se utilizará la siguiente sintaxis:

htpasswd -c ruta/passwords usuario

El flag -c se utiliza para crear un fichero nuevo, por lo que sólo se deberá poner la primera vez que se crea el fichero, sino lo borrará.

Los módulos que intervienen en la autentificación y autorización son los de core y mod_auth.

Las directivas de mod_auth necesarias para configurar la autenticación y autorización son las siguientes:

  • AuthUserFile: siver para especificar la ruta donde se almacenará el fichero de usuarios.
  • AuthGroupFile: sirve para especificar la ruta donde se almacenará el fichero de grupos.

Las directivas de core necesarias para complementar la configuración del módulo son:

  • AuthType: selecciona el tipo de autentificación de usuarios que se utilizará para autentificar a un usuario. Puede variar por directorio. Los valores posibles son Basic y Digest. Con Basic, la transferencia de las claves se hará sin cifrar, y con digest se harán cifradas.
  • AuthName: especifica un nombre del dominio para el cual se solicita el acceso, este nombre figurará en la pantalla donde se pide la clave, y a su vez servirá para que el cliente identifique la contraseña que debe utilizar al enviar una petición a un área determinada.
  • Require: selecciona los usuarios que pueden acceder a un área determinada, los usuarios se pueden determinar a través de nombres o grupos.

Autentificación y autorización de usuarios con la base de datos Mysql y el servidor web Apache - mod_auth_mysql.

El módulo mod_auth tiene como característica el que almacena los nombres de usuario, las contraseñas y los grupos en ficheros de texto que deben ser escritos y gestionados por el administrador del sistema. Esta solución es obviamente poco escalable, ya que en cuanto el número de usuarios y de grupos es elevado, el gestionarlos y controlarlos puede ser un problema.

Por este motivo existe el mod_auth_mysql, este módulo permite gestionar la autentificación y autorización, almacenando los usuarios y los grupos en tablas de Mysql, de forma que incluso se pueden gestionar mediante un panel de control escrito en php.

Para configurar el módulo en el sistema operativo Linux, será necesario extraerlo y ejecutar:

./configure --with-mysql=/usr/local/mysql --with-apache=/usr/local/apache

sustituyendo el lugar donde se encuentra la instalación de la base de datos mysql y del servidor web apache.

Para utilizar el módulo es necesario disponer de al menos una tabla donde se almacenen los usuarios y otra donde se almacenen los grupos. Para ello se puede crear una tabla usuarios con los campos, nombre y password, y otra tabla llamada grupos con los campos grupo, usuario, almacenando una entrada por cada usuario que tenga un grupo.

La configuración es la siguiente:

En primer lugar será necesario establecer el servidor, el usuario y la contraseña de la conexión con la base de datos mysql, esto se hará escribiendo la siguiente línea en el fichero httpd.conf, y reemplazando los valores por los correctos:

Auth_MySQL_Info

Para configurar el módulo será necesario establecer los valores de las siguientes directivas del módulo:

Auth_MySQL_DB: nombre de la base de datos mysql

Auth_MySQL_Password_Table: nombre de la base de datos que contiene los nombres de usuario y las contraseñas.

Auth_MySQL_Username_Field: nombre del campo de la tabla que contiene al usuario.

Auth_MySQL_Password_Field: nombre del campo de la tabla que contiene la contraseña del usuario.

Auth_MySQL_Group_Table: nombre de la tabla que contiene los usuarios y los grupos a los que pertenecen.

Auth_MySQL_Group_Field: nombre del campo de la tabla que contiene el nombre del grupo

Auth_MySQL_Empty_Passwords on/off para determinar si se aceptan usuarios con contraseñas vacias.

Auth_MySQL_Encryption_Types para especificar el tipo de encriptación que se utilizará para almacenar la clave del usuario dentro de la base de datos mysql.

Auth_MySQL_Non_Persistent on/off para especificar si se desean utilizar conexiones persistentes.

Además será necesario establecer las siguiente directivas de core para su correcto funcionamiento:

AuthName: con el nombre del dominio

AuthType: establecido a Basic

Una vez puesto en marcha, el funcionamiento es análogo al módulo mod_auth.

Proteger una carpeta mediante usuarios en el servidor web Apache

1º. Crear un fichero de claves fuera de la parte pública:

-htpasswd -c /ruta/passwords Fabian

Al hacerlo, pedirá que se introduzca la clave, y esta será codificada, escribiendo el fichero.

2º Crear un nuevo fichero, en la misma ubicación que "ruta", que se llamará "groups" en la que se almacenarán los grupos, por ahora uno, para ello escribir la siguiente línea y guardar el fichero:

usuariosAutenticados: Fabian

De esta forma, debería tener un fichero que se llame passwords, y que contenga una línea con los datos del usuario Fabian, y un fichero, con nombre groups, que contiene una línea definiendo un grupo llamado usuariosAutenticados, del que sólo el usuario Fabian forma parte.

3º Crear un fichero con el nombre .htaccess en la carpeta que se quiere proteger, y escribir las siguientes líneas y guardar el fichero:

AuthType Basic

AuthName "ServidorPruebasFabian"

AuthUserFile /ruta/passwords

AuthGroupFile /ruta/groups

Require group usuariosAutenticados

La explicación del contenido del fichero es la siguiente:

  • Con "AuthType Basic" se estará protegiendo la carpeta con autentificación básica, es decir que la clave que el usuario introduzca, se transmitirá sin cifrar por la web.
  • Con "AuthName "ServidorPruebasFabian" se asociará esta carpeta con el dominio "ServidorPruebasFabian", nombre con el que lo identificará el cliente.
  • Con "AuthUserFile /ruta/passwords" y "AuthGroupFile /ruta/groups" Se definirá la ubicación tanto de los ficheros de usuarios como los ficheros de grupos y se almacenarán en la carpeta /ruta, con nombres passwords y groups respectivamente.
  • Con "Require group usuariosAutenticados" se autorizará el acceso al contenido de esta carpeta a todos los usuarios que forman parte del grupo de "usuariosAutenticados", por lo que en la práctica se autorizará el acceso al contenido al usuario Fabian.

En vez de realizar las autorizaciones a grupos completos, se puede autorizar a un usuario determinado cambiando la última línea por "Require user Fabian", de esta forma sólo se autorizará al usuario Fabian.

Se puede permitir el acceso a todos los usuarios identificados mediante la introducción de la siguiente directiva "Require valid-user". El hecho de que esta directiva este incluida en el fichero, hace que las demás no tengan efecto.

Parámetros globales en el servidor web Apache

Esta es una enumeración y descripción de los parámetros de la sección parámetros globales del fichero Httpd.conf.

Todos los parámetros que se establecen dentro de esta sección son globales para el funcionamiento del servidor web Apache, por lo que no admiten estar dentro de ninguna directiva.

ServerRoot: especifica la ubicación del directorio raíz donde se encuentra instalado el servidor web Apache, a partir del cual se crea el árbol de directorios comentado anteriormente. Esta directiva no debería cambiar a no ser que se mueva la carpeta de instalación de apache a otro directorio. Se encuentra disponible a través del módulo Core.

PidFile: ubicación del fichero que contendrá el número de identificación del proceso cuando se encienda el servidor web apache. Se encuentra disponible a través de varios módulos beos, leader, mpm_winnt, mpmt_os2, perchild, prefork, threadpool ó worker

TimeOut: el valor se utiliza para configurar medido en segundos, tres parámetros:

1. El tiempo tal que puede tardar una petición en ser recibida entera

2. La cantidad de tiempo que espera entre recepción de paquetes TCP

3. La cantidad de tiempo entre ACK's en transmisiones TCP

Pasado este tiempo se produce un mensaje de error en el que se indica que se ha consumido el tiempo máximo de espera. Establecer un valor muy pequeño puede dar lugar a que los usuarios reciban este mensaje de error, y establecer un valor muy pequeño dará lugar a una sobrecarga de la máquina. Se encuentra disponible a través del módulo Core.

KeepAlive: especifica si se utilizarán conexiones persistentes, es decir, que todas las peticiones de un usuario se atenderán con la misma conexión. Se encuentra disponible a través del módulo Core.

MaxKeepAliveRequests: número máximo de conexiones persistentes. (número máximo de usuarios concurrentes si KeepAlive esta en ON). Para establecer este parámetro, hay que tener en cuenta el ancho de banda de salida de nuestro servidor, por el cual deberá ser enviada toda la información, si se establece un valor muy grande respecto al ancho de banda, el tiempo de respuesta se verá incrementado para cada usuario. Se encuentra disponible a través del módulo Core.

KeepAliveTimeout: tiempo que espera en segundos entre peticiones de un usuario, antes de considerar que este ha terminado, y cerrar su conexión.

Si el valor es muy pequeño provocará que algunos usuarios no puedan visualizar la página debido a que el número máximo de conexiones persistentes se ha superado, mientras que si se establece un valor muy grande se estarán utilizando muchos recursos de la máquina. Se encuentra disponible a través del módulo Core.

Listen: esta directiva permite especificar que puerto se utilizará para antender las peticiones. Por defecto se utiliza el puerto 80 (www), también permite especificar que direcciones IP atenderá, por defecto todas. Para atender dos direcciones IP distintas, con distintos puerto, se utilizaría:

Listen 192.168.255.5:80

Listen 192.168.255.8:8080

Se encuentra disponible a través de varios módulos beos, leader, mpm_winnt, mpmt_os2, perchild, prefork, threadpool ó worker

LoadModule: Directiva que sirve para cargar módulos del servidor web apache que incluyen distintas funcionalidades. La sintaxis es:

LoadModule nombreModulo ubicacionFichero

Se encuentra disponible a través del módulo mod_so.

Crear directorios virtuales en el servidor web Apache

El servidor web Apache nos permite crear directorios virtuales. Esto permite, por ejemplo, que podamos configurar varios sitios en el mismo servidor web, sin necesidad de realizar otra instalación de Apache en otra Pc.

Un directorio virtual es un directorio que se encuentra en un directorio distinto del que se mapea en la URL.

Esta directiva sólo se encuentra dentro del fichero de configuración httpd.conf del servidor web apache, y se trata aparte debido a su importancia.

Alias

Permite la definición de directorios virtuales en el servidor web apache, un directorio virtual es un directorio que se encuentra en un directorio distinto del que se mapea en la URL. El directorio virtual no se tiene porqué encontrar dentro de árbol de directorios que se crea a partir de DocumentRoot, sino que se puede encontrar en cualquier otra ubicación, incluso se podría encontrar en otro servidor distinto.

Por ejemplo, cuando se escribe www.misitio.com/manual/php la carpeta php no se tiene que encontrar necesariamente dentro de la carpeta manual, que a su vez esta dentro de la carpeta raíz misitio, sino que puede estar en una ubicación distinta, y fuera del árbol de subdirectorios de la directiva DocumentRoot

Sintaxis:

Alias nombreFicticio ubicacionReal

Ejemplo:

Alias /manual/php "c:\php"

- el directorio php no se encuentra dentro del directorio manual dentro de la carpeta documentRoot, sino en la carpeta c:\php.

Por defecto vienen creados dos redirecciones con Alias.

- Icons: para establecer la carpeta donde se encuentran los iconos que utilizará el Apache para mostrar el contenido de los directorios, y

- Manual: que apunta a la carpeta donde está instalado el manual del servidor web Apache en caso de que se hubiera elegido la opción durante la instalación.

AliasMatch

La utilidad de esta directiva es idéntica a la de la directiva Alias, la única diferencia es que mientras Alias utiliza expresiones estándar regulares para especificar la URL que se va mapear.

Sintaxis:

AliasMatch Expresión regular ubicación

Limitar el tamaño maximo de peticiones del servidor web Apache

El servidor web Apache tiene varias directivas que permiten que se limite el tamaño de una petición, esto puede ser muy útil.

Una buena manera de comenzar es con la directiva LimitRequestBody. Esta directiva esta fijada a ilimitado por defecto. Si estás permitiendo uploads de archivos que no sean mayores a 1MB, podrías fijar este ajuste a algo parecido a esto:

LimitRequestBody 1048576

Si no estás permitiendo uploads de archivos puedes fijarlo incluso a un tamaño más pequeño.

Algunos otras directivas a mirar son LimitRequestFields, LimitRequestFieldSize y LimitRequestLine.

Disminuir el valor máximo de tiempo de espera del servidor web apache

Disminuir el valor máximo de tiempo de espera del servidor web apache?
Por el defecto el tiempo de espera es de 300 segundos. Puedes disminuirlo por seguridad para prevenir ataques de esta manera:

Timeout 45

Impedir que el servidor web Apache siga enlaces simbólicos

Para impedir que el servidor web Apache siga enlaces simbolicos, se configura con las opciones de directiva dentro de la etiqueta directorio tiene dos posibles valores none o FollowSymLinks.

Options -FollowSymLinks

Desactivar todas las opciones

Si deseas desactivar el uso de todas las opciones simplemente:

Options None

Si solamente deseas desactivar algunas en concreto, separalas con un espacio en las opciones de directiva:

Options -ExecCGI -FollowSymLinks -Indexes

Desactivar la ayuda para los archivos .htaccess

Esto esta ya hecho pero con la directiva AllowOverride. Cámbialo a none.

AllowOverride None

Otra opción interesante sería bloquear la descarga de todos los archivos que comienzen con .ht por ejemplo, se haría de la siguiente manera:

AccessFileName .httpdoverride

Order allow,deny

Deny from all

Satisfy All

Desactivar las opciones para explorar directorios del servidor web Apache

Esto lo puedes hacer con las opciones de directiva dentro de la etiqueta directorio tiene dos posibles valores none o indexes.

Options -Indexes

Desactiva los includes del lado servidor web apache

Esto también se hace con las opciones de directiva dentro de la etiqueta directorio tiene dos posibles valores none o include.

Options -Includes

Desactiva la ejecución de CGI en el servidor web apache

Si no necesitas la ejecución de CGI por algún motivo en concreto desacrivalos se hace con las opciones de directiva dentro de la etiqueta directorio tiene dos posibles valores none o ExecCGI.

Options -ExecCGI

Deshabilitar módulos innecesarios del servidor web Apache

El servidor web Apache viene por defecto instalado con un serie de módulos.Debes echarle un vistazo a la documentación del servidor web Apache y ver para que sirve cada uno de ellos, y de esta manera te darás cuenta de que hay algunos que no son útiles en tu servidor.

Busca en httpd.conf las lineas que contengan LoadModule. Para deshabilitar el módulo debes agregar un # al principio de la línea, para que de esta forma pase a ser un comentario. Para buscar los módulos prueba con:

grep LoadModule httpd.conf

Aquí están algunos módulos que se instalan por defecto pero a menudo no son necesarios: mod_imap, mod_include, mod_info, mod_userdir, mod_status, mod_cgi, mod_autoindex.

mod_security en el servidor web Apache

El mod_security es un módulo estupendo del servidor web Apache escrito por Ivan Ristic, el autor de Apache Security.

Esta es una lista de cosas que puedes hacer con mod_security:

* Filtración simple

* Filtración basada en expresiónes regular

* Validación de codificación de la URL

* Validación de codificación Unicode

* Auditing

* Prevención del ataque NULL Byte

* Límitar la memoria de subida

* Enmascarar la identidad del servidor

Ocultar la versión y otra información del servidor web Apache

Por defecto muchas instalaciones del servidor web Apache muestran el número de versión que está funcionando, el sistema operativo y un informe de módulos de Apache están instalados en el servidor. Los usuario maliciosos pueden utilizar esta información para atacar tu servidor.

Hay dos directivas que necesitas agregar, o corregir en tu archivo de httpd.conf:

ServerSignature Off

El ServerSignature aparece en la parte inferior de las páginas generadas por el servidor web apache tales como los famosos errores 404.

ServerTokens Prod

La directiva ServerTokens se utiliza para determinarse lo que pondrá el servidor web Apache en la cabecera de la respuesta HTTP del servidor.

Restringir acceso por IP al servidor web Apache

Si tienes un recurso al que deba solamente tener acceso alguna red, o IP en concreto puedes configurarlo en el servidor Apache. Por ejemplo si deseas restringir el acceso a tu Intranet para permitir solamente la red 176.16:

Order Deny,Allow

Deny from all

Allow from 176.16.0.0/16


o por IP:


Order Deny,Allow

Deny from all

Allow from 127.0.0.1

Descarga automática de webs completas en linux

Para descargar una web completa con todas las páginas a las que apunta y todos sus elementos de forma recursiva, puede usar la aplicación wget tecleando el siguiente comando:

wget -r http://www.lawebquesea.com

O podemos crear un archivo de texto con un listado de webs para descargarlas todas del tirón tecleando:

wget -r -i listadewebs.txt

Eso sí, si no tiene una conexión muy buena tendrá que esperar un rato hasta bajar toda la web.

NOTA: Algunas páginas están expresamente protegidas para que no sean bajadas por este método, por lo que esto no funcionará en todos los casos. Tampoco funciona con páginas creadas con Flash.

Cómo evitar los pings en linux

Si quieren evitar que su equipo responda a las peticiones ping de la Red, pueden usar este truco. Es necesario contar con un kernel 2.1.x o superior. Para lograrlo, en la consola deben ejecutar el siguiente comando: "echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all"'. Con él evitarán que su máquina responda a cualquier ping proveniente de la Red.

Para revertir la opción, en la consola ejecuten el comando

"echo 0 > /proc/sys/ net/ipv4/icmp_echo_ignore_all", y todo volverá a ser como antes.

Eliminar el inicio gráfico en linux - Ubuntu - Kubuntu

Si desean el inicio en modo consola, pero su distribución instala el inicio gráfico de forma predeterminada, pueden cambiarlo modificando el archivo inittab, dentro del directorio /ETC. Hagan una copia de respaldo y editen el archivo inittab. Con la búsqueda encuentren la línea:

id:5:initdefault

Y cámbienla por lo siguiente:

id:3:initdefault:

En el próximo inicio de sesión tendrán el clásico modo texto. Para restaurar el inicio gráfico, hagan exactamente lo contrario.

Navegar con palabras clave en KDE - Kubuntu Linux

Konqueror, el oficial de KDE, nos permite definir palabras nos serviran como atajos para los sitios más visitados, desde [Settings/Configure Konqueror/Enhaned Browsing].

Por ejemplo, al escribir "gg:linux" en barra de Dirección, se abrirá el buscador Google con palabra Linux.

Montaje automático de disquetes VFAT en linux - Ubuntu - Kubuntu

Abran una consola (la de su preferencia) y ejecuten el comando

mcedit Desktop/floppy.kdelnk

que abrirá un editor de texto con el archivo de acceso al disquete del Escritorio. En éste debemos modificar el valor contenido dentro de la línea FStype=Default por FSType=v-fat.

Reiniciar modo grafico en linux - Ubuntu - Kubuntu

Cuando experimentamos en Linux, precisamente en el entorno gráfico, a veces sucede que todo se cuelga. Para no ir directamente al botón de reset, pueden probar la combinación de teclas

<CTRL+ ALT+BACKSPACE>

que matará todos los procesos que se encuentren en ejecución y pasará a modo texto o al login gráfico si lo tienen activado.

Eliminar escritorios virtuales en linux - Ubuntu - Kubuntu

Puede parecer una idea rara, pero eliminar escritorios virtuales que no utilicemos liberará recursos. Editen el archivo /etc/inittab y busquen las líneas que indican el inicio de una terminal "getty", por ejemplo: "2:123:respawn:/sbin/míngetty tty2". Eliminen cada una de esas líneas por escritorio que quieran quitar; el número posterior a tty indica el número de terminal (a los cuales accedemos presionando <ALT+Fx>). Un número de tres terminales es suficiente para operar el sistema. Graben el archivo y reinicien. Ya no tendrán tantos terminales, y habrán ganado unos megabytes de memoria.

Recuperar la contraseña de root con LILO

Pueden pasarte un parámetro 1 cuando se ejecute LILO, de la siguiente forma: "lilo 1". Así entrarán como root y podrán ejecutar el comando passwd o editar directamente el archivo /etc/passwd. También sirve arrancar con linux single y añadirte el user root o el que sea manualmente :)


Buscar archivos en Linux

En los directorios del sistema operativo Linux, puede resultar complicado buscar un archivo determinado.

Como buscar archivos en Linux


Para ello pueden utilizar el comando find, por ejemplo:
find /-name "nombre"
donde la "/" es el directorio de inicio de la búsqueda (en este caso buscará en todo el sistema de archivos de Linux, así como en cualquier unidad montada) y "nombre" es la cadena a buscar (reemplácenlo por el nombre del archivo que buscan). Como todo comando en Linux, tiene un montón de opciones más que podemos consultar en la ayuda de Ubuntu Linux.
Tambien es muy útil aprender como es la jerarquia de directorios del sistema operativo Linux.


Pantalla de bienvenida en Kubuntu Linux

Es posible crear un mensaje para que todos los usuarios que se logueen al sistema lo vean. Es, en cierta forma, similar al mensaje que aparece cuando se conectan a un servidor de IRC.

El archivo en cuestión se encuentra en /etc/motd (por Message Of The Day); edítenlo a gusto y necesidad con cualquier editor de texto.

Mensaje del día en Kubuntu Linux

El mensaje del día (MOTD) no suele ser muy útil en sistemas hogareños, por lo que este script nos permitirá rotar entre diferentes archivos de arte ASCII cada vez que iniciemos el sistema. Creen e[ directorio /etc/splash y pongan todos los archivos ASCII allí. luego, como root, agreguen un trabajo cronometrado (cron) con el siguiente script:

#! /bin/sh

cd /etc/splash/

[ -f splash &&

SPLASH='/bin/cat splash'

[ -z "$SPLASH" ] ||

[ ! -f "$SPLASH" &&

SPLASH='/bin/ls /bin/sed -n ´1p´'

/bín/cp "$SPLASH" ../motd && {

/bin/ls /bin/sed -n

´1h;/^´$SPLASH,$/{${x;p;q;};n;p;}´ >. splash

}


Ejecutar programas al iniciar Kubuntu Linux

Para ejecutar un programa al inicio de KDE sólo tienen que crear un kdelnk hacia él (pueden encontrar templates de kdelnk en la carpeta TEMPLATES del Escritorio) y editar sus propiedades. Lo único que resta hacer es arrastrar este kdelnk a la carpeta AUTOSTART dentro del Escritorio.


Opciones de Ventana en Kubuntu linux

Haciendo doble clic en la barra de Título de un programa, la ventana desaparece, y queda sólo esta barra. Este efecto se llama shadowing y es algo que tambien usan las Mac. Haciendo clic con el botón central del mouse en los botones para maximizar y minimizar las ventanas, se ejecutará la función, pero solamente a lo largo o a lo ancho de la pantalla, sin tomar posesión total del Escritorio.


Atajos del teclado en Linux

KDE brinda varias opciones para cuando se cansen del mouse.

Presionando <CTRL+ ESC> cambiarán a otra aplicación.

Con <ALT+TAB>, rotarán entre todas las aplicaciones activas.

Usando <CTRL+Fx> pueden cambiar de consola virtual.

Presionando <ALT+F4> se cierra la ventana actual, como sucede en Windows.


Cambiar el texto de la pantalla login de oscommerce

Para cambiar las palabras "Forgot your password? click here" en la pantalla login: editar y cambiar el texto en el archivo:

includes/languages/english/login.php


Cambiar el mensaje en las búsquedas de oscommerce

Para cambiar las palabras "There are no products to list in this category." en la barra que aparece cuando haces clic en una categoría, debemos editar y cambiar el mensaje en el archivo:

includes/languages/english/default.php


Cambiar las palabras "click to enlarge" bajo la foto del producto en Oscommerce

Para cambiar las palabras "click to enlarge" bajo la foto del producto en oscommerce, debemos editar y cambiar los siguientes archivos:

includes/languages/english/product_info.php y

includes/languages/english/product_reviews_info.php


Cambiar textos como "Top", "Catalog" en la barra superior de oscommerce

Estos textos los podemos cambiar editando el archive:

catalog/includes/languages/english.php


Cambiar el texto de cheques / órdenes en oscommerce

Editar el archivo:

catalog/includes/languages/english/modules/payment/moneyorder.php

Buscar estas dos líneas de abajo. Editar ambas líneas con tus direcciones y detalles.

define('MODULE_PAYMENT_MONEYORDER_TEXT_DESCRIPTION', 'Make Payable To:<br>' . ' Affairs To Remember<br>' . ' 600 Broadway<br>' . ' Van Buren, AR 72956<br><br>' . ' Your order will not ship until we receive payment.');

define('MODULE_PAYMENT_MONEYORDER_TEXT_EMAIL_FOOTER', 'Make Payable To:' . "\n\n" . 'Your Company, Inc.' . "\n" . '555 Something St.' . "\n" . 'Sometown, ST 00000' . "\n\n" . 'Your order will not ship until we receive payment.');


Cambiar la etiqueta TITLE en oscommerce

Editar el archivo languages/english.php

Buscar y modificar lo siguiente:

// page title

define('TITLE', 'osCommerce');


Separar de instrucciones en PHP

Las separación de instrucciones se hace de la misma manera que en C o Perl - terminando cada declaración con un punto y coma.

La etiqueta de fin de bloque (?>) implica el fin de la declaración, por lo tanto lo siguiente es equivalente:

<?php

echo "This is a test";

?>

<?php echo "This is a test" ?>

Formularios en PHP

Otra de las características de PHP es que gestiona formularios de HTML. El concepto básico que es importante entender es que cualquier elemento de los formularios estará disponible automáticamente en su código PHP. Observemos un ejemplo:

Ejemplo: Un formulario HTML sencillo

<form action="accion.php" method="POST">

Su nombre: <input type="text" name="nombre" />

Su edad: <input type="text" name="edad" />

<input type="submit">

</form>

No hay nada especial en este formularo, es HTML limpio sin ninguna clase de etiquetas desconocidas. Cuando el cliente llena éste formulario y oprime el botón etiquetado "Submit", una página titulada accion.php es llamada. En este archivo encontrará algo así:

Ejemplo: Procesamiento de información de nuestro formulario HTML

Hola <?php echo $_POST["nombre"]; ?>.

Tiene <?php echo $_POST["edad"]; ?> años

Un ejemplo del resultado de este script podría ser:

Hola José.

Tiene 22 años

Es aparentemente obvio lo que hace. No hay mucho más que decir al respecto. Las variables $_POST["nombre"] y $_POST["edad"] son definidas automáticamente por PHP. Hace un momento usamos la variable autoglobal $_SERVER, ahora hemos introducido autoglobal $_POST, que contiene toda la información enviada por el método POST. Fíjese en el atributo method en nuestro formulario; es POST. Si hubiéramos usado GET, entonces nuestra información estaría en la variable autoglobal $_GET. También puede utilizar la autoglobal $_REQUEST si no le importa el origen de la petición. Ésta variable contiene una mezcla de información GET, POST y COOKIE.

Entrar y salir de PHP

Para interpretar un archivo, php símplemente interpreta el texto del archivo hasta que encuentra uno de los carácteres especiales que delimitan el inicio de código PHP. El intérprete ejecuta entonces todo el código que encuentra, hasta que encuentra una etiqueta de fin de código, que le dice al intérprete que siga ignorando el código siguiente. Este mecanismo permite embeber código PHP dentro de HTML: todo lo que está fuera de las etiquetas PHP se deja tal como está, mientras que el resto se interpreta como código.

Hay cuatro conjuntos de etiquetas que pueden ser usadas para denotar bloques de código PHP. De estas cuatro, sólo 2 (<?php. . .?> y <script language="php">. . .</script>) están siempre disponibles; el resto pueden ser configuradas en el fichero de php.ini para ser o no aceptadas por el intérprete. Mientras que el formato corto de etiquetas (short-form tags) y el estilo ASP (ASP-style tags) pueden ser convenientes, no son portables como la versión de formato largo de etiquetas. Además, si se pretende embeber código PHP en XML o XHTML, será obligatorio el uso del formato <?php. . .?> para la compatibilidad con XML.

Las etiquetas soportadas por PHP son:

Ejemplo: Formas de escapar de HTML

1. <?php echo("si quieres servir documentos XHTML o XML, haz como aquí\n"); ?>

2. <? echo ("esta es la más simple, una instrucción de procesado SGML \n"); ?>

<?= expression ?> Esto es una abreviatura de "<? echo expression ?>"

3. <script language="php">

echo ("muchos editores (como FrontPage) no

aceptan instrucciones de procesado");

</script>

4. <% echo ("Opcionalmente, puedes usar las etiquetas ASP"); %>

<%= $variable; # Esto es una abreviatura de "<% echo . . ." %>

El método primero, <?php. . .?>, es el más conveniente, ya que permite el uso de PHP en código XML como XHTML.

El método segundo no siempre está disponible. El formato corto de etiquetas está disponible con la función short_tags() (sólo PHP 3), activando el parámetro del fichero de configuración de PHP short_open_tag, o compilando PHP con la opción --enable-short-tags del comando configure. Aunque esté activa por defecto en php.ini-dist, se desaconseja el uso del formato de etiquetas corto.

El método cuarto sólo está disponible si se han activado las etiquetas ASP en el fichero de configuración: asp_tags.

nota: El soporte de etiquetas ASP se añadió en la versión 3.0.4.

nota: No se debe usar el formato corto de etiquetas cuando se desarrollen aplicaciones o bibliotecas con intención de redistribuirlas, o cuando se desarrolle para servidores que no están bajo nuestro control, porque puede ser que el formato corto de etiquetas no esté soportado en el servidor. Para generar código portable y redistribuíble, asegúrate de no usar el formato corto de etiquetas.

La etiqueta de fin de bloque incluirá tras ella la siguiente línea si hay alguna presente. Además, la etiqueta de fin de bloque lleva implícito el punto y coma; no necesitas por lo tanto añadir el punto y coma final de la última línea del bloque PHP.

PHP permite estructurar bloques como:

Ejemplo: Métodos avanzados de escape

<?php

if ($expression) {

?>

<strong>This is true.</strong>

<?php

} else {

?>

<strong>This is false.</strong>

<?php

}

?>

Este ejemplo realiza lo esperado, ya que cuando PHP encuentra las etiquetas ?> de fin de bloque, empieza a escribir lo que encuentra tal cual hasta que encuentra otra etiqueta de inicio de bloque. El ejemplo anterior es, por supuesto, inventado. Para escribir bloques grandes de texto generamente es más eficiente separalos del código PHP que enviar todo el texto mediante las funciones echo(), print() o similares.

Activar los repositorios universe y multiverse en Ubuntu

Ubuntu oficialmente sólo da soporte o apoya una cierta cantidad de programas disponibles directamente usando los programas Añadir y quitar o Synaptic mediante el sistema de repositorios. No es una cantidad muy grande ni completa pero afortunadamente la comunidad de usuarios hace posible que se puedan instalar decenas de miles de programas.

Para instalar software adicional, debemos activar los dos repositorios más importantes y conocidos extraoficiales:

  • Universe: programas mantenidos por la comunidad
  • Multiverse: programas comerciales o privativos de terceras empresas o fabricantes.

Como activar los repositorios

A partir de la versión 7.04 Feisty Fawn de Ubuntu, los repositorios universe y multiverse vienen activados por defecto, por lo tanto no es necesario seguir estos pasos.

El proceso para activarlo es muy sencillo, hay que ir al menú Sistema -> Administración -> Orígines del Software. Ahora pulsamos en el botón Añadir y en la ventana que se abre vamos seleccionando todos los canales y activando las casillas: Mantenido por la comunidad (universe) y Software no libre (multiverse).

Ahora marcamos la casilla de verificación de todos los canales universe y multiverse. Una vez hecho esto pulsamos en el botón Cerrar.

El sistema nos mostrará un aviso indicando que la lista de paquetes esta obsoleta. Pulsamos Recargar y el sistema procederá a actualizar la nueva lista de paquetes o programas disponibles desde Universe y Multiverse.

Mediante la línea de comandos

Si quieres probar un método alternativo, lo puedes hacer mediante la línea de comandos.

Para evitar posibles problemas si hubiera algún error, es recomendable hacer una copia del archivo /etc/apt/sources.list. Para guardar una copia de seguridad mediante la terminal, ejecutamos el siguiente comando:

$ sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup

Editamos el archivo encargado de administrar los repositorios con cualquier editor de textos, por ejemplo Gedit:

$ sudo gedit /etc/apt/sources.list

Después de hacer esto cambiaremos nuestra sources.list suprimiendo las almohadillas (#) en cada línea donde aparece universe o multiverse. Un ejemplo del sources.list simplificado sería el siguiente:

Para el caso de otras versiones en lugar de ser feisty será el nombre correspondiente, como por ejemplo dapper o edgy.

deb http://archive.ubuntu.com/ubuntu/ feisty main restricted universe multiverse

deb-src http://archive.ubuntu.com/ubuntu/ feisty main restricted universe multiverse

deb http://archive.ubuntu.com/ubuntu/ feisty-updates main restricted universe multiverse

deb-src http://archive.ubuntu.com/ubuntu/ feisty-updates main restricted universe multiverse

deb http://security.ubuntu.com/ubuntu feisty-security main restricted universe multiverse

deb-src http://security.ubuntu.com/ubuntu feisty-security main restricted universe multiverse

De esa manera ya tendremos todos los repositorios activados, ahora y siempre que cambiemos la sources.list (es imprescindible) ejecutaremos el siguiente comando:

$ sudo aptitude update

Esto nos servirá para actualizar la lista de paquetes que tenemos en nuestro repositorio. De esta manera ya tendremos los repositorios del sistema y los universe y multiverse activados.


Procesos en Ubuntu Linux – Comandos basicos

Los procesos que se encuentren en ejecución en un determinado momento serán, en general, de diferente naturaleza. Podemos encontrar:
  • Procesos de sistema, o bien procesos asociados al funcionamiento local de la máquina y del kernel, o bien procesos (denominados daemons) asociados al control de diferentes servicios, ya sean locales, o de red, porque estamos ofreciendo el servicio (actuamos de servidor) o estamos recibiendo el servicio (actuamos de clientes). La mayoría de estos procesos aparecerán asociados al usuario root, aunque no estemos presentes en ese momento como usuarios. Puede haber algunos servicios asociados a otros usuarios de sistema (lp, bin, www, mail, etc.), estos son usuarios “virtuales” que utiliza el sistema para ejecutar ciertos procesos.
  • Procesos del usuario administrador: en caso de actuar como root, nuestros procesos interactivos o aplicaciones lanzadas también aparecerán como procesos asociados al usuario root.
  • Procesos de usuarios del sistema: asociados a la ejecución de sus aplicaciones, ya sea tareas interactivas en modo texto o en modo gráfico.

Como comandos rápidos y más útiles podemos utilizar:

  • ps: el comando estándar, lista los procesos con sus datos de usuario, tiempo, identificador de proceso y línea de comandos usada. Una de las opciones utilizada es ps ef, pero hay muchas opciones disponibles (ver man).
  • top, htop: una versión que nos da una lista actualizada a intervalos.
  • kill: nos permite eliminar procesos del sistema mediante el envío de señales al proceso como, por ejemplo, la de terminación kill -9 PID,donde indicamos el identificador del proceso. Útil para procesos con comportamiento inestable o programas interactivos que han dejado de responder.

Comentarios en el código Php

PHP soporta el estilo de comentarios de 'C', 'C++' y de la interfaz de comandos de Unix. Por ejemplo:

 

<?php

echo "Esto es una prueba"; // Esto es un comentario de una linea al estilo c++

/* Esta es una linea de un comentario multilíneas

Esto es otra linea de un comentario multilinea */

echo "Esto es otra prueba";

echo "Y esto otra prueba mas"; # comentario tipo shell de unix

?>

Ejemplo:

   

<h1>Esto es un <?php # echo "simple";?> ejemplo.</h1>

<p>El encabezado de arriba dice 'Esto es un simple ejemplo'.

Hay que tener cuidado con no anidar comentarios de estilo 'C', algo que puede ocurrir al comentar bloques largos de código.

  

<?php

/*

echo "esto es una prueba"; /* Este comentario puede causar problemas */

*/

?>

Los estilos de comentarios de una linea comentan hasta el final de la linea o del bloque actual de código PHP, lo primero que ocurra. Esto implica que el código HTML tras // ?> será impreso: ?> sale del modo PHP, retornando al modo HTML, el comentario // no le influye.

El script de arranque del servidor mysqld_safe de la base de datos Mysql

mysqld_safe es la manera recomendada de iniciar mysqld un servidor en Unix y NetWare mysqld_safe añade algunas características de seguridad como reiniciar el servidor cuando ocurre un error y guardar la información en tiempo de ejecución en un registro de errores.

Por defecto, mysqld_safe intenta lanzar un ejecutable llamado mysqld-max si existe, o mysqld en otro caso. Deben tenerse en cuenta las implicaciones de este comportamiento:

  • En Linux, el paquete RPM de MySQL-Max se basa en este comportamiento de mysqld_safe. El RPM instala un ejecutable llamado mysqld-max, que causa que mysqld_safe use automáticamente ese ejecutable a partir de ese momento.
  • Si se instala una distribucion MySQL-Max que incluye un servidor llamado mysqld-max, y después se actualiza a una version no-Max de MySQL, mysqld_safe todavía intentará ejecutar el viejo servidor mysqld-max. Si se realiza una actualizacion, se debe eliminar manualmente el viejo servidor mysqld-max para asegurarse de que mysqld_safe ejecuta el nuevo servidor mysqld.

Para reemplazar el comportamiento por defecto y especificar explícitamente qué servidor se quiere ejecutar, se debe especificar la opción --mysqld o la opción --mysqld-version de mysqld_safe.

Muchas de las opciones de mysqld_safe son las mismas que las opciones de mysqld.

Todas las opciones específicas de mysqld_safe en la línea de comandos se pasan a mysqld. Si se desea utilizar alguna opción que es específica de mysqld_safe y que mysqld no soporta, no debe especificarse en la línea de comandos. En vez de eso, debe listarse en el grupo [mysqld_safe] de un archivo de opciones.

mysqld_safe lee todas las opciones de las secciones [mysqld], [server], y [mysqld_safe] de los archivos de opciones. Por compatibilidad con versiones anteriores, también lee las secciones [safe_mysqld], aunque deben renombrarse dichas secciones a [mysqld_safe] en MySQL 5.0.

mysqld_safe soporta las siguientes opciones:

  • --help: Muestra un mensaje de ayuda y finaliza.
  • --basedir=ruta: La ruta al directorio de instalacion de MySQL.
  • --core-file-size=tamaño: El tamaño del archivo de volcado de memoria que mysqld debería ser capaz de crear. El valor de la opción se pasa a ulimit -c.
  • --datadir=ruta: La ruta al directorio de datos.
  • --defaults-extra-file=ruta: El nombre de un archivo de opciones para ser leído además de los habituales.
  • --defaults-file=ruta: El nombre de un archivo de opciones para ser leído en vez de los habituales.
  • --ledir=ruta: La ruta a el directorio que contiene el programa mysqld. Se utiliza esta opción para indicar explícitamente la localización del servidor.
  • --log-error=ruta: Escribe el registro de errores en el archivo dado.
  • --mysqld=nombre_prog: El nombre del programa servidor (en el directorio ledir) que se quiere ejecutar. Esta opción es necesaria si se utiliza la distribución binaria de MySQL pero el directorio de datos está fuera de la distribución binaria.
  • --mysqld-version=sufijo: Esta opción es similar a la opción --mysqld, pero se especifica únicamente el sufijo para el nombre del programa servidor. El nombre base se asume que es mysqld. Por ejemplo, si se usa --mysqld-version=max, mysqld_safe inicia el programa en el directorio ledir. Si el argumento de --mysqld-version está vacio, mysqld_safe usa mysqld en el directorio ledir.
  • --nice=prioridad: Se utiliza el programa nice para establecer la prioridad del servidor a un valor dado.
  • --no-defaults: No leer ningún archivo de opciones.
  • --open-files-limit=número: El número de ficheros que mysqld debería ser capaz de abrir. El valor de la opción se pasa a ulimit -n. Nótese que se necesita iniciar mysqld_safe como root para que esto funcione correctamente.
  • --pid-file=ruta: La ruta al archivo de ID del proceso.
  • --port=num_puerto: El número de puerto a usar cuando se esperan conexiones TCP/IP.
  • --socket=ruta: El archivo de socket de unix a utilizar para conexiones locales.
  • --timezone=zona: Establece la variable de ambiente de zona horaria TZ a el valor dado.
  • --user={nombre_usuario | id_usuario}: Ejecuta el servidor mysqld como el usuario con nombre nombre_usuario o el ID numérico de usuario id_usuario. (``Usuario'' en este contexto se refiere a una cuenta de login del sistema, no a un usuario MySQL incluído en las tablas grant.)

El script mysqld_safe está escrito de manera que normalmente puede iniciar un servidor que ha sido instalado tanto desde código fuente o desde una distribución binaria de MySQL, aún cuando típicamente estos tipos de distribuciones instalan el servidor en lugares ligeramente diferentes.

mysqld_safe espera que una de las siguientes condiciones sea cierta:

  • El servidor y las bases de datos pueden ser encontradas en una ruta relativa al directorio desde el que mysqld_safe es invocado. Para distribuciones binarias, mysqld_safe busca bajo su directorio de trabajo los directorios bin y data. En distribuciones de código fuente, busca los directorios libexec y var. Esta condición debe cumplirse si se ejecuta mysqld_safe desde el directorio de instalación de MySQL (por ejemplo, /usr/local/mysql para una distribución binaria).
  • Si el servidor y las bases de datos no pueden encontrarse en una ruta relativa al directorio de trabajo, mysqld_safe intenta localizarlos mediante rutas absolutas. /usr/local/libexec y /usr/local/var son localizaciones típicas. Las localizaciones efectivas se determinan por los valores configurados en la distribución en el momento en que fue creada. Deberían ser correctos si MySQL está instalado en la localización especificada en el momento de la configuración.

Debido a que mysqld_safe trata de encontrar el servidor y las bases de datos de manera relativa a su propio directorio de trabajo, puede instalarse una distribución binaria de MySQL en cualquier lugar, siempre y cuando se ejecute mysqld_safe desde el directorio de instalación de MySQL:

shell> cd directorio_instalacion_mysql

shell> bin/mysqld_safe &

Si mysqld_safe falla, aún cuando ha sido invocado desde el directorio de instalación de MySQL, se pueden especificar las opciones --ledir y --datadir para indicar los directorios en los que el servidor y las bases de datos están dentro del sistema.

Normalmente, no se debería editar el script mysqld_safe. En vez de ello, ha de configurarse mysqld_safe utilizando opciones de línea de comandos u opciones en la sección [mysqld_safe] de un archivo de opciones my.cnf. En casos aislados, podría ser necesario editar mysqld_safe para que inicie el servidor apropiadamente.

En NetWare, mysqld_safe es un NetWare Loadable Module (NLM) que ha sido portado desde el script original de Unix. Hace lo siguiente:

  1. Ejecuta un número de comprobaciones del sistema y de opciones.
  2. Ejecuta comprobaciones sobre tablas MyISAM.
  3. Provee de una presencia en pantalla a el servidor MySQL.
  4. Inicia mysqld, lo supervisa, y lo reinicia si termina con error.
  5. Envía mensajes de error desde mysqld a el archivo host_name.err en el directorio de datos.
  6. Envía la salida por pantalla de mysqld_safe hacia el archivo host_name.safe en el directorio de datos.

El script mysql.server para el arranque del servidor Mysql

Las distribuciones de MySQL en Unix incluyen un script llamado mysql.server. Puede usarse en sistemas tales como Linux y Solaris que usan directorios de ejecución estilo System V para arrancar y parar servicios del sistema. También lo usa el Startup Item de Mac OS X para MySQL.

mysql.server puede encontrarse en el directorio support-files bajo el directorio de instalación de MySQL o en el árbol fuente de MySQL.

Si usa el paquete de Linux RPM para el servidor (MySQL-server-VERSION.rpm), el script mysql.server se instalará en el directorio /etc/init.d con el nombre mysql. No necesita instalarlo manualmente.

mysql.server lee opciones de las secciones [mysql.server] y [mysqld] de los ficheros de opciones.

Los programas scripts y las utilidades del lado del servidor (server-side) en la base de datos Mysql

La siguiente lista describe brevemente MySQL server y sus programas relacionados:

  • mysqld: El demonio SQL (esto es, el servidor MySQL). Para usar programas clientes, este programa debe estar en ejecución, ya que los programas ganan el acceso a la base de datos conectándose al servidor.
  • mysqld-max: Una versión del servidor que incluye características adicionales.
  • mysqld_safe: Un script de arranque del servidor. mysqld_safe intenta inicializar mysqld-max si existe, y mysqld en caso contrario.
  • mysql.server: Un script de arranque del servidor. Este script se usa en sistemas que utilizan directorios de ejecución que contienen scripts que inicializan servicios para niveles de ejecución particular. Invoque mysqld_safe para inicializar el servidor MySQL.
  • mysqld_multi: Un script de arranque del servidor que puede arrancar o parar varios servidores instalados en el sistema.
  • mysql_install_db: Este script crea las tablas de permisos de MySQL con privilegios por defecto. Normalmente se ejecuta sólo una vez, cuando se instala por primera vez MySQL en el sistema.
  • mysql_fix_privilege_tables: Este script se usa tras una actualización, para actualizar las tablas de permisos con cualquier cambio que se hayan hecho en nuevas versiones de MySQL.

Hay otros programas que también se ejecutan en la máquina del servidor:

  • myisamchk: Una utilidad para describir, testear, optimizar y reparar tablas MyISAM.
  • make_binary_distribution: Este programa crea una publicación binaria de un MySQL compilado. Puede enviarse por FTP a /pub/mysql/upload/ a ftp.mysql.com para el uso de otros usuarios de MySQL.
  • mysqlbug: El script para reportar bugs. Puede usarse para enviar un reporte de bug a la lista de correo de MySQL.

Como usar variables de entorno para especificar opciones en la base de datos Mysql

Para especificar una opción empleando una variable de entorno, se establece el valor de la variable usando la sintaxis apropiada del procesador de comandos. Por ejemplo, en Windows o NetWare se establece la variable USER para indicar el nombre de la cuenta MySQL. Para hacerlo, se usa esta sintaxis:

SET USER=your_name

La sintaxis en Unix depende del shell. En el supuesto de que se quisiera especificar el número de puerto TCP/IP empleando la variable MYSQL_TCP_PORT, la sintaxis típica (tal como se hace en sh, bash, zsh, etc.) es la siguiente:

MYSQL_TCP_PORT=3306

export MYSQL_TCP_PORT

El primer comando establece el valor de la variable, y el comando export exporta la variable hacia el entorno del shell de forma que su valor sea accesible a MySQL y otros procesos.

csh y tcsh son un caso similar. Cuando se ejecuta estos shells, se debe usar setenv para que el valor de la variable esté disponible para el entorno:

setenv MYSQL_TCP_PORT 3306

El comando que establece el valor de las variables de entorno puede ejecutarse en el intérprete de comandos para que tenga efecto inmediatamente. Estos valores existen hasta que se cierra la sesión de usuario. Para que los valores tomen efecto cada vez que se inicia sesión, deben ubicarse los comandos en un fichero de inicio que el intérprete de comandos lea en cada arranque. Algunos ficheros de inicio típicos son AUTOEXEC.BAT para Windows, .bash_profile para bash, o .tcshrc para tcsh.

Cambiar el texto de introducción y bienvenida en oscommerce

Editamos el archivo default.php o index.php

catalog/includes/languages/english/default.php (o index.php)

También se puede cambiar los títulos de los encabezados en ese archivo.


Establecer impuestos en Oscommerce

Para establecer los impuestos de una zona en oscommerce, debemos seguir los siguientes pasos:

1. En admin, en Locations/Taxes, hacer clic en "Tax Zones"

2. Hacer clic en el botón "new zone". En el campo de texto Zone Name: introducir "CA".

3. En Descripción introducir "California". Hacer clic en "insert"

4. Después, verás que CA aparece en la lista.

5. Hacer clic en "CA" (o en cualquier nombre que hayas puesto) en la lista y verás el encabezado decir "Geographical Zones / CA"

6. Aquí verás un botón de "new zone" de nuevo. Hacer clic en él

7. Ahora vas a seleccionar la zona geográfica. En País, seleccionamos (siguiendo el ejemplo) Estados Unidos.

8. En región, seleccionamos California. Hacer clic en "update"

9. Ahora en "Locations/Taxes" hacer clic en "Tax Rates"

10. Hacer clic en el botón "new tax rate"

11. Seleccionar "Taxable Goods" en el menú desplegable Tax Class Title

12. En el menú Zone, seleccionar CA (o la zona que hayas creado)

13. En el campo Tax Rate introducimos el porcentaje de impuestos

14. En Descripción, introducimos la descripción, por ejemplo "California Sales Tax"

Listo… ya establecimos los impuestos para una zona.


Agregar imágenes en el encabezado de un bloque de oscommerce

Para agregar una imagen en el encabezado de un bloque en oscommerce, tenemos que abrir el archivo stylesheet.css.

Por ejemplo:

table.infoBoxHeading { background-image: url('http://www.your.com/dir/to/your/image.gif'); background-repeat: no-repeat }

Esto debemos hacer en cada bloque de oscommerce al que queremos agregar una imagen.


Limitar la cantidad de productos en “NEW PRODUCTS” en Oscommerce

Para evitar listar toda la base de datos en “NEW PRODUCTS” necesitamos cambiar tres archivos:

/catalog/products_new.php

/catalog/includes/modules/new_products.php (poner el código y mes(p.products_date_added) = month(now()) en 2 sitios en esta página)

/catalog/includes/boxes/whats_new.php

Usando /boxes/whats_new como ejemplo:

encontrar la línea:

IF(s.status, s.specials_new_products_price, NULL) sobre la línea número 7

Y justo ANTES de esa línea, introducir:

p.products_date_added, (no olvides las ",")

Después, encontrar:

order by p.products_date_added

y justo ANTES del texto, teclear:

and month(p.products_date_added) = month(now())

Ahora solo se muestran productos añadidos en el mes en la página principal y la página what's new.
El bloque "what's new" de la columna de la derecha se mueve al azar por los productos del mes cuando se carga la página.


Cambiar el ancho de los bloques de las columnas en Oscommerce

Hay un atributo BOX_WIDTH en application_top.php que afecta a las columnas derechas e izquierdas en todas las páginas. Por defecto esta configurado en 125 pixels, y debemos cambiarlo al valor deseado.