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/)

Kernellover 19/12/2005 16:37

Tema: Enviar correos en HTML y TXT de manera facil.
Pregunta: ¿Como envio desde php un correo en formato htmly txt a la vez?
Respuesta: Con la función mail, pero usando un truquillo para no complicarse la vida escriviendo el código a mano y así poder usar el dreamweaver u otros programas de diseño web.

Primero creamos un documento html que será el que recibiremos por correo, con sus tablas, css, etc... pero allí donde queramos escrivir algo por medio de nuestro escript de forma dinamica nos creamos una variable imaginaria que debería estar entre corchetes, en este ejemplo será nombre {nombre}

mail.html
Código HTML:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
b {
 font-family: Arial, Helvetica, sans-serif;
 font-size: 11px;
 color: #666666;
 text-align: justify;
 font-weight: bold;
 line-height: 14px }
td {
 font-family: Arial, Helvetica, sans-serif;
 font-size: 11px;
 color: #666666;
 text-align: justify;
 line-height: 14px;
}
.titular { font-family: Verdana, Arial, Helvetica, sans-serif;
 font-size: 14px;
 font-weight: bolder;
 letter-spacing: 9px;
 word-spacing: 4px;
 color: #FFFFFF;
 text-indent: 6px;
 text-transform: uppercase;
 line-height: 22pxcolor: #FFFFFF
}
-->

</style>
</head>
<body leftmargin="0" bottommargin="0" rightmargin="0" topmargin="0">
<table width="100%" border=0 cellpadding=4 cellspacing=4 bgcolor="#FFFFFF">
  <tr>
    <td bgcolor="#724041" class="titular">SOLICITUD DE INFORMACI&Oacute;N</td>
  </tr>
  <tr>
    <td><table border="0" cellpadding="6" cellspacing="0">
        <tr>
          <td><b><br>
            <br>
            <br>
            Este correo ha sido env&iacute;ado autom&aacute;ticamente</td>
        </tr>
      </table>
      <br>
      <br>
      <table width="100%" border="0" cellpadding="6" cellspacing="0">
        <tr>
          <td><table width="100%" border="1" cellpadding="4" cellspacing="0" bordercolor="#EFE2E2">
              <tr valign="top">
                <td width="25%"><b>Nombre:</b></td>
                <td width="75%">{Nombre}&nbsp;</td>
              </tr>
              </table>
            <br></td>
        </tr>
      </table></td>
  </tr>
</table>
</body>
</html>

Bueno, lo he retocado un poco a saco, pero se podrían poner mas campos o lo que se quisiera como se quisiera.

Luego podríamos tener un documento de texto con las mismas caracteristcicas para poder enviar el correo en ambos formatos, y de este modo el navegador mostrará el mas adecuado en función de la aplicación de correo que estemos usando.

mail.txt
Código:

SOLICITUD DE INFORMACIÓN
 
  Este correo se ha enviado automáticamente.
 
  - Nombre: {nombre}

Luego el código en un script a parte que llama a los dos archivos y remplaza las cadenas entre corchetes, como sigue. Sería digamos donde estaría la acción del script.

Código PHP:

/* * * * * * * * * * SCRIPT PHP (Envio de correo electrónico) * * * * * * */
 
$correo_destinatario "[email protected]"//La dirección que recibirá el correo
$correo_nombre "MI NOMBRE";        //El nombre de la persona del correo
$motivo_empresa "Solicitud de información"//El conocido Subject o Motivo
 
/* * * * * * * * * * FUNCIONES  PHP * * * * * * * * * * * * * * * * * * * */
 
//Esta función es la encargada de reemplazar las variables que nos hemos creado
//  entre corchetes por las recibidas por el fomulario, toma como parametro la
//  ruta del archivo y retorna todo el texto con las variables cambiadas.
function prepara_formato($archivo){
 global 
$Nombre,$_SERVER,$PHP_SELF;
 
$fp=fopen($archivo,"r");
 
$contenido=fread($fp,filesize($archivo)); 
 
fclose($fp);
 
$contenido eregi_replace("{Nombre}",$Nombre,$contenido);
 
// aquí añadiriamos los demás campos, por ejemplo el apellido:
 //$contenido = eregi_replace("{Apellido}",$Apellido,$contenido);
 
return $contenido;
}
 
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
 
$boundary md5(time().rand(1,100));
$priorities = array(1=>'1 (Highest)''2 (High)''3 (Normal)''4 (Low)''5 (Lowest)' );
$priority $priorities[3];
$headers "From: $correo_nombre <$correo_destinatario>\r\n";
$headers .= "Return-Path: $correo_destinatario\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "X-Mailer:PHP 5.1\r\n";
$headers .= "X-Priority: $priority\r\n";
//$headers .= "Content-Type: multipart/mixed;";
$headers .= "Content-Type: multipart/alternative; ";
$headers .= "boundary = $boundary\r\n\r\n";
 
if (
$Envia!=""){    // El botón del formulario se llama Envia
 
$Nombre trim(ucwords($Nombre)); //Nombre es un campo de este formulario
 
 // text e-mail
 
$archivo="mail.txt";
 
$contenido=prepara_formato($archivo);
 
$cuerpo_1 "--$boundary\r\n" .
  
"Content-Type: text/plain; charset=ISO-8859-1\r\n" .
  
"Content-Transfer-Encoding: base64\r\n\r\n";
 
$cuerpo_1 .= chunk_split(base64_encode($contenido));
 
 
// html e-mail
 
$archivo="mail.htm";
 
$contenido=prepara_formato($archivo);
 
$cuerpo_1 .= "--$boundary\r\n" .
  
"Content-Type: text/html; charset=ISO-8859-1\r\n" .
  
"Content-Transfer-Encoding: base64\r\n\r\n";
 
$cuerpo_1 .= chunk_split(base64_encode($contenido));
 
  
mail($correo_destinatario,$motivo_empresa,$cuerpo_1,$headers);




X.Cyclop 10/01/2006 18:41

Tema: Comentarios
Pregunta: Para qué poner comentarios?
Respuesta:
http://www.manualphp.es/articulo-hac...os-en-php.html

elangelcaido 18/01/2006 04:14

Ordenacion Directa
 
Pregunta: ¿Como ordenar un array por el método de ordenacion directa?
Respuesta: Aqui os pongo las funciones comentadas. Es la ordenacion de un array de numeros, para ordenar objetos a traves de sus atributos seria cambiar 4 cosas.
Código PHP:

<?php
$array
=array(3,45,8,2,5,6,20,9,100,70);
print_r($array);
ordenarInsercionDirecta($array);
echo 
'<br>';
print_r($array);
//FUNCIONES DE ORDENACION DIRECTA
/**
  * Buscar dónde debería estar cierto número si lo insertáramos en la parte ordenada.
  * Es una simple búsqueda secuencial en secuencia ordenada. Si el elemento que
  * vamos a insertar es mayor que todos los de la parte ordenada, el método devuelve
  * -1 (es decir, que "no debería estar ahi"; en este caso, es tanto como decir que
  * no hace falta moverlo).
  * @param $array El array a modificar. Recibe una referencia
  * @param $tamano Número de elementos del array (empezando por la izquierda) que forman parte del trozo ya ordenado.
  * @param $numero Número para el que se pretende encontrar sitio dentro del trozo mencionado.
  * @return La posición que debería ocupar "número" dentro de ese trozo; es -1 si "numero" ya es más grande que todos los elementos del trozo.
  */
function buscarPosicion(& $array$tamano$numero) {
    
$posicion = -1;
    for (
$i 0$i $tamano$i ++)
        if (
$posicion == -1)
            if (
$array[$i] > $numero)
                
$posicion $i;
    return 
$posicion;
}

/**
 * Mover una serie de elementos una posición a la derecha.
 * @param $array El array a modificar. Recibe una referencia
 * @param desde Posición del primer elemento que debe verse afectado por el desplazamiento.
 * @param hasta Posición del último elemento que debe verse afectado por el desplazamiento.
 */
function moverHaciaLaDerecha(& $array$desde$hasta) {
    
// Ya sabemos que no podemos empezar a mover en "desde" (eso sería "empujar" los elementos)
    // sino que tenemos que empezar por el lado "hasta" con un bucle descendente ("tirar" de los elementos)
    
for ($i $hasta$i $desde$i --)
        
$array[$i] = $array[$i -1];
}

/**
 * Ordena el array por el metodo de inserción directa.
 * @param $array El array a modificar. Recibe una referencia
 */
function ordenarInsercionDirecta(& $array) {
    
$i 0;
    
$posicion 0;
    
$numero 0;

    
// Para cada elemento del array, buscaremos su posición adecuada; este bucle es el que recorre
    // dichos elementos.
    // Nótese que no empieza en 0, porque el primer elemento es, de por si, un "sub-array ordenado". Podríamos
    // empezar en 0, pero no tendría ningún efecto; empezamos a buscarle sitio al segundo
    // elemento (índice 1).
    
for ($i 1$i count($array); $i ++) {
        
$numero $array[$i];
        
//mensaje("Colocar el elemento de posición " + i + " (es un " + numero + ")");
        
$posicion buscarPosicion($array$i$numero);
        
//if (posicion == -1) mensaje("(Ya esta en su sitio)"); else mensaje("Su posición adecuada es la de índice " + posicion);
        // Si la posición es -1, es que el elemento ya está en su sitio y no
        // hace falta insertarlo en el "sub-array ordenado".
        
if ($posicion != -1) {
            
//mensaje("Desplazamos los elementos entre los índices " + posicion + " y " + (i-1) + " (inclusive) una posición a la derecha");
            // Movemos a la derecha los elementos que hay entre la posición de destino
            // y el final de la parte ordenada (inclusive), para hacerle un hueco libre
            // al elemento que pretendemos poner en la posición de destino
            
moverHaciaLaDerecha($array,$posicion$i);
            
//mensaje("Y ponemos en su sitio el " + numero);
            // Hecho el hueco, ponemos en él el número en cuestión
            
$array[$posicion] = $numero;
        }
        
//mensaje("Y ahora la matriz queda (la zona ya ordenada se subraya):\n" + toString());
        //mensaje(subrayar(i));
    
}

}


jotamachuca 25/01/2006 18:32

Tamaño de Archivo en Formato Humano
 
Pregunta: Como obtener el tamaño de un archivo en formato entendible para el ser humano común y silvestre, como 150KB, 250MB ,etc ???
Respuesta Con el siguiente método

Código PHP:

<?php
function tamano_humano($size $precision )
{
   if(
$size == 0)
   {
       return 
"0 Bytes";
   }
   
   
$filesizename = array(" Bytes"" KB"" MB"" GB"" TB"" PB"" EB"" ZB"" YB");
   return 
round($size/pow(1024, ($i floor(log($size1024)))), $precision ) . $filesizename[$i];
}
?>

Este método lo obtuve de php.net, pero le agregue el argumento de precisión... vamos que algo tenia que hacerle :-)

Espero que les sirva..

Saludos

jam1138 14/02/2006 03:32

Tema: Manejo de mensajes de error.
Pregunta: ¿Para qué sirve anteponer el arroba (@) a una sentencia?
Respuesta: Evita se muestre el mensaje de error si lo hay.

Es tema recurrente que, viendo scripts ajenos, se encuentre con un arroba antes de una función y no se sepa el motivo. Pués como respondí arriba, la función de esto es evitar que se muestre el mensaje de error devuelto por PHP en caso que lo hubiese.

Probemos creando un archivo con una sentencia erronea:
Código PHP:

<?php
mysql_connect
(); // faltan parámetros
echo "Esto es una prueba";
?>

Esto mostraria algo como:
Cita:

Warning: mysql_connect(): Acceso negado para usuario: 'ODBC'@'localhost' (Usando clave: NO) in ruta/del/archivo.php on line 2
Esto es una prueba
En efecto hay un error, faltan los parámetros para establecer la conexión.

Ahora veamos el mismo ejemplo pero con la arroba antepuesta a la función que proboca el error:
Código PHP:

<?php
@mysql_connect(); // faltan parámetros
echo "Esto es una prueba";
?>

Nos debería mostrar solo el texto correspondiente a "Esto es una prueba". El error persiste, solo evitamos el mensaje. La utilidad de esto es evitar estos mensajes en una aplicación terminada; no deben interezarle al usuario final, puede confundirlo.

Cabe decir (al margen de esta FAQ) que hay maneras de controlar de manera "global" los mensajes de error que han de ser mostrados, vease el uso de la función error_reporting().

turco_7 27/02/2006 00:11

TEMA: Uso de las funciones mktime() y date()
PREGUNTA: ¿ Como puedo hacer un calendario ?
RESPUESTA: Con las funciones mktime() y date() alcanza!!!


La mayoría del script funciona en base a la funcione mktime()

Código PHP:

<table>
<?php
include("funciones.php");
$mess $_GET['mess'];
$anio $_GET['anio'];
if(
$mess == "" || $anio == ""){
    
$anio date("Y");
    
$mess date("n");
}
    
$ultimo date("t",mktime(000$mess1$anio));
    if(
$mess == '12' || $mess == '1'){
        if(
$mess == '12'){
            
$next 1;
            
$prev $mess -1;
            
$anion $anio 1;
            
$aniop $anio;
        }
        if(
$mess == '1'){
            
$next $mess 1;
            
$prev 12;
            
$anion $anio;
            
$aniop $anio -1;        
        }
    }else{
        
$next $mess 1;
        
$prev $mess 1;    
        
$aniop $anio;
        
$anion $anio;
    }
    echo 
"<tr><th colspan=7>$anioo</th></tr><tr>";
echo 
"<tr><td><a href='calendario.php?mess=$prev&anio=$aniop'><<</a></td><th colspan=5>$mes[$mess] $mess</th><td><a href='calendario.php?mess=$next&anio=$anion'>>></td></tr><tr>";
echo 
"<tr><td>D</td><td>L</td><td>M</td><td>M</td><td>J</td><td>V</td><td>S</td></tr>";
    
$diaa "1";
    while(
$diaa <= $ultimo){
        
$dia date("D",mktime(0,0,0,$mess,$diaa,$anio)); # retorna el dia de la semana en letras...
        
$fecha date("d",mktime(0,0,0,$mess,$diaa,$anio)); #retorna el dia del mes en 01/31
        
$dia_semana date("w",mktime(0,0,0,$mess,$diaa,$anio)); #retorna el dia de la semana en numero

        
if($dia == "Sun"){
            echo 
"</tr><tr>";
        }
        if(
$fecha == "01"){
            
$i=0;
            while(
$i != $dia_semana){
                echo 
"<td>&nbsp;</td>";
                
$i++;
            }
        }
        echo 
"<td>$fecha</td>";
        
$diaa++;
    }
    echo 
"</tr>";
?>
</table>

Primero verifico las variables $mess y $anio para saber que mes te tengo que mostrar por ejemplo si venis de febrero la variable mess tiene que tener el valor 1 porque al momento de imprimir el link de "Mes anterior" le puse 1 a la variable mess, y lo mismo con el año...en el caso de que quieras ver marzo las variables $mess vale 3 y asi ..
Código PHP:

<?
$mess 
$_GET['mess'];
$anio $_GET['anio'];
if(
$mess == "" || $anio == ""){
    
$anio date("Y");
    
$mess date("n");
}
?>

Luego verifico la cantidad de días que tiene el mes a mostrar por ejemplo enero tiene 31 días, por lo tanto la variable $ultimo es igual a 31.
Código PHP:

<?
$ultimo 
date("t",mktime(000$mess1$anio));
?>

Creo una réplica de la variable año, para despues hacer un control ... y en algunos casos cambiar el año
Código PHP:

<?
$ultimo 
date("t",mktime(000$mess1$anio));
    
$anioo $anio;
    if(
$mess == '12' || $mess == '1'){
        if(
$mess == '12'){
            
$next 1;
            
$prev $mess -1;
            
$anion $anio 1;
            
$aniop $anio;
        }
        if(
$mess == '1'){
            
$next $mess 1;
            
$prev 12;
            
$anion $anio;
            
$aniop $anio -1;        
        }
    }else{
        
$next $mess 1;
        
$prev $mess 1;    
        
$aniop $anio;
        
$anion $anio;
    } 
?>

En este caso uso dos variables ... $aniop que hace referncia al año previo y $anion al proximo (next) esto me sirve para mostrar las flechitas << >> que serviria para moverse por los meses... dependiendo de cual sea el caso incremento o decremento
luego imprimo...
Código PHP:

<?
    
echo "<tr><th colspan=7>$anioo</th></tr><tr>";
echo 
"<tr><td><a href='calendario.php?mess=$prev&anio=$aniop'><<</a></td><th colspan=5>$mes[$mess] $mess</th><td><a href='calendario.php?mess=$next&anio=$anion'>>></td></tr><tr>";
echo 
"<tr><td>D</td><td>L</td><td>M</td><td>M</td><td>J</td><td>V</td><td>S</td></tr>"
?>

Defino la variable $diaa que es para controlar el bucle que imprimirá
los días del mes
Código PHP:

<?
    $diaa 
"1";
    while(
$diaa <= $ultimo){
?>

dentro del while ... uso la funcion mktime() para que me devuelva el dia que en función a la variable $diaa

el mktime combinado con la función date() devuelve el dia de la semana sun mon thu wen .. una cosa asi ... es para saber mas en que casillero ponerlo ...
Código PHP:

<?
$dia 
date("D",mktime(0,0,0,$mess,$diaa,$anio));
?>

Lo mismo hago con esta línea a diferencia que obtengo el día en numeros .. por ejemplo 01 02 03 04 05 06 etc ...
Código PHP:

<?
$fecha 
date("d",mktime(0,0,0,$mess,$diaa,$anio));
?>

En $dia_semana alamceno el numero de día de la semana .. el día 1 2 o 3 así hasta siete .. esto me sirve para el caso de cuando el día 1 de febrero empieza el dia miercoles, entonces esto me sirve para saber en que casillero escribo la fecha ...
Código PHP:

<?PHP
$dia_semana 
date("w",mktime(0,0,0,$mess,$diaa,$anio));
?>

Despues chequeo estas cosas...
Código PHP:

<?php
        
if($dia == "Sun"){
            echo 
"</tr><tr>";
        } 
?>

Si el día es igual domingo cierro la fila y abro una nueva ..
dado de que el calendario lo imprimo asi ..

L M M J V S D

Despues pregunto si el día es primero, para saber cuantos casilleros me tengo que mover a la derecha .. acá es donde uso la variable $dia_semana
Código PHP:

<?
        
if($fecha == "01"){
            
$i=0;
            while(
$i != $dia_semana){
                echo 
"<td>&nbsp;</td>";
                
$i++;
            }
        }
?>

imprimo la variable $fecha e incremento la variable diaa que es la que controla el bucle ...

Código PHP:

<?
        
echo "<td>$fecha</td>";
        
$diaa++; 
?>

Espero haberme explicado bien ... cualquier duda .. ya saben ...

Recuerden que todo es en base a las funciones mktime y date

X.Cyclop 10/03/2006 17:05

Tema: Web en varios idiomas.
Pregunta: ¿Cómo puedo hacer una web en varios idiomas mediante arrays?
Respuesta:

Antes que nada tienes que checar la configuración del usuario:
Código PHP:

<?php 

if (isset ($_GET['lang']))
{
    
$idioma $_GET['lang'];
}
elseif (
preg_match("/^es/"$_SERVER['HTTP_ACCEPT_LANGUAGE'])) 
{
$idioma "es";
}
else 
{
$idioma "en";
}
?>

Ahora, creas los arrays:
Código PHP:

<?php

$idiomas 
= array( 
    
'en' => array(
        
'idioma' => 'English',
        
'otro_idioma' => 'es',
        
'buscar' => 'Search',
        
'portada' => 'Home'//Menú
        
'foros' => 'Forums',
        
'boletin' => 'Newsletter',
        
'enlazame' => 'Link Me',
        
'acerca' => 'About',
        
'contacto' => 'Contact',
        
'faq' => 'Faq',
        
'noticias' => 'News'//Contenido
        
'copyright' => 'All Rights reserved'//Copyright

    
),
    
'es' => array(
        
'idioma' => 'Espa&ntilde;ol'
        
'otro_idioma' => 'en',
        
'buscar' => 'Buscar',
        
'portada' => 'Portada'//Menú
        
'foros' => 'Foros',
        
'boletin' => 'Boletín',
        
'contacto' => 'Contacto',
        
'faq' => 'FAQ',
        
'noticias' => 'Noticias',
        
'copyright' => 'Todos los derechos reservados' //Copyright
    
),
);
?>

Para cambiar de idioma mediante un link pones:
Código PHP:

<a href="index.php?lang=<?php echo $idiomas['en']['otro_idioma']; ?>">Espa&ntilde;ol</a> 
<a href="index.php?lang=<?php echo $idiomas['es']['otro_idioma']; ?>">English</a>

Y en los links:
Código PHP:

<a href="index.php" title="<?php echo $idiomas[$idioma]['portada'];?>">+ <?php echo $idiomas[$idioma]['portada'];?></a>

[Eliminen los tags y junten todo el código]

Me basé en el WAMP porque no se mucho de PHP.:borracho:

:arriba:

haron 29/03/2006 08:05

textos en diferentes fuentes
 
es un truco para poder presentar textos con fuentes diferentes a las tradicionales en la pagina web sin complicaciones mayores.

los requisitos para hacer posible este truco son disponder de un hosting con PHP y tener ciertas nociones de este lenguage.

pasos a seguir:

1. selecciona del panel de control la fuente que mas te guste (Panel de Control >> Fuentes) y arrastrala hasta el escritorio. es la manera mas facil de copiar la fuente. dale un nombre significativo, por ejemplo "fuente.ttf".

2. sube la fuente a la carpeta donde guardas las imagenes en el servidor.

3. sube tambien este archivo en PHP en la misma carpeta donde guardas las imagenes. llamale "text.jpg.php":
Código:

<?php
header("Content-type: image/jpeg");

// constants
define("FONT_SIZE", "24");
define("FONT_FAMILY", "fuente.ttf");

// parameters
$text = isset($_REQUEST["text"])? $_REQUEST["text"]: "???";

// image dimensions
$box = imagettfbbox(FONT_SIZE, 0, "zecbt.ttf", $text);
$width = FONT_SIZE + 4;
$height = $box[2] - $box[0] + 10;

// new image
$img = @imagecreate($height, $width);
imagecolorallocate($img, 0xff, 0xff, 0xff);  // white

// text
$black = imagecolorallocate($img, 0x00, 0x00, 0x00);  // black
imagettftext($img, FONT_SIZE, 0, 0, $width - 6, $black, FONT_FAMILY, $text);

imagejpeg($img);
imagedestroy($img);
?>

4. sube a tu servidor una pagina que contenga la siguiente linea. llamale "prueba.php":
Código:

<img src="images/text.jpg.php?text=<?=urlencode("Este texto tiene una fuente diferente a la usual")?>"  />
"urlencode" se utiliza para formatear el texto antes de pasarlo como parametro. en este caso la frase "Este texto tiene una fuente diferente a la usual" la convertiria a "Este+texto+tiene+una+fuente+diferente+a+la+us ual"

al abrir la pagina puedes ver una imagen que muestra el texto en la fuente seleccionada.

parece un poco complicado, pero luego puedes reutilizar el script "text.jpg.php" en muchos sitios de tu pagina.

Computer XTress 11/04/2006 15:14

Pasar variables entre paginas de forma segura (codificadas)
 
Pregunta:

Una de mis paginas carga su contenido de acuerdo a un GET / POST enviado por una página anterior.

¿Como puedo crear este proceso de forma segura?


Respuesta:

Muy facil Señor! Aqui le dejo dos funciones que van a hacer el trabajo por usted:

FUNCION 1: "Para codificar antes de enviar".

Código PHP:

function encode_this($string) {
    
$control "extra";
    
$tmp_string $string;
    
$string $control.$tmp_string.$control;

    
$string base64_encode($string);

    return(
$string);


ok... encode_this() recibe el string a codificar, puede ser un numero, claro.

Al string le agregara un codigo de control DELANTE y DETRAS, para reforzar un poco el tema.

Luego codifica TODO el string generado con Base64, y queda un chorizo de caracteres dificilmente identificable... algo asi como una abominación informática :-D


FUNCION 2: "Para decodificar al recibir".

Código PHP:

function decode_this($string) {
    
$string base64_decode($string);
    
$control "extra";
    
$string str_replace($control"""$string");

    return 
$string;


Esta ultima funcion, lo que hace es:
1. Decofica en base64 el string entero (la abominación).
2. 'corta' del string el string de control que habia DELANTE y DETRAS.
3. Retorna el valor verdadero que se intentaba enviar.


¿COMO SE USA?

Pagina 1 (indice.php)

Código PHP:

/* $id puede ser un dato que tomamos de la base, o una lista generada, etc*/
$id encode_this($id);
echo 
"<a href='/abrir_pagina.php?id_secreto=".$id."'>Cargar pagina 234</a>"

Pagina 2 (/abrir_pagina.php)

Código PHP:


// $fecha_de_tu_cumpleaños es la clave, tomada de algun otro lado.

if ($_GET['id_secreto]) {

    if ( ($id = decode_this(['
id_secreto])) != $fecha_de_tu_cumplea&#241;os) {
               
echo "Pleas wait...<br>";
               exit();
        } else {
                
header("location: www.pentagono.gov/archivosecreto_de_ovnis.php?id=".$id);
        }
} else {
    echo 
"¿A donde crees que vas sin tu ID super secreto?<br>";
    exit();


Bueno esto es bastante básico, pero sirve como punto de partida. Hay muchos otros elementos que se podrian controlar, e incluso el "string de control" deberia ser distinto dependiendo el caso y lo que se quiera "mover" entre páginas...

SALUDOS!

eDU

DarioDario 15/04/2006 13:31

Tema: Descargas.

Pregunta: ¿Como puedo contar la cantidad de veces que se descargo un archivo?

Respuesta:

El tema mas que nada pasa en como contamos. Para poder realizarlo hay que forzar la descarga por medio de cabeceras. No nos interesa contar cuantas veces se ha empezado a descargar un archivo, si no cuantas veces se descargo. Algunos script cuantan la cantidad de veces que empezo, ¿ Pero que sucede si empezamos y por alguna razón abortamos la descarga? Esto es lo que queremos solucionar.

El thread donde se realizo es este. El codigo basicamente es el siguiente.

Código PHP:

// Si tenemos usuarios registrados aqui deberia ir el codigo para identificarlo.
// Y si no tenemos usuarios registrados aqui pueden hacer cualquier cosa que necesiten.

header"Content-Type: application/octet-stream");
header"Content-Length: ".filesize($ElFichero));
header"Content-Disposition: attachment; filename=".$TheFile."");
readfile($ElFichero);

//El punto clave de todo esto es la siguiente instrucción
//Aqui es donde tenemos que sumar uno al contador para que se actualice
//esta porcion de codigo solo se ejecutara si el archivo fue descargado con exito, no si se aborta o demas.
algunaDB_query("A descargado el archivo!!!"); 

Espero que les guste, y cualquier comentario correccion o cualquier duda sobre esta FAQ, pueden enviarme un PM.

Saludos.

atak 19/04/2006 23:32

Variables de Sesion
 
Tema : Variables de SESSION

Pregunta : Desarrollar un Script para Hallar el mayor y menor promedio de 05 notas asimismo el nombre del Alumno.

Respuesta :
En esta Oportunidad usaremos variables de Session eee aqui el codigo amigos.

Copyright Atak :-)


1.- Archivo main.html ( formulario de ingreso de datos )

Código PHP:



<HTML>
<
HEAD>
<
TITLE>Promedios</TITLE>
</
HEAD>
<
BODY>
<
FORM METHOD=POST ACTION="calcula.php">
Nombre <INPUT TYPE="text" NAME="nombre">
<
br>
Sexo <INPUT TYPE="text" NAME="sexo">
<
br>
Direccion: <INPUT TYPE="text" NAME="direccion">
<
br>
Nota Esp.: <INPUT TYPE="text" NAME="notae">
<
br>
Nota Ingl.: <INPUT TYPE="text" NAME="notai">
<
br>
Nota Prog: <INPUT TYPE="text" NAME="notap">
<
br>
<
INPUT TYPE="submit" value="Enviar">
</
FORM>
<
br>
<
A HREF="elimina.php">Eliminar variables de SESSION</A>
</
BODY>
</
HTML



2.- Archivo calcula.php ( Archivo que haremos los respectivos calculos )

Código PHP:


<?php
session_start
();
/// valores Recibidos
$nombre=$_POST['nombre'];
$nota1=$_POST['notae'];
$nota2=$_POST['notai'];
$nota3=$_POST['notap'];
$promedio=($nota1+$nota2+$nota3)/3;
/// NOtas de  0 a 20
if (!isset($_SESSION['nombre']))
{
    
$_SESSION['mayor']=0;
    
$_SESSION['menor']=20;
    
$_SESSION['nommax']="";
    
$_SESSION['nommin']="";
    
$_SESSION['nombre']=$nombre;
    
$_SESSION['cuenta']=1;    
            
    if (
$promedio>$_SESSION['mayor'])
    {
        
$_SESSION['mayor']=$promedio;
        
$_SESSION['nommax']=$nombre;
    }
    if(
$promedio<$_SESSION['menor'])
    {
        
$_SESSION['menor']=$promedio;
        
$_SESSION['nommin']=$nombre;
    }
    
header("Location: main.html");
    
}
else
{
if (
$_SESSION['cuenta']==5)
    {
        
// Resultados
        
echo "Maxima Nota <BR>";
        echo 
"Alumno : ".$_SESSION['nommax']."<BR>";
        echo 
"Nota : ".$_SESSION['mayor']."<br>";

        
///
        
echo "Minima Nota <BR>";
        echo 
"Alumno : ".$_SESSION['nommin']."<BR>";
        echo 
"Nota : ".$_SESSION['menor']."<br>";
    }
else
    {
        
// Registra
    
$_SESSION['cuenta']=$_SESSION['cuenta']+1;
    if (
$promedio>$_SESSION['mayor'])
    {
        
$_SESSION['mayor']=$promedio;
        
$_SESSION['nommax']=$nombre;
    }
    if(
$promedio<$_SESSION['menor'])
    {
        
$_SESSION['menor']=$promedio;
        
$_SESSION['nommin']=$nombre;
    }    

    
header("Location: main.html");

    }
}
?>


3.- Archivo elimina.php ( elimina las variables de SESSION)

Código PHP:


<?php
    session_start
();
    if (!isset(
$_SESSION['nombre']))
    {
    
session_unset();
    
session_destroy();    
    }
header("Location: main.html")
?>


Salu2

:arriba:

Computer XTress 31/05/2006 02:17

problemas al forzar descargas / redireccionar (perdida de valores de $_SESSION[])
 
Tema: Headers / Descargas forzadas

Pregunta: CASO1: Cuando uso un header() para redireccionar, no se guardan los cambios en las variables de session.
CASO2: Mi script de control de desarcagas funciona pero no permite navegar el sitio hasta que el download finaliza

Respuesta:
Para el CASO 1 lo primero es asegurarse que el SID (Identificador Unico de Session) se esté propagando por cookies y no por URL, ya que si este se está propagando por cookies y a su vez el browser no está siendo capaz de aceptar las cookies, esta puede ser la causa de la pérdida de valores de session. (Tener a bien realizar este control antes de utilizar la información a continuación)

En ambos casos la solucion es utilizar el comando session_write_close(); que forzara el guardado de los cambios en session (variables) y cerrará la sesion sin destruirla (es decir, cuando vuelvo a hacer un session_start() la misma session sigue en pie).

Este problema sucede ya que PHP guarda los cambios en las variables de session cuando el
script finaliza, y dado que un header() no significa el fin del script (sino un comando más), es necesario "forzar" el guardado y cierre de sesion.

Recordar que siempre se debe respetar el orden de los comandos de sesion, por ejemplo:

Código PHP:

session_start();

// Trabajamos con las variables de session
$_SESSION['contador']++;
$_SESSION['time'] = time();

(...)

// Antes de redireccionar, guardamos la session

session_write_close();
//redireccionamos
header("Location: /nueva_pagina.php"); 

Para el caso 2 haremos exactamente lo mismo. Colocaremos un "session_write_close()" antes de llamar a la función header(); (que para este caso, nos estará redireccionando al archivo a descargarse).

Espero sirva, más info en ar2.php.net buscar término: header()

[Edit: Gracias cluster por tu atención]

nachopro 09/06/2006 21:44

Tema: Listar archivos de directorios+subdirectorios
Prólogo: Ya era hora de devolver un poquito de todo lo que este foro me ha dado :si:

Pregunta: ¿Cómo puedo listar el contenido de una carpeta en mi webserver para la gente pueda descargar archivos, dado que el browser del apache trunca nombres largos y es feo?

Respuesta: Creá un index.php, con el siguiente contenido, y pongo en el directorio que desees (este script permite entrar en los subdirectorios pero no ir más atrás del directorio 'root')

Código PHP:

<?
header
("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0"false);
header("Pragma: no-cache");
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Explorando /<? echo $_GET['ruta']; ?></title>
</head>
<body>
<pre>
<?
if (empty($_GET['ruta']) || ereg("^\."$_GET['ruta'])) {
    
$dir './';
}
else {
    
$dir $_GET['ruta'];
}
if (
is_dir($dir)) {
    
    function 
tamano($bytes) {
        
$largo strlen($bytes);
        if (
$largo 4) {
            
$divisor 1;
            
$unidad 'B';
        }
        else if (
$largo && $largo 7) {
            
$divisor 1024;
            
$unidad 'KB';
        }
        else if (
$largo && $largo 10) {
            
$divisor pow(10242);
            
$unidad 'MB';
        }
        else if (
$largo && $largo 12) {
            
$divisor pow(10243);
            
$unidad 'GB';
        }
        else {
            
$divisor pow(10244);
            
$unidad 'TB';
        }
        
$salida[0] = round(($bytes $divisor), 2);
        
$salida[1] = $unidad;
        return 
$salida;
    }

    
$gd opendir($dir);
    if (
$gd) {
        
$rn "\r\n";
        while ((
$archivo readdir($gd)) !== false) {
            if (
ereg("^(.)*\.[a-zA-Z0-9]{1,3}$"$archivo)) {
                if (
$archivo == 'index.php') { break; }
                
$extension strtolower(substr($archivo, -3));
                switch (
$extension) {
                    case 
'mp3':
                    case 
'wma':
                        
$icono 'snd';
                        break;
                    case 
'jpg';
                    case 
'tif';
                    case 
'png';
                        
$icono 'pic';
                        break;                    
                    default:
                        
$icono 'unk';
                        break;
                }
                
                
$iconos [] = $icono;
                
$archivos[] = $archivo;
                
$fechas[] = $fecha;
                
$tamanos[] = tamano(filesize($dir.$archivo));
            }
            else if (
$archivo != '.' && $archivo != '..') {
                
$carpetas[] = $archivo;
            }
        }
        
closedir($gd);
        
        if (
$dir != '.') {
            
$ruta explode('/'$_GET['ruta']);
            
$tot_subdir count($ruta) - 2;
            
krsort($ruta);
            
$volver '<img src="bck.png"> <a href="?ruta=';
            for (
$i 0$i $tot_subdir$i++) {
                
$volver .= $ruta[$i].'/';
            }
            
$volver .= '">volver</a>'.$rn;
            echo 
$volver;
        }
        
        if (
is_array($carpetas)) {
            
natcasesort($carpetas);
            foreach (
$carpetas as $valor) {
                echo 
'<img src="fol.png"> <a href="?ruta='.$_GET['ruta'].urlencode($valor).'/">'.$valor.'</a>    '.$rn;
            }
        }
        
        if (
is_array($archivos)) {
            if (
natcasesort($archivos)) {
                foreach (
$archivos as $clave => $valor) {
                    echo 
'<img src="'.$iconos[$clave].'.png"> <a href="'.$dir.urlencode($valor).'">'.$valor.'</a>    ';
                    
printf("%6.2f "$tamanos[$clave][0]);
                    echo 
$tamanos[$clave][1];
                    echo 
$rn;
                }
            }
        }
    }
}
else {
    echo 
'El directorio \''.$dir.'\' no es v&aacute;lido.'
}
?>
</pre>

Espero que les sea de utilidad :arriba:

nachopro 09/06/2006 21:56

Tema: Generar menús desplegables HTML

Pregunta: ¿Cómo puedo generar <option>s de forma fácil y cómoda?

Respuesta: Estas funciones son la solución!

Generando desde MySQL: a esta función se le pasa una consulta SQL que traiga el ID y el String de los items guardados en la base.
El segundo parámetro es opcional, el cual recibe un ID y si es igual a alguno de los que trae la consulta, imprime la propiedad 'selected' del tag <option>
Código PHP:

<?
function listar_items($sql$marcar 0) {
    if (
$marcar 0) {
        
$result mysql_query($sql);
        while (
$row mysql_fetch_row($result)) {
            
?>
            <option value="<? echo $row[0]; ?>"<? if ($row[0] == $marcar) { echo ' selected'; } ?>><? echo $row[1]; ?></option>
            <?
        
}
    }
    else {
        
$result mysql_query($sql);
        while (
$row mysql_fetch_row($result)) {
            
?>
            <option value="<? echo $row[0]; ?>"><? echo $row[1]; ?></option>
            <?
        
}
    }
}
?>

Generando desde Directorio: a esta función se le pasa una ruta en donde haya archivos a listar.
El segundo parámetro es opcional, el cual recibe un nombre de archivo y si es igual a alguno de los que está en el directorio, imprime la propiedad 'selected' del tag.
Como yapa, los archivos son listados por orden natural :arriba: <option>[/I]
Código PHP:

<?
function listar_archivos($ruta$marcar x) {
    if (
is_dir($ruta)) {
        if (
$gd opendir($ruta)) {
            while ((
$archivo readdir($gd)) !== false) {
                if (
$archivo != '.' && $archivo != '..') {
                    
$archivos[] = $archivo;
                }
            }
            
closedir($gd);            
            if (
natcasesort($archivos)) {
                if (
$marcar != 'x') {
                    foreach (
$archivos as $archivo) {
                        if (
$archivo == $marcar) {
                            echo 
'<option value="'.$archivo.'" selected>'.$archivo.'</option>';
                        }
                        else {
                            echo 
'<option value="'.$archivo.'">'.$archivo.'</option>';
                        }
                    }
                }
                else {
                    foreach (
$archivos as $archivo) {
                        echo 
'<option value="'.$archivo.'">'.$archivo.'</option>';
                    }
                }
            }
        }
    }
}
?>

Ejemplos:
Código PHP:

bla bla bla
<select name="usuario">
<? listar_items('select idusuario, usuario from usuarios'1); ?>
</select>
bla bla bla
<select name="foto">
<? listar_archivos('archivos/fotos/''sin_imagen.png'); ?>
</select>
bla bla bla

espero que les guste:si:

.php 25/07/2006 13:06

Tema: Funciones
Pregunta: ¿Como puedo obtener el dígito verificador de un RUT? (Chile)
Respuesta:

navegando por internet encontre una funcion pequeña y sencilla

Enviado por Luis Dujovne

Código PHP:

<?php
function dv($r){$s=1;for($m=0;$r!=0;$r/=10)$s=($s+$r%10*(9-$m++%6))%11;
return 
chr($s?$s+47:75);}
?>


DarkXNightmare 08/08/2006 13:25

Pregunta: Crear funciones con muchos parametros...
Respuesta: ...

Por ejemplo, yo tengo esta función...
Código PHP:

echo sumar(157810545); // devolver la suma de todos... 

¿Cómo puedo hacer esto?

Muy simple...
Código PHP:

function sumar()
{
   
$numeros func_get_args();
   
$total 0;
   foreach (
$numeros as $key)
   {
       
$total += $key;
   }
   return 
$total;


La función func_get_args devuelve un array con todos los parametros que se le pasaron a la función...
¿Cómo uso esa función?
Código PHP:

echo sumar(156); // imprime 12... 

Atte... DarkXNightmare

urgido 15/10/2006 18:36

Crear sencillo libro de visitas
 
P: Libro de Visitas:
R: Aquí muestro un secillo código para un libro de visitas, cabe destacar que no cuenta con smileis, ni BBcode. Es para quienes no quieren un gran libro de visitas pero si sencillo y efectivo.

Primero hay que crear una base de datos con el nombre que ustedes elijan junto con 3 tablas llamadas visitordata, name y comment. Posteriormente escriben la base de datos en los campos que sean necesarios.

Guardar como miLibro.php
Código PHP:

<form action='fijarMensaje.php' method='post'>
Su Nombre: <input type='text' name='name' size='20'><br>
Comentario:<br>
<
textarea name='comment' rows='5' cols='40'></textarea><br>
<
input type='submit' name='submit' value='Enviar'></form


Guardar como con.php
Código PHP:

<?php
$db 
mysql_connect("localhost""usuario""password") or die("No se puede conectar a la base de datos(mySQL).");
if(!
$db)
die(
"no existe la base de datos");
if(!
mysql_select_db("nombre_db",$db))
die(
"No hay base de datos seleccionada.");
if(!
get_magic_quotes_gpc())
{
$_GET array_map('mysql_real_escape_string'$_GET);
$_POST array_map('mysql_real_escape_string'$_POST);
$_COOKIE array_map('mysql_real_escape_string'$_COOKIE);
}
else
{
$_GET array_map('stripslashes'$_GET);
$_POST array_map('stripslashes'$_POST);
$_COOKIE array_map('stripslashes'$_COOKIE);
$_GET array_map('mysql_real_escape_string'$_GET);
$_POST array_map('mysql_real_escape_string'$_POST);
$_COOKIE array_map('mysql_real_escape_string'$_COOKIE);
}

?>

Guardar como fijarMensaje.php
Código PHP:

<?php
include "con.php";
if(isset(
$_POST['submit']))
{
$name=$_POST['name'];
$comment=$_POST['comment'];
if(
strlen($name)<1)
{
print 
"Usted no ingreso un Nombre.";
}
else if(
strlen($comment)<1)
{
print 
"Usted no ingreso un comentario.";
}
else
{
$insert="Insert into visitordata (name,comment) values('$name','$comment')";
mysql_query($insert) or die("No se pudo insertar el comentario");
print 
"Comentario agregado. <A href='Comentarios.php'>Ver aquí</a> para ver los comentarios.";

}
?>

Guardar como Comentarios.php
Código PHP:

<?php
include "con.php";
$getdata="SELECT * from visitordata order by entryID desc";
$getdata2=mysql_query($getdata) or die("Could not get data");
while(
$getdata3=mysql_fetch_array($getdata2))
{
$getdata3[name]=strip_tags($getdata3[name]);
$getdata3[comment]=strip_tags($getdata3[comment]);
print 
"Nombre: $getdata3[name]<br>";
print 
"Comentario:<br>";
print 
"$getdata3[comment]<br>";
<
hr>
}
?>

Saludos :-)

urgido 31/10/2006 01:09

P: Validar email de una forma más completa
R: aqui esta la solución. Usaremos "eregi", variables globales, regexps, if-else.

Código PHP:

$email_correcto "^[a-z0-9_\+-]+(\.[a-z0-9_\+-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*\.([a-z]{2,4})$";
$caracteres_extranos "^[a-z0-9,!#\$%&'\*\+/=\?\^_`\{\|}~-]+(\.[a-z0-9,!#\$%&'\*\+/=\?\^_`\{\|}~-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*\.([a-z]{2,})$";

// Validamos la dirección, usamos caracteres comunes
if (eregi($email_correcto$email)) {
  echo(
"La dirección <i>$email</i> es válida.");
}

/* Validamos la dirección, tomamos en cuenta que algunos proveedores permiten caracteres extraños.*/
else if (eregi($caracteres_extranos$email)) {
  echo(
"La dirección <i>$email</i> contiene caracteres extraños, pero comunmente no afecta el script. Se tomará como válida.");
}

// Si nada de lo anterior pasa... return false
else {
  echo(
"La dirección <i>$email</i> no es válida.");


Te recuerdo que la variable $email es igual al campo del formulario de tu página web.

Saludos

urgido 09/11/2006 20:34

P: Como cortar una cadena de texto larga con puntos supensivos.
R: substr!

Bueno, aquí les pongo un sencillo ejemplo pero práctico para aquellas personas que deseen reemplazar cadenas de texto largas por "x" número de caracteres y finalizando con puntos suspensivos.

Ejemplo:
Código PHP:

$texto="Hola, yo soy fanatico de ForosdelWeb La comunidad!";
echo 
substr($texto012)."..."

Esto dará como resultado:
Hola, yo soy...

Saludos.

urgido 19/11/2006 07:01

P: Contador de visitas(para articulos, noticias, similares)
R: Muchas se pregunta uno sobre, contadores de visitas, contadores de filas pero no de un contador que nos muestre cuantas veces ha sido visitado algún artículo que hemos publicado, alguna noticia o similar. Pues bien aquí la solución.

Código PHP:

$arcontador=fopen("contador.php","r"); // Archivo contador.php chmod 777
// para escribir
$obtener=fread($arcontador,filesize("contador.php"));
// leemos
$obtener=$obtener+1;
// aumentamos 1 que puede ser +1 o ++ y cerramos
fclose($arcontador);
$arcontador1=fopen("contador.php","w");
fputs($arcontador1,$obtener);
//input new value
fclose($arcontador1);
$arcontador2=fopen("contador.php","r");
$reciente=fread($arcontador2,filesize("contador.php"));
// hay valores nuevos? los escribimos
print "$reciente";
//imprimimos
fclose($arcontador2); 

El funcionamiento no es de mucha ciencia, tengo que admitirlo la función fclose es muy sencilla. El archivo contador.php debe ser incluido en la página donde quieras que sea mostrado el número de visitas por ende el archivo será abierto contara hasta los rehash que uno dé. El contador es principalmente como he dicho para articulos, noticias, etc. Si lo puede mejorar mucho mejor.

Saludos

.php 27/12/2006 10:26

Re: FAQ's de PHP
 
Tema: Php desde linea de comandos

Pregunta: ejecutar php desde linea de comandos en "Linux"

Respuesta: instalacion del php4-cli y creacion de un script

primero hay que instalar un interprete para php desde la linea de comandos.
se llama php4-cli, para esto instalar con apt-get en caso de un debian o ubuntu sino yu, yaz, urpmi dependiendo de la distro
Código:

# apt-get install php4-cli
despues podemos crear cualquier script en php.
para esto uno clasico.
con nuestro editor favorito vi, gedit, nano, joe

Código:

# vi ejemplo1.php
Código PHP:

#!/usr/bin/php 
<?php 
        $saludar 
"Hola Mundo"

        echo 
$saludar."\n";
?>

depues para ejecutarlo o hacerlo funcionar
le otorgamos un permiso de ejecucion de la siguiente manera

Código:

# chmod 755 ejemplo1.php
y para terminar lo hacer correr

Código:

# ./ejemplo1.php

.php 27/12/2006 10:42

Re: FAQ's de PHP
 
Tema: Php desde linea de comandos

Pregunta: enviar un correo desde la linea de comando a distintos destinatarios

Respuesta: crear script con funcion mail() y recivir parametro desde la linea de comandos

creamos buestro 2° ejemplo
Código:

# vi ejemplo2.php
escribimos lo siguiente
Código PHP:

#!/usr/bin/php
<?php
$name           
=       "Sevicios a Usuarios";
$txtmail        =       "[email protected]";
$txtnom         =       "Administrador del sistema";
$para           =       $argv[1];
$Asunto         =       "Este es el 2° ejemplo";
$Contenido      =       "este es un contenido";
$to             =       "FROM: $txtnom < $txtmail >\n";
if(!
mail($para,$Asunto,$Contenido,$to)){
        echo 
"Su correo no se puede enviar a:$para por razones de seguridad\n";
}else{
        echo 
"Se ha enviado correctamente su mail a $para\n";
}
?>

Código:

# chmod 755 ejemplo2.php
# ./ejemplo2.php  [email protected]

no olvidar que debe estar configurado el smpt

ASCENDEDMASTERS 27/04/2007 14:19

Tema Detectar disponibilidad de dominios (.com/.net/.org)

Pregunta ¿Cómo hago para detectar yo mismo si un dominio esta disponible?

Respuesta Usando esta funcion. (cplus trajo el borrador, y yo la corregi)

Código de ejemplo con comentarios:

Código PHP:

<?
function checkDomainReg($domain,$server) {
    if(!
$server){
        
$server 'whois.crsnic.net';
        
$lineNumber 8;
        
$fp fsockopen ($server43, &$errnr, &$errstr) or die("$errno: $errstr");
        
fputs($fp"$domain\n");
        
$x=0;
        while (!
feof($fp)) {
            
$serverReturn fgets($fp2048);
            
$serv.=$serverReturn;
            if (
$x == $lineNumber) {
                
$line $serverReturn;
            }
            
$x++;
        }
        
fclose($fp);
        
$result=preg_match("/no\smatch/i",$line)?0:1;
        return 
$result;
    }else{
        
$lineNumber 8;
        
$fp fsockopen ($server43, &$errnr, &$errstr) or die("$errno: $errstr");
        
fputs($fp"$domain\n");
        while (!
feof($fp)) {
            
$serverReturn .= fgets($fp2048);
        }
        
$result=substr_count($serverReturn,'NOT FOUND')?0:1;
        return 
$result;
    }
}

if(!
$dominio){
?>

<form method="POST" action= "<?=$PHP_SELF?>">
<b>Revisar si el dominio esta disponible</b>
<P>
<INPUT name="dominio" SIZE="30" MAXLENGTH="35">
.
<select name="ext" id="ext">
<option value="com" selected>com</option>
<option value="net">net</option>
<option value="org">org</option>
</select>
<P> <INPUT TYPE="SUBMIT" VALUE="Revisar">
</P>
</FORM>
<?
}
else{
    
$si='#00AA11';
    
$no='#FF0000';
    
$com=checkDomainReg("$dominio.com",'');
    
$net=checkDomainReg("$dominio.net",'');
    
$org=checkDomainReg("$dominio.org",'whois.pir.org');
    echo 
'<font color="'.($com?$no:$si).'"><b>'.$dominio.'.com</b></font><br>';
    echo 
'<font color="'.($net?$no:$si).'"><b>'.$dominio.'.net</b></font><br>';
    echo 
'<font color="'.($org?$no:$si).'"><b>'.$dominio.'.org</b></font><br>';
}
?>



Consultamos "dominio.com" y mostrará los dominios en rojo si no estan disponible y en verde si estan disponibles. Saludos!

PD: Este tema de dominios es dudoso, hay tanto negocio que me llego hasta desidir hacerme mi propio script para asi no haya casi posibilidad de que sepan que dominio quiero registrar... aprovechalo.

nicolaspar 08/05/2007 07:48

Re: FAQ's de PHP
 
Tema: Manipulación de datos
Pregunta: ¿Cómo puedo exportar tablas de Mysql en excel desde php?
Respuesta: Llamando a este script por browser:
Código PHP:

/*
Mysql To Excel
Generación de excel versión 1.0
Nicolás Pardo - 2007
*/
#Conexion a la db
require_once('__conn.php');

#Sql, acá pone tu consulta a la tabla que necesites exportar filtrando los datos que creas necesarios.
$sql "
SELECT 
    *
FROM
    usuarios
WHERE
    activo > -1
ORDER BY
    codigo DESC
"
;

$r mysql_query$sql ) or trigger_errormysql_error($conn), E_USER_ERROR );
$return '';
if( 
mysql_num_rows($r)>0){
    
$return .= '<table border=1>';
    
$cols 0;
    while(
$rs mysql_fetch_row($r)){
        
$return .= '<tr>';
        if(
$cols==0){
            
$cols sizeof($rs);
            
$cols_names = array();
            for(
$i=0$i<$cols$i++){
                
$col_name mysql_field_name($r,$i);
                
$return .= '<th>'.htmlspecialchars($col_name).'</th>';
                
$cols_names[$i] = $col_name;
            }
            
$return .= '</tr><tr>';
        }
        for(
$i=0$i<$cols$i++){
            
#En esta iteración podes manejar de manera personalizada datos, por ejemplo:
            
if($cols_names[$i] == 'fechaAlta'){ #Fromateo el registro en formato Timestamp
                
$return .= '<td>'.htmlspecialchars(date('d/m/Y H:i:s',$rs[$i])).'</td>';
            }else if(
$cols_names[$i] == 'activo'){ #Estado lógico del registro, en vez de 1 o 0 le muestro Si o No.
                
$return .= '<td>'.htmlspecialchars$rs[$i]==1'SI':'NO' ).'</td>';
            }else{
                
$return .= '<td>'.htmlspecialchars($rs[$i]).'</td>';
            }
        }
        
$return .= '</tr>';
    }
    
$return .= '</table>';
    
mysql_free_result($r);
}
#Cambiando el content-type más las <table> se pueden exportar formatos como csv
header("Content-type: application/vnd-ms-excel; charset=iso-8859-1");
header("Content-Disposition: attachment; filename=NombreDelExcel_".date('d-m-Y').".xls");
echo 
$return

Totalmente adaptable con solo cambiar el query.

Espero sea útil

nicolaspar 14/05/2007 09:00

Re: FAQ's de PHP
 
Pregunta: Como puedo armar un árbol de categorías al estilo:
categoria1
-categoria1.1
--categoria1.1.1
--categoria1.1.2
categoria2
-categoria2.1

Respuesta:

Primero necesitamos una tabla en mysql como esta:

Código:

CREATE TABLE `categorias` (
  `codigo` int(11) unsigned NOT NULL auto_increment,
  `nombre` varchar(255) default NULL,
  `padre` int(11) unsigned NOT NULL default '0',
  PRIMARY KEY  (`codigo`)
) TYPE=MyISAM;


insert into `categorias` values

(1,'categoria1',0),

(2,'categoria1.1',1),

(3,'categoria1.1.1',2),

(4,'categoria1.1.2',2),

(5,'categoria2',0),

(6,'categoria2.1',5);

Luego, con esta función podemos listarla:

Código PHP:

function arbol$padre$nivel ){
    
$nivel++;
    
$r mysql_query"SELECT * FROM categorias where padre ='$padre' " );
    while( 
$rs mysql_fetch_assoc$r ) ){
        echo 
str_pad($rs["nombre"], strlen($rs["nombre"])+($nivel-1), "-"STR_PAD_LEFT). "<br />";
        
arbol$rs["codigo"], $nivel );
    } 
mysql_free_result$r );
}
$nivel 0;
arbol0$nivel ); 


K3NNY 01/06/2007 12:25

Re: FAQ's de PHP
 
Pregunta:
¿Por qué si guardo mis .php con codificación UTF-8 me aparece un error del tipo Headers already sent?
Respuesta:
Esto sucede porque algunos programas, al guardar un archivo con codificación UTF-8 agregan al principio del archivo 3 caracteres hexadecimales, lo cual genera dicho error. Para solucionar esto es necesario recurrir a un editor hexadecimal (como el HHD Free Hex Editor), abrir el archivo .php y borrar los primero 3 caracteres del archivo.

nicolaspar 05/06/2007 10:20

Re: FAQ's de PHP
 
Pregunta: Hay una función para agregar ceros a la izquierda a un número?
respuesta: Si, la hay:
Código PHP:

#By nicolaspar 2007
function ceros($numero$ceros=2){
    return 
sprintf("%0".$ceros."s"$numero );
}

echo 
ceros(25); #out 000002
echo ceros(10); #out 0010 


nicolaspar 05/06/2007 15:39

Re: FAQ's de PHP
 
Pregunta: Puedo saber la distancia de una coordenada a otra?
Respuesta: usando la siguiente función:

Código PHP:

<?
#By nicolaspar 2007
function distancia($latitud1$longitud1$latitud2$longitud2$millas true){
    
$pi180 M_PI 180;
    
#Transformo las coordenadas en radiales
    
$latitud1 *= $pi180$longitud1 *= $pi180$latitud2 *= $pi180$longitud2 *= $pi180;
    
$r 6378.139// radio medio de tierra por kilómetro (WGS84)
    
$distanciaLatitud $latitud2 $latitud1;
    
$distanciaLongitud $longitud2 $longitud1;
    
#Formula de Haversine
    
$a sin($distanciaLatitud 2) * sin($distanciaLatitud 2) + cos($latitud1) * cos($latitud2) * sin($distanciaLongitud 2) * sin($distanciaLongitud 2);
    
#Calculo la distancia
    
$c atan2(sqrt($a), sqrt($a));
    
$km $r $c;
    
#La saco en millas o en km
    
return $millas $km 0.621371192 $km;
}
/**
*    Ej,
*    Desde Buenos Aires Observatorio Lat -34.56667 | long -58.41667
*    Hasta Adelaide Airport, Oceania, Australia, Lat -34.93333 | Long 138.51667
**/
echo distancia(-34.56667, -58.41667, -34.93333138.51667false) ." Km<br />";
echo 
distancia(-34.56667, -58.41667, -34.93333138.51667) ." Millas";
?>


AlvaroG 15/06/2007 08:26

Re: FAQ's de PHP
 
Pregunta: ¿Por qué me sale "Warning: Cannot modify header information - headers already sent by (output started at [1]:[2]) in [3] on line [4]"

Se trata de un error bastante común y a veces difícil de detectar.
No se puede nunca enviar texto antes de enviar cabeceras HTTP (con header(), set_cookie() o session_start(). )

Esto quiere decir que no puede haber ningún "echo" o "printf" antes de una sentencia que envíe cabeceras, pero también quiere decir que no puede haber nada de código html ni texto antes de la primera aparición de <?php (o <? ) en un archivo php. A veces se nos escapa algún espacio o línea en blanco, y eso es suficiente para que se produzca el error.

¿Cómo arreglarlo? Usando la información del error mismo.
Más arriba marqué las partes que hay que revisar:
[1] - Ruta del archivo php que inició la salida (el que mandó texto)
[2] - Línea del archivo [1] en la que se produjo la salida.
[3] - Archivo que intentó enviar una cabecera, luego de que la salida comenzara (normalmente es el mismo que [1])
[4] - Línea de [3] en la que se intentó enviar la cabecera.

Basta ir a [2] y ver si se puede evitar el envío de texto.

AlvaroG 19/06/2007 09:06

Re: FAQ's de PHP
 
Pregunta: ¿Por qué en mi página se ven caracteres extraños en vez de tildes o eñes?

El problema suele ser la codificación de caracteres. El navegador es instruido para mostrar los caracteres usando una codificación X, mientras que la página está usando la codificación Y, y por eso se producen los errores.

Hay 2 lugares en donde debe coincidir la codificación de caracteres:
1.- Etiqueta META Content-Type
2.- Editor de texto (forma en la que guarda, depende del editor)

Hay que configurar uno de los dos para que coincida con la codificación de caracteres que usa el otro, lo ideal es que ambas estén en iso8859-1 (o Latin1), o aún mejor si están en UTF-8.

En caso de que no esté presente la etiqueta META, el navegador codificará la página como se lo indique la cabecera Content-Type que le envía el servidor. También puede configurarse esta cabecera HTTP desde la configuración del servidor (en el caso de Apache, en el archivo httpd.conf)
Pero en presencia de la etiqueta META, no es necesario preocuparse de esto.

Si se está usando una base de datos, es importante hacer que la misma también use la misma codificación de caracteres, en mysql configurando el "COLLATE" de toda la base o tabla por tabla.

En mi experiencia la configuración de la base de datos es la menos importante.
Si se ven caracteres extraños en el navegador, las primeras cosas a revisar deberían ser la presencia de la etiqueta META (y su contenido) y luego la configuración del editor de texto que se esté usando, para que ambas coincidan.

RUX 20/06/2007 06:36

Re: FAQ's de PHP
 
Temas: Emails anti-SPAM.

Pregunta: ¿Como puedo mostrar correos electrónicos en mi Web sin que sea rastreado por robots spam y así preservar la privacidad de mis usuarios?

Respuesta: Existen diversas formas de hacer esto, pero el método más fiable y funcional, es mostrar la dirección de correo electrónico como una imagen:

Código PHP:

$_GET['texto'] = "[email protected]"## Email que queremos proteger
$length strlen($_GET['texto']) * 6;
header("Content-type: image/png");
$im imagecreate($length14);
imagecolorallocatealpha($im25500127);
$color imagecolorallocate($im000);
imagestring($im200$_GET['texto'], $color);
imagepng($im);
imagedestroy($im); 

Para mostrarlo simplemente habría que llamarlo de forma natural:

Código HTML:

<img src="email.php" />
Si queremos que esto sea funcional de manera dinámica usamos:

Código HTML:

<img src="[email protected]" />
y eliminamos del código la siguiente línea:

Código PHP:

$_GET['texto'] = "[email protected]"

SALUDOS
Ruymán Trujillo

daenor 10/07/2007 09:18

Valores XML a Mysql utilizando PHP
 
Tema: XML a Mysql utilizando por PHP
Pregunta: ¿Cómo puedo pasar valores de un archivo XML a una base MySQL utilizando PHP?

Respuesta:

Comunidad querida, investigando, me pareció interesante publicar esto.
Un proceso generalizado, para su entendimiento :)

archivo.xml:
Código PHP:

<?xml version "1.0" encoding="Windows-1252" standalone="yes"?>
<VFPData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="items.xsd">
    <campos>
        <valor1>12351</valor1>
        <valor2>Viento</valor2>
        <valor3>sgsfgds4</valor3>
        <valor4>Idggdssg</valor4>
    </campos>
    <campos>
        <valor1>12352</valor1>
        <valor2>Agua</valor2>
        <valor3>fdgdg 204</valor3>
        <valor4>Isdg  rthyh56 h</valor4>
    </campos>
</VFPData>


Código PHP:

<?php
  $g_itemss 
= array();
  
$g_elem_item null;
  
  function 
startElement$parser$name$attrs 
  {
  global 
$g_itemss$g_elem_item;
  if ( 
$name == 'CAMPOS' $g_itemss []= array();
  
$g_elem_item $name;
  }
  
  function 
endElement$parser$name 
  {
  global 
$g_elem_item;
  
$g_elem_item null;
  }

  function 
textData$parser$text )
  {
  global 
$g_itemss$g_elem_item;
  if ( 
$g_elem_item == 'VALOR1' ||
  
$g_elem_item == 'VALOR2' ||
  
$g_elem_item == 'VALOR3' ||
  
$g_elem_item == 'VALOR4' )
  {
  
$g_itemsscount$g_itemss ) - ][ $g_elem_item ] = $text;
  }
  }
  
  
$parser xml_parser_create();
  
  
xml_set_element_handler$parser"startElement""endElement" );
  
xml_set_character_data_handler$parser"textData" );
  
  
$f fopen'archivo.xml''r' );
  
  while( 
$data fread$f4096 ) )
  {
  
xml_parse$parser$data );
  }
  
  
xml_parser_free$parser );
  
  foreach( 
$g_itemss as $item_booked )
  {

    
$numorden $item_booked['valor1'];
    
$tipoint $item_booked['valor2'];
    
$numoper $item_booked['valor3'];
    
$sector $item_booked['valor4'];
    

include(
"config.php"); //archivo de conexión a la base de datos

//////////////////////////////////////
//////////////////////////////////////
    
mysql_query("INSERT INTO tabla (mis_campos)values($mis_variables)")or die(mysql_error());
    
mysql_free_result($grabaITEMS);
    
mysql_close ();
}
?>


Espero que sirva!!

Saludos!
Daenor :)

nachopro 28/08/2007 13:15

Captcha para formularios
 
Tema: Captcha para formularios

Pregunta: ¿Cómo puedo evitar los posts de bots y/o spammers en mi sistema de formularios?

Respuesta:

Hola, les dejo una solución que acabo de crear:

consta de tres archivos: formulario.php, texto_a_imagen.php y la_fuente.ttf.

formulario.php
Código PHP:

<?php
session_start
();
if (!isset(
$_SESSION['captcha']) || empty($_SESSION['captcha']))
{
    
// Si no hay código de seguridad...
    
$_SESSION['captcha'] = substr(md5(time().microtime()), 08); // Creo código de seguridad aleatorio
}

if (
$_POST['submit'])
{
    if (
$_POST['codigo_seguridad'] != $_SESSION['captcha'])
    {
        
// Posible BOT Spammer en nuestro sistema
        
unset($_SESSION['captcha']); // Borro la clave captcha para que al recargar la página se crée una nueva
        
$_SESSION['mensaje_error'] = 'No has escrito bien el código de seguridad'// Asigno un mensajito
        
header('Location: '.$_SERVER['PHP_SELF']); // Redirecciono a la misma página
        
exit(); // Nos asegurames que el script termine acá
    
}

    
// Ponemos el código de nuestro interés.
    
echo '<p>No eres un bot, o al menos eso nos hiciste creer :P</p>';
}

// -- Fin del sistema anti-bot

if ($_SESSION['mensaje_error'])
{
    echo 
'<p>'.$_SESSION['mensaje_error'].'</p>';
    unset(
$_SESSION['mensaje_error']);
}
?>

<form method="post" action="<? echo $_SERVER['PHP_SELF']; ?>">
    <fieldset>
        <legend>Formulario</legend>
        <label for="email">E-mail:</label>
        <input type="text" name="email" id="email" />

        <label for="clave">Clave:</label>
        <input type="password" name="clave" id="clave" />

        <label for="captcha">C&oacute;digo de seguridad:</label>
        <img src="texto_a_imagen.php" id="captcha" />

        <label for="codigo_seguridad">Repetir c&oacute;digo de seguridad:</label>
        <input type="text" name="codigo_seguridad" id="codigo_seguridad" />
    </fieldset>
    <input type="submit" name="submit" value="Continuar" />
</form>

texto_a_imagen.php
Código PHP:

<?php
session_start
();

$texto $_SESSION['captcha']; // Tomo el código de seguridad creado en formulario.php
$fuente 'amaze.ttf';
$fuente_tamano 21;

$ancho 110;
$alto 35;

$img imagecreate($ancho$alto);
imagecolorallocate($img255255255); // Color del fondo

$color_texto imagecolorallocate($img13819077); // Color del texto
imagettftext($img$fuente_tamano0526$color_texto$fuente$texto);

header('Content-type: image/png');
imagepng($img);
imagedestroy($img);
?>

Espero les sea útil ;)

Les dejo el link comprimido de los 3 archivos por si a alguien le interesa ;)
php_captcha.7z (37 KB)
php_captcha.zip (43 KB)

nicolaspar 06/09/2007 14:42

Re: FAQ's de PHP
 
Tema: Fechas
Pregunta:
Hay manera de lograr multiples formatos en español sobre una fecha?

Respuesta: No, pero con la siguiente función se puede lograr todos los formatos que necesites, yo la hice especificamente para un proyecto, pero se puede adaptar facilmente, y de no entender como pueden preguntar en el foro de php.

Estos serían algunos ejemplos:
Código PHP:

#Example:
get_date_spanish(time(), true'month'); # return Enero
get_date_spanish(time(), true'month_mini'); # return ENE
get_date_spanish(time(), true'Y'); # return 2007
get_date_spanish(time());#return 06 de septiempre, 12:31 hs 

Código PHP:

#Power by nicolaspar 2007 - especific proyect
function get_date_spanish$time$part false$formatDate '' ){
    
#Declare n compatible arrays
    
$month = array("","enero""febrero""marzo""abril""mayo""junio""julio""agosto""septiempre""diciembre");#n
    
$month_execute "n"#format for array month

    
$month_mini = array("","ENE""FEB""MAR""ABR""MAY""JUN""JUL""AGO""SEP""DIC");#n
    
$month_mini_execute "n"#format for array month

    
$day = array("domingo","lunes","martes","miércoles","jueves","viernes","sábado"); #w
    
$day_execute "w";
    
    
$day_mini = array("DOM","LUN","MAR","MIE","JUE","VIE","SAB"); #w
    
$day_mini_execute "w";

/*
Other examples:
    Whether it's a leap year
    $leapyear = array("Este año febrero tendrá 28 días"."Si, estamos en un año bisiesto, un día más para trabajar!"); #l
     $leapyear_execute = "L";
*/

    #Content array exception print "HOY", position content the name array. Duplicate value and key for optimization in comparative
    
$print_hoy = array("month"=>"month""month_mini"=>"month_mini");

    if( 
$part === false ){
        return 
date("d"$time) . " de " $month[date("n",$time)] . ", "date("H:i",$time) ." hs";
    }elseif( 
$part === true ){
        if( ! empty( 
$print_hoy[$formatDate] ) && date("d-m-Y"$time ) == date("d-m-Y") ) return "HOY"#Exception HOY
        
if( ! empty( ${$formatDate} ) && !empty( ${$formatDate}[date(${$formatDate.'_execute'},$time)] ) ) return ${$formatDate}[date(${$formatDate.'_execute'},$time)];
        else return 
date($formatDate$time);
    }else{
        return 
date("d-m-Y H:i"$time);
    }



nicolaspar 07/09/2007 08:02

Re: FAQ's de PHP
 
Tema: Archivos e includes
Pregunta:
Puedo incluir todos los php de un directorio?.
Respuesta: No se si está posteado, pero con ésta simple función es posible.

Código PHP:

#Power by nicolaspar 2007
function require_once_dir$path ){
    
$dir dir($path);
    while( ( 
$file $dir->read() ) !== false )
        if( 
is_file$path .'/'$file ) and preg_match'/^(.+)\.php$/i' $file ) )
            require_once( 
$path .'/'$file );
    
$dir->close();
}

#Example
require_once_dir'lib/db' );
require_once_dir'lib/email' ); 


nicolaspar 19/10/2007 07:46

Re: FAQ's de PHP
 
Tema: Parseo de strings
Pregunta: Puedo hacer que las url que esten en un texto se hagan "linkeables"?
Respuesta: Rejuntando ideas arme esta función:

Código PHP:

function ponerLinks$str ){
    
$tmp eregi_replace('((ftp|http|www)[-a-zA-Z0-9@:%_\+.~#?&//=]+)''<a href="\\1" target="_blank">\\1</a>'$str);
    
#Si esto se puede integrar en la regex sería mejor aún....
    
return str_replace('href="www.','href="http://www.'$tmp);


Ejemplo de uso:


Código PHP:

function ponerLinks$str ){
    
$tmp eregi_replace('((ftp|http|www)[-a-zA-Z0-9@:%_\+.~#?&//=]+)''<a href="\\1" target="_blank">\\1</a>'$str);
    
#Si esto se puede integrar en la regex sería mejor aún....
    
return str_replace('href="www.','href="http://www.'$tmp);
}

$str 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras tempor, pede at scelerisque cursus, www.arcunulla.com suscipit libero, iaculis tincidunt justo quam sit amet tortor. Donec quis elit. Vivamus nec sapien ut http://www.leo.com posuere consequat. http://Quisque.com.ar et nisl. Aenean dolor. Aenean blandit purus non felis. Sed elit justo, rutrum quis, ornare non, tincidunt blandit, nisl. Donec sodales massa non pede. In eleifend placerat risus. Nulla vitae elit vitae erat porttitor tristique. ftp://Phasellus.com.ar neque mi, imperdiet vel, mollis ac, placerat a, libero. Phasellus semper sodales ante. www.Mauris.com.cl placerat risus sollicitudin mauris. Donec at tellus. Aenean eu nulla. Curabitur mattis adipiscing augue. Suspendisse blandit, odio sit amet convallis volutpat, erat ante posuere tellus, quis ultricies lacus mi quis urna';
echo 
ponerLinks$str ); 


Italico76 04/11/2007 13:20

FAQ : como leer CSV en PHP
 
El siguiente es un ejemplo de como leer un CSV con PHP :-)

En el ejemplo leo "catego.txt", un CSV con DOS COLUMNAS delimitadas por "#"

Código PHP:

<?php 
// Leo archivo CSV de Excel
$sep "#"//defino separador del CSV
$archivo "\catego2.txt";  // path + archivo

$fp fopen $archivo "r" ); 
while (( 
$data fgetcsv $fp 1000 "," )) !== FALSE ) { // leo mientras haya lineas que leer

$i 0
foreach(
$data as $i=> $row ) {  // leo cada ROW  de DATA e incremento el inidice $i
$matriz explode$sep$row);
echo 
$matriz[1]." :: ".$matriz[0]."<p/>";  // muestro las celdas en orden inverso



fclose $fp ); 
?>

Enjoy! :risa:

chilenozzz 04/11/2007 17:27

Re: FAQ's de PHP
 
¿Cómo obtener la fecha en formato dd/mm/aaaa HH:MM:SS a partir de un campo "OleDate" (un campo fecha) desde un archivo Excel?

NOTA: Esto es válido para cuando se obtiene la fecha a partir de un Excel con la librería Spreadsheet_Excel_Reader de PEAR en PHP:

Código PHP:

$data->sheets[$numero_hoja]['cells'][$i][$j

El número que retorna es un DOUBLE. Por ejemplo, si la fecha es 01/09/2007 00:15:00, esto aparecerá como valor 39326.0104167.

Para regresar al formato válido en PHP, aplicar lo siguiente

Código PHP:

$fecha1 = (39326.0104167 25569.833299) * 86400
echo (
date("d/m/Y H:i:s",$fecha1)."<br />"); 

Esto retorna 01/09/2007 00:15:02

Como pueden ver, tiene un margen de error de 2 segundos. Esto se puede corregir jugando con el valor 25569.833299, agregando aún más decimales para hacer el cálculo más preciso.

Saludos.

Marvin 12/11/2007 12:06

Re: FAQ's de PHP
 
Tema: Codificacion
Pregunta: ¿Como puedo mostrar acentos y ñ sin que los reemplace por ? u otro caracter extraño?
Respuesta:
Se debe codificar tanto la pagina php como la pagina html con las siguientes lineas.
Código PHP:

header'Content-Type: text/html;charset=utf-8' ); 

Código HTML:

<META http-equiv=Content-Type content="text/html; charset=utf-8">
Tambien es posible agregar el content-type desde php.ini:
Código:

default_charset = "utf-8"
Si nada de lo anterior sirve para datos extraidos de una base de datos con codificacion X a una pagina con codificacion Y probar con:
utf8_decode (Convierte una cadena codificada UTF-8 a ISO-8859-1) o
utf8_encode (Codifica una cadena ISO-8859-1 a UTF-8)

Suerte! :arriba:

Italico76 23/11/2007 09:04

Re: FAQ's de PHP
 
Como resuelvo un posible abuso de mayusculas en texto ? como se que se esta abusando de las mayusculas ?

Respuesta: utlizo la funcion resolve_abuse($cadena) :pirata:


Código PHP:

<?php

Function resolve_abuse($str){
 if (
abuse_capitals($str)) {
  return(
strtolower($str));
 }else{
  return(
$str);
 }
}

Function 
abuse_capitals($str){
$temp pesa_letras($str);
//echo $temp;
if ($temp<83){
 return (
true);
 }else{
 return (
false);
}
}

Function 
pesa_letras($str){
// MENOS de 83 es abuso de mayusculas
$largo=strlen($str);

$peso=0;
for (
$i=0;$i<$largo;++$i){
$peso=$peso ord($str[$i]);
}

if (
$largo>0){
return( 
$peso/$largo);
}
else{
return(
100); // todo ok
}

}

?>

Código PHP:

<?php
$str
="LETRAS DE CANCIONES de TODOS los ARTISTAS";
echo 
resolve_abuse($str); // arregla posibles abusos de mayusculas
?>

:adios:

rustty 20/02/2008 23:03

Crear select de paises con php
 
Tema: Crear select de paises con php

Pregunta: Como no complicarme la vida creando un simple select con los paises?

Respuesta:
Para no complicarte la vida haciendo un simple select de los paises, utilizando html y durar 24 en estos ( ya que yo casi las duro, por que no conseguía una lista en español por hay :D) solo utiliza esta funcion que esta organizada alfabeticamente..

ESPERO QUE LES FUNCINE, como me funciono a mi ;)

Código PHP:

<?php
function paises($nombre_del_select){
    
$array_paises = array("Elige tu pais","Republica Dominicana","Afganistan","Africa del Sur","Albania","Alemania","Andorra","Angola","Antigua y Barbuda","Antillas Holandesas","Arabia Saudita","Argelia","Argentina","Armenia","Aruba","Australia","Austria","Azerbaijan","Bahamas","Bahrain","Bangladesh","Barbados","Belarusia","Belgica","Belice","Benin","Bermudas","Bolivia","Bosnia","Botswana","Brasil","Brunei Darussulam","Bulgaria","Burkina Faso","Burundi","Butan","Camboya","Camerun","Canada","Cape Verde","Chad","Chile","China","Chipre","Colombia","Comoros","Congo","Corea del Norte","Corea del Sur","Costa de Marfíl","Costa Rica","Croasia","Cuba","Dinamarca","Djibouti","Dominica","Ecuador","Egipto","El Salvador","Emiratos Arabes Unidos","Eritrea","Eslovenia","España","Estados Unidos","Estonia","Etiopia","Fiji","Filipinas","Finlandia","Francia","Gabon","Gambia","Georgia","Ghana","Granada","Grecia","Groenlandia","Guadalupe","Guam","Guatemala","Guayana Francesa","Guerney","Guinea","Guinea-Bissau","Guinea Equatorial","Guyana","Haiti","Holanda","Honduras","Hong Kong","Hungria","India","Indonesia","Irak","Iran","Irlanda","Islandia","Islas Caiman","Islas Faroe","Islas Malvinas","Islas Marshall","Islas Solomon","Islas Virgenes Britanicas","Islas Virgenes (U.S.)","Israel","Italia","Jamaica","Japon","Jersey","Jordania","Kazakhstan","Kenia","Kiribati","Kuwait","Kyrgyzstan","Laos","Latvia","Lesotho","Libano","Liberia","Libia","Liechtenstein","Lituania","Luxemburgo","Macao","Macedonia","Madagascar","Malasia","Malawi","Maldivas","Mali","Malta","Marruecos","Martinica","Mauricio","Mauritania","Mexico","Micronesia","Moldova","Monaco","Mongolia","Mozambique","Myanmar (Burma)","Namibia","Nepal","Nicaragua","Niger","Nigeria","Noruega","Nueva Caledonia","Nueva Zealandia","Oman","Pakistan","Palestina","Panama","Papua Nueva Guinea","Paraguay","Peru","Polinesia Francesa","Polonia","Portugal","Puerto Rico","Qatar","Reino Unido","Republica Centroafricana","Republica Checa","Republica Democratica del Congo","Republica Eslovaca","Reunion","Ruanda","Rumania","Rusia","Sahara","Samoa","San Cristobal-Nevis (St. Kitts)","San Marino","San Vincente y las Granadinas","Santa Helena","Santa Lucia","Santa Sede (Vaticano)","Sao Tome & Principe","Senegal","Seychelles","Sierra Leona","Singapur","Siria","Somalia","Sri Lanka (Ceilan)","Sudan","Suecia","Suiza","Sur Africa","Surinam","Swaziland","Tailandia","Taiwan","Tajikistan","Tanzania","Timor Oriental","Togo","Tokelau","Tonga","Trinidad & Tobago","Tunisia","Turkmenistan","Turquia","Ucrania","Uganda","Union Europea","Uruguay","Uzbekistan","Vanuatu","Venezuela","Vietnam","Yemen","Yugoslavia","Zambia","Zimbabwe");
    
$cantidad_paises count($array_paises);
    echo 
'<select name="'.$nombre_del_select.'" id="'.$nombre_del_select.'">';
    for(
$i 0$i<$cantidad_paises$i++){
        
$array_paises_i $array_paises[$i];
        echo 
'<option value="'.$array_paises_i.'"'
            if(
$_POST["$nombre_del_select"]=="$array_paises_i"){
                    echo 
"selected";
            }
        echo 
'>'.$array_paises_i.'</option>';
    }
    echo 
'</select>';
}
//como llamar la function?
//paises("select_paises");
?>


nicolaspar 02/05/2008 14:39

Re: FAQ's de PHP
 
Tema: Url/Paginado/Propagar datos
Pregunta: Tengo manera de pasar todo el query string (GET) de una pagina sin un valor? (así por ejemplo puedo pasar datos de una pagina a otra en un paginado sin poner casa dato a mano y sin repetir la variable "pagina")
Respuesta: Tengo esta función que te da toda la url menos el parámetro que quieras:


Código PHP:

function querystringSinParametro($parametro){
    return 
preg_replace('/[\&\?]?'.$parametro.'=[^\&]*/','', (empty($_SERVER['QUERY_STRING'])?'':$_SERVER['QUERY_STRING']) );


De ésta manera, en vez de usar:

Código PHP:

<a href="listado.php?pagina=<?=$pagina+1;?>&var1=<?=$var1;?>&var2=<?=$var2;?>&var3=<?=$var3;?>">Siguiente página </a>

Podemos usar:

Código PHP:

<? $qs querystringSinParametro('pagina');?>
<a href="listado.php?pagina=<?=$pagina+1;?>&<?=$qs;?>">Siguiente página </a>


trasgukabi 13/05/2008 18:37

Aporte: Conversor CNAE-93 Rev. 1 a CNAE-2009
 
Tema: Conversor CNAE-93 Rev. 1 a CNAE-2009
Pregunta: Pasar de código CNAE-93 a CNAE-2009
Respuesta:

Hola, os dejo aquí la dirección de un Conversor CNAE-93 Rev. 1 a CNAE-2009 que he hecho para mi web.

Fichero .RAR. 67.59KB
CNAE ERINTERNET

Para verlo funcionando:
CNAE ERINTERNET EN ACCIÓN

Creative Commons Reconocimiento-No comercial 2.5 España License.
http://i.creativecommons.org/l/by-nc/2.5/es/88x31.png

Espero que a alguien le sea de ayuda.

nicolaspar 22/05/2008 19:45

Respuesta: FAQ's de PHP
 
Tema: Formato de fechas
Pregunta: Necesito crear diferentes formatos de fechas para cada uno de los idiomas de mi sitio, ya que no es lo mismo el formato ingles que el español, es posible definir esto en la configuración del idioma?
Respuesta: Pondré un ejemplo con 3 tipos de fechas (corta, media y larga) que dice ser así:

Código PHP:

 <?
 
/***
 la var $setting puede estar seteada para un idioma (ej, español.php) determinado, pudiendo tener para cada idioma diferentes formatos
 ***/
 
 /********=))==))==))=********
 EN EL ARCHIVO PHP DE IDIOMAS:
 ********=))==))==))=********/
 
 /***
 Formato de fechas validos, corto, medio y largo, pueden personalizar el suyo de así necesitarlo:
 ***/
 
$setting['FORMATO_FECHA_CORTO'] = 'd/m/Y';
 
$setting['FORMATO_FECHA_MEDIO'] = '%mes% %de% Y';
 
$setting['FORMATO_FECHA_LARGO'] = '%dia% %de% %mes% %de% Y'// se le pueden poner cosas como: \H\o\y \e\s %dia%, o agregar un setting tal cual lo es "de" que se llame "hoy" y otro "es". Además de agregar cualquier comodín válido de www.php.net/date
 
 
 /***
 Para cada caso del ejemplo tengo dias, meses y el texto "de"
 ***/
 
$setting['DIAS'] = array('Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado');
 
$setting['MESES'] = array('positionZero','Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre');
 
$setting['DE'] = 'de';
 
 
 
 
/********=))==))==))=********
 EN EL ARCHIVO PHP DE FUNCIONES:
 ********=))==))==))=********/
 
 /**
 Function formatearFechaIdiomas
 In: timestamp, variable setting, formato (corto, medio, largo)
 **/
 
function formatearFechaIdiomas$time, &$setting$formato 'corto'){
     
$no = array( '%dia%''%mes%''%de%' ); #Esto es lo que escribimos en el setting, para que sea más legible para el administrador del sitio. Se pueden agregar tantas variantes se crean necesarias, tendiendo su posición declarada en el array $setting
     
$si = array( '%\d\i\a%''%\m\e\s%''%\d\e%' ); #No se le pude pasar a date cosas como "mes", ya que las tres letras son valores reservados, hay que escaparlos.
     
$traduccion = array( $setting['DIAS'][date("w",$time)], $setting['MESES'][date("n",$time)], $setting['DE'] ); #Y esta es la traducción de cada elemento
     #FORMATO CORTO
     
if( $formato == 'corto' ) return date$setting['FORMATO_FECHA_CORTO'], $time);
     
#FORMATO MEDIO
     
if( $formato == 'medio' ){
         
$setting['FORMATO_FECHA_MEDIO'] = str_replace$no$si$setting['FORMATO_FECHA_MEDIO'] );
         return 
str_replace$no$traducciondate$setting['FORMATO_FECHA_MEDIO'], $time) );
     }
     
#FORMATO LARGO
     
if( $formato == 'largo' ){
         
$setting['FORMATO_FECHA_LARGO'] = str_replace$no$si$setting['FORMATO_FECHA_LARGO'] );
         return 
str_replace$no$traducciondate$setting['FORMATO_FECHA_LARGO'], $time) );
     }
     return 
FALSE;    
 }
 
 
 
/********=))==))==))=********
 EJEMPLO DE USO, la parte simple:
 ********=))==))==))=********/
 
echo formatearFechaIdiomastime(), $setting'corto') . "<hr>"#Out: 12/6/2008
 
echo formatearFechaIdiomastime(), $setting'medio') . "<hr>"#Out: Junio de 2008
 
echo formatearFechaIdiomastime(), $setting'largo') . "<hr>"#Out: Domingo 12 de Junio de 2008
 
 
?>


Surfiction 27/05/2008 20:15

Respuesta: FAQ's de PHP
 
Tema: Extencion Archivos
Pregunta: Como puedo saber la extencion de un archivo?
Respuesta: Usando la funcion explode() y end() de la siguiente manera:

Código PHP:

$nombre "nombre del archivo.puede tener puntos...mp3";
$partes explode("."$nombre);
$extencion end($partes);

echo 
"La Extencion es: $extencion"

Saludos

andrewp 29/07/2008 16:26

Respuesta: FAQ's de PHP
 
Tema: Traer valores de una base de datos MySQL a través de una COOKIE

Pregunta: ¿Cómo puedo traer la información de un registro en una base de datos MySQL con tan solo una COOKIE?

Respuesta: Esta respuesta la encontré extrayendo información de varios POSTS:

Para empezar necesitarías tener la conexión básica a la base de datos, luego incluír la siguiente línea de código. Tened en cuenta que 'usuario' es el ejemplo que uso como campo de la BD y $_COOKIE['usuario'] es el ejemplo de la cookie que tengo activa y verificada en mi PHP:

Código PHP:

$consulta"SELECT * FROM miTabla WHERE usuario = '".$_COOKIE['usuario']."'";
$resultado mysql_query ($consulta) or die ('Query failed: ' mysql_error()); 

Para extraer cualquier información contenida en un campo, bastará con extraer el nombre del mismo por medio de la función 'WHILE'. En mi ejemplo uso en nombre del usuario (nombre_usuario). Esta línea de código la puedes poner en cualquier parte de tu PHP:

Código PHP:

<?php while ($row mysql_fetch_array($resultado)) {
    echo 
$row['nombre_usuario']; } ?>

Saludos!

angarzafir 18/08/2008 21:18

Respuesta: FAQ's de PHP
 
Tema: Upload de Archivo

Pregunta: ¿Como configurar tu servidor para subir archivos pesados por medio de un script?

Respuesta:
Antes de hacer esto es necesario saber si tu servidor fue instalado como CGI. Para saberlo simplemente creando un script con la siguiente función, subelo a la raiz de tu servidor y ejecutalo.

../php_info.php
Código PHP:

<?php 
$tipo_sapi 
php_sapi_name(); 
if (
substr($tipo_sapi03) == 'cgi') { 
    echo 
"Est&aacute; usando PHP CGI\n"
} else { 
    echo 
"No est&aacute; usando PHP CGI\n"

?>

Si dices que estas usando CGI ¡Perfecto! entonces esto te servira.
Simplemente crear un archivo de texto con la siguiente información y nombralo php.ini. Debes subir este archivo en la carpeta donde esta el script que subira el archivo al servidor. Es decir, si el script upload_archivo.php esta en la carpeta upload: el php.ini debes incluirlo dentro de la carpeta upload.

../carpeta_script/php.ini
Código PHP:

upload_max_filesize 100M
post_max_size 
100M
max_execution_time 1000
max_input_time 1000 

Donde puedes cambiar los valores. En este caso lo configure para aceptar archivos de hasta 100megas y aumente el tiempo de ejecución del script.

Ya con esto y un script de upload archivo puedes subir archivos de alto peso. Recomiendo usar un progressbar para irle avisando al usuario de como va la subida.

Dejo el tema donde hice esta pregunta en caso de querer más nformación.

También pueden ayudarse de:
http://blog.unijimpe.net/upload-de-archivos-2mb-php/

Saludos. Espero halla sido de ayuda, fue mi primer aporte a esta gran comunidad.

eContento 25/08/2008 05:24

Respuesta: FAQ's de PHP
 
Tema: Generar un fichero rss.xml

Pregunta: ¿Cómo puedo generar un feed o RSS de mi web?

Respuesta: Suponemos que la web tiene artículos y estos están en una base de datos. El código para generar ese RSS y que otras webs os puedan sindicar es:

Código PHP:

<?php
  
include("./conexionBBDD.php");
    
$link=Conectarse();
    
$archivo fopen("/rss.xml""w");
    if (
$archivo) {
        
fputs ($archivo"<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n");
        
fputs ($archivo"<rss version=\"2.0\">\n");
        
fputs ($archivo"\n");
        
fputs ($archivo"<channel>\n");
        
fputs ($archivo"     <title>e-Contento</title>\n");
        
fputs ($archivo"     <link>http://e-contento.com</link>\n");
        
fputs ($archivo"     <language>es-ES</language> \n");
        
fputs ($archivo"     <description>Web que...</description>\n");

        
$result=mysql_query("SELECT titulo, entradilla, id, DATE_FORMAT(fecha,'%a, %d %b %Y') AS fecha FROM articulo ORDER BY fecha DESC LIMIT 0,25",$link);
        if (
$result){
            while(
$row mysql_fetch_array($result)) {
                
$stTitulo $row[titulo];
                
$stTitulo html_entity_decode($stTitulo);
                
                
$stDescription $row[entradilla];
                
$stDescription str_replace ("src=\"/img/""src=\"http://e-contento.com/img/"$stDescription );
                
$stDescription str_replace ("src=\"img/""src=\"http://e-contento.com/img/"$stDescription );
                
                
fputs ($archivo"     <item>\n");
                
fputs ($archivo"             <title><![CDATA[".$stTitulo."]]></title>\n");
                
fputs ($archivo"             <pubDate>".$row[fecha]."</pubDate>\n");
                
fputs ($archivo"             <link>http://e-contento.com/c_articulo.php?id=".$row["id"]."</link>\n");
                
fputs ($archivo"             <description><![CDATA[".$stDescription."]]></description>\n");
                
fputs ($archivo"     </item>\n");
            }
        }
        
fputs ($archivo"</channel>\n");
        
fputs ($archivo"</rss>\n");
        
    }
    
fclose ($archivo);
?>


nicolaspar 05/09/2008 15:13

Respuesta: FAQ's de PHP
 
Tema: Leer archivos (fuera de mi servidor)
Pregunta: Necesito leer archivos fuera de mi servidor, por ejemplo un rss, o una salida de un webservice o simplemente de una página cualquiera.
Respuesta: Si, podés usar file_get_contents, pero es mejor curl pero éste debe estar instalado en el server. Por si no sabemos que tenemos disponible en nuestro servidor podés usar la siguiente función:


Código PHP:

function getFile($archivo){
 if(
ini_get('allow_url_fopen')){
  
$ctx stream_context_create(array(
   
'http' => array(
    
'timeout' => 240
    
)
   )
  );
  
$contentfile_get_contents($archivo0$ctx);
 }else{
  
$ch curl_init ($archivo) ;
  
curl_setopt ($chCURLOPT_RETURNTRANSFER1) ;
  
$contentcurl_exec ($ch) ;
  
curl_close ($ch) ;
 }
 return 
$content;
}
 
//PHP 4.2.x < solo es necesario si se tiene esta versión de php
if (!function_exists('file_get_contents')) {
      function 
file_get_contents($filename$incpath false$resource_context null)
      {
          if (
false === $fh fopen($filename'rb'$incpath)) {
              
trigger_error('file_get_contents() failed to open stream: No such file or directory'E_USER_WARNING);
              return 
false;
          }
 
          
clearstatcache();
          if (
$fsize = @filesize($filename)) {
              
$data fread($fh$fsize);
          } else {
              
$data '';
              while (!
feof($fh)) {
                  
$data .= fread($fh8192);
              }
          }
 
          
fclose($fh);
          return 
$data;
      }
  } 

Y acá te dejo un ejemplo:
Código PHP:

echo getFile(\'http://www.forosdelweb.com/f18/faqs-php-530600/index7.html\'); 


Nathan_1979 11/09/2008 11:23

How to: Función que pone etiquetas <p> parrafos en un textarea :)
 
Tema: Poner etiquetas <p> en un textarea
Pregunta: Como agregar tags <p> en lugar de <br />
Respuesta:

Ante todo decir que es muy sencillo ahora que lo pienso pero bueno para que esté en el foro y le pueda ayudar al alguien que al igual que yo esta haciendo un sistema de comentarios o cualquier otro proyecto y le fallaba el tema de los párrafos :si:

Me puse la pilas ya hace tiempo con PHP, y viendo que en ningún lado no hay nada de cómo hacer que se respeten las etiquetas

Código HTML:

<p>Un párrafo</p>

en un textarea ( Bueno simplemente con la función
Código PHP:

nl2br 

pero no es suficiente ya que no es limpia del todo, deja el texto flotando en el HTML :borracho:

Me animé a realizar una función que con ayuda del nl2br que remplaza las nuevas linea

Código PHP:



y te las remplaza por
Código HTML:

<br />

Ahora que lo pienso se podia a ver realizado con replace o una variante.

Ok, empecemos!


Código PHP:

function crear_parrafos($comentario
{
    
$comentario=nl2br($comentario);
    
$comentario=explode('<br />'$comentario);
    
    
$comentario=implode("</p><p>"$comentario);
    
return 
$comentario;
}

$nick=$_POST['nick'];
$comentario=crear_parrafos($_POST['comentario']);


echo 
$nick."<br />";
echo 
"<p>".$comentario."</p>"

Antes de todo el formulario HTML
Código HTML:

<form action="#"" method="post" >

        <label for="nick">Nombre: *</label> <input type="text" id="nick" name="nick" />
        <label for="comentario">Comentario: *</label><textarea  id="comentario" cols="4" rows="10" name="comentario"></textarea>
        <input type="submit" value="Enviar" />

</form>

Le pasamos 2 arrays
  1. $_POST['nick']
  2. $_POST['comentario']

Como vereis la función se llama crear_parrafos() que le paso un argumento que seria el array del POST del textarea, nos ayudamos de la función nl2br para saber donde están los saltos de linea, seguidamente empleamos la función explode que convierte todo el comentario en un array separando cada elemento del array a traves de <br />
Código HTML:

Primera linea usando la función nl2br para que muestren los saltos de linea y seguidamente explode para que nos convierta en un array, primera linea
<br />
Segundo linea, segunda linea

Ahora podriamos hacer $comentario[0] que nos mostraria:

"Primera linea usando la función nl2br para que muestren los saltos de linea y
seguidamente explode para que nos convierta en un array, primera linea"

ahora usamos la funcion implode que lo que hace es convertir nuestro array en una cadena pero con todos los elementos que tiene el array uniendolos con una cadena (En este caso lo uniremos con las etiquetas </p><p> .


Y a la hora de mostrarlo pondremos las etiquetas <p> de inicio que no realiza implode y la etiqueta </p> del parrafo ultimo del final.


Espero que os sea de utilidad.
Salu2!


La zona horaria es GMT -6. Ahora son las 08:01.

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