PDA

Ver la Versión Completa : Problemas con script php incluido en HTML


HombreSigma
30-06-2004, 01:16:21
Instalé Apache y PHP en mi PC. Ambas parecieran estar funcionando ya que la instrucción de prueba "info.php" para actuar como debiera.

Como estoy iniciando mi aprendizaje en PHP, mi primer ejercicio fue realizar este conocido ejemplo que llamé "ejemplo1.htm":

<html>
<head>
<title>Ejemplo PHP</title>
</head>
<body>
<?php echo "Hola, este es un ejemplo con PHP!"; ?>
</body>
</html>

Lo invoco con la siguiente dirección puesta en Internet Explorer:

C:\Archivos de programa\Apache Group\Apache\htdocs\Ejemplo1.htm

Sin embargo me saca una página en blanco.

Que puede estar ocurriendo???

roman
30-06-2004, 01:21:47
Al especificar la dirección de esa forma la petición nunca llega a Apache y por tanto no la procesa PHP. Si ves el código fuente de esa página "en blanco" verás el código PHP.

Para poder verla en tu navegador debes poner la dirección:

http://localhost/Ejemplo1.htm

// Saludos

HombreSigma
30-06-2004, 03:02:31
En realidad no funciona ni:
http://127.0.0.1/ejemplo1.htm
http://localhost/ejemplo1.htm

ni la anterior.

Las tres páginas no ejecutan el script php.

Si utilizo una página html normal si funciona con las tres especificaciones.
Lo que no funciona es el script embebido o incluido dentro de la página html !

Gracias de antemano.

__hector
30-06-2004, 03:45:25
Si estas en windows, es posible que la extension .html no este asociada al parser o interprete de php, de hecho seguro que no lo tiene. Cambiale la extension al archivo a .php

Dinos que tal...

roman
30-06-2004, 03:46:09
Aunque me parece que lo aclaras vamos a descartar la posibilidad de que Apache no haya sido correctamente instalado:

Si navegas simplemente a http://localhost, ¿ves la página de bienvenida de Apache?

De ser así, cuando dices


ya que la instrucción de prueba "info.php" para actuar como debiera.


¿a qué te refieres? ¿info.php es un script con phpinfo()? ¿Muestra el listado de la información de PHP?.

Si también es cierto esto, dime, después de la instalación, en caso de haber reiniciado la PC, ¿te aseguraste de que esté corriendo el servidor Apache?

// Saludos

roman
30-06-2004, 03:47:20
¡Ah caramba!

Se me adelantó Héctor. Hay veces que no vemos lo más obvio. Seguro debe ser lo que él dice de la extensión.

:)

// Saludos

HombreSigma
30-06-2004, 04:26:58
Perdón corrijo lo anterior. En realidad lo que arreglo el problema fue el cambio de extensión del archivo a ejemplo1.php, como me había sugerido Héctor.

Sin embargo, esto no me parece muy conveniente, porque que ocurririría si tuviese un script php y un script java incluidos dentro de una misma página HTML. Debo en este caso crear un archivo html con que tipo de extensión: para php o para java?

Mejor no sería configurar el php.ini de alguna manera para que reconozca la extensión html? Como se haría ?

Gracias por cualquier información adicional.

HombreSigma
01-07-2004, 18:30:05
-----------

roman
01-07-2004, 18:35:34
+++++++++++

__hector
01-07-2004, 21:18:07
************

Java no maneja scripts, salvo que hables de JSP (java servlets pages), y eso trae un problema de fondo. Sucede que para que el servidor pueda interpretar el codigo de una pagina, y ejecutar las acciones especificadas en el Script, necesita por obligacion un interprete. Asi hay interpretes para asp clasico (asp.dll), para asp.net, para php (php.exe), java, coldfusion, y cualquier otro lenguaje de webscripting.

El servidor (iis en este caso) necesita saber, para cada extension de pagina, cual interprete llamar, por lo que usa el mapeo de las extensiones del archivo para llamar uno u otro, pero nunca... nunca dos a la vez. Eso es logico en el hecho de que, php no podra interpretar asp y viceversa, incluso cuando usen tags iguales para indicar el inicio/fin del codigo a ser interpretado ( <% %> o <? ?> o cualquier otro).

Ahora, si te refieres a java como javascript, como corre en el cliente, no hay problemas con eso. Con una etiqueta <script> funciona sin problemas.

Para que el webserver te reconozca la extension html para ser interpretada por el motor de php, en iis realiza los siguientes pasos:

Click derecho sobre el website/properties/Home Directory/Configuration/Mappings

Busca la extension .html en la lista, y si no esta, creala con las mismas propiedades que tiene la de la extension .php

HombreSigma
03-07-2004, 00:12:08
Gracias por la información.

Como explicas se configuraría el IIS. Pero como se configuraría el APACHE?

Gracias de nuevo...

roman
03-07-2004, 00:24:28
Busca las entradas AddType en el archivo %APACHE%\Conf\httpd.conf

Encontrarás una como

AddType application/x-httpd-php .php

Agrega la línea

AddType application/x-httpd-php .html

y reinicia Apache.

Ahora Apache mandará las páginas con extensión html a PHP.

// Saludos

kayetano
07-07-2004, 13:32:15
Hola a todos

Lo que comenta Roman tiene el problema de que todoas las páginas tanto php com html pasarían por el interprete de PHP con el consiguiente consumo de recursos de la máquina, si solo es para hacer pruebas en casa no pasa nada, pero en un servidor como Dios manda esto sería un gran desperdicio de recursos.

__hector
07-07-2004, 19:26:53
Solucion: al cesar lo que es del cesar

Si vas a ejecutar codigo php, la extension del archivo debe ser php. Si es asp, debe ser asp, si es asp.net: aspx, si es coldfusion: cfm, etc etc etc

No veo el inconveniente de hacerlo como dios manda, aunque me queda tambien la duda de que tan lento puede ser el proceso de parsing de una pagina html con php, sin que esta incluya codigo php en si misma. Sera cuestion de probar

HombreSigma
08-07-2004, 18:32:57
La verdad hice el cambio el archivo de configuración y tampoco me funcionó. Por esta razón deje esta página con extensión php lo que me permite que el interpretador la ejecute correctamente.

Pero ahora el problema con esta misma página es que no debo invocarla de forma simple, lo cual ya me funciona, sino dentro de un conjunto de marcos.

Tengo un marco superior, un marco izquierdo y un marco derecho. La página ahora debe mostrar sus resultados en el marco derecho siendo invocada por un enlace desde el marco superior o cuando se inicializa la apertura del conjunto de marcos.

Pero en vez de mostrar los resultados como lo haría cuando se ejecuta sola, parece que el interpretador php no ejecuta el código php de la página sino que lo toma como texto, a pesar de que ya tiene extensión .php. Por tanto, el resultado en pantalla no es la ejecución del script sino parte del texto del código php !!.

Gracias por cualquier sugerencia.

kayetano
08-07-2004, 20:23:06
Hola

Como haces la llamada a esa página ??

Recuerda que para que una página sea interpretada por el PHP debe pasar por el servidor Apacha, o con un ejemplo:

Si llamas desde el navegador a una página de la siguiente forma
http://localhost/mi_pagina.php
será una interpretada por PHP

Si lo haces de esta otra forma
c:\mi_pagina.php
No será interpretada por PHP y el navegador intentará interpretarla como buenamente pueda.

HombreSigma
08-07-2004, 22:46:53
Kayetano parece que tiene la razón.

Cuando utilizo la ruta absoluta al servidor como por ejemplo http://localhost/mipagina.php e incluso http://localhost/mipagina.htm

me funciona en ambos casos. No ocurre así con las direcciones relativas con páginas html que incluyen php ni con los marcos que llaman archivos con extensión php.

Entonces como haría para colocar esta pagína en un servidor diferente del local mío sino en otro? Debo cambiar todas las rutas absolutas como la anterior a las rutas del nuevo servidor? Esto me parecería demasiado impractico.

Gracias por la información.

jachguate
09-07-2004, 00:10:42
me funciona en ambos casos. No ocurre así con las direcciones relativas con páginas html que incluyen php ni con los marcos que llaman archivos con extensión php.

Estoy seguro que tu problema está aqui en que estas cargando la página que tiene la definición de los marcos de la forma:

c:\pagina\marcos.html

y no como

http://localhost/marcos.html.

y como verás... la ruta "relativa" también es relativa a la forma en que se ha cargado la página con frames.

En un servidor definitivo, claro está, no vas a tener ningun problema usando rutas relativas.

Hasta luego.

;)

kayetano
09-07-2004, 14:43:12
Hola

No tiens que poner las direcciones completas de las páginas que quieres que se visualicen, me explico con un ejemplo

Si estas visualizando la página
http://localhost/mi_pagina.php
la estas viendo desde el servidor Apache, ahora si desde esta pagina tienes un enlacel del tipo <a href="mi_otra_pagina.php">hola verano</a> tabién la estaras viendo desde el servidor.

Como puedes comprobar en el enlace no he puesto ninguna ruta, el Apache ya sabe que debe buscar esa pagina dentru del directorio donde estaba "mi_pagina.php"

En pocas palabras no tienes que poner simpre "http://localhost" el Apache es muy listo y sabe donde buscar :-)

tcp_ip_es
09-07-2004, 14:47:54
A parte de la segunda duda del hombresigma :D .... yo para páginas html con código php embebido utilizo la extensión .phtml.

Saludos, Tony

jachguate
09-07-2004, 21:22:03
Como puedes comprobar en el enlace no he puesto ninguna ruta, el Apache ya sabe que debe buscar esa pagina dentru del directorio donde estaba "mi_pagina.php"

En pocas palabras no tienes que poner simpre "http://localhost" el Apache es muy listo y sabe donde buscar :-)

Lamento contradecirte, pero esta "resolucion" de la dirección relativa a una dirección absoluta se lleva a cabo en el navegador. Es decir, apache (o IIS o cualquier otro) no tienen nada que ver, y de hecho no sabrian donde buscar ya que dificilmente "recuerden" al cliente. Salvo que explicitamente se use alguna cookie u otra técnica, pero vamos, que no es el comportamiento normal.

Hasta luego.

;)

roman
09-07-2004, 22:00:12
Lamento contradecirte, pero esta "resolucion" de la dirección relativa a una dirección absoluta se lleva a cabo en el navegador. Es decir, apache (o IIS o cualquier otro) no tienen nada que ver, y de hecho no sabrian donde buscar ya que dificilmente "recuerden" al cliente.

Hola,

A punto estaba de responder airadamente para, a mi vez, contradecirte pues lo primero que entendí es que no podrían usarse rutas relativas en los enlaces- hecho francamente falso - pero en realidad te refieres a dónde se resuelven las rutas relativas, y tienes toda la razón.

Quizá hay que aclarar un poco el mecanismo.

Cuando el usuario da click en un enlace que dice 'pagina.htm', el navegador no manda la petición tal cual pues de hecho no llegaría a ningún lado fuera de la pc del usuario. El navegador antepone a 'pagina.htm' el url (mejor dicho, la parte del url que indica el servidor y directorio actual) de la página actual. Así que si el url de la página actual era

"http://www.miweb.net/midirectorio"

la petición que mandará el navegador será

"http://www.miweb.net/midirectorio/pagina.htm"

Este es el mecanismo por defecto, pero puede alterarse mediante la etiqueta <base>.

Si la página actualmente cargada especifica

<base href='http://www.miweb.net/miotrodirectorio/'>

entonces, aun cuando la página actual esté en "midirectorio", la petición se enviará a

"http://www.miweb.net/miotrodirectorio/pagina.htm"

De hecho <base> puede apuntar incluso a otro servidor.

// Saludos

salvica
10-07-2004, 13:14:45
He ejecutado el código, y el script funciona, ya que aparece el título de la página (Ejemplo PHP), si embargo tambien me aparece una página en blanco

He cambiado el código embebido a <?php echo "<h1>Hola, este es un ejemplo con PHP!</h1>"; ?> y el resultado es más bien extraño :confused::confused::confused: Hola, este es un ejemplo con PHP!"; ?> ya que no cambia el tipo de letra a h1

Da la impresión de que no cierra el código php.
Extraño ¿no?

HombreSigma
11-07-2004, 05:52:22
Me parece que la explicación es la siguiente:

Lo que requiere dirección absoluta es la llamada de la página inicial a través de http para que la procese el servidor web y la mande al navegador. Los enlaces por supuesto deberán tener rutas relativas.

Si el navegador invoca una ruta de carpeta de algún disco del PC y no la dirección URLs estilo http:// ... .la página cargada no la procesa el servidor web, sino que directamente la procesa el navegador trayéndola directamente del disco duro local.

Al invocar el navegador rutas precedidas por http:// el navegador hace que algun servidor web trate de atender su petición, quién a su vez invoca el servidor de aplicaciones de PHP o cualesquier otro.

Al procesar las páginas el navegador sin antes ser procesadas por el servidor web, que en el caso mio es el Apache, no hay servidor web que envie el script php contenido en la página al servidor de PHP y por tanto el script php incluido es un simple texto que se envia literalmente al navegador sin ningún tipo de transformación.

Gracias a los asesores por sus aclaraciones.

kayetano
12-07-2004, 09:30:41
Hola

Creo que mi último post ha sido mal interpretado, doy por supuesto que una conexión desde un navegador a un servidor no es permanente y que mandar simplemente un nombre de página "hola.html" no sirve de nada, esto lo doy por supuesto pero veo que tengo que escribir con pies de plomo.

Lo que yo quería dar a entender es que una vez en navegador carga una dirección "http://localhost" ya no hace falta indicarle la ruta completa, con poner "mi_carpeta/nueva_pagina.html" es suficiente ya que el navegador conoce la ruta y el apache sabe interpretar la nueva carpeta.

En vista de las "airadas" respuestas sere mucho más cauto y me lo pensaré dos veces antes de escribir nada.

jachguate
12-07-2004, 18:55:06
Hola Kayetano.

No me lo tomes a mal, pero creo que donde está la confusión es aqui:

ya que el navegador conoce la ruta y el apache sabe interpretar la nueva carpeta.

Puesto que el apache, no tiene nada que ver en el proceso de "interpretar" la nueva ruta, carpeta o como se le llame. De hecho, apache recibe una nueva petición "limpia" con la ruta completa

es decir, si desde una página:

www.miservidor.com/carpeta1/pagina.htm

hay un link del tipo:

carpeta2/pagina2.htm

el navegador la "traduce" a:

www.miservidor.com/carpeta1/carpeta2/pagina2.htm

y luego, se conecta con www.miservidor.com y hace un get a la página:

/carpeta1/carpeta2/pagina2.htm

donde el apache (o quien sea el webserver) no tiene nada que interpetar.

Hasta luego.

;)

kayetano
13-07-2004, 09:19:47
-------------------------------------------

HombreSigma
13-07-2004, 19:03:53
Je je.

No es para tanto. Todos tienen la razón dependiendo de lo que estén explicando.

Resumo mi explicación:

Si antepongo http:// la dirección la envía el navegador a algún servidor web el cual a su vez puede requerir al interpretador de php. Sino requiere php simplemente recupera la página de algún sitio del servidor. Anoto que no es relevante la extensión .htm o .php.

Si no antepongo el prefijo anterior si no una ruta tipo carpeta, entonces el navegador no requiere ningún servidor y hace la tarea directamente buscando en el disco duro local. ¡¡ Pero lógicamente los scripts php que se ejecutan en el servidor no funcionan !! Esto era lo que me ocurría.

Con esto ya me despreocupe de si las extensiones son php o html, y simplemente manejo rutas relativas dentro de mis páginas.

Y ya me funciona !!

De nuevo gracias a todos, pues cada cual puso su parte.