Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > PHP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-01-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Dónde termina un script?

Hola, examinen este script:

Código PHP:
<?php
  $a 
"?>";
  
$password 'LKFBHYT';
?>
El script comienza en <?php, eso está claro. Pero hay dos ?> si contamos el de

Código PHP:
$a "?>"
Veamos las posibilidades. Si el script termina en el segundo ?>, la página quedará en blanco pues no hay ninguna salida. Pero si termina en el primero, la página mostrará

Código:
"; $password = 'LKFBHYT'; ?>
revelando nuestra contraseña.

¿Dónde, pues, termina?

Al ejecutar el script vemos la página en blanco. ¡Claro!, dirán ustedes, porque el primer ?> está entrecomillado; no es más que texto para el intérprete de PHP.

Ok. Pero ¿qúe pasa si comentamos la línea:

Código PHP:
<?php
  
// $a = "?>";
  $password = 'LKFBHYT';
?>
¡Ya el mismo coloreado de sintaxis nos lo dice!

Extraño ¿no?

// Saludos
Responder Con Cita
  #2  
Antiguo 27-01-2006
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Mmmm.. que feo... evidentemente no lleva la cuenta de las comillas, o siempre prevalece el ?>
Notificalo a php.org!!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 27-01-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Ahí está la cosa. Uno podría pensar que siempre prevalece el ?>, pero no es así al descomentar la línea. Ni tampoco si usamos un comentario de bloque

Código PHP:
<?php
 
/* $a = "?>"; */
 
$password 'LKFBHYT';
?>
// Saludos
Responder Con Cita
  #4  
Antiguo 28-01-2006
Avatar de D-MO
D-MO D-MO is offline
Miembro
 
Registrado: ago 2005
Ubicación: root@debian:/#
Posts: 1.042
Poder: 20
D-MO Va por buen camino
Hola

Interesante tema, si se dan cuenta en la ayuda de php, en la referencia de sesiones esta un ejemplo con este error.
Código PHP:
<?php
if (!session_is_registered('count')) {
    
session_register('count');
    
$count 1;
}
else {
    
$count++;
}
?>

Hola, visitante. Has visto esta p&aacute;gina <?php echo $count?> veces.

<?php
# el <?php echo SID?> (Se puede usar <?=SID?> si short tag est&aacute; activado)
# es necesario para conservar el session id
# en caso de que el usuario haya desactivado las cookies
?>

Para continuar, haga click <A HREF="nextpage.php?<?php echo SID?>">aqu&iacute;</A>.
En este caso utilizan para iniciar el comentario el signo numeral (#) el cual hace exactamente lo mismo que las diagonales dobles(//).

Saludos.
Responder Con Cita
  #5  
Antiguo 28-01-2006
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Realmente interesante...
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #6  
Antiguo 28-01-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Interesante también el ejemplo que menciona D-MO. Al parecer hay algo incorrecto, o por lo menos poco común, en la precedencia respecto de los comentarios de línea (no sucede lo mismo con /* */).

Lo curioso además es que no es tan descabellado encontrarse con esta situación. De hecho estaba usando una expresión regular para- precisamente -identificar bloques de código php en un archivo html:

Código PHP:
<?php
$phpPattern 
"<\?php.*\?>";
?>
Y fue en el momento en que comenté la línea que me di cuenta del hecho:

Código PHP:
<?php
// $phpPattern = "<\?php.*\?>";
?>
// Saludos
Responder Con Cita
  #7  
Antiguo 28-01-2006
Avatar de D-MO
D-MO D-MO is offline
Miembro
 
Registrado: ago 2005
Ubicación: root@debian:/#
Posts: 1.042
Poder: 20
D-MO Va por buen camino
Hey roman, aprovechando que te encuentro en este hilo y que tocamos el tema de expresiones regulares, podrías recomendarme un buen manual/tutorial de ello pero que este en español, ya que no domino el inglés en un 100% y revise el este vinculo que pusiste en este post, pero no lo comprendí del todo, ya he buscado pero no he podido encontrar uno que me satisfaga.

Gracias de antemano.
Responder Con Cita
  #8  
Antiguo 28-01-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Echa un vistazo al mensaje número 24 del Hilo que refieres D-MO. Ahí se enlaza a cierto tutorial.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #9  
Antiguo 29-01-2006
Avatar de D-MO
D-MO D-MO is offline
Miembro
 
Registrado: ago 2005
Ubicación: root@debian:/#
Posts: 1.042
Poder: 20
D-MO Va por buen camino
Cita:
Empezado por dec
Hola,

Echa un vistazo al mensaje número 24 del Hilo que refieres D-MO. Ahí se enlaza a cierto tutorial.
Orale, gracias hermano, tal parece que no le lei por completo . Gracias de nuevo.

PD//Ya eliminaste Colorea de tu pagina verdad?, ayer estuve revisando y no lo pude encontrar.

Saludos.
Responder Con Cita
  #10  
Antiguo 30-01-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Nunca subestimen el poder de las expresiones regulares

El manual que les referí originalmente comienza con las siguientes palabras:

Cita:
[...] A lot of people seem to prefer writing lines and lines of code to solve a problem with simple string functions rather than getting into regular expressions to do it with just one statement.
Cita:
Mucha gente parece preferir escribir líneas y líneas de código para resolver un problema usando las funciones estándar de cadenas, en lugar de usar expresiones regulares y hacerlo con una sóla instrucción.
Aunque ya tenía yo algún convencimiento de ello, este fin de semana me he quedado impactado.

Quería hacer un resaltador de sintaxis similar al de las etiquetas [delphi] pero para código PHP, como alternativa al que trae integrado el mismo PHP. Me puse a revisar un paquete del que me comentó David y que al parecer tiene cierto reconocimiento y es usado en varios lados. Me refiero a GeSHi, que además del resaltado propiamente dicho, añade un sin fin de monerías como el numerado de líneas y enlaces al manual de php en cada término. Al margen de la conveniencia o no de tales agregados, y debido a lo que ellos mismos mencionan acerca de la lentitud del resaltado, me dio la curiosidad de resaltar al mismo GeSHi, esto es, al módulo principal geshi.php que abarca más de 2600 líneas. El resultado, un resaltado perfecto...

...hecho en ¡10.15 segundos!

Así que me puse a adaptar el resaltador [delphi] a un resaltador PHP, que dista todavía de ser perfecto, pero llevo unas 120 líneas y he logrado resaltar GeSHi en 0.10 segundos (cero punto diez segundos).

¿Dónde está el problema?

A mi modo de ver, está justo en la frase mencionada al principio. No es que no usen expresiones regulares; de hecho usan bastantes. El problema es que han implementado todo un parser para hacer el resaltado. Es decir, recorren toda la cadena de entrada, caracter por caracter, examinando qué hay en cada uno y actuando en consecuencia. El parser de PHP en sí- el que lee el código fuente -es magnífico, no cabe duda, pero hacer un parser con PHP es, por lo visto, algo poco recomendable.

Así pues, reafirmo mi recomendación para estudiar expresiones regulares. Ciertamente son difíciles pero valen la pena. Incluso estaba a punto de tirar la toalla ante un problema al momento de resaltar strings, pensando que tendría que darle la vuelta a las expresiones regulares, cuando en el mismo manual que menciono viene el ejemplo de cómo resolverlo.

// Saludos
Responder Con Cita
  #11  
Antiguo 30-01-2006
Avatar de D-MO
D-MO D-MO is offline
Miembro
 
Registrado: ago 2005
Ubicación: root@debian:/#
Posts: 1.042
Poder: 20
D-MO Va por buen camino
Hay que ver que en realidad esta muy bueno el enlace das roman, creo que podre implementar esto algun dia.

Cita:
Empezado por Resultado de Geshi
Statistic------------------Your source--------------------------Averag for php
Characters in source:-------2670 (20609 in highlighted result)---------3530.146
Total time highlighting:-----1.002 seconds-------------------------1.153 seconds
Characters per second:----2665.107 seconds--------------------- 0.000/2577.942/77839.333
Muchas Gracias.

Saludos.

EDITO:
Creo que no capte bien tu mensaje desde el principio, jeje , esque lei algo a prisa, veo que a lo que te refieres es que con tu scrip resaltador de Delphi has mejorado la velocidad de GeSHi.

Esto me pasa por apurado . jeje

Última edición por D-MO fecha: 30-01-2006 a las 16:41:14.
Responder Con Cita
  #12  
Antiguo 30-01-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por D-MO
Creo que no capte bien tu mensaje desde el principio, jeje , esque lei algo a prisa, veo que a lo que te refieres es que con tu scrip resaltador de Delphi has mejorado la velocidad de GeSHi.
No es que yo la haya mejorado, es simplemente que al usar expresiones regulares para identificar los distintos términos a resaltar, se obtiene una velocidad infinitamente superior a cuando se utiliza un parser, y este es el punto del mensaje anterior.

No sé cómo sacaste las estimaciones que muestras en donde aparentemente GeSHi le gana al mismo PHP, pero no me las creo. También hice la prueba con el resaltador integrado de PHP contra el mismo script geshi.php y el resaltado es prácticamente instantáneo, a diferencia de los 10 segundos que le lleva a GeSHi. Es posible que el resaltador integrado use un parser pero no es lo mismo uno escrito en C que uno escrito en un lenguaje interpretado.

// Saludos
Responder Con Cita
  #13  
Antiguo 30-01-2006
Avatar de D-MO
D-MO D-MO is offline
Miembro
 
Registrado: ago 2005
Ubicación: root@debian:/#
Posts: 1.042
Poder: 20
D-MO Va por buen camino
Cita:
Empezado por roman
No es que yo la haya mejorado, es simplemente que al usar expresiones regulares para identificar los distintos términos a resaltar, se obtiene una velocidad infinitamente superior a cuando se utiliza un parser, y este es el punto del mensaje anterior.
Bueno, en realidad a eso me refería, creo que no hando muy bien para explicarme ni para comprender el dia de hoy.

Con respecto a los datos que te mostre, los encontre en la misma pagina de GeSHi, al pasar un script de aproximadamente unas 70 lineas, que puse en el cuadro de texto que tiene la web.

Saludos.
Responder Con Cita
  #14  
Antiguo 06-02-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Más sobre Expresiones regulares. Un tutorial de unas 22 páginas en español escrito por Daniel Rodríguez y disponible en el sitio Web de BULMA también en formato PDF. Trata sobre las Expresiones regulares de tipo "Perl". Y también en la Web de BULMA y del mismo autor, un artículo/tutorial titulado "Expresiones regulares -Conceptos avanzados".
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
¿ $_PHP_SELF ? tomar nombre del script actual dmassive PHP 3 23-08-2005 17:14:12
grafico de php en action script srangel PHP 1 09-02-2005 16:11:24
Generar Script MySQL bustio MySQL 12 09-02-2005 14:56:13
extraer un script de una tabla mediante código???? mguixot Firebird e Interbase 1 10-09-2004 21:26:08


La franja horaria es GMT +2. Ahora son las 03:23:58.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi