miércoles, agosto 15, 2007
MAMP
MAMP
martes, octubre 25, 2005
(PHP) Automatic Rotator
Descargar el código fuente
Descargar la últma versión del script y descomprimir el archivo (debe de descomprimirse en un archivo llamado rotator.php).
Subir el Script
Para empezar a usar el Rotaror, sóló baja el script a tu servidor y pónlo en el mismo folder donde están las imágenes que desees rotar.
Nota: Si deseas poner el archivo en otro folder, es necesario modificar la variable $folder del script.
Vincúlalo
Ahora puedes ligar el archivo como normalmente se liga una imágen:
Cada vez que la página se vuelva a cargar, se cambiará la imagen.
martes, septiembre 20, 2005
(PHP) Convertir páginas PHP a extensión HTML
PAGINAS PHP Conceptos básicos
Por defecto, las extensiones de páginas en PHP es .php, que le indica al servidor que hay código PHP. El código HTML es ejecutado en el browser del cliente y las sentencias PHP son ejecutadas en el servidor. Una página con extensión .PHP es tratada de igual manera por los buscadores por ejemplo google, yahoo, msn, gigablast indexan las páginas php sin problemas...
CODIGO PHP EN PAGINAS CON EXTENSION .HTML
Si utilizas código PHP en una página HTML, el código PHP va a ser ignorado, es decir, no va a funcionar, ya que el mismo no es entendido por el browser.
SOLUCION ES INDICAR AL SERVER QUE EJECUTE LAS PAGINAS .HTML COMO .PHP
Esta solución permite ejecutar el código PHP en las páginas .html. Si la página no contiene código PHP no hay problema ya que el server no realizará ninguna ejecución de código. De heco esta página tiene código PHP en la sección de ayuda, y su extensión es HTML
SENTENCIA EN ARCHIVO .HTACCESS
Para lograrlo, se requiere la siguiente entrada en el archivo .htaccess el cual lo encuentras en el directorio root
RemoveHandler .html .htmAddType x-httpd-php .php .htm .html
lunes, septiembre 19, 2005
(PHP) Gráficas por medio de un flash
Para Gráficos XML:
Para Diapositivas XML:
Para Diapositivas PHP:
Gauges:
Y una que otro jueguito ;):
(PHP) JPGraphs
domingo, septiembre 04, 2005
(PHP) PHP y Ms SQL 2000
The goal of this article is to help you integrate PHP and Microsoft SQL Server. I will look primarily at two PHP functions:
- Unified ODBC functions
- MSSQL functions
The article includes a list of resources in case you want to deploy a solution hosted on the Linux platform. I've also included a section at the end to help you troubleshoot common integration problems.
The code in this article was tested using PHP version 4.3.4 running on the Apache Win32 v.2.0.48 and Microsoft SQL Server 2000 Developer Edition. The article skims over things such as SQL Server administration and security. The MSDN library is an essential resource if you need more information.
Setting up your Data Source Name (DSN)
If you want to connect to SQL Server using ODBC, you must first set up a DSN. A System DSN allows you to connect to a database server using an alias rather than writing out a long connection string. To launch the DSN wizard (Figure A), simply go to Start > Settings > Control Panel > Administrative Tools > Data Sources (ODBC).
| Figure A |
| DSN wizard |
First, select SQL Server as the driver to connect to your database (Figure B). Then select a name for the DSN (I chose "sqlserver" but you can pick any name you want). Finally, select what database you want to connect to.
| Figure B |
| Selecting a data source name |
Next, are your security settings: In the examples in this article, I used SQL Server authentication using the default user account (username:sa, password:
| Figure C |
| Security settings |
Finally, you have the option to pick a default database to connect to. The examples in this article reference the Northwind database, as in Figure D, but you can easily customize the code to work with your own database.
| Figure D |
| Selecting a default database |
Unified ODBC functions
Open Database Connectivity (ODBC) is a powerful API developed by Microsoft to allow developers to interface with any compliant database (which includes Microsoft SQL Server, Oracle, DB/2 and many others). ODBC is automatically enabled in most current PHP distributions. The complete list of Unified ODBC function methods and properties are available in the PHP manual.
Here is some sample code to connect to the default Northwind database using odbc_connect. First, you define three variables to store the DSN name, username, and password:
$dsn="sqlserver";
$username="sa";
$password="";
Then you call the odbc_connect function to connect to the database using the appropriate credentials. odbc_exec is then used to send a query to SQL Server:
$sqlconnect=odbc_connect($dsn,$username,$password);
$sqlquery="SELECT companyName FROM Customers;";
$process=odbc_exec($sqlconnect, $sqlquery);
Finally, you extract all of the companies from the Customers table and display them onscreen in a list. Once the entire list has been displayed, the connection to the database is closed:
while(odbc_fetch_row($process)){
$companyName = odbc_result($process,"companyName");
echo "$companyName
"; }
odbc_close($sqlconnect);
?>
MSSQL functions
PHP has a set of native functions to access Microsoft SQL Server. While the manual officially recommends that you install the extensions on the Windows platform, it is possible to make it function in Linux by using the FreeTDS libraries. Here is the entire list of properties and methods for this function.
Before you can use the mssql functions, you must enable the extensions. You can accomplish this in a few simple steps:
- Install the Microsoft SQL Client Tools on the same server as your Windows PHP installation. The tools are readily available on the SQL Server CD.
- Edit your php.ini file and uncomment (remove the semicolon from) the following line of code. If this line is missing in your php.ini, you must manually add it in:
extension=php�_mssql.dll - The php_mssql.dll file can be obtained in the PHP downloads for Win32. You must make sure that you place the dll in both the /extensions and /WINNT/system32 folder.
- Restart the Web server.
The following example is identical in functionality to the ODBC code above. The only difference is that you are using a DSN-less connection to access the database. You must specify a server and port rather than a database alias. Second of all, the methods used in this example are specific to the MSSQL function:
$server="localhost,1433";
$username="sa";
$password="";
$sqlconnect=mssql_connect($server, $username, $password);
$sqldb=mssql_select_db("Northwind",$sqlconnect);
$sqlquery="SELECT companyName FROM Customers;";
$results= mssql_query($sqlquery);
while ($row=mssql_fetch_array($results)){
echo $row['companyName']."
\n";}
mssql_close($sqlconnect);
?>
What about Linux?
If you have PHP installed on a Linux box, there are many options available to you:
Linux ODBC Drivers: iODBC is an open source project to provide ODBC database functionality to platforms such as Linux, Solaris, FreeBSD and Apple. In conjunction with the PHP ODBC functions, you should have no problems connecting to a SQL Server. UnixODBC also produces Linux database drivers. Alternatively, if you are looking for a robust commercial solution OpenLink has designed Linux drivers for ODBC, JDBC, OLE DB, and ADO.NET.
Sybase & TDS: Sybase and Microsoft SQL Server both support the Tabular Data Stream (TDS) protocol. You can connect PHP to SQL Server by using the open source FreeTDS libraries. Here is a great tutorial covering this topic in detail.
Troubleshoot your SQL Server connection
What should you do if you get errors and are unable to connect to your SQL Server? Here are some guidelines to help you troubleshoot most of the connectivity problems you might encounter:
Configure SQL Server correctly: Before you try running queries on the server using PHP, try out your queries locally using the Query Analyzer. If your queries aren't yielding the desired results, then you have to go back and check your table and field names, structure, and so forth.
Test SQL Server's connections: You can verify that SQL Server is accepting connections using telnet. In a command window, type the following:
telnet
If you get an error message such as "Could not open a connection to host on port 1433: Connect Failed…" then you should open the SQL Server Enterprise Manager and check the server and port setting. This problem can also be caused by a firewall or if the SQL Server service has been stopped unexpectedly. If you get a blank screen, it means that SQL Server is accepting incoming connections.
Check your PHP modules: If you get a message such as "Fatal error: Call to undefined function: mssql_connect()" it means that your MSSQL or ODBC modules have not been installed correctly. Check that the proper extension has been uncommented in your php.ini file, the appropriate dlls are copied to the /extensions and /WINNT/system32 folders, the right Linux drivers are installed, etc..
Set sufficient security privileges: If you get an error message along the lines of "Username not associated with a trusted SQL Server...", check your account permissions using the SQL Server Enterprise Manager.
Point to the correct database: Microsoft SQL Server 2000 can contain an untold number of databases. When you are setting up your DSN, you can specify a default database. If you plan to access multiple databases, you can programmatically specify the database using the mssql_select_db method.
Check your syntax: The MSSQL and ODBC functions differ in syntax—always refer to the PHP manual.
viernes, agosto 26, 2005
(PHP) Creación de gráficas en PHP con JpGraph
Una tarea, a la que más tarde o más temprano vamos a tener que enfrentarnos a lo largo de nuestra andadura como profesionales del web, es la creación de gráficas a partir de datos. Cuando hablo de gráficas me refiero a todo tipo de imágenes que sirvan para representar datos, como gráficas de barras, de líneas de progreso, de tarta, etc.
Obviamente, la creación de gráficas no es un tema trivial, sino que requerirá de una gran dosis de dedicación y esfuerzo. Las gráficas, que generalmente se muestran en imágenes, pueden ser de muchos tipos distintos y sólo el hecho de tratar de dibujar en una imagen líneas, barras o incluso tartas en tres dimensiones, puede ser sobradamente complicado.
Sin embargo, existen sistemas como JpGraph, que nos pueden facilitar la tarea de una manera muy interesante, pues ofrecen una serie de mecanismos para la generación de las imágenes con las gráficas, de modo que nosotros sólo tenemos que centrarnos en cargar los datos a representar y escoger el tipo de gráfica que deseamos visualizar.
Qué es JpGraph
Es una librería que incluye una serie de clases -código orientado a objetos- que sirven para crear imágenes con todo tipo de gráficas, dinámicamente desde páginas PHP.
El sistema está muy depurado y soporta multitud de funcionalidades, por lo que seguramente encontraremos solución a casi cualquier necesidad en el ámbito de creación de gráficas. Además, la mayoría de las configuraciones de las gráficas vienen con opciones por defecto, así que resulta bastante sencillo obtener resultados rápidamente.
Algunas de las características del sistema son:
- Reducido peso en bytes de las imágenes resultado. Habitualmente unas pocas KB.
- Soporte a las librerías GD1 o GD2.
- Uso de la Interpolación matemática para obtener curvas a partir unos pocos valores.
- Diversos tipos de gráficas 2D o 3D, como de puntos, líneas, tartas, barras, cajas...
- Escalas flexibles tanto en el eje X como el Y, que se ajustan al juego de datos que se tenga que representar.
- Soporte para generar gráficas con varios juegos de valores a la vez.
- Configurable con distintos tipos de colores, leyendas, tipografías, imágenes de fondo, etc.
Este juego de librerías dispone de una extensa documentación y tutoriales para aprender a manejarlo. En la documentación se encuentran además numerosos ejemplos de su uso, desde los que podemos partir para solucionar nuestras necesidades.
El modo de trabajo para usar esta librería es muy simple, se trata de crear una imagen con la etiqueta
En el archivo PHP que generará la gráfica tendremos que incluir las librerías apropiadas para el tipo de gráfica que deseemos realizar, también habrá que instanciar el objeto JpGraph correspondiente, cargar los datos a visualizar y llamar a los métodos adecuados para mostrar la imagen. Un mecanismo bastante sencillo que veremos en un par de ejemplos a continuación.
Ejemplo 1: una gráfica de línea.
En este ejemplo vamos a crear una gráfica lineal en la que mostraremos las horas de trabajo de una persona a lo largo de 10 días.
La generación de la gráfica de este ejemplo la hacemos en un archivo que hemos llamado grafico_linea.php, por lo tanto, la llamada a este archivo dentro de una imagen será la siguiente:
SetScale("textlin");
$graph->img->SetAntiAliasing();
$graph->xgrid->Show();
// Create the linear plot
$lineplot=new LinePlot($ydata);
$lineplot->SetColor("black");
$lineplot->SetWeight(2);
$lineplot->SetLegend("Horas");
// Setup margin and titles
$graph->img->SetMargin(40,20,20,40);
$graph->title->Set("Ejemplo: Horas de Trabajo");
$graph->xaxis->title->Set("Días");
$graph->yaxis->title->Set("Horas de Trabajo");
$graph->ygrid->SetFill(true,'#EFEFEF@0.5','#F9BB64@0.5');
//$graph->SetShadow();
// Add the plot to the graph
$graph->Add($lineplot);
// Display the graph
$graph->Stroke();
?>
Ejemplo 2: una gráfica de tarta en 3D
Por otra parte, vamos a realizar un ejemplo de una gráfica de tarta, en la que aparecen las horas realizadas por cada uno de los empleados y el porcentaje respecto a las totales. En este caso, la tarta va a presentarse en un dibujo en 3 dimensiones.
El archivo donde se genera la gráfica se llama grafico_tarta.php. Lo llamaríamos dentro de una imagen con este código HTML.
El código PHP del archivo grafico_tarta.php será el siguiente:
img->SetAntiAliasing();
$graph->SetMarginColor('gray');
//$graph->SetShadow();
// Setup margin and titles
$graph->title->Set("Ejemplo: Horas de Trabajo");
$p1 = new PiePlot3D($data);
$p1->SetSize(0.35);
$p1->SetCenter(0.5);
// Setup slice labels and move them into the plot
$p1->value->SetFont(FF_FONT1,FS_BOLD);
$p1->value->SetColor("black");
$p1->SetLabelPos(0.2);
$nombres=array("pepe","luis","miguel","alberto");
$p1->SetLegends($nombres);
// Explode all slices
$p1->ExplodeAll();
$graph->Add($p1);
$graph->Stroke();
?>
Conclusión
JpGraph es una herramienta muy potente para la generación de gráficos en nuestra página web y gracias a su uso nos damos cuenta de sus muchas bondades:
- Es una librería gratuita (para uso no comercial), fácil de instalar y de fácil manejo.
- Incluye una completa documentación con multitud de ejemplos de los distintos gráficos que se pueden generar.
- Además de generar muchos tipos de gráficos, permite 'customizar' casi todo lo que se ve, resultando esto muy útil para integrar perfectamente el gráfico en el diseño de nuestra web.
- La forma de integrar el gráfico es muy sencilla: únicamente es necesario incluir una imagen (etiqueta IMG) cuyo src sea el script PHP que generará nuestro gráfico (ver ejemplos).
Pocos defectos hemos encontrado en la librería, tan solo se podría mejorar lo siguiente:
- Los mensajes de error son algo escasos, y la mayotía de las veces cuando algo falla no obtenemos ninguna explicación.
- Se echa de menos algo de definición en los gráficos, sobre todo en los gráficos de sectores.
jueves, agosto 25, 2005
(PHP) Funciones para validar Mail
Para LINUX:
function validar_email($email){
$exp = "^[a-z'0-9]+([._-][a-z'0-9]+)*@([a-z0-9]+([._-][a-z0-9]+))+$";
if(eregi($exp,$email)){
if(checkdnsrr(array_pop(explode("@",$email)),"MX")){
return true;
}else{
return false;
}
}else{
return false;
}
}
?>
Para WINDOWS:
function checkdnsrr_winNT( $host, $type = '' ){
if( !empty( $host ) )
{
if( $type == '' ) $type = "MX";
@exec( "nslookup -type=$type $host", $output );
while( list( $k, $line ) = each( $output ) )
{
if( eregi( "^$host", $line ) )
{
return true;
}
}
return false;
}
}
?>
lunes, agosto 22, 2005
(PHP) Contador de Descargas
$extension = ".zip"; // EXTENSION DE ARCHIVOS
if (file_exists("$archivo$extension")) {
header("location: $archivo$extension");
$file = fopen("contador/$archivo.txt","r"); // contador de downloads
$count = fread($file, 100);
$countplus = ($count + 1);
fclose($file);
$fileb = fopen("contador/$archivo.txt","w");
fwrite($fileb, $countplus, 100);
fclose($fileb);
}
else { echo "El archivo $archivo$extension no existe"; }
?>
2.- Seguidamente debeis crear en vuestro ftp una carpeta que se llame contador y le dais CHMOD 777
El download.php tiene que estar en el mismo directorio o carpeta donde esté el archivo a descargar. Para que el contador funcione correctamente debemos colocar todo en el mismo sitio.
* EJEMPLO:
Si tenemos un archivo para descargar llamado cancion.zip, pues download.php y el archivo cancion.zip lo meteremos en el mismo lugar, y la carpeta "contador" también. Y colocaremos la siguiente url para descargar el archivo:
http://tupagina.com/download.php?archivo=cancion
Para mostrar en cualquier lugar de tu página el número de descargas realizadas debereis colocar el siguiente código:
Debes saber que para cada archivo debes crear un .txt con su respectivo nombre, tantos archivos txt como archivos a descargar tengas o quieras saber sus estadisticas de descarga, que los subirás en la carpeta "contador", y les darás CHMOD 666.
(PHP) Contador básico
$counterFile = "visitas.txt";
function displayCounter($counterFile) {
$fp = fopen($counterFile,rw);
$num = fgets($fp,5);
$num = 1;
echo "$num";
exec( "rm -rf $counterFile");
exec( "echo $num > $counterFile");
}
if (!file_exists($counterFile)) {
exec( "echo 1 > $counterFile");
}
displayCounter($counterFile);
?>
miércoles, agosto 10, 2005
(PHP) Query, conexión, mail y otros
$conn = mysql_connect($baselocalhost,$baseuser,$basepass);
mysql_select_db($base,$conn);
if (!$conn){
echo "Ha ocurrido un error no se puede conectar a la base de datos";
exit;
}
donde:
$base = "fibramex";
$baseuser = "alldesigner";
$basepass = "akasha";
$baselocalhost = "localhost";
Seleccionar una tabla de la base:
$sql = "SELECT * FROM nombre_tabla ORDER BY campo_a_ordenar WHER condicion";
Para hacer un query:
mysql_query(string query, identificador)
Agregar un archivo sin ejecutarlo:
require("nombre archivo");
requiere_once("nombre_archivo");
Agregar un archivo y ejecutarlo:
include("nombre_archivo");
Coloca resultados de una consulta en una variable:
mysql_result($variable,índice,'nombre campo')
Cuantifica filas de una variable:
mysql_num_rows($variable);
>Concatena cadenas:
.
Para saber si un archivo existe:
if (file_exist($nombre archivo)) {
echo "El archivo $nombre archivo existe";
} else {
echo "El archivo $nombre archivo no existe";
}
Sesión:
$user = trim($_POST['usuario'];
$user =! "";
mysql_fetch_array($variable);
session_start();
$_SESSION['permiso'] = "si";
Redirigir a otra página mediante un encabezado:
location.href = "pagina.html";
Para mandar un correo:
mail(string para, string asunto, string mensaje[string cabeceras adicionales[, string parámetros adicionales]]);
martes, agosto 02, 2005
(PHP) Instalación de Foros
- Un servidor web que soporte PHP 3.0.9 o mayor, preferiblemente 4.
- Base de Datos SQL (con que tenga una de estas es suficiente):
* MySQL (3.22 o mayor)
* PostgreSQL 7.0.3 o mayor (preferiblemente 7.1.x o 7.2.x)
* MS SQL Server (7 o 2000) directamente o via ODBC
* MS Access (2000 o XP) via ODBC
Si tu servidor no cumple uno de estos requisitos, no podrás
usar phpBB2
3-. Descomprime el archivo que te has bajado y sube el contenido a tu espacio web (todos los archivos), a una carpeta llamada phpBB mismamente.
4-. Ahora solo tienes que abrir el foro desde tu navegador.Si lo has subido a un servidor gratuito, posiblemente tu direccion será http://www.servidor.com/usuario/ , asi que si lo subirtes al directorio phpBB2/, la dirección que tendrás que abrir será http://www.servidor.com/usuario/phpBB2/, así de simple, y ya te aparecerá la ventana de instalación.
Si por el contrario es un hosting de pago, tu dirección será http://www.tudireccion.com/ , si lo suber a phpBB2/tendrás que ejecutar http://www.tudireccion.com/phpBB2.5-. Solo queda instalarlo desde la ventana que apareció.
Voy a ir indicando los datos en inglés, ya que muchos aun no tendreis puesto el pack en español (para descargarlo visitar su página web). Teneis que rellenar unos datos, los cualesos indico ahora...
- Default board language: esto se refiere al lenguaje para la instalación y su posterior uso.
- Database Type: Tipo de base de datos. Posiblemente todos useis MySQL 3.x. De no ser así consultarlo con el dueño del hosting o mirar su FAQ.
- Choose your installation method: Tipo de instalación. Te da a elegir entre instalar y actualizar. Seleccionar lo primero (¿no?).
- Database Server Hostname / DSN: Host del servidor de la base de datos. En general es localhost, pero puede haber escepciones. Lo podreis ver en el FAQ de cada servidor o en los datos que te mandan cuando te registras.
- Your Database Name: Nombre de tu base de datos. Suele ser el nombre de usuario, pero esto ya varía más. Ponte en contacto con tu servidor o mira los datos de cuanto te registrastes.
- Database Username: y Database Password: Pues eso, nombre de usuario y contraseña. Lo mismo que antes, si no lo sabes contacta con tu servidor.
- Prefix for tables in database: Prefijo para las tablas en la base de datos. Esto sirve por si tienes más cosas en la base de datos, para diferenciarlo. dejalo como está o pon otro prefijo, eso es cuestión de gustos.
- Admin Email Address: El email del administrador, o sea, tu. Será el email que aparecerá cuando se mande un mail a la persona que se registra en el foro, por poner un ejemplo...
- Domain Name: Tu dominio. Deja el que ya te pone el foro por defecto (es lo recomendable, si luego falla, allá tu).
- Server Port: El puerto del servidor. Lo mismo que antes, dejalo como está, dificilmente un servidor use otro puerto.
- Script path: La ruta del foro. Dejalo también como está, si pones algo mal luego fallarán las cookies.
- Administrator Username: Tu nick para el foro.
- Administrator Password: Pues eso, una contraseña para ti, para tu cuenta de administrador.
- Por último pincha el botón.
Your config file is un-writeable at present. A copy of the config file will be downloaded to your when you click the button below. You should upload this file to the same directory as phpBB 2. Once this is done you should log in using the administrator name and password you provided on the previous form and visit the admin control centre (a link will appear at the bottom of each screen once logged in) to check the general configuration. Thank you forchoosing phpBB 2.
Que traducido viene a decir...Tu archivo con la configuración es "noEscribible"por ahora. Cuando pinches en el botón se descargarásel archivo de configuración. Tu deberás subir ese archivo al mismo directorio que phpBB2. Cuando hayas hecho esto, entra al foro y haz login como administrador (identificate como administrador) y entrar en el panel de administración desde un enlace que hay en el pie de cada página, para configurar en general el foro. Gracias por usar phpBB 2.
Pues ya sabeis, hacer eso... y suerte!!
Anexo de WebTaller
INSTALACIÓN DEL PACK EN CASTELLANO
Lo primero que tenemos que hacer es bajarnos el "pack
en español" que está en la página de phpbb
(http://www.phpbb.com/downloads.php)
casi abajo del todo, buscad "spanish" y bajaos el archivo.
Descomprimirlo en vuestra carpeta phpbb2/languages.
NOTA: cuidado con esto tiene que quedar dentro de
languages las dos carpetas como se ve en la imagen, en una ocasión
me equivoqué y dentro de lang_spanish se me creo otra subcarpeta
lang_spanish. No me di cuenta y me las ví y me las desee
para comprender porqué mi foro no funcionaba en castellano.
Aseguraros de que bajo lang_spanish están directamente los
archivos de lenguaje.
Subimos nuestra carpeta lang_spanish al directorio "languages"
dentro de phpbb.
CONFIGURACIÓN DEL PACK EN CASTELLANO
1.- Vamos a nuestro recién estrenado foro.
2.- Pulsamos sobre login y nos autentificamos con
el nombre y el pass de administrador que dimos al instalar el foro
3.- Al pie de los foros vemos un enlace al panel de
administración, pulsamos.
4.- En el panel de administración, en la sección
"general admin" pulsad en "configuration".
5.- Buscad "Default Language" y de la lista
desplegable buscar "spanish",
6.- Guardar, en el botón al pie de la página.
Ahora dirígete de nuevo al índice del
foro y ve a tu perfil y en la opción language, elige spanish,
y listo!
(PHP) Haciendo seguras las sessiones
Las sesiones de PHP funcionan asi: cuando el usuario entra por primera vez al sitio, se le envia una cookie que contiene un identificador (llamado session id o SID). Luego desde el PHP se pueden asociar datos a este identificador.Cada vez que el usuario entra al sitio, el sistema de sesiones trae los datos que corresponden a este usuario (en realidad, los que corresponden al identificador de la cookie).Tambien PHP ofrece otra manera de pasar el SID, cuando browsers no soportan cookies: en estos casos, es posible pasar el SID por el URL.
Los problemas que aparecen son los siguientes:1) Si uno logra averiguar cual es el Session ID de una session, es posible pasar este dato via GET o creando una cookie y tomar el control de la sesion.Lo que lo hace peligroso es que conseguir el SID es bastante sencillo: *) Los datos de las sessiones estan almacenados en /tmp/ (por defecto, aunque se puede cambiar) y tienen de nombre: sess_SID(por ej, sess_DAQSAFKOAKDOASK)*) Cuando el PHP pasa el SESSIONID por el URL y el usuario hace click sobre un link a una pagina externa, esta recibe como dato cual fue la pagina anterior en la que el usuario estuvo (REFERER_URL) que incluye el SID. PHP ofrece una manera de evitar que se activen sesiones con el SID en el URL si el usuario viene desde un sitio externo, pero este chequeo es muy facil de evitar
2) Cuando la aplicacion PHP esta alojada en un servidor compartido (webhosting barato), cualquier usuario puede ver los SESSIONIDs ejecutando simplemente "ls /tmp/sess_*"Otro problema es que cualquier usuario con permisos para leer archivos del webserver puede ver el contenido de las sesiones, con solo abrir el archivo de session que desee (/tmp/sess_*)
Soluciones:PHP permite especificar funciones alternativas para manejar las sesiones. Usando este feature (session_set_handler) desarrolle unas funciones que teoricamente solucionan este problema:La idea es, que aparte de la cookie de session se le envia otra que contiene una cadena de texto generada al azar.Luego el nombre del archivo donde estan guardados los datos de la sesion es generado por el hash MD5 resultante de concatenar el ID de session y el KEY (o sea, $filename="sess_sec_".md5($SID.$KEY);). Haciendo esto logramos que sea imposible deducir el ID de la session viendo el nombre del archivo que contiene los datos y mas importante, hacemos que sea imposible tomar el control de una session engañando al servidor pasandole el SID, porque con un KEY equivocado (o vacio), el server no encontrara el archivo que contiene los datos de la sesion y creara una nueva.
Para agregar una capa mas de seguridad y prevenir otros ataques, los datos de sesion guardados en el archivo estan encriptados usando la cadena KEY de password, por lo que solamente el poseedor de la KEY correcta podra tener acceso a los datos (asi evitamos que otros usuarios del mismo servidor metan las narices en nuestras sesiones).
Aun faltan definir algunas funciones del sistema de sesiones, pero yo no las use nunca, asi que por ahora, no las voy a implementar
Aunque los problemas de seguridad que planteo no preocuparan a mas de uno, es bueno saber que las sessiones no son 100% seguras y que existen alternativas faciles de solucionar el problema (solo hace falta insertar las funciones y usar las funciones de sesion comunmente)
El codigo pueden bajarlo desde aqui o verlo funcionando aqui /*This piece of code was developed by Martin Sarsale (martin@n3rds.com.ar)as a response to the problem shown by Ivan R. (ivanr@webkreator.com) on thearticle 'PHP Session Security' (http://www.webkreator.com/php/configuration/php-session-security.html)
This is beta code, Im looking for some suggestions to enhance it!*/
function sess_open($sess_path, $session_name){global $_SEC_SESSION;$sess_sec=ini_get('session.name')."_sec";
# Apart from the session cookie we set another one, with the same name plus# '_sec' at the end# On that cookie, we set a random 32byte string (I'll refer to this string # as 'key')if (!isset($_COOKIE[$sess_sec])){$md5=md5(uniqid(''));setcookie($sess_sec,$md5,ini_get('session.cookie_lifetime'),ini_get('session.cookie_path'),ini_get('session.cookie_domain'));$_SEC_SESSION['int']['key']=$_COOKIE[$sess_sec]=$md5;$_SEC_SESSION['data']=serialize(array());$empty=1;}else{$_SEC_SESSION['int']['key']=$md5=$_COOKIE[$sess_sec];}
# The name of the file that contains the session info,# starts with 'sec_sess_' and it's followed by the md5 string of the# session_id concatenated with the previous key.# This avoids people of reading the ID of the session from the session files # (to hijack the session)$_SEC_SESSION['int']['filename']=$filename_sec="$sess_path/sec_sess_".md5(session_id().$md5);if (isset($empty)){return 1;}if (!file_exists($filename_sec)){fclose(fopen($filename_sec,'w'));}if (!$_SEC_SESSION['int']['fd']=fopen($filename_sec,'r')){$_SEC_SESSION['data']=serialize(array());return 0;}
# The data on that file is dedrypted using the previous key$data_enc=fread($_SEC_SESSION['int']['fd'],filesize($filename_sec));fclose($_SEC_SESSION['int']['fd']);if ($data_enc!=''){$cipher=MCRYPT_DES;$data=@mcrypt_ecb($cipher,$_SEC_SESSION['int']['key'],$data_enc,MCRYPT_DECRYPT);}else{$data='';}$_SEC_SESSION['data']=$data;$_SEC_SESSION['int']['hash']=md5($_SEC_SESSION['data']);return 1;}function sess_close(){return true;}function sess_read($key){return $GLOBALS['_SEC_SESSION']['data'];}function sess_write($id,$data){global $_SEC_SESSION;$sd=$data;if ($_SEC_SESSION['int']['hash'] != md5($sd)){$fd=fopen($_SEC_SESSION['int']['filename'],'w');$cipher=MCRYPT_DES;# Here we crypt the data with our key...$data=@mcrypt_ecb($cipher,$_SEC_SESSION['int']['key'],$sd,MCRYPT_ENCRYPT);fputs($fd,$data);fclose($fd);chmod($_SEC_SESSION['int']['filename'],0600);}
}function sess_destroy($key){return(@unlink($GLOBALS['_SEC_SESSION']['int']['filename']));}function sess_gc($maxlifetime){}
session_set_save_handler('sess_open','sess_close','sess_read','sess_write','sess_destroy','sess_gc');session_start();if (!isset($_SESSION['times'])){$_SESSION['times']=0;}$_SESSION['times']++;print "This session ID is: ".session_id()." but the name of the file that contains the data is ".$_SEC_SESSION['int']['filename']."n";
print "Btw, this is the ".$_SESSION['times']." you see this page ;) (it works!)n";
(PHP) Instrucciones para conectar con una Base de Datos MySQL en PHP
Así es recomendable:
1º Definir un archivo con tan solo los datos de conexión, por ejemplo “conexión.inc.php”
Ejemplo de “conexión.inc.php”
2º Incluir este archivo en cada script que necesite datos de la base de datos.
Añadir la siguiente línea en cada archivo que lo requiera:
include('conexion.inc.php'); // Suponemos que el archivo con los datos es ‘conexión.inc.php’
3º Realizar las consultas de un modo claro:
Para recuperar los datos de una sencilla consulta de ejemplo:
‘SELECT nombre, apellido, telefono FROM amigos’
nSQL: $sql”);
// Ahora tenemos en ‘$result’ todos los registros de la consulta, ahora debemos mostrarlos uno a uno
while ($row = mysql_fetch_array($result))
{ // El while ya deberíamos saber que hace, ‘mysql_fetch_array()’ avanza uno a uno los registros
// Como hemos metido un registro en $row, tendremos que mostrar lo que nos interese en pantalla.
echo “El Nombre es: “.$row[‘nombre’].”
n”; // Para mostrar el campo ‘nombre’
echo “El Apellido es: “.$row[‘apellido’].”
n”; // Para mostrar el campo ‘apellido’
echo “El Telf. es: “.$row[‘telefono’].”
n”; // Para mostrar el campo ‘telefono’
}
?>
El resultado a la ejecución del script sería algo como:
El Nombre es: Scott
El Apellido es: Doanes
El Telf. es: 933334455
El Nombre es: Basilio
El Apellido es: Vera
El Telf. es: 933335566
El Nombre es: Vicente
El Apellido es: Carrasco
El Telf. es: 934447788
(Etc...)
Siempre suponiendo que estos sean los registros que hay en la base de datos.
Con la instrucción “or die()” se mostrará en pantalla el mensaje entrecomillado solo en el caso de que fallara la primera sentencia de la línea.
NOTAS:
También podríamos haber usado la línea:
echo “El Nombre es: {$row[‘nombre’]}
n”;
En lugar de:
echo “El Nombre es: “.$row[‘nombre’].”
n”;
El resultado habría sido el mismo.
Incluso podríamos haber utilizado otras funciones para acceder fila a fila, por ejemplo:
mysql_fetch_object();
Pero entonces tendríamos que haber escrito algo como lo siguiente, para cada línea:
echo “El Nombre es: “.$row->nombre.”
n”;
Al usar esta función, en lugar de poner el nombre del campo así
$nombre_variable[‘nombre_del_campo’]
se pone
$nombre_variable->nombre_del_campo.
Si queremos mostrar los resultados en forma de tabla, habría que intercalar el código HTML referente a tablas entre el código que muestra las variables, por ejemplo algo como:
echo “
| Nombre | Apellido | Teléfono |
|---|---|---|
| {$row[‘nombre’]} | n”; // Comenzamos una fila (||
| {$row[‘apellido’]} | n”;{$row[‘telefono’]} |
Editar y Borrar datos con MySQL y PHP
UPDATE tabla SET campo = 'valor' WHERE condicionComo veis, volvemos a utilizar la clausula WHERE para escojer las entradas que hay que editar, podemos actualizar varios campos de la siguiente manera:
UPDATE tabla SET campo = 'valor', campo2 = 'valor2' WHERE condicionEl metodo no tiene mas secretos que esto, veamos un ejemplo real para ver cómo funciona exactamente desde PHP:
Recordar que
$db contiene un identificador de la conexión.Borrar
Borrar unas determinadas de una tabla de MySQL es incluso más sencillo que editarlas, pues solo es nescesario indicar que entradas queremos borrar con una clausula WHERE y en que tabla lo haremos, y esto junto con la palabra DELETE FROM nos darán el resultado que esperamos:
DELETE FROM tabla WHERE condicion