This is the P2PU Archive. If you want the current site, go to www.p2pu.org!

Programando web con PHP

My recent threads

You haven't posted any discussions yet.

Recently updated threads

Semana 2

Go back to: General discussion

De la semana pasada deberiamos haber probado ejemplos, mirado y tocado y probado como funciona un poco de codigo PHP, y entender que hace falta un servidor para que el PHP corra

RESUMEN

El proposito de esta semana es familiarizarnos con la sintaxis de PHP y avanzar en sus formas y elementos mas simples. Pondre unos mensajitos con teoria en el hilo de Lenguaje PHP sobre los temas de la semana: sintaxis, variables, operadores, estructuras de control (condicionales y ciclos/bucles), para que vayan siguiendo, tambien les recomiendo que lean esos temas del manual oficial http://php.net/manual y pueden ver tambien este http://www.forosdelweb.com/wiki/Manual_de_PHP:_Sintaxis_de_programaci%C3...

y algunas cosas de tutoriales faciles como http://www.tutorialesfacil.com.ar/php/Generalidades.htm y http://www.tutorialesfacil.com.ar/php/Condicionales.htm  (gracias http://p2pu.org/users/cesarcastejon Cesar por el dato!)

EJEMPLOS

Los ejemplos para esta semana como siempre estan para bajar en http://nodosol.org/p2pu/ejemplos
pueden verlos en accion en http://nodosol.org/p2pu/ejemplos/2/nombre-del archivo (fijense que hay que poner el nombre del ejemplo que desean ver ;)

hay ejemplos que sirven solo como tutoriales, un poco de codigo mostrando lo que se puede hacer
variables.php - operadores.php - textos_con_variables.php - bucle.phph

tambien encontraran ejemplos mas interesantes, con alguna funcionalidad como
contador.php (un contador de visitas rudimentario)

alumnos.php (un listado de alumnos leido de una "base de datos" de texto)
alumnos2.php (el mismo listado pero con mezclando algo de HTML, eso lo veremos mejor la semana proxima HTML+PHP+HTML...)

y para hacerlo un poco mas divertido podemos agregar alumnos a la lista con
agregar_alumno.php

De paso si quieren ingresar todos su usuarioP2PU con nombre, mail, pais y todo eso de cada uno en
http://nodosol.org/p2pu/ejemplos/2/agregar_alumno.php

podemos ver lo de todos en
http://nodosol.org/p2pu/ejemplos/2/alumnos2.php

TAREA

La tarea de esta semana va a ser enviar via http://nodosol.org/p2pu

un archivo llamado tarea_semana_2.php que al verlo muestre

1) Fecha y hora actual
2) que muestre un saludo "Buenos dias", "Buenas tardes" o "Buenas noches" segun la hora del dia
3) los numeros impares del 1 al 300
4) el contenido de algun otro archivo que lea (con readfile o file_get_contents)

y el codigo PHP debe contener

1) alguna variable
2) algun bucle /ciclo
3) algun texto entre comillas (dobles o simples)

el proximo martes 8/2 voy a evaluar todos los que hayan subido sus archivos a http://nodosol.org/p2pu/ en cada carpeta de alumno y voy a dar una devolucion con puntaje, no solo por la funcionalidad que vale 50%, sino por la elegancia, legibilidad y claridad del codigo, que vale el otro 50%

las dudas, por este hilo, de la semana 2
SUERTE!

Luis Palomo's picture
Luis Palomo
Fri, 2011-02-04 01:25

Hola Martín, ya subí algo pero no se ve como quiero, ya probé con codificación utf-8 y iso-8859-1 sin resultados, ¿alguna recomendación?. También quería preguntarte sobre la función file_exist(), que según la documentación de PHP debería devolver un booleano dependiendo de la existencia, o no, del archivo, pero al probarla en mi servidor local PHP dejaba de interpretar a partir de la linea en que la incluía, y al probar en tu servidor directamente obtenía un error. La sentencia que estaba probando era algo así como:

<?php
$archivo
= "externo.txt";
if(
file_exist($archivo)) {
readfile(archivo);
} else {
echo
"ALERTA: el archivo no existe";
}
?>

Victoria Marino's picture
Victoria Marino
Fri, 2011-02-04 02:22

Hola Luis, yo probé buscar si esa función estaba incluida y me dice que no, de donde sacaste la sintaxis? Te paso el scrip que utilice para ver si la tenes incluida a ver que te dice.

<?php
if (function_exists('file_exist')) {
    echo
"La funcion file_exist esta disponible";
} else {
    echo
"La funcion de file_exist no esta disponible";
}
?>

------ EDITO PORQUE ME DESCUBRI UN ERROR --------

Increíble, me corrijo a mi misma con minutos de diferencia, indagando un poco más encontré que tanto vos como yo estábamos cometiendo un error de escritura:

La función se llama file_exists()

Los dos estuvimos probando con file_exist (que no existe obviamente).

Saludos, espero que allá servido igual.

Luis Palomo's picture
Luis Palomo
Fri, 2011-02-04 04:42

uff gracias, que tontera, me falló la vista xD

Eric López's picture
Eric López
Fri, 2011-02-04 05:40

Hola Luis, faltaría poner el $ en la variable archivo para que la función readfile funcione: $archivo

Luis Palomo's picture
Luis Palomo
Fri, 2011-02-04 05:43

sí gracias, pero ese fue un error al transcribir al post solamente, ojalá nadie se confunda con eso porque ya no me deja editar el post :P

Diego Valencia's picture
Diego Valencia
Fri, 2011-02-04 19:37

Saludo a todos.

Para los que quieran estar mejor documentados acerca del comando DATE & TIME. Les recomiendo ésta página ... tiene muchas de las combinaciones necesarias.

http://www.ignside.net/man/php/fechas.php

Miguel David's picture
Miguel David
Sun, 2011-02-06 01:42

Ya subi el codigo pero quedo con 3 problemitas.
1. - Como me aseguro para que la hora que aparece en la pagina sea la del computador desde donde el cliente la abre.
2 - Esta vez que la hora sea siempre la de determinada zona horaria, por ejemplo que siempre muestre la hora actual en New York.
3 - Al final del resultado en readfile() mi funcion me devuelve tambien la longitud de la cadena y no supe como quitarla :).

El que quiera ver mi tarea estos son los links:
Tarea ----> http://www.nodosol.org/p2pu/migueldavidx/tarea_semana_2.php
Codigo --> http://www.nodosol.org/p2pu/vercodigo.php?archivo=migueldavidx/tarea_sem...

De pronto son problemitas simples, pero la verdad no se mucho de programacion y no se que significan cosas como estas :)
int readfile ( string $filename [, bool $use_include_path = false [, resource $context ]] )

Celso Ulises Juarez Ramirez's picture
Celso Ulises Juar...
Sun, 2011-02-06 05:36

Intentaré responderte con lo que sé, si alguien gusta corregir, es bienvenido:
1.- PHP se ejecuta en el servidor, así que la unica hora que puede obtener es la del mismo. Para obtener la del cliente, tendrías que utilizar un lenguaje que se ejecute en el cliente, como JavaScript, y supongo que habrá alguna forma para una vez obtenido con JS, pasar esa información al servidor para que PHP lo utilice.
2.- Se me ocurre que podrías crear una función, conociendo la zona horaria del servidor (y me imagino que hay alguna función en PHP para esto), y haciendo un ajuste a la zona horaria deseada (Nueva York es -5 o -4 dependiendo del horario de verano), sumando las horas necesarias. Es una idea.
3.- Lo que está pasando es que en tu función readF, estás retornando el resultado de readfile($file), y eso lo estás imprimiendo. La función readfile por si sola imprime en la pantalla el resultado, no es necesario hacer un echo al resultado, porque, como te explicaré en un momento, el resultado es un entero. Lo correcto, si quieres hacerlo así como lo pusiste, con funciones separadas, sería que en tu código principal, solo la mandaras llamar a readF, no hicieras echo. Espero darme a entender.

Sobre int readfile ( string $filename [, bool $use_include_path = false [, resource $context ]] ), es la definición de la función. En prácticamente todos los lenguajes de programación, la estructura de una función es similar:
-Valor de retorno [int]: Indica que tipo de dato va a retornar la función, en este caso un entero (Aqui es donde está el problema con tu función propia, como regresa el resultado de readfile, que es un entero, y le haces echo, lo estás imprimiendo).
-Nombre de la función [readfile].
-parámetros de entrada, entre parentesis[( string $filename [, bool $use_include_path = false [, resource $context ]] )]: En este caso puedes ver que incluye unos parámetros entre corchetes. Estos son opcionales, es por eso que nosotros solo mandamos llamar la función con un solo parametro, "string $filename". Si quisiéramos, podríamos utilizar "bool $use_include_path", pero como no queremos, la función automaticamente le pone el valor false (aparece como "= false").

Como conclusión, cuando tu mandas llamar tu función:

function readF ($f){
    $file = $f;
    if(file_exists($file)){
         $result = readfile($file);
    }
else {
        $result = "El Archivo NO Existe";
}
return($result);
}
Almacenas el resultado de readfile($file), que como ya vimos es un entero, en la variable $result, y ésta la regresas como resultado de la función. Después, en tu código principal:

<?php echo readF($f); ?>
Estas mandando llamar a readF, va, se ejecuta, cuando llega a la linea readfile($file), imprime el resultado de leer el archivo. Termina la función, y tu le estas diciendo que ademas de eso, haga "echo" en el resultado (un entero), por eso al final de tu archivo, aparece el 52.

Uff, espero no haberte revuelto mas, si algo no quedó claro, o no me di a entender, con confianza pregunta.

Saludos.

Miguel David's picture
Miguel David
Sun, 2011-02-06 05:57

:)
Super la explicación, creo que me queda muy claro. Ya me funciono lo de readfile().
Ahora solo queda aprender un poco mas sobre las funciones de fecha y hora como date() y time() entre otras.
Muchas gracias

Enrique Trepat's picture
Enrique Trepat
Mon, 2011-02-07 00:33

Miguel, yo estoy utilizando http://www.000webhost.com/ como server para hacer las practicas. Como está configurado con otra zona horaria tuve que buscar una función para que me muestre la de Buenos Aires al imprimir la hora en pantalla.
Encontré una función que corrige la diferencia:

date_default_timezone_set('America/Argentina/San_Luis');

En vez de usar Buenos Aires uso San Luis porque es la zona horaria actual de todo el territorio (no se aplicó la corrección DST de verano)

Luego guardo fecha y hora en variables
$fecha = date("d/m/Y");
$hora = date("H:i:s");

Saludos

Miguel David's picture
Miguel David
Tue, 2011-02-08 05:10

Gracias Enrique. Eso soluciona que siempre se muestre determinada zona horaria.
Funciona muy bien :)

Matías Merino's picture
Matías Merino
Mon, 2011-02-07 01:44

Hola, saben que estaba haciendo la tarea, pero me surgió problema con el ultimo punto, de abrir un archivo.
Se me imprime algo que no debería, cuando le hago Echo me sale "Resource id #4" y no tengo la menor idea de por que me sale (Y no es lo que está dentro del archivo .txt =S)
Este es el código:

<?php
$archivo
='http://dl.dropbox.com/u/3517/P2Pu/PHP/2/archivo.txt';
$externo = file_get_contents("$archivo");
if (
strlen($externo))
{echo
"El archivo existe.";
$abrir = fopen($archivo, "r");
echo
$abrir;}
else{echo
"El archivo no existe.";}
?>

Celso Ulises Juarez Ramirez's picture
Celso Ulises Juar...
Mon, 2011-02-07 06:59

Lo que está pasando es que estás haciendole echo a $abrir, que es el resultado de fopen, y segun la definición del metodo en la documentación de PHP:
resource fopen ( string $filename , string $mode [, bool $use_include_path = false [, resource $context ]] )
regresa un valor de tipo "resource". Por eso el echo dice "Resource id #4". A lo que tendrías que hacer echo es a $externo, que es la salida de file_get_contents que si es un string:
string file_get_contents ( string $filename [, bool $use_include_path = false [, resource $context [, int $offset = -1 [, int $maxlen ]]]] )
Osea, tu codigo debería de ser algo asi:

<?php
$archivo
='http://dl.dropbox.com/u/3517/P2Pu/PHP/2/archivo.txt';
$externo = file_get_contents("$archivo");
if (
strlen($externo))
{
   echo
"El archivo existe.";
   echo
$externo;
} else {
   echo
"El archivo no existe.";
}
?>

Espero haberte ayudado. Saludos.

Francisco  Cerdas's picture
Francisco Cerdas
Mon, 2011-02-07 07:43

Hola Matias,

No soy muy experto en esto pero quizas te pueda ayudar en algo (al menos para que alguien me coorija y asi resolver tu duda). Creo que porque estas accediendo a un archivo externo (Servidor externo dropbox), puede que no tengas los permisos de escritura y lectura por lo tanto la funcion
<?phpfopen($archivo, "r")?>
no sea la mas adecuada chek it este link de los expertos donde te explican mejor fopen . Ahora mi solucion es esta:

<?php
$archivo
='http://dl.dropbox.com/u/3517/P2Pu/PHP/2/archivo.txt';
$externo = file_get_contents("$archivo");
if (
strlen($externo))
{echo
"El archivo existe.";
echo
$externo;}
else{echo
"El archivo no existe.";}
?>

No se si esta bien, pero me muestra un Sigo vivo!

Martin Olivera's picture
Martin Olivera
Tue, 2011-02-08 16:48

esta perfecto lo que te dijeron antes, fopen() es para abrir un archivo para luego procesarlo, por eso devuelve un resource y no el contendio del archivo. fopen() es lo que podriamos llamar una "funcion de bajo nivel" es decir que hace cosas mas tecnicas, mas cerca del hardware, que solo abre un archivo y que uno debe usar combinada con otras, para leer, escribir y cerrar el archivo.
En cambio las funciones mas generales o "de alto nivel" que estabamos probando hacen todo eso junto, como readfile() que lo muestra en la pagina o file_get_contents() que lee todo el archivo o file_put_contents() que escribe todo un archivo a partir de un texto o de una variable

Matías Merino's picture
Matías Merino
Mon, 2011-02-07 21:55

Perfecto!, me ha funcionado de peelos!, muchas gracias, ya vi el problema :P

Acá está mi tarea por si alguien la quiere ver.
http://www.nodosol.org/p2pu/Saitam/tarea_semana_2.php
y acá el archivo de fuente con comentarios, por si alguien le quiere hechar un ojo.
http://www.nodosol.org/p2pu/vercodigo.php?archivo=Saitam/tarea_semana_2.php

Cesar Esteban's picture
Cesar Esteban
Wed, 2011-02-09 07:23

Hey matias estoy estudiando como hacer que los numeros me impares me salgan un poco ordenados algo asi como lo tenes voz, pero no entiendo como usar el box. bueno creo que eso es lo que necesito?

Matías Merino's picture
Matías Merino
Wed, 2011-02-09 07:58

Si, lo que ocupo ahí se llama CSS, lo tienes que ver entre las etiquetas head, ahí búscate el código del .box y lo que cambies dentro de las llaves del .box cambiara la caja de los números, si tenes mas dudas me preguntas, slds.

Cesar Esteban's picture
Cesar Esteban
Wed, 2011-02-09 08:26

Muchas gracias por tu tiempo matias, no tuve mas tiempo para seguir investigando sobre la pregunta, me toco hacerlo algo rustico, bueno hechale un vistaso, fue la idea mas rapida y sencilla que se me ocurrio.
http://www.nodosol.org/p2pu/cesar.castejon/tarea_semana_2.php
codigo
http://www.nodosol.org/p2pu/vercodigo.php?archivo=cesar.castejon/tarea_s...
Gracias.

Matías Merino's picture
Matías Merino
Wed, 2011-02-09 21:37

Te recomiendo que leas sobre un poco de CSS :), si tienes duda, me avisas :)

Cesar Esteban's picture
Cesar Esteban
Wed, 2011-02-09 23:38

Ok, gracias por tu consejo, vale mas que antes de esta semana habia estudiado un poco acerca de las variables y las sintaxis, pero si me tengo que empaparme mas con html y CSS.
Muchas gracias.

Frank Leon's picture
Frank Leon
Mon, 2011-02-07 23:32

Acabo de subir mi trabajo para probar como se ve online pero resulta que he definido el charset y en mi equipo se ven bien, las tildes las eñes pero en el servidor de los trabajos no se muestra bien, http://www.nodosol.org/p2pu/kuroko/tarea_semana_2.php Ayuda, Gracias

Martin Olivera's picture
Martin Olivera
Tue, 2011-02-08 00:04

Frank y todos, no se preocupen por esto de los acentos y la defincion del charset, tengo que revisar el servidor a ver que tiene, eso no va a ser un error de la tarea, obvio.
Cuando vea que le pasa les cuento asi aprendemos todos, si alguien tiene alguna idea escucho :)

Franco Ponce's picture
Franco Ponce
Tue, 2011-02-08 01:51

Hola yo solucione el tema de los acentos con htmlentities, puse algo asi:

<?php
  $archivo
= 'http://dl.dropbox.com/u/9009120/php.txt';
 
$texto = file_get_contents($archivo);
   if (
$texto != FALSE) {
     echo(
htmlentities($texto));
                        }
   else {
         echo(
"<center><big><strong>El archivo no exite</strong></big></center>");
        }
?>

Dejo la referencia de htmlentities
http://www.php.net/manual/es/function.htmlentities.php
Mi trabajo: http://www.nodosol.org/p2pu/otiuqx/tarea_semana_2.php.php XD

Frank Leon's picture
Frank Leon
Tue, 2011-02-08 02:41

Lo del servidor podria ser que en la instalacion no tiene codificacion ut8 o el idioma esta incompleto. a mi me paso en un ubuntu server 10.04 lo instale en español y a la hora de configurar el idioma omiti algoi entosnces me daba ese mismo error lo que hice fue instalar el paquete de idioma completo y se soluciono.

Oscar Omar Soto Delgado's picture
Oscar Omar Soto D...
Tue, 2011-02-08 05:03

Bueno, dejo mi tarea; la zona horaria me ha dado muchos problemas. Lo probé en mi servidor local y me funciono el código tal cual; pero al subirlo al servidor remoto me modifica la hora y el lenguaje. El programa cumple lo solicitado; espero encontrar la solución a esos detallitos.
Saludos.
http://www.nodosol.org/p2pu/Bloodsto/tarea_semana_2.php

Eddy Hernandez's picture
Eddy Hernandez
Tue, 2011-02-08 08:53

Termine termine, adjunto mi tarea No 2
http://www.nodosol.org/p2pu/eddytodo/tarea_semana_2.php

Javier Sáez's picture
Javier Sáez
Tue, 2011-02-08 10:19

Acabado, justo a tiempo,espero :D
http://www.nodosol.org/p2pu/Nihilistik/tarea2.php

Alonso Calle's picture
Alonso Calle
Tue, 2011-02-08 18:29

Hola!

No puedo subir mi archivo porque mi nick no esta en la lista de "seleccionar usuario" /:

¿Que puedo hacer?

Martin Olivera's picture
Martin Olivera
Tue, 2011-02-08 18:39

saque a todos los que no habian subido archivos, ahi estas agregado, ya podes subirlo. Gracias

Alonso Calle's picture
Alonso Calle
Tue, 2011-02-08 18:44

Gracias Martin!

Más bien disculpa por la tardanza :)

Eduardo Bernal Mamani's picture
Eduardo Bernal Ma...
Tue, 2011-02-08 22:33

Disculpa Martín es el mismo caso que Alonso, ma tarde debido a los viajes de trabajo que realize, bueno quiero ponerme al corriente, ya que cuento ahora con el tiempo para poder realizar el curso.
PDT. mi usuario es shabedekam, te lo agradecere mucho Martín

Israel Herrera's picture
Israel Herrera
Tue, 2011-02-08 23:25

PRofe, tengo un pequño problema, apenas regresé de hacer unas instalaciones en un proyecto que se llama Ruralsat, en donde estuvimos en unas comunidades casi aisladas tecnológicamente, estoy descargando los ejemplos y dandole una leida, Veo que la tarea es para entregar el día de hoy, espero entregarla un poco mas tarde.

Gracias!!!!

Cesar Esteban's picture
Cesar Esteban
Wed, 2011-02-09 04:22

Tube casi el mismo proble martin, he podido leer un poco los foros estos dias, pero no he podido sentarme a estudiar, por que esta semana comenzamos a planificar en el Colegio donde trabajo, espero y valga la tarea cuando la pueda hacer entre hoy y mañana.

Pablo Herrera's picture
Pablo Herrera
Wed, 2011-02-09 00:38

Justo a tiempo: http://www.nodosol.org/p2pu/ANDRS/tarea_semana_2.php
Me di cuenta que la hora no era correcta al subirlo a la página. Muestra la hora del servidor.

Francisco  Cerdas's picture
Francisco Cerdas
Wed, 2011-02-09 03:24

Ouch, tarde lo subí espero lo tomes en cuenta. Chicus12
En Costa Rica todavía es martes.

josue sosa's picture
josue sosa
Wed, 2011-02-09 03:56

q raro!!!! diai mae jeje, pero es cierto todavia es martes :P

Eddy Hernandez's picture
Eddy Hernandez
Wed, 2011-02-09 04:45

Francisco ( Chicus12) subiste tu documento en extensión rar,

josue sosa's picture
josue sosa
Wed, 2011-02-09 04:56

igual ahi estan tambien los archivos php y el txt

J. Alonso Perez T.'s picture
J. Alonso Perez T.
Wed, 2011-02-09 17:48

Hola Profesor, Una pregunta... Iba a subir mi tarea pero no encontre mi usuario??? me dieron de baja o algo asi?

J. Alonso Perez T.'s picture
J. Alonso Perez T.
Wed, 2011-02-09 17:49

Es japt23 y no lo encontre??

Martin Olivera's picture
Martin Olivera
Wed, 2011-02-09 18:06

agregue a todos los que lo pidieron o dieron señales de vida

J. Alonso Perez T.'s picture
J. Alonso Perez T.
Wed, 2011-02-09 19:42

Listo mi tarea con retraso de 1 dia. No tengo escusas entre el trabajo y vida personal me retrase es todo. Gracias!

Matías Merino's picture
Matías Merino
Wed, 2011-02-09 23:38

Martín, una consulta, donde podremos ver las notas?

Saludos :)

Martin Olivera's picture
Martin Olivera
Wed, 2011-02-09 23:52

estan todos desaprobados!

era un chiste

creo que con el trabajo que da esto de corregir, mas bien lo vamos a hacer colaborativo!! dejenme pensar como acelerar esto y dar un feedback justo

algo interesante es que todos pueden ver las tareas de otros

Matías Merino's picture
Matías Merino
Thu, 2011-02-10 06:30

Me parece!, y si hacemos una especie de votación?
Onda por ejemplo Votación de programación, Metodología, uso del PHP, y con una parte para dejar comentarios, onda para ver como se puede hacer mejor o ideas de optimizacion ? :P

Slds :)

Eddy Hernandez's picture
Eddy Hernandez
Thu, 2011-02-10 00:05

Tome tiempo para ver muchas de las tareas, y pues en todas hay cosas distintas que no sabia, hay gente q domina bastante, sería bueno q los q dominan bastante sugieran a los q aún estamos comenzando

Jose Manuel Prieto's picture
Jose Manuel Prieto
Thu, 2011-02-10 00:42

Hola a todos,
Yo tomé la solución de leer el un archivo php: http://nodosol.org/p2pu/ejemplos/1/info.php, pero me ejecuta el código del mismo.
Un saludo

Eddy Hernandez's picture
Eddy Hernandez
Thu, 2011-02-10 01:39

Es correcto, lo que estas haciendo allí es ejecutando la función phpinfo() que está en el documento que estás llamando info.php. al momento de presentarlo lo procesa antes. prueba con un archivo de texto, mezcla palabras con algunas etiquetas html por ejemplo
que hace salto de linea

Eddy Hernandez's picture
Eddy Hernandez
Thu, 2011-02-10 01:46

Corrección: que la etiqueta que no me aparece <br> (que es salto de linea) espero que me hayas comprendido compañero

Matías Merino's picture
Matías Merino
Thu, 2011-02-10 06:31

Para ser mas preciso
;)

:)