Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   PHP (http://www.forosdelweb.com/f18/)
-   -   FAQ's de PHP (http://www.forosdelweb.com/f18/faqs-php-530600/)

Webstudio 08/11/2002 14:49

FAQ's de PHP
 
Encuentras el FAQ en: http://www.forosdelweb.com/wiki/PHP

Categorías:
Agregar FAQ al Wiki.

Update marzo 2009: Estamos probando el funcionamiento del FAQ de PHP desde el Wiki del foro.

Webstudio 08/11/2002 14:54

Tema: Para Novatos con PHP
Créditos: Cluster, BooMeranGz, El_Metallick
Pregunta: ¿Cómo puedo comenzar con PHP? ¿Dónde puedo obtener información/software sobre PHP?
Respuesta:


Página web oficial de PHP:
(la madre del cordero, es bueno visitarla de vez en cuando y ver los "change-log" y demas informacíon de las nuevas revisiones de PHP .. )
Manual en línea de PHP:
Nota: Lamentablemente las versiones en castellano no las actualizan al mismo tiempo q la versión en ingles .. así q lo mejor suele ser ver en ingles el tema y luego en castellano .. si parece ser q es lo mismo .. pues te lo lees en castellano si quieres .. Pero suele ser mas completo en Ingles.
Pre-instaladores WAPM (Windows+Apache+PHP+Mysql):Más info en Maestros del Web

Guía de Instalación manual:
Tutoriales en castellano:
Tutoriales y artículos sobre PHP (en ingles):
Recursos (Scripts/código):
Editores de Código PHP:
De interes:

Sitio especializado en pruevas a aplicaciones PHP comunes .. avisan de vulnerabilidades .. Está bueno apuntarse a su lista de correo .. sobre todo si sueles usar aplicaciones PHP como; PHP-Nuke, phpbb, etc ...
http://www.phpadvisory.com/

Seguridad bajo PHP, prevenir SQL injection .. Cross-Site Scripting .. asegurar sesiones .. etc. (gracias a "fullmental")
http://phpsec.org/projects/guide/

Cluster 08/11/2002 16:10

Estoy intentando recoger unas variables que paso de un script a otro y no me llegan.
 
Tema: Configuración.

Pregunta:
Estoy intentando recoger unas variables que paso de un script a otro y no me llegan .. ¿que puede ser?

Respuesta:
Desde la versión 4.2.x en adelante, los chicos de PHP.net dejaron la directiva register_globals a OFF por defecto (ver php.ini).

Edita tu php.ini .. ahi veras la directiva:
register_globals = OFF .. pasalo a ON para trabajar de la forma habitual con tus variables que envias de formularios/URL's entre otras.

Un saludo,

Cluster 08/11/2002 16:13

register_globals .. ON u OFF? variables Globales?
 
Tema: Seguridad/buenas maneras xD

Pregunta:
Que diferencias hay entre usar para pasar variables de un script a otro: $variable_nombre, $HTTP_xxx_VARS['variable_nombre'], $_XXX['variable_nombre'].

Respuesta:
Cuando recogemos variables via $variable, estamos asumiendo que son Globales, es decir q da igual por el metodo/tipo de envio que se use (en caso de formularios es lo q se indica en el method= .. si entran por el URL es GET .. si son cookies, sessiones, variables de servidor ... etc no distinguimos.).

Con array $HTTP_xxx_VARS[] (donde xxx es el metodo/tipo: GET, POST, SERVER, COOKIE, SESSION, FILES .. etc) filtramos las variables que recogemos segun su metodo de envio esperado. Es decir, no aceptamos nada mas q lo q esperamos. Si enviamos variables por metodo POST las recogeriamos:
$HTTP_POST_VARS['variable']
Y no aceptariamos ninguna variable (con nombre "variable") que venga por GET .. ademas de distinguirla con respecto a si es una variable de session, cookie, file .. etc.
Este array $HTTP_xxx_VARS está disponible desde las versiones 4.0.x en adelante y hoy por hoy (ver fecha de la faq) estan habilitadas y se pueden usar .. auque "dicen" q a futuro desaparecera en nuevas versiones de PHP.

El array "superglobal" ($_GET, $_POST, $_SERVER .. etc) que denomina PHP, está disponible desde la versión 4.1.x en adelante y es a futuro lo q deberiamos usar a la hora de recoger nuestras variables de formularios y demas medios.
Ademas $_xxx te permite trabajar sin problemas con servidores con la directiva register_globals a ON u a OFF.
Su forma de trabajar seria igual q para $HTTP_xxx_VARS .. solo q el array "superglobal" ahora es "global" es decir .. si llamanos en una funcion a $_GET por ejemplo .. no debemos de declararlo como global $_GET.


mas info
Variables predefinidas de PHP:
http://www.php.net/manual/es/languag...predefined.php

Un saludo,

Cluster 08/11/2002 16:14

¿Que es una "sesion" de PHP?
 
Tema: Sesiones

Pregunta:
¿Que es una "sesion" de PHP?

Respuesta:
Básicamente es una forma de almacenar variables (sean simples, arrays e incluso objetos) -temporalmente- en el servidor. No así como las cookies q se almacenan en el cliente (PC del usuario).
Estas variables se guardan en el servidor en un fichero que se crea en el momento de que almacenamos una variable. La ubicación la determina la directiva de php.ini session.save_paht.
El nombre que se le da a ese fichero creado es: sess_asdf234arfae34q (similar) donde el "código" que hay despues de _ es lo que denominan "SID" Identificador Unico de Sessión.

Lea también una versión más completa al respecto sobre Sesiones, en esta FAQ:
http://www.forosdelweb.com/showpost....&postcount=129

Cluster 08/11/2002 16:25

Como guardo y leo una variable de sesión
 
Tema: Sesiones

Pregunta:
Como guardo y leo una variable de sesión.

Respuesta:

Para PHP > 4.1.x y register_globals a ON o a OFF ... Preferentemente usar este método.
(en el ejemplo se asume que se propaga el SID automático ... ese parametro lo define la directiva de php.ini session.use_trans_sid = 1 (1 activado, 0 desactivado .. propagación manual).)

guarda_variable_session.php
Código PHP:

<?
session_start
(); // incio de uso de sesiones.
// Necesario cada vez que se lean
// o guarden variables de sesión.
$_SESSION['variable']="valor";
?>


lee_variable_session.php
Código PHP:

<?
session_start
(); // incio de uso de sesiones.
$variable=$_SESSION['variable']; // asignamos a $variable la
// variable de la session áctiva.
?>

Y el método tradicional: (PHP > 4.0.x .. register_globals a ON .. SID propagación automática)

guarda_variable_session.php
Código PHP:

<?
session_start
(); // inicio sesiones.
session_register("variable"); // registrar $variable en session.
$variable="valor"// El valor de la $variable se puede dar
// en cuanquier momento.
?>

lee_variable_session.php
Código PHP:

<?
session_start
(); // inicio sesiones
// Se asume como global $variable.
// No distinguiendo si es de sesión o de otro metodo 
// Si fallase el inico de session, una $variable
// entrando por GET podria ser considerado  
// como la varaible de la sesión:
// lee_variable_session.php?variable=mi_valor_trampa
echo $variable
?>

Lea también una versión más completa al respecto sobre Sesiones, en esta FAQ:
http://www.forosdelweb.com/showpost....&postcount=129

Aleph 09/11/2002 19:45

Esta es conocida
 
Tema: Instalación

Pregunta: No puedo instalar PHP como módulo de Apache, por qué?

Respuesta:

En plataformas Windows , los directorios son referidos con una barra invertida "\" (ASCII 92), es por eso que en algunos archivos de configuración deben reemplazarse las barras comunes "/" éstas.
El archivo de instalación de PHP nos indica que debemos agregar la línea:

Código:

LoadModule php4_module C:/php/sapi/php4apache.dll
En este caso, las barras deberán ser reemplazadas para que funcione correctamente, de esta forma:

Código:

LoadModule php4_module C:\php\sapi\php4apache.dll

Cain 11/11/2002 09:52

Tema Mostrar datos de BD

Pregunta ¿Cómo distribuir los resultados de un query en columnas?

Respuesta Usando la función módulo de PHP.

Código de ejemplo con comentarios:

Código PHP:

<?php
echo "<table align=center>";

$columnes 4# Número de columnas (variable)

if (($rows=mysql_num_rows($result))==0) {
  echo 
"<tr><td colspan=$columnes>No hay resultados en la BD.</td></tr> ";
} else {
  echo 
"<tr><td colspan=$columnes>$rows Resultados </td></tr>";
}

for (
$i=1$row mysql_fetch_row ($result); $i++) {
$resto = ($i $columnes); # Número de celda del <tr> en que nos encontramos
if ($resto == 1) {echo "<tr>";} # Si es la primera celda, abrimos <tr>
    
echo "<td>$row[1]</td>"
if (
$resto == 0) {echo "</tr>";} # Si es la última celda, cerramos </tr>
}
if (
$resto <> 0) { # Si el resultado no es múltiple de $columnes acabamos de rellenar los huecos
$ajust $columnes $resto# Número de huecos necesarios
for ($j 0$j $ajust$j++) {echo "<td>&nbsp;</td>";}
echo 
"</tr>"# Cerramos la última línea </tr>
}
mysql_close($connexion);
echo 
"</table>";
?>


Cain 11/11/2002 09:56

Tema Formato de número

Pregunta ¿Cómo puedo formatear un número?

Respuesta Con number_format()

Sintaxis:
number_format(numero, decimales, separador_decimal, separador_miles)

Ejemplo:

$numero = 12345.2534

$number = number_format($numero, 2); // $number = 12345.25$number = number_format($numero, 0); // $number = 12345
$number = number_format($numero, 2, ".", ","); // $number = 12,345.25
$number = number_format($numero, 4, ",", "."); // $number = 12.345,2534

temaqueja 15/11/2002 09:59

Tema: SEGURIDAD

Pregunta: Autentificar usuarios en base de datos

Respuesta:

Puedes hacer lo siguiente:
  • Creas una tabla en tu base de datos (para el ejemplo: MySQL) donde tendras al menos el nombre de usuario (usr_login ) y su contraseña (usr_pass ).
  • es una buena práctica que pongas la conexión a la base de datos en un módulo aparte que sea llamado desde todas las paginas que usan la base de datos (en el ejemplo me conecto directamente)
  • crea un módulo (yo lo llamo seguridad.php ) y coloca el siguiente código en él:
    Código PHP:

    <?
    /* Autenticación
    */
      
    $muerte 'Acceso Denegado!!!!  :-p';

      if(!isset(
    $PHP_AUTH_USER)) {
        
    header('WWW-Authenticate: Basic realm="Nombre del Site"');
        
    header('HTTP/1.0 401 Unauthorized');
        echo 
    $muerte;
        exit;
      } else {
        
    // valido mi clave en el servidor ...
        
    if (@$db_link mysql_connect("localhost""usuario""clave")) {
            @
    mysql_select_db("base_de_datos");
        }

        
    $sql "select * from usuarios 
                    where ((usr_login = '$PHP_AUTH_USER') 
                         and (usr_pass = '$PHP_AUTH_PW')) "
    ;

        
    $qpassmysql_query($sql$db_link);
        if(
    mysql_num_rows($qpass)<>1)  {
          echo 
    $muerte;
          exit;
        }

      }
    ?>

  • Ahora al principio de cada una de tus páginas que necesite autenticar al usuario colocarás
    Código PHP:

    <? include("seguridad.php");?>

  • Para terminar te recuerdo que queda en tus manos el mejorar el código, por ejemplo puedes validar un límite de intentos fallidos, registrar fecha y hora de acceso del usuario así como las páginas "autenticadas" que ha visitado. También puedes darle más seguridad al código validando errores en el SQL, y muchos etcés ...

Nota: Este tipo de autentificación es via HTTP y funciona bajo PHP instalado como Módulo de Apache y no como CGI

josemi 17/11/2002 15:36

TEMA: Manejo de cadenas

PREGUNTA: PHP no me respeta los saltos de linea de mi texto.

RESPUESTA:

Si tu texto proviene de un campo <textarea> de un formulario o de un fichero, los saltos de linea vendran como caracteres \n. Y como el texto lo quieres mostrar dentro de una pagina HTML, debes cambiar esos caracteres por la cadena <br>, que es el salto de linea de HTML. La forma mas sencilla de hacerlo es con la funcion nl2br(). Su uso es muy sencillo:

Código PHP:

$var_con_saltos_de_linea="Este texto\ntiene saltos\nde linea.";
$var_con_br=nl2br($var_con_saltos_de_linea);
echo 
$var_con_br;
echo 
"\n<br>\n";
echo 
$var_con_saltos_de_linea

Es recomendable almacenar los textos con el salto de linea codificado como \n y convertirlo con nl2br() justo antes de mostrarlo en la pagina. Ademas de ocupar menos espacio, podremos usar el texto almacenado para otros formatos distintos de HTML.

GhostRider 20/11/2002 15:33

Tema: Archivos
Pregunta: ¿Cómo puedo subir archivos a través de un formulario?
Respuesta: Con el siguiente ejemplo.

Código PHP:

<?php
if (isset($_POST['submit'])) { 
    if(
is_uploaded_file($_FILES['fichero']['tmp_name'])) { // verifica haya sido cargado el archivo
        
if(move_uploaded_file($_FILES['fichero']['tmp_name'], $_FILES['fichero']['name'])) { // se coloca en su lugar final
                    
echo "<b>Upload exitoso!. Datos:</b><br>";
            echo 
"Nombre: <i><a href=\"".$_FILES['fichero']['name']."\">".$_FILES['fichero']['name']."</a></i><br>";
            echo 
"Tipo MIME: <i>".$_FILES['fichero']['type']."</i><br>";
                    echo 
"Peso: <i>".$_FILES['fichero']['size']." bytes</i><br>";
                        echo 
"<br><hr><br>";
        }
    }

// A continuación el formulario
}
?>

<form action="<?php echo $_SERVER['PHP_SELF'?>" method="post" enctype="multipart/form-data">
    Archivo: <input name="fichero" type="file">
    <input name="submit" type="submit" value="Upload!"> 
</form>

Funciona de la siguiente manera:

El código sube un archivo via HTTP POST, este se guarda automaticamente con un nombre y en una carpeta temporales del servidor mientras corre el codigo, despues el mismo servidor lo borra (por seguridad). La función is_uploaded_file() verifica que este procedimiento haya sido exitoso. Posteriormente el archivo es movido a su posición final con la función move_uploaded_file().


Notas:
  • Es necesario el atributo enctype="multipart/form-data" del formulario, es lo que indica que se están enviando archivos.
  • El primer key de $_FILES corresponde al name del filebox; En el ejemplo "fichero".
  • Si se quiere condicionar la carga del archivo según su peso y/o tipo se deberá hacer a través de los datos arrojados por la variable superglobal $_FILES antes de colocarlo en su posición final. Por ejemplo:
Código PHP:

If(is_uploaded_file($_FILE['fichero']['tmp_file']) {
    If(
$_FILES['fichero']['type']=="image/jpeg") {
        
// Proseguimos solo si se trata de un JPG
        
move_uploaded_file("...etc..."); 
    } else echo 
"El archivo no es una imágen JPG";
// bien puede condicionarse $_FILES['fichero']['size'] > XXXX
// donde 'XXXX' es un número entero representando los bytes máximos del archivo 

  • Listas de los MIME TYPE hay muchas en internet. Una muy completa se encuentra en webmaster-toolkit
  • En el ejemplo el archivo es guardado en la misma carpeta, si se quiere modicar esto ha de cambiarse el parámetro correspondiente de la función move_uploaded_file(). Por ejemplo:
Código PHP:

$ruta"carpeta/".$_FILES['fichero']['name']; // Se guardaría dentro de "carpeta" con el nombre original
// $ruta= "carpeta/nuevo_nombre.jpg"; si también se quiere renombrar
move_uploaded_file($_FILES['fichero']['tmp_name'], $ruta);

// Puede guardarse $ruta en una Base de Datos para su uso posterior 

  • El ejemplo funciona con versiones PHP 4.1.x ó superior y con register_globals en OFF.
  • La carga de archivos es dependiente de la configuración del servidor: disponer de permisos, no exeder el tamaño límite, el nombre de la carpeta personal, etc.
  • Para detalles lease la documentación oficial: www.php.net/features.file-upload

Espero les sea de utilidad. :adios:

Mickel 25/11/2002 20:29

Las clásicas...
 
Tema: Como envio un email en formato HTML
Respuesta:
Código PHP:

<?php
$sfrom
=""//cuenta que envia
$sdestinatario=""//cuenta destino
$ssubject=""//subject
$shtml=""//mensaje
$sheader="From:".$sfrom."\nReply-To:".$sfrom."\n";
$sheader=$sheader."X-Mailer:PHP/".phpversion()."\n";
$sheader=$sheader."Mime-Version: 1.0\n";
$sheader=$sheader."Content-Type: text/html";
mail($sdestinatario,$ssubject,$shtml,$sheader);
?>

** Consideraciones a tomar en cuenta para diseñar el e-mail HTML (sobre uso de CSS y/o peculiaridades según cliente de correo que lo lea):

http://css-discuss.incutio.com/?page=StyleInEmail

(grácias a uamistad por el link)

Mickel 25/11/2002 20:37

Mas clasicas
 
Tema: Archivos
Pregunta: Como genero un reporte en EXCEL a partir de una tabla
Respuesta: Solo necesitas grabar una Tabla HTML y salvarla con extension XLS. EXCEL reconocera automaticamente el formato.
Ejemplo:
Código PHP:

<?php
$shtml
="<table>";
$shtml=$shtml."<tr>";
$shtml=$shtml."<td>Id</td><td>Codigo</td><td>US$</td>";
$shtml=$shtml."</tr>";
$shtml=$shtml."<tr>";
$shtml=$shtml."<td>1</td><td>C4325</td><td>2000.00</td>";
$shtml=$shtml."</tr>";
$shtml=$shtml."<tr>";
$shtml=$shtml."<td>2</td><td>DX456</td><td>1000.00</td>";
$shtml=$shtml."</tr>";
$shtml=$shtml."<tr>";
$shtml=$shtml."<td>3</td><td>&nbsp;</td><td>-50.00</td>";
$shtml=$shtml."</tr>";
$shtml=$shtml."<tr>";
$shtml=$shtml."<td>4</td><td>A18-TG</td><td>20.64</td>";
$shtml=$shtml."</tr>";
$shtml=$shtml."</table>";
$scarpeta=""//carpeta donde guardar el archivo.
//debe tener permisos 775 por lo menos
$sfile=$scarpeta."/xxxx.xls"//ruta del archivo a generar
$fp=fopen($sfile,"w");
fwrite($fp,$shtml);
fclose($fp);
echo 
"<a href='".$sfile."'>Haz click aqui</a>";
?>


Mickel 25/11/2002 20:48

Y mas...
 
Tema: Conexion Base de Datos
Pregunta: No se como trabajar con PHP y MySQL
Respuesta:
Código PHP:

$sserver="localhost"
$suser=""//usuario de la base de datos
//No sabes lo que es? Preguntale a tu hoster!
$spassword=""//password de la base de datos
//No sabes lo que es? Preguntale a tu hoster tambien!
$sdb=""//nombre de la base de datos
//No sabes cual es? que acaso no tienes panel de control?
//Si no tienes panel de control y el hoster no responde
//   cambia de hoster...
$ilink=mysql_connect($sserver,$suser,$spassword) or die("RIP");
mysql_select_db($sdb,$ilink);
$squery="Select (campos) from (tabla) (where) (order)";
//no sabes lo que es SELECT? pues a aprender sintaxis SQL!
$iquery=mysql_query($squery,$ilink);
if (
$iquery>0) {
   
$irow=0;
   
$ilastrow=mysql_num_rows($iquery);
   while (
$irow<$ilastrow) {
        
$campo=mysql_result($iquery,$irow,"(campo)");
        
//asi obtienes los datos de un campo
        //repetir segun sea necesario
       
$irow++;
   }
}
//quieres actualizar algo?
$squery="Delete/Insert/Update...";
mysql_query($squery,$ilink); 


vito_gris 27/11/2002 08:41

TEMA: Encuestas en php y mysql

PREGUNTA: Como hacer una encuesta en php

RESPUESTA:
Para hacer una encuesta con sus resultados graficados debes crear un tabla con los siguients campos (optativos)
1.- Idencuesta: identificador de cada encuesta

2.- pregunta:campo que almacena las pregunta

3.- respuesta1: campo que almacenara la respuesta a tu encuesta

4.- respuesta2:lo mismo que lo anterior esto dependera de la catidad de respuesta que tenga tu encuesta (por lo general 3 o 4)

5.- valor1: este campo almacena la cantidad de respuestas a cada respuesta o sea valor1 guardara todos los clic o respuestas que den en respuesta1.

6.- total:almacena el total de la suma de los campos valor1, valor2 o los que tengas

7.-Crea una imagen pequeña de uno 4x9 gif o cualquier formato para que te muestre los resultados graficados


****ENCUESTA:PHP****
Código PHP:

<?
$servidor 
"localhost"
$usuario "";
$password "";
$base_de_datos "encuesta";
$conextar=mysql_connect ($servidor,$usuario,$password);
    
mysql_select_db($base_de_datos);
    
$sqlupdate "UPDATE encuestas SET valor$voto = valor$voto+1, total = total+1";
    
mysql_query($sqlupdate,$conextar);
    
$sql "SELECT * FROM encuestas ORDER BY idencuesta desc LIMIT 1";
    
$resultados mysql_query($sql,$conextar);
    
$row mysql_fetch_array($resultados);
    
?>
<script type="text/javascript" language="JavaScript">
function resultados(){
window.open("resultados.php","","toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=0,width=320,height=200");
}
</script>
<form name="form1" method="post" action="<?= $PHP_SELF?>">
  <table width="256" border="0" align="center" cellpadding="0" cellspacing="0" class="forumline">
    <tr valign="baseline"> 
      <td colspan="2" class="row1"> 
        <?=$row['pregunta']; ?>
        <br>
      </td>
    </tr>
    <tr> 
      <td width="110"> 
        <?=$row['respuesta1'];?>
      </td>
      <td width="146"><input type="radio" name="voto" value="1">
      </td>
    </tr>
    <tr> 
      <td> 
        <?=$row['respuesta2'];?>
      </td>
      <td><input type="radio" name="voto" value="2"></td>
    </tr>
    <tr> 
      <td> 
        <?=$row['respuesta3'];?>
      </td>
      <td><input type="radio" name="voto" value="3"></td>
    </tr>
    <tr align="center"> 
      <td height="20" colspan="2"><input type="submit"  class="post"name="Submit" value="Votar" onClick=window.open("resultados.php","","toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=0,width=320,height=200");
></td>
    </tr>
  </table>
  <p>&nbsp;</p></form>

****RESULTADOS.PHP****************
Código PHP:

<html>
<head>
<title>Resultados de la encuesta</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
body {
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 10px;
    background-color: #FFFFDD;
}
td {
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 10px;
}
-->
</style>
</head>
<body>
<?
$servidor 
"localhost"
$usuario "";
$password "";
$base_de_datos "encuesta";
$conextar=mysql_connect ($servidor,$usuario,$password);
    
mysql_select_db($base_de_datos);
    
//$sqlupdate = "UPDATE encuestas SET valor$voto = valor$voto+1, total = total+1";
    //mysql_query($sqlupdate,$conextar);
    
$sql "SELECT * FROM encuestas ORDER BY idencuesta desc LIMIT 1";
    
$resultados mysql_query($sql,$conextar);
    
$row mysql_fetch_array($resultados);
 
$res1round ($row['valor1']*100/$row['total'],2);
 
$res2round ($row['valor2']*100/$row['total'],2);
 
$res3round ($row['valor3']*100/$row['total'],2);
 
?>
<p>Resultados parciales de la encuesta</p>
<?=$row['pregunta']; ?><br>
<br>

<TABLE WIDTH="300"  BORDER="1" ALIGN="center"  BORDERCOLOR="#3097A3">
  <TR>
     <TD WIDTH="100"><?=$row['respuesta1']; ?></TD> 
    <TD WIDTH="*"><IMG HEIGHT="15" WIDTH="<?=$row["valor1"]*100/$row["total"]?>%" SRC="encuesta/barra.gif"></TD>
    <TD ALIGN="center" WIDTH="70"><? echo $res1."%";?> </TD>
  </TR>
  <TR>
   <TD WIDTH="100" ><?=$row['respuesta2']; ?></TD>
    <TD WIDTH="*"><IMG HEIGHT="15" WIDTH="<?=$row["valor2"]*100/$row["total"]?>%" SRC="encuesta/barra.gif"></TD>
    <TD ALIGN="center" WIDTH="70"><? echo $res2."%";?> </TD>
  </TR>
  <TR>
     <TD WIDTH="100"><?=$row['respuesta3']; ?></TD>
    <TD WIDTH="*"><IMG HEIGHT="15" WIDTH="<?=$row["valor3"]*100/$row["total"]?>%" SRC="encuesta/barra.gif"></TD>
    <TD ALIGN="center" WIDTH="70"><? echo $res3."%";?> </TD>
  </TR>
</TABLE>
<form name="form1" method="post" action="">
  <div align="center">
    <p>
      <input type="submit" name="Submit" value="Cerrar Ventana" onclick="window.close();">
    </p>
    <p>&nbsp; </p>
  </div>
</form>
</body>
</html>

Dudas o comentarios favor de enviar mensaje privados
Gracias

NOTA: .. la llamada a la funcion javascript window.open( .. parametros) .. Ha de estar en una sola linea y sin espacios entre los parametros, pese q si hacen un cut-and-paste veran esos saltos de línea y algun espacio por medio.

Cain 27/11/2002 10:10

Tema: Reconocer características del visitante

Pregunta: Tengo una web en varios idiomas, ¿Cómo puedo mostrar a mis visitantes la que más se ajuste a sus preferencias?

Respuesta:

Usando la cabecera HTTP_ACCEPT_LANGUAGE que nos enviará su navegador al pedirnos que le mostremos la web.

Para leer correctamente esa cabecera y no quedarnos sólo con el primer valor que contenga, usaremos el siguiente script:

Código PHP:

if ($HTTP_ACCEPT_LANGUAGE != ''){ # Verificamos que el visitante haya designado algún idioma
    
$idiomes explode(","$HTTP_ACCEPT_LANGUAGE); # Convertimos HTTP_ACCEPT_LANGUAGE en array
    /* Recorremos el array hasta que encontramos un idioma del visitante que coincida con los idiomas
    en que está disponible nuestra web */
    
for ($i=0$i<count($idiomes); $i++){
        if (!isset(
$idioma)){
            if (
substr($idiomes[$i], 02) == "ca"){$idioma "ca";}
            if (
substr($idiomes[$i], 02) == "es"){$idioma "es";}
            if (
substr($idiomes[$i], 02) == "en"){$idioma "en";}
            if (
substr($idiomes[$i], 02) == "fr"){$idioma "fr";}
        }
    }
}

# Si no hemos encontrado ningún idioma que nos convenga, mostramos la web en el idioma por defecto
if (!isset($idioma)){$idioma "ca";} 


Mickel 29/11/2002 00:46

Tema: Obtener Valores
Pregunta: ¿Como obtengo la fecha del servidor?
Respuesta:
Código PHP:

<?php
$sdate
=date("d")."/".date("m")."/".date("Y");
$stime=date("h").":".date("i");
?>

como Epplestun pone lineas abajo, esto se puede hacer con una sola llamada a date()... pero al ponerlo asi esperaba que ya no preguntasen
- como obtengo el mes?
- y el dia?
- y el año?
:-D

Cain 03/12/2002 06:13

Tema: Leer ficheros

Pregunta: ¿Cómo puedo ver el código fuente de otra página?

Respuesta:

Usando show_source().

El siguiente ejemplo presenta un formulario que se ejecuta en la misma página. Si hemos especificado ya el archivo, nos muestra el código. Si no hemos especificado el archivo, nos muestra el formulario.

Código PHP:

if (isset($arxiu)){
show_source($arxiu);
} else {
echo 
"<form action=show_source.php method=post><input type=text name=arxiu><br><input type=submit></form>";



Cain 03/12/2002 06:18

Tema: Leer ficheros

Pregunta: ¿Cómo leo los metatags de una página web?

Respuesta:

Usando get_meta_tags()

El siguiente código es una modificación del anterior. Sólo se ha incluído la parte de resolver $arxiu, por lo que se debe llamar desde un formulario con <input type="text" name="arxiu"> o pasándole a la URL ?arxiu=http://direccion

Código PHP:

$metatags get_meta_tags($arxiu,1);
if (!
count($metatags)){print "<strong>No s'han trobat metatags vàlides</strong>\n";}
for (
$i=0$i<count($metatags); $i++) {
$etiquetes each($metatags);
print 
"<strong>$etiquetes[0]:</strong> $etiquetes[1]\n";



Cluster 03/12/2002 20:06

Tema: Manejo arrays (arreglos, matrices ..)

Pregunta: Como paso un array de un script.php a otro.php

Respuesta:

Hay que serializar el array para enviarlo por el URL o en un formulario en un campo "hidden" ... Y, en el script que reciba el array debera de des-serializarlo.

A todo esto, es recomendable eliminar los slahes (\ barra invertida) que se generan si usamos magic_quotes_gpc a ON y codificar las variables con urlencode() para eviatar problemas con cartacteres en nuestros arrays tipo: puntos, comillas y otros caracteres.

enviar_array.php
Código PHP:

<?
function array_envia($array) {

    
$tmp serialize($array);
    
$tmp urlencode($tmp);

    return 
$tmp;
}

$array=array("algo","nose","otracosa");
$array=array_envia($array);

// Usando un formulario y campo hidden.
echo <<<HTML
<form action="recibir_array.php" method="POST">
   <input name="array" type="hidden" value="$array">
   <input name="enviar" type="submit" value=" Enviar ">
</form>
HTML;

// Usando un link (URL).
echo "<a href=\"recibir_array.php?array=$array\">pasar array</a>";
?>

recibir_array.php
Código PHP:

<?
function array_recibe($url_array) {
    
$tmp stripslashes($url_array);
    
$tmp urldecode($tmp);
    
$tmp unserialize($tmp);

   return 
$tmp;
}


$array=$_GET['array'];
 
// el método de envio usado. (en el ejemplo un link genera un GET. En el formulario se usa POST podria ser GET tambien ...)

$array=array_recibe($array);

foreach (
$array as $indice => $valor){
echo 
$indice." = ".$valor."<br>";
}
?>

Ahi en recibir_array.php tienes un ejemplo de como recorrer el array que has enviado . igualmente puedes acceder por su indice: $array[indice] ...

Si usasemos un formulario para enviar nuestra array .. solo tendriamos que usar un campo hidden común de formulario y alplicar la funcion array_envia().


Un saludo,

fmmeson 05/12/2002 16:36

SMTP utilizando Sockets en PHP
 
Estuve probando cómo hacer para autenticar usuario SMTP por Sockets y este código me ha dado buenos resultados: :-D :-D

/////////////// Archivo mail.php /////////////////////

set_time_limit(0);

include("cmailer.php");

$m = new cMailer();
$m->AgregaDireccion("[email protected]");
$m->AgregaDireccion("[email protected]");

$m->AgregaRemitente("[email protected]");
$m->AgregaAsunto("Mensaje de prueba");

$m->AgregaMensaje("Este es un sencillo mensaje de prueba configurando Username y Password");

$m->AgregaServidor("smtp.isp.com");

$m->AgregaNombreUsuario("nombreusuario");

$m->AgregaContrasenya("contraseña");

$m->Autenticar();

$m->Enviar();

?>


/////////////////// Archivo cmailer.php//////////////////////////////

class cMailer
{
var $_Direcciones;
var $_cantidadDirecciones = 0;
var $_ConexionSMTP;
var $_Remitente;
var $_ServidorSMTP;
var $_Asunto = "";
var $_Mensaje;
var $_NombreUsuario;
var $_Contrasenya;
var $_Autenticar = 0;

function cMailer()
{
}

function AgregaNombreUsuario($NombreUsuario)
{
$this->_NombreUsuario = $NombreUsuario;
}

function AgregaContrasenya($Contrasenya)
{
$this->_Contrasenya = $Contrasenya;
}

function Autenticar()
{
$this->_Autenticar = 1;
}

function NoAutenticar()
{
$this->_Autenticar = 0;
}

function AgregaDireccion($Direccion)
{
$this->_Direcciones[$this->_cantidadDirecciones] = $Direccion;
$this->_cantidadDirecciones++;
}

function AgregaRemitente($Remitente)
{
$this->_Remitente = $Remitente;
}

function AgregaMensaje($Mensaje)
{
$this->_Mensaje = $Mensaje;
}

function AgregaAsunto($Asunto)
{
$this->_Asunto = $Asunto;
}

function Enviar()
{
$cadenaEHLO = "EHLO ".$this->_ServidorSMTP."\r\n";
fputs($this->_ConexionSMTP, $cadenaEHLO);

if($this->_Autenticar == 1)
{
$cadenaAUTH = "AUTH LOGIN\r\n";
fputs($this->_ConexionSMTP, $cadenaAUTH);
$cadenaNombreUsuario = base64_encode($this->_NombreUsuario)."\r\n";
fputs($this->_ConexionSMTP, $cadenaNombreUsuario);
$cadenaContrasenya = base64_encode($this->_Contrasenya)."\r\n";
fputs($this->_ConexionSMTP, $cadenaContrasenya);
}

$cadenaMAIL = "MAIL FROM: ".$this->_Remitente."\r\n";
fputs($this->_ConexionSMTP, $cadenaMAIL);

for($i = 0; $i < $this->_cantidadDirecciones; $i++)
{
$cadenaRCPT .= "RCPT TO: ".$this->_Direcciones[$i]."\r\n";
}

$cadenaRCPT .= "\r\n";
fputs($this->_ConexionSMTP, $cadenaRCPT);

$cadenaDATA1 = "DATA\r\n";
fputs($this->_ConexionSMTP, $cadenaDATA1);

if($this->_Asunto != "")
{
$cadenaSubject = "Subject: ".$this->_Asunto."\r\n\r\n";
fputs($this->_ConexionSMTP, $cadenaSubject);
}


$cadenaDATA2 = $this->_Mensaje."\r\n.\r\n";
fputs($this->_ConexionSMTP, $cadenaDATA2);

fputs($this->_ConexionSMTP, "QUIT\r\n");

fclose($this->_ConexionSMTP);
}

function AgregaServidor($Servidor, $Puerto = 25)
{
$this->_ConexionSMTP = fsockopen("$Servidor", "$Puerto", $e, $em, 5) or die("No puedo abrir el socket");
echo fgets($this->_ConexionSMTP, 4096)."
\n";
$this->_ServidorSMTP = $Servidor;
}

}

?>

epplestun 07/12/2002 03:04

Tema: Creacion de foros con PHP y MySQL
Pregunta:Como pyuedo crear un foro en PHP y MySQL
Respuesta
Hace mucho tiempo me pidieron que pusiera el tutorial en una web, aqui la tienen:
http://www.zonaphp.com/index.php?mod...ion=leer&id=23

Editado por josemi: Actualizado el link

josemi 07/12/2002 14:54

Tema: Variables
Pregunta: ¿Por qué pierde el valor mi variable dentro de mi función?
Respuesta:
Para poder acceder y modificar el valor de una variable definida fuera de una función hay que referenciarla dentro de la función con global. Por ejemplo:
Código PHP:

$var_1='Hola';
function 
funcion()
{
  global 
$var_1;
... 

Mas info: http://www.php.net/manual/en/languag...bles.scope.php

Cluster 08/12/2002 11:36

Tema: Web Modulares

Pregunta: Como hago esas páginas web que las secciones q incluyen son del tipo index.php?id=2

Respuesta:

La filosofía de ese tipo de webs es en usar la funcion include() (o require()) para incluir (valga la rebundancia) el código que pertenezca a ese identificativo .. en nuestro ejemplo una variable llamada id .. como podria ser cualquier otro nombre.

La decisión de que página ha de cargar se puede hacer de varias formas .. siendo la mas común usar el condicional: switch ..

Código PHP:

<?
$id
=$_GET['id'];

switch (
$id) {
   case 
1:
       include(
"pagina1.php");
       break;
   case 
2:
       include(
"pagina2.php");
       break;
   case 
3:
       include(
"pagina3.php");
       break;
   default:
       include(
"pagina_por_defecto.php"); 
// estado default .. nos determina el estado 
// "si no es ninguna opcion de las anteriores".

?>

Las llamadas a una página seran del tipo:

nombrequeledemos.php?id=nº
(podriamos usar identificativos no numericos .. tan solo usar case tipo: case "nombre" ...

Ahora, El sistema es mas versatil .. no se trata solo de "redirecionar" (si usamos include() ) .. sino de Incluir dentro de otro "armazón" (plantilla-template) base que usemos .. por ejemplo:

Código PHP:

<html>
<head>
<title>Web Modular</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<table width="100%" border="0" cellpadding="5">
  <tr> 
    <td colspan="2">Cabecera de nuestra Web</td>
  </tr>
  <tr> 
    <td><a href="index.php?id=1">Secci&oacute;n 1</a><br>
      <a href="index.php?id=2">Seccion 2 </a> </td>
    <td>
<?
$id
=$_GET['id'];

switch (
$id) {
   case 
1:
       include(
"pagina1.php");
       break;
   case 
2:
       include(
"pagina2.php");
       break;
   case 
3:
       include(
"pagina3.php");
       break;
   default:
       include(
"pagina_por_defecto.php"); 
// estado default .. nos determina el estado 
// "si no es ninguna opcion de las anteriores".

?>
    </td>
  </tr>
  <tr> 
    <td colspan="2">Pie de p&aacute;gina</td>
  </tr>
</table>
</body>
</html>

Un saludo,

AngelRoyo 09/12/2002 00:50

Comprimir archivo a .gz
 
Faltaba Yo :-0

TEMA: COMPRIMIR A .GZ
DESARROLO:
Código PHP:

<?php

   $filenameIMAG
='C:/FoxServ/www/_pruebas/zlib/site.gif';
   
$filenameCOMP='C:/FoxServ/www/_pruebas/zlib/site.gif.gz';

   
/* [STEP 1] */
   
$fp fopen($filenameIMAG"rb");
   
$data fread($fpfilesize($filenameIMAG));
   
fclose($fp);
   
/* [/STEP 1] */

   /* [STEP 2] */
   
$fd fopen ($filenameCOMP"wb");
   
$gzdata gzencode($data,9);
   
fwrite($fd$gzdata);
   
fclose($fd);
   
/* [/STEP 2] */

?>

STEP:
1. Abrir en modo binario(lectura), acceder a la data y cerrar.
2. Abrir en modo binario (escritura), comprimir , escribir y cerrar

Nota: Deve estar instalada la libreria ZLIB. ver manual :)

Saludos

Cain 10/12/2002 05:09

Tema: Presentación

Pregunta: ¿Cómo puedo mostrar código HTML coloreado?

Respuesta:

PHP incluye las funciones highlight_string() y show_source() para resaltar el código PHP usando colores que facilitan la comprensión del código.

Ahora bien, es necesario que el código esté emmarcado por etiquetas PHP válidas como <? ?> o <?php ?>.
Para usar estas funciones para colorear un código HTML normal, usaremos la siguiente estrategia:

Código PHP:

<?php
$thecode 
show_source("http://news.google.com"); // $thecode contiene el código HTML que queremos colorear. Yo he usado show_source() para leer un código externo.

$highlighted highlight_string("<? ".$thecode." ?>");

echo 
substr($highlighted3, -3);
?>


Herminio Heredia San 10/12/2002 05:33

Tema: Configuracion.
Pregunta:
Necesito cmabiar la directiva register_global a On y no tengo acceso al archivo php.ini???.
Reapuesta:
Esto unicamente funciona en Apache con php como modulo del
mismo y que el usuario tenga la directiva AllowOverride seteada a all o a Options.

Si las condiones se cumplen, creen un archivo .htacces que contanga la siguiente linea.

php_flag register_globals On

Esto es muy util cuando tenemos que dejar corriendo apliaciones que no estan programadas
para usar las variables super globales $_*, en lo que se lleva acabo su pronta actualizacion.

josemi 12/12/2002 14:31

Tema: Trucos.
Pregunta: ¿Como hago para alternar los colores de las filas de una tabla, como en los foros?
Respuestas:
Con este sencillo codigo:
Código PHP:

<table>
<?php
$color
='#FF0000';  // este es el primer color que queremos que aparezca
for($i=0;$i<20;$i++)
{
    echo 
"<tr bgcolor=\"$color\"><td>Hola</td></tr>";
  
$color=('#F0F0F0'==$color)?'#FF0000':'#F0F0F0';
// este es el operador ternario. Equivale a un IF-THEN-ELSE
// Es quivalente a
//  if ('#F0F0F0'==$color)
//  {
//    $color='#FF0000';
//  } else
//  {
//    $color='#F0F0F0';
//  }

}
?>
</table>


josemi 12/12/2002 14:36

Tema: Trucos
Pregunta: Muy bonito lo de alternar dos colores, pero ¿podrias hacerlo para rotar cuatro colores?
Respuesta:
Pues claro, con ayuda de nuestros amigos los arrays:
Código PHP:

<table>
<?php
$lista_colores
=array('#F0F0F0','#FF0000','#00FF00','#0000FF');
$num_colores=4;
$indice=0;
while(
$row=mysql_fetch_array())
{
  
$color=$lista_colores[$indice $num_colores];
  
$indice++;
  echo 
"<tr bgcolor=\"$color\"><td>Hola</td></tr>";
}
?>
</table>

Y simplemente modificando el valor de $num_colores y añadiendo los colores al array $lista_colores este codigo funciona para 5,6 y los que sean. Incluso para uno o dos colores.

AngelRoyo 12/12/2002 17:03

MODIFICAR IMAGENES (Educacional)
 

SECCION: IMAGEN
SCRIPT: CORTAR IMAGENES EN MASA


Objetivo: Script de tipo educacional para entender que manejar Imagenes en PHP es lo mismo que usar un editor como FireWork, la diferencia esta en que PHP es escrito.
- Quita Sección rectangular Inferior



Código PHP:

  /*
    CORTAR "$cutpx" DE UNA IMAGEN
    ANGEL ROYO 2002
   */

function tiempo(){

 list(
$ms,$s)=explode(" ",microtime());
 
$t=($ms $s);
 return 
$t/* Retorna el Tiempo en Segundos */

}/* Esta funcion se la agrege más nada para ver lo que se demora la PC */

function image_cut($src,$destino,$cutpx){

  
$size getimagesize($src);/* Propiedades de la imagen */
  
$im=imagecreatefromjpeg($src); /*Tomo la imagen origen */
$img=imagecreate($size[0],$size[1]-$cutpx);/*[0] ANCHO, [1] ALTO, me creo una CANVAS, algo similar que en Firework*/
  
imagecopyresized($img$im0000$size[0],$size[1]-$cutpx$size[0], $size[1]-$cutpx); /* Copio en mi CANVAS la imagen $im en la dimensión que deseo */
  
ImageJPEG($img,$destino,85); /*Exporto la CANVAS a JPG con 85% */
  
ImageDestroy($img); /* La Borro de la Cache */

/* El procedimiento es similar a usar un editor de imagenes */
}

 
$d=dir("empresa/"); /*Directorio con las imagenes de origen*/
 
$t0=tiempo();/* Opcional */
  
echo "Handle: ".$d->handle."<br/>\n";/* Opcional */
  
echo "Path: ".$d->path."<br/>\n";/* Opcional */

  
while($archivo=$d->read()) {/* Comienzo a leer la carpeta definida en dir */

          
if (eregi(".+.jpe?g$",$archivo)){
              
/* ES JPG o JPEG, por lo tanto aplicamos la funcion image_cut */

    
$img_fuente=$d->path.'/'.$archivo;
    
$img_destino='cortadas/'.$archivo;
 
image_cut($img_fuente,$img_destino,30); /*30 signifca 30 pixeles de corte, eso es lo que mide mas menos el rectangulo */

 
}

      echo 
$archivo."<br/>\n"/* Muestra el nombre de los archivos */

      
}

      
$d->close(); /* Cierro */  

      
$total=tiempo()-$t0;

      echo 
"<br/>EL PROCESO TARDO: $total (s)"

Pues ahi esta.
Se demoro aprox entre 80 y 90 s, en mi PC de 350 Mhz - 196 RAM.
173 Imagenes un total de 6.78 Megas inicial y 5.41 Megas final.
Me ahorre algunos Bytes :)

BVis 19/12/2002 00:41

Evitar que una imágen quede en la Caché del navegador.
 
Para evitar que una imágen quede en la caché de un navegador, sencillamente usar desde una página cualquiera:

<img src="ver_imagen.php?imagen=nombre_imagen.jpg">

Claro que nos hace falta tener el script "ver_imagen.php", debería contener esto:

Código PHP:

<?php

// Directorio donde buscaremos la imagen
$camino "./";

// Cabecera de imagen
header("Content-Type: image/jpeg"); // En este caso es jpeg, 
// pero se podría cambiar por la que nos interese.

// Cabeceras de NO CACHE
header"Expires: Mon, 20 Dec 1998 01:00:00 GMT" );
header"Last-Modified: " gmdate("D, d M Y H:i:s") . " GMT" );
header"Cache-Control: no-cache, must-revalidate" );
header"Pragma: no-cache" );

// Leemos la imágen
@readfile($camino.$_GET['imagen']);

?>

Creo que eso es todo.

AngelRoyo 19/12/2002 12:36

mysql_fetch_assoc Menos recursos
 
mysql_fetch_assoc una alternativa a mysql_fetch_array.

Genera un array más pequeño, bastante util si queremos reducir consumo de recursos.

$mifila=mysql_fetch_assoc($resultado);
echo $mifila['campo'];

Solo llama por nombre de campo y no por numero de campo, he ahi su beneficio.
Saludos.

e-miliox 20/12/2002 10:25

Capitalizador
 
Tema: Manejo de Strings

Pregunta: como puedo hacer para que las primeras letras de un nombre sean puestas en mayusculas?

Respuesta:

la funcion ucwords() sirve para llevar el primer caracter de un cada palabra de un string a mayuscula (capitalizar). La puedes complementar con un strtolower() anidado para que siempre salga la primera letra en mayuscula y las demas de la palabras en minuscula

asi
Código PHP:

<?php

$varStringConFormato 
ucwords(strtolower($varStringSinFormato));

?>

si usas el nombre luis miguel MONTES BurruCHAga

saldra como resultado Luis Miguel Montes Burruchaga

(este ejemplo sale en la ayuda de php, pero lo explique un pokito mas pa que la entendieran mejor)

tambien se me ocurre otra forma utilizando ucfirst() (primer caracter de un string a mayuscula), combinado tambien con strtolower(), este ultimo metodo te podria servir mas en el caso de tratar con apellidos compuestos (de las Mercedes, del Carmen, de la Fuente , etc)... el idea consiste en separar mediante un explode() la cadena que contiene el nombre o lo que quiereas tratar...luego a cada elemento aplicas la funcion ucfirst(strtolower($elementoArray)), SI y SOLO SI no es un 'articulo' (la, las, de...)...

mas menos asi

la hice a modo de funcion :)

Código PHP:

<?
function Capitalizar($nombre)
{
    
// aca definimos un array de articulos (en minuscula)
    // aunque lo puedes definir afuera y declararlo global aca
    
$articulos = array(
    
'0' => 'a',
    
'1' => 'de',
    
'2' => 'del',
    
'3' => 'la',
    
'4' => 'los',
    
'5' => 'las',
    );

    
// explotamos el nombre
    
$palabras explode(' '$nombre);

    
// creamos la variable que contendra el nombre
    // formateado
    
$nuevoNombre '';

    
// parseamos cada palabra
    
foreach($palabras as $elemento)
    {
        
// si la palabra es un articulo
        
if(in_array(trim(strtolower($elemento)), $articulos))
            {
            
// concatenamos seguido de un espacio
            
$nuevoNombre .= strtolower($elemento)." ";
            } else {
            
// sino, es un nombre propio, por lo tanto aplicamos
            // las funciones y concatenamos seguido de un espacio
            
$nuevoNombre .= ucfirst(strtolower($elemento))." ";
            }
    }

    return 
trim($nuevoNombre);
}
?>


cvander 23/12/2002 21:24

Un par de funciones que me han sido muy útiles...
 
Tema Leyendo desde una base de datos.

Pregunta Cómo puedo mostrar los parrafos de un texto almacenado en la base de datos?

Respuesta

Código PHP:

echo nl2br($row['contenido']); 


Tema Leyendo desde una base de datos.

Pregunta Cómo puedo mostrar únicamente el primer parrafo del texto almacenado en la base de datos? (Muy útil para resumenes de artículos)
Respuesta

Código PHP:

function parrafin($string) {
$article explode("\n"$string);
$parrafo $article[0];
 return( 
$parrafo ); 
 } 

echo 
parrafin($row['contenido']); 


Cluster 28/12/2002 12:05

Tema: Uso de rand() (numeros aleatorios) - ejemplo práctico.

Pregunta: Como puedo mostrar una imagen aleatoria de una lista.?

Respuesta:

Usando la función rand() podemos hacer que PHP seleccione aleatoriamente un mumero entre un rango. Ese número lo podemos usar como indice para leer un array donde tengamos las URL's de las imagenes. Seguidamente generamos las cabeceras HTTP correspondientes y se lo enviamos al navegador.

imagen_aleatoria.php
Código PHP:

<?php
//**************************************
//*                                    *
//*        Imagenes Aleatorias         *
//*    By Cluster ([email protected])    *
//*   28/12/2002 - Versión 1.0         *
//*                                    *
//*  Uso:                              *
//*  <img src="imagen_aleatoria.php">  *
//*                                    *
//**************************************

// Array con las imagenes (URL fisico en el servidor).
// El indice es autonumerico .. tan solo añadir o quitar entradas segun se necesite.
$imagenes[]="imagen1.jpg";
$imagenes[]="imagen2.gif";
$imagenes[]="imagen3.jpg";

// Seleccion aleatoria imagen.
$aleatoria=rand(0,count($imagenes)-1);

// Buscar la extension de la imagen
$tipo_ext=explode(".",$imagenes[$aleatoria]);
$tipo=$tipo_ext[1];

// Formar la cabecera HTTP para imagen segun su extensión

// Enviamos cabecera al navegador para avisar q va una imagen de $tipo
header("Content-type: image/$tipo");
// Le ponemos el nombre de la imagen .. Al dar a descargar aparecera con este nombre. Puede dejarse uno fijo.
header("Content-Disposition: inline; filename=".$imagenes[$aleatoria]);

// Leer la imagen de su URL y entregarla al buffer de salida
readfile ($imagenes[$aleatoria]);

?>

Su uso es bien sencillo:

1) El array $imagenes[] contiene los URL's de las imagenes (si fuera necesario usar imagenes/imagen.php o como corresponda la ruta .. indicarla). El array usa indices autonumericos .. así que no hay q preocuparse del mismo .. tan solo borren o añadan las entradas de imagenes que necesiten.

2) Su uso: <img scr="nombre_que_le_den_al_script.php"> (y ruta si fuera necesario obviamente) .. Cada vez que carge la página se seleccionará una imagen de la lista que contiene el array $imagenes.

En teoría funciona con todo tipo de imagenes (.jpg, .png, .gif ..) No así con .swf (de Flash) pues se usan otras cabeceras HTTP ..

Un saludo,

PD: Desde PHP 4.2.0 no es necesario iniciar el generador de números aleatorios. Más info en www.php.net/rand

BVis 29/12/2002 19:07

Como generar un Thumbnail (imagen pequeña) en PHP usando GD
 
Antes que nada avisar que se requieren las librerías GD para poder realizar los thumbnails. Y en función de la versión de GD, podremos usar una u otra función

Primero pegaré el código de una función con la que generaremos directamente un thumbnail de alta calidad.

Código PHP:

function thumbjpeg($imagen,$altura) {
     
// Lugar donde se guardarán los thumbnails respecto a la carpeta donde está la imagen "grande".
     
$dir_thumb "thumbs/";
     
// Prefijo que se añadirá al nombre del thumbnail. Ejemplo: si la imagen grande fuera "imagen1.jpg",
     // el thumbnail se llamaría "tn_imagen1.jpg"
     
$prefijo_thumb "tn_";

     
// Aquí tendremos el nombre de la imagen.
     
$nombre=basename($imagen);
     
// Aquí la ruta especificada para buscar la imagen.
     
$camino=dirname($imagen)."/";

     
// Intentamos crear el directorio de thumbnails, si no existiera previamente.
     
if (!file_exists($camino.$dir_thumb))
          @
mkdir ($camino.$dir_thumb0777) or die("No se ha podido crear el directorio ".$camino.$dir_thumb);

     
// Aquí comprovamos que la imagen que queremos crear no exista previamente
     
if (!file_exists($camino.$dir_thumb.$prefijo_thumb.$nombre)) {
          echo 
$camino.$dir_thumb.$prefijo_thumb.$nombre." NO existía<br>\n";
          
$img = @imagecreatefromjpeg($camino.$nombre) or die("No se encuentra la imagen $camino$nombre<br>\n");

          
// miramos el tamaño de la imagen original...
          
$datos getimagesize($camino.$nombre) or die("Problemas con $camino$nombre<br>\n");

          
// intentamos escalar la imagen original a la medida que nos interesa
          
$ratio = ($datos[1] / $altura);
          
$anchura round($datos[0] / $ratio);

          
// esta será la nueva imagen reescalada
          
$thumb imagecreatetruecolor($anchura,$altura);

          
// con esta función la reescalamos
          
imagecopyresampled ($thumb$img0000$anchura$altura$datos[0], $datos[1]);

          
// voilà la salvamos con el nombre y en el lugar que nos interesa.
          
imagejpeg($thumb,$camino.$dir_thumb.$prefijo_thumb.$nombre);
     }


Para llamar a la función sencillamente hacer:

Código PHP:

thumbjpeg($imagen125); 

En este caso, '$imagen', es la imagen que queremos reducir, y '125', es la altura en píxeles que queremos que tenga la imagen reducida, de modo que el ancho quede proporcionado respecto a la imagen original.

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:

Si en lugar de GD2 disponemos de GD1, no podremos utilizar la función imagecopyresampled() y deberíamos conformarnos con la función imagecopyresized() , que utiliza los mismos parámetros, lo malo es que ésta última da como resultado una imagen de calidad más pobre. A cambio, es mucho más rápida que la anterior.

Así si tenemos GD2, podemos usar la que más nos interese, si queremos CALIDAD y no nos importa el número de ciclos consumidos en el servidor,

imagecopyresampled();

en caso contrario:

imagecopyresized();

Si lo que queremos es crear imágenes "al vuelo", sin guardarlas en ningún archivo (cosa poco recomendable si usamos la función de más calidad), el segundo parámetro de la función imagejpeg() no se debe de poner, quedando la llamada en el scritp que hay más arriba:

Código PHP:

imagejpeg($thumb); 

Bueno, démonos cuenta que este script solo sirve para reducir imágenes de tipo JPEG, no de otro, para otros formatos, tan solo habría que cambiar un par de funciones por las correspondientes en los formatos que nos interesen.

Ejemplo:

imagecreatefromjpeg() por imagecreatefrompng() o imagecreatefromwbmp() o etc.

y

imagejpeg() por imagepng() o imagewbmp() o etc.

Basilio Vera.
Cualquier pregunta: [email protected]

BooMeranGz 10/01/2003 19:54

Creando VirtualHost(s) y Dominios Virtuales en mi PC
 
Tema:
VirtualHost y Dominio Virtual

Pregunta:
¿Como trabajo con VirtualHost(s) y Dominios Virtuales en mi PC?

Respuesta:
Podemos tranquilamente usar dominios virtuales para llamar a nuestros proyectos directamente como http://miproyecto.com/ y no como http://127.0.0.22/ (o cualquier otra IP asignada).

Vamos a ver como:

Creando servidores virtuales con dominios virtuales para poder llamarlos desde nuestra misma PC:

Requisitos:
* Windows 98/ME/2000/NT/XP
* Tener Apache instalado como servidor
* Tener al menos PHP para trabajar (y probar)

Supongamos que vamos a trabajar con un nuevo web site en PHP cuyo dominio real es sitio.com y que tenemos el htdocs en el disco C:


Primer paso:

Creamos en nuestra carpeta C:\htdocs un directorio sitio1.com
Nos quedará esto: C:\htdocs\sitio1.com

En ese directorio debemos colocar los files que usemos para hacer el web site (todos).

En este ejemplo, abrimos el Block de notas y escribimos:

Código PHP:

<?
phpinfo
();
?>



Lo salvamos con el nombre de prueba.php en el directorio ..\sitio1.com\


Segundo Paso:

Ahora configuramos un VirtualHost para Apache:

Buscamos el file httpd.conf en dónde tenemos instalado Apache (dentro de la carpeta de Apache hay una que se llama "conf", este file está dentro de ella)

Lo abrimos con el Block de notas y nos vamos al final del mismo

Nos encontraremos con algo así:

Código:

#
# Use name-based virtual hosting.
#
#NameVirtualHost *

#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for requests without a known
# server name.
#
#<VirtualHost *>
#    ServerAdmin [email protected]
#    DocumentRoot /www/docs/dummy-host.example.com
#    ServerName dummy-host.example.com
#    ErrorLog logs/dummy-host.example.com-error_log
#    CustomLog logs/dummy-host.example.com-access_log common
#</VirtualHost>

Nosotros agregaremos nuestro VirtualHost aqui debajo y de esta manera:

Código:

## agregamos sitio1.com ###################
<VirtualHost 127.0.0.2>
 ServerAdmin [email protected]
 DocumentRoot C:/htdocs/sitio1.com
 ServerName sitio1.com
 ErrorLog logs/sitio1.com-error_log
 TransferLog logs/sitio1.com-access_log
</VirtualHost>



Salvamos el file httpd.conf y reiniciamos Apache.

Hasta aqui, si cargamos el navegador y ponemos:
http://127.0.0.2/prueba.php (enter), veremos la info de php en el mismo.

Ya tenemos configurado el VirtualHost con la IP deseada.


Tercer paso:

Vamos a configurar el dominio virtual para esa IP:

Vamos al directorio: C:\WINDOWS\SYSTEM32\DRIVERS\ETC, allí encontramos varios files, pero nos interesan los siguientes:
HOSTS y LMHOSTS.SAM

Renombramos HOSTS como HOSTS.SAM

Abrimos el Block de notas y escribimos:

127.0.0.1 localhost
127.0.0.2 sitio1.com


Lo salvamos en ese mismo directorio como HOSTS (sin extensión)

Nuevamente abrimos el Block de notas y escribimos:

127.0.0.1 localhost #PRE
127.0.0.2 sitio1.com #PRE


Lo salvamos en ese mismo directorio como LMHOSTS (sin extensión)

Copiamos HOSTS y LMHOSTS de C:\WINDOWS\SYSTEM32\DRIVERS\ETC\ a C:\WINDOWS\

Listo, hemos configurado el dominio virtual sitio1.com

Para probarlo, cargamos el navegador y ponemos:
http://sitio1.com/prueba.php (enter), veremos nuevamente la info de php en el mismo.

Nota final:

De esta manera podemos llamar a nuestros proyectos en php/cgi/etc. con un nombre de dominio virtual o con un subdominio (podria ser mi.sitio.com) y no complicarnos
con las IP que si tenemos varios proyectos se nos olvidan.

De igual manera recuerden que si agregan mas proyectos (por ejemplo otrositio.com) deberán agregar otro VirtualHost en el file \Apache\conf\httpd.conf, al final del que ya tenemos con otra IP (por ej.: 127.0.0.3) y luego agregar estos datos en los files HOSTS y LMHOST que tenemos en C:\WINDOWS\

Por último: Recuerden NO configurar un dominio virtual con un nombre verdadero que ya esté ruteado en internet, ya que si lo hacen cuando naveguen y quieran
ir al sitio real, no podrán, a menos que estopeen Apache y renombren los files HOSTS y LMHOST.
Recomiendo en esos casos que creen subdominios virtuales, por ejemplo si trabajan con yahoo.com (ja ja por un decir...), hagan un dominio virtual como miweb.yaoho.com.

Salu2.

BooMeranGz 13/01/2003 12:03

PHP como Módulo de Apache bajo Windows
 
Tema:
PHP como Módulo de Apache bajo Windows y no como un CGI.

Pregunta:
¿Como instalo PHP como Módulo de Apache en Windows?

Respuesta:
Trataré de explicar brevemente como configurar PHP4 como módulo del servidor Apache bajo Windows:

En mi caso, he instalado:

Apache 1.3.26
PHP 4.1.2


en los siguientes directorios, Uds. deberán guiarse por sus instalaciones:

c:\www\inetpub\Apache
c:\www\inetpub\php


y el htdocs lo tengo en otro disco:

D:\www\htdocs

¡¡¡OJO!!!:
Para que cada cambio funcione, deben hacer un Restart de Apache.

Pasos a seguir:

-Editar el file \Apache\conf\httpd.conf

-Buscar #ServerName y modificarla así:
ServerName http://

-Buscar DocumentRoot y modificarla así:
DocumentRoot "D:/www/htdocs"

-Buscar ScriptAlias /cgi-bin/ y modificarla así:
ScriptAlias /cgi-bin/ "C:/www/inetpub/Apache/cgi-bin/"

-Debajo de esa línea agregar:
ScriptAlias /php/ "C:/www/inetpub/php/"

-Buscar la sección Addtype application/ y modificarla o agregarle estas líneas:
Addtype application/x-httpd-php .php
Addtype application/x-httpd-php .php3
Addtype application/x-httpd-php .php4
Addtype application/x-httpd-php .phtml


-Buscar la sección Actions y agregar:
Action application/x-httpd-php "/www/inetpub/php/php.exe"


- Buscar DirectoryIndex index.html y modificarla así:
DirectoryIndex index.html index.htm index.php index.php3 index.shtml

Este paso lo hacen solo si Apache les da error al testearlo, algunas versiones lo necesitan
-----------------------------------------------------------------------
-Buscar la sección LoadModule y agregar:
LoadModule php4_module c:/www/inetpub/php/sapi/php4apache.dll
-Buscar la sección AddModule y agregar al final:
AddModule mod_php4.c
-----------------------------------------------------------------------


-Guardar el file \Apache\conf\httpd.conf

-> En win9x/Me, copiar el file: \php\php4ts.dll al directorio x:\windows\system
-> En win NT/2k/XP, copiar el file: \php\php4ts.dll al directorio x:\windows\system32

-En el directorio \php\, buscar el file \php\php.ini-dist, renombrarlo como php.ini
y moverlo así:
-> En win9x/Me, al directorio x:\windows\system
-> En win NT/2k/XP, al directorio x:\windows\system32


Testeamos la configuración de Apache:

Ahora, vamos a menu inicio -> Apache HTTP Server -> Configure Apache Server -> Test Configuration
Si la ventana que se abre nos da:
bla, bla, Syntax OK, ya podemos probar PHP con Apache,
sinó, deberán revisar otra vez los pasos y hacer las modificaciones necesarias.

* Para probar Apache:
-Vamos a menu inicio -> Apache HTTP Server -> Control Apache Server -> Start

-Ejecutamos el navegador y escribimos esta URL: http://localhost/ <enter>
Si aparece la página de bienvenida de Apache, está bien configurado.

* Para probar PHP4:
-Vamos a menu inicio -> Apache HTTP Server -> Control Apache Server -> Start

-Con el Block de notas escribimos:

Código PHP:

<? echo "Hola, mi primera página PHP"?>

-Y lo guardamos como mi_prog.php en el directorio: /htdocs/. (En texto plano. Todos
los programas deben guardarse aqui o en subdirectorios dentro de este).

-Ejecutamos el navegador y escribimos esta URL: http://localhost/mi_prog.php <enter>

-Si aparece el texto Hola, mi primera página PHP, ¡PHP4 está funcionando!


* Para saber si PHP4 funciona como Módulo de Apache o como CGI:

-Vamos a menu inicio -> Apache HTTP Server -> Control Apache Server -> Start

-Con el Block de notas escribimos:

Código PHP:

<? phpinfo(); ?>

-Y lo guardamos como info.php en el directorio: /htdocs/

-Ejecutamos el navegador y escribimos esta URL: http://localhost/info.php <enter>

-Debe aparecer un resúmen de la configuración de PHP4 bajo Apache, en el primer recuadro buscamos Server API

-> Si a la derecha dice CGI, PHP4 está funcionando como un CGI-BIN (add-on)
-> Si dice Apache, está funcionando como módulo directo del servidor Apache


Este ejemplo utiliza variables globales y solo funciona si PHP4 es un módulo de Apache:

-Con el Block de notas, escribimos este programa y lo guardamos como: /Apache/htdocs/prueba.php

Código PHP:

<?
if (!isset($PHP_AUTH_USER)) {
header('WWW-Authenticate: Basic realm="ACCESO RESTRINGIDO: Ingrese sus datos."');
header('HTTP/1.0 401 Unauthorized');
echo 
'AUTORIZACION REQUERIDA.';
exit;
}
else {
echo 
"Su nombre de usuario es: $PHP_AUTH_USER","<br>";
echo 
"Su contraseña es: $PHP_AUTH_PW","<br>";
}
?>

-En el navegador probamos: http://localhost/prueba.php <enter>

-Tambien pueden utilizar en vez de http://localhost, http://127.0.0.1


Esto es un agregado para los que tienen Windows XP:

* Resolver el problema de las sessions si no funcionan correctamente:

Lo único que tiene que hacer es crear un dir tmp en la raíz del HD primario (o sea, por ej:
C:\tmp ) y modificar en el php.ini la linea (en el root de c:\windows):

session.save_path= C:\tmp

@J@:
Sólo funciona si el TMP es creado en el directorio raiz del disco de arranque.

Salu2.

BooMeranGz 14/01/2003 14:33

Tools para aprovechar PHP bajo Apache en windows
 
Tema: Tools para aprovechar PHP bajo Apache en windows
Pregunta: ¿Donde consigo buenas utilidades para Apache/PHP?
Respuesta: Aquí, sigue estos links :)

Algunos recursos para trabajar con PHP:

A continuación, listaré algunos recursos (tools) que nos sirven para hacernos cada vez más
fácil la tarea de trabajar bajo Apache en windows con PHP (mysql, perl y otros)

A medida que encuentre otros útiles, los iré agregando con fecha. De igual manera si alguien encuentra algun tool que crea puede ir aqui, que me avise a [email protected] y lo vemos.

PHP Coder R2 Final Prerelease 3 (Agregado el 15-01-2003)
* Excelente editor de programas PHP con ejecución de los mismos teniendo instalado solo PHP4
home: www.phpide.de/programs.php

Beautify PHP v0.4.6, 02.10.2002
* Para limpiar y reorganizar el código PHP (saca lineas en blanco también)
home: http://www.bierkandt.org/beautify/
demo online: http://www.bierkandt.org/beautify/beautify_php.php
descarga: http://twtelecom.dl.sourceforge.net/..._php_0.4.6.zip

PHPConfig (GUI)
* Configura PHP desde win de la manrea más fácil, mediante una ventana :)
home: http://www.analogx.com/contents/down...rk/phpconf.htm
descarga: http://www.analogx.com/files/phpconfi.exe

PHP Debugger (DBG)
* ¿Necesitan revisar el código mientras se ejecuta y ver los posibles errores?
home: http://dd.cron.ru/dbg/

Turck MMCache for PHP 2.3.1 2003-01-12
* Acelerador de caché de ejecución de scripts PHP
home: http://www.turcksoft.com/en/e_mmc.htm
descarga: http://easynews.dl.sourceforge.net/s...e-2.3.1.tar.gz

Salu2.

Cluster 17/01/2003 16:06

Tema: Errores / configuración

Pregunta: Al intentar ejecutar PHP me da este error: "Security Alert! The PHP CGI cannot be accessed directly."

Respuesta:

En instalaciones de PHP como CGI, caso de PHP bajo PWS, IIS, OmniHTTPd y varios mas incluido Apache si es como CGI .. Suele presentar este error de configuración:

Security Alert! The PHP CGI cannot be accessed directly.
This PHP CGI binary was compiled with force-cgi-redirect enabled. This means that a page will only be served up if the REDIRECT_STATUS CGI variable is set, e.g. via an Apache Action directive.


La solución está en configurar php.ini con la siguiente directiva:

Directiva php.ini:
; cgi.force_redirect = 1

dejarlo a:
cgi.force_redirect = 0

Reiniciar el servidor HTTP q se use y listo.

Un saludo,

Cluster 18/01/2003 14:32

Tema: Funciones encriptación/desencriptación para PHP.

Pregunta: ¿Como puedo usar las funciones de 'mcrypt' para PHP bajo Windows?

Respuesta:

Su instalación:

* Sustituir la libreria php_mcrypt.dll original de php-4.3.0-Win\extensions por la que incluye este .zip

* Copiar libmcrypt.dll hacia el c:\windows\system

* php.ini editarlo:
; extensions=php_mcrypt.dll

dejarlo en (para activarla):
extensions=php_mcrypt.dll

Una vez instalado .. ejecutar el servidor HTTP que usemos (o reiniciarlo si lo teniamos en marcha) .. Hacer un <? phpinfo(); ?> para comprobar q este todo correcto ..

Para testearlo con ejemplos de código:
http://www.php.net/manual/en/ref.mcrypt.php


Testeado en PHP 4.3.0 bajo Windows98 como Módulo de Apache.

Un saludo,

ferny 22/01/2003 10:48

Tema: Usuarios activos
Pregunta: ¿Cómo sé los usuarios activos que hay en mi web?
Respuesta:

Tu servidor debe admitir funciones de lectura y escritura en archivos de texto.
Empezamos creando un archivo usuarios.txt EN BLANCO.
A continuación creamos otro archivo activos.php cuyo contenido sea:
Código PHP:

<? $archivo="usuarios.txt"//archivo donde almacenarán los usuarios activos
$inactivo=600//tiempo en segundos en que un usuario estará inactivo
$contar=0;
$fp=fopen($archivo,"r");
$tiempo=time();
$contenido=fread($fp,filesize($archivo));
fclose($fp);
$lineas=split("\n",$contenido);
$filas=file($archivo);
for (
$a=0$a sizeof($filas); $a++) {
$datos=split(':',$lineas[$a]);
$descontar=$tiempo-$inactivo;
if (
$datos[0] != $REMOTE_ADDR && $datos[1] > ($descontar)) {
$res.= $datos[0].":".$datos[1]."\n";
$contar++;
}}
$res.="$REMOTE_ADDR:$tiempo\n";
$contar++; // Ya tenemos el total de usuarios activos
$fp=fopen($archivo,"w");
fwrite ($fp,$res);
fclose($fp);
//Ahora damos formato a la salida, modifica esto a tu gusto
//Ten en cuenta que la variable $contar contiene el nº de usuarios activos
if ($contar==1){$contar="1 usuario activo";}else{$contar="$contar usuarios activos";}
echo 
$contar//Lo mostramos por pantalla
?>

Finalmente subes el activos.php y el usuarios.txt a tu server. Y luego en el lugar de tu página donde quieras ver los usuarios activos pones:
Código PHP:

<? include "activos.php"?>

Como puedes observar, puedes cambiar la ruta del archivo usuarios.txt (p. ej.: "../../usuarios.txt"); en este caso he supuesto que la aplicación y el archivo auxiliar están en la misma carpeta.

¡¡¡Espero que les sea de ayuda!!! :-D
Saludos :policia:

luigivirgo 22/01/2003 12:39

Manejo de fechas
 
Tema: Manejo de fechas.

Pregunta: Conversión formato fecha tipo Año-Semana-Dia semana a formato standar dd/mm/aaaa

Respuesta:

Tengo fechas en el siguiente formato: AAAASSD
donde:
AAAA = año 2003
SS = semana 04
D = dia de la semana 3 (miercoles)

Necesito convertirlas a formato común:
2003043 --> 22/01/2003

Código PHP:

$fecha="2003043";
$anio=substr($fecha,0,4);
$sem=substr($fecha,4,2);
$dia=substr($fecha,6,1)+1;
$diaanio=date("w",mktime(0,0,0,1,1,$anio));
echo 
date("d/m/Y",mktime(0,0,0,1,($sem-1)*7+$dia-$diaanio,$anio)); 


Cluster 28/01/2003 13:05

Tema: Descargas - Downloads de archivos.

Pregunta: ¿Como puedo hacer descargas con opción 'Resume'?

Créditos: MartinAcevedo

Respuesta:

Nota: Solo funciona bajo PHP como Módulo de Apache ..

Código PHP:

<?
$headers 
$_SERVER['HTTP_RANGE'];
// Si usas PHP inferior a 4.1.x usar $headers=$HTTP_RANGE; (y register_globlas a ON)

$filename="archivo.exe"

//aca se obtiene la cabecera que nos dice desde que byte tenemos que enviar
//lo guardamos en $bytes.

if ($headers[Range]){
$pos=strpos ($headers[Range], "bytes=");
$pos2=strpos($headers[Range],"-");
$bytes=substr ($headers[Range], $pos+strlen("bytes="),$pos2-($pos+strlen("bytes="))); 
}else{
$bytes=0;
}
settype ($bytes"integer");

$tarchivo=filesize($filename)-$bytes;
$ttotal=filesize($filename);

error_reporting(0);

header("Last-Modified: " gmdate("D, d M Y H:i:s T"filemtime($filename)));
header("Accept-Ranges: bytes");
header("Content-Length: " $tarchivo);
header("Content-Disposition: attachment; filename="."archivo.exe");
//indicamos al cliente que bytes del archivo vamos a transferir
//en este caso es desde $bytes hasta el final del archivo
//que es lo que nos pide el get right normalmente
//se puede modifcar tomando el ultimo byte del rango
//para hacer mirroring tipo kazaa (seria una version mas avanzada)
header("Content-Range: bytes ".$bytes."-".($ttotal-1)."/".$ttotal);

header("Content-Type: application/octet-stream");

//abrimos el archvo
$fp fopen($filename,'rb');

if (!
$fp) {
echo 
"error de apertura";
exit();
}
//nos movemos hasta el byte donde debemos empezar a mandar informacion
rewind ($fp);
fseek ($fp$bytes);

//mandamos el pedazo de archivo correspondiente
// la funcion fpassthru() es similar a readfile() en que manda el archivo por la salida estandar (mejor que usar un ciclo con fread adentro), 
// la diferencia con readfile es que debe ser abierto con fopen, esta funcion devuelve todos los bytes por la salida estandar
//  desde la posicion actual del puntero hasta el final del archivo
if(!fpassthru($fp)) {
echo 
"error de salida";
exit();
}

header("Connection: close");

exit();
?>


Cluster 30/01/2003 15:51

Tema: Manejo de Fechas y formularios HTML.

Pregunta: Como obener la fecha actual en listas desplegables HTML con la fecha de hoy seleccionada.

Respuesta:
Código PHP:

<?php
// etiqueta <form .... > y resto de campos necesarios ..

// obtener la fecha en formato numérico dia . mes y año.
$fecha_dia date ("d");
$fecha_mes date ("m");
$fecha_year date ("Y");

// ya puestos .. generaremos el mes en formato "legible" y en castellano.
// para eso usaremos un array con los nombres de los messes . indice comienzo en 1
$meses_nombres=Array(1=>"Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");

// Ahora un bucle para generar dinamicamente los Options de un Select (de cada uno de dia mes y año).
// Si el nº de dia (mes, año) coincide con el actual .. poner el tag "selected" ...

// selección dia
echo "<select name=\"dia\">\n";
for (
$contador=1$contador <=31$contador++){
   if (
$fecha_dia==$contador){
     echo 
"<option value=\"".$contador."\" selected>".$contador."\n";
   }else{
     echo 
"<option value=\"".$contador."\">".$contador."\n";
   }
}
echo 
"</select>\n";

// Selección mes
echo "<select name=\"mes\">\n";
for (
$contador=1$contador <=12$contador++){
   if (
$fecha_mes==$contador){
     echo 
"<option value=\"".$contador."\" selected>".$meses_nombres[$contador]."\n";
   }else{
     echo 
"<option value=\"".$contador."\">".$meses_nombres[$contador]."\n";
   }
}
echo 
"</select>\n";

// Selección año
echo "<select name=\"year\">\n";
for (
$contador=1995$contador <=2004$contador++){
   if (
$fecha_year==$contador){
     echo 
"<option value=\"".$contador."\" selected>".$contador."\n";
   }else{
     echo 
"<option value=\"".$contador."\">".$contador."\n";
   }
}
echo 
"</select>\n";
// resto de etiquetas (tag) de formulario .. incluido botones y 
?>

Un saludo,

MSDark 04/02/2003 14:16

Tema: Consultas SQL

Pregunta: Como se cuantos registros tengo en una tabla?

Respuesta:

Facil utilizando mysql_num_rows();

Código PHP:

//conexion a la BD

$sql="SELECT * FROM tabla";
$result=mysql_query($sql);
$num=mysql_num_rows($result);

echo 
"Total ".$num

Eso muestra como resultado Total 10 o el numero de registros de tu BD

Saludos :arriba:

MSDark 04/02/2003 14:28

Tema: Cookies

Pregunta: Como creo, leo y destruyo una cookie?

Repuesta:


Para crear una cookie usar setcookie("nombre","valor","tiempo");
Para leertla $HTTP_COOKIE_VARS["nombre_cookie"]

Para destuirla setcookie("nombre","valor",time()-3600);

Código PHP:

$fecha =date("d/mY | H:i:s");
setcookie("fecha",$fecha,time()+172800);// esta cookie dura 2 dias, tiene por nombre fecha y como valor la variable $fecha

if(isset($HTTP_COOKIE_VARS["fecha"]))//si la cookie existe
{
echo 
"Tu ultima visia fue el ".$HTTP_COOKIE_VARS["fecha"]; 
}
else
{
echo 
"Es la primera ves que me visitas";


Para destruir la cookie que acabamos de crear

Código PHP:

setcookie("fecha","x",time()-3600);//especificamos el nombre de la cookie, el valor no importa por eso "x" y la destruccion 

Mas info http://www.php.net/manual/es/function.setcookie.php


Saludos :arriba:

MSDark 15/02/2003 13:20

Tema: SESSIONS

Pregunta: Como manejo el SID de una session en la url?

Repuesta:

Para no tener que programar manualmente el PHPSESID en nuestros script y no preocuparnos por que el cliente no acepte las cookies de nuesta session deberemos tener en nuestro php.ini las siguientes directivas activadas (1) o descativadas (0)

session.use_cookies=0
session.use_trans_sid=1

Si no es asi o no tenemos acceso al php.ini deberemos poner en todos nuestros script que usen sessiones lo siguiente:

Código PHP:

ini_set("session.use_cookies","0");//descativamos el uso de cookies para nuestras sessions
ini_set("session.use_trans_sid","1");//activamos el uso de la url para enviar el SID de nuestra session 

Mas info http://www.php.net/........./function.ini-set.php

MSDark 04/03/2003 21:23

Otra para mail
 
Tema: Seguridad -Mail


Pregunta: Como puedo comprobar si un email es valido?

Respuesta:

Con una sencilla funcion donde reviso el email usando expresiones regulares, en case de no cumplirse devuelve FALSE si se cumple devuelve TRUE

Código PHP:

function comprobar_mail($mail){
  if (!
ereg("^([a-zA-Z0-9._]+)@([a-zA-Z0-9.-]+).([a-zA-Z]{2,4})$",$mail)){
      return 
FALSE;
  } else {
       return 
TRUE;
  }



Como usar?
simple, solo debo pasar por la funcion el email que quiero revisar y comprobar que es lo que esta funcion devuelve con un simple if como se muestra a continuacion

Código PHP:


$email
="[email protected]";
if(
comprobar_mail($email)){/*Si la funcion devuelve TRUE, osea que si esta correcto muestro un mensaje o lo que quiera mostrar*/
        
echo "Sintax Mail Correcto";
}else{
        echo 
"Sintax Mail Erroneo";/*Si devolivio False osea que esta mal muestro un mensaje o lo que quiera mostrar*/


Y para verificar la existencia de una direccion se puede utilizar la funcion

getmxrr() , pero solo en servidores *.nix

El uso de esta funcion para la verificacion de existencia de una direccion de mail se explica Aqui


Saludos :arriba:



La zona horaria es GMT -6. Ahora son las 20:30.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.