Duda sobre la arquitectura de PHP

27 vistas
Ir al primer mensaje no leído

Francisco Galindez

no leída,
17 may 2013, 11:08:01 a.m.17/5/13
para comuni...@googlegroups.com
¿ Alguien sabe a profundidad cual es la arquitectura de PHP y como funciona? (la SAPI, el núcleo  el motor zen, etc) Quiero saber como funciona esto de verdad y php.net no dice mucho :s Gracias haaaa! ¿Alguien sabe cual es la función de un servidor web como apache por ejemplo? Gracias!

Gabriel Valladolid

no leída,
17 may 2013, 12:09:41 p.m.17/5/13
para comuni...@googlegroups.com
Hola Fco,

Yo creo que ni Rasmus Lerdorf sabe a profundidad la arquitectura, no ahora sí es que antes lo supo. Para qué quieres saber la arq. del lenguaje? es para la tarea? mejor busca en wikipedia... 

en otro caso sería mejor replantear la pregunta, qué buscas? performance? uso del webserver?  te refieres al núcleo de PHP o a lo que puedes hacer? como patrones... y qué es un motor zen? no conozco ese término.

A ver si puedes replantear el tema.

Saludos!





El 17 de mayo de 2013 10:08, Francisco Galindez <francisco...@gmail.com> escribió:
¿ Alguien sabe a profundidad cual es la arquitectura de PHP y como funciona? (la SAPI, el núcleo  el motor zen, etc) Quiero saber como funciona esto de verdad y php.net no dice mucho :s Gracias haaaa! ¿Alguien sabe cual es la función de un servidor web como apache por ejemplo? Gracias!

--
--
Has recibido este mensaje porque estás suscrito a
Grupo "ComunidadPHP" de Grupos de Google.
Si quieres publicar en este grupo, envía un mensaje de correo
electrónico a programad...@googlegroups.com
Para anular la suscripción a este grupo, envía un mensaje a
programadoresde...@googlegroups.com
Para obtener más opciones, visita este grupo en
http://groups.google.com/group/programadoresdephp?hl=es.
---
Has recibido este mensaje porque estás suscrito al grupo "ComunidadPHP" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a comunidadphp...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 

Daniel Carrero

no leída,
17 may 2013, 12:31:15 p.m.17/5/13
para comuni...@googlegroups.com
Si quieres saber como funciona, lo mejor es ir al código fuente:

No entiendo la pregunta de apache...
un servidor "sirve" 
- paginas html estas pueden estar escritas en el lenguaje que quieras, asp, php, html, java, perl, python, ruby, cgi etcs.
- imágenes
- hojas de estilo en cascada CSS
- lo que tengas alojado en tu servidor y sea parte o lo hayas declarado como accesible por el servidor.
Si puedes se mas claro con la pregunta

Saludos Francisco.
--
Daniel Carrero Canales
+56974726453

Francisco Galindez

no leída,
17 may 2013, 1:11:30 p.m.17/5/13
para comuni...@googlegroups.com
Gracias Grabriel y Daniel! Agradezco sus respuestas. Tratare de ser mas claro con mis preguntas. No es para una tarea jejeje! Lo que quiero saber es como funciona esto de verdad, porque simplemente soy muy curioso y me gusta tener un conocimiento aceptable de como funciona lo que estoy usando, (conozco a personas que programan en PHP y no saben ni lo que es la SAPI). Estoy empezando con php y la verdad es que es un lenguaje sencillo, mas cuando uno tiene los fundamentos de lógica de programación, pero la duda que me aborda es como funciona en realidad por lo menos a nivel de interacción entre sus partes. Cuando empece a programar en lenguaje C me inquieto esto de igual forma (como funciona lenguaje C), y luego de investigar me entere que funciona por un compilador que traduce a maquina..... profundice mas y me entere de como están compuestos los compiladores: analizador léxico  sintáctico  etc.... Hasta ganas me dieron de hacer uno, de hecho estoy profundizando mas para hacerlo. Pero no fue hasta ese momento que logre una noción buena de lo que era lenguaje C y como funcionaba, que pude aprender bien a programar porque ya sabia lo que estaba haciendo y que era lo que estaba pasando una ves mandaba a compilar. 

Algo así es lo que quiero lograr con PHP saber no tanto a nivel de código (por lo momentos) porque me llevaría mucho tiempo y mas si no soy ningún guru de la programación; sino mas bien a nivel de esquema saber como trabaja. 

Ya me hecho algunas ideas, a continuación las menciono y ustedes me dirán si estoy o no en lo cierto: php depende solo de su interprete que es motor zend para funcionar, de tal forma pues que lo podría usar para desarrollar con el en un computador sin la necesidad de un servidor (software), pero php tiene algo que se llama SAPI que es la interfaz del lenguaje que le permite comunicarse con un servidor web y ejecutarse dentro del espacio de los recursos que le asigna el computador al mismo, por eso y las bondadosas características de php es mejor usarlo para la web y ponerlo por supuesto a trabajar en conjunto con un servidor web. PHP tiene varias SAPI una para cada servidor lo que lo hace compatible con un gran numero de servidores, cuando un cliente web hace una petición después de pasar por el ISP y los servidores DNS llega a nuestro servidor y ES EL SERVIDOR COMO POR EJEMPLO APACHE, EL QUE SE ENCARGA DE RECIBIR LA PETICIÓN, PROCESARLA, BUSCAR EL ARCHIVO EN DISCO Y DÁRSELO AL MOTOR ZEND (EN CASO DE SER UN .PHP), TAMBIÉN ES EL SERVIDOR WEB EL ENCARGADO DE GESTIONAR LAS CAPACIDADES DE COMPUTO DE LA MAQUINA DONDE SE EJECUTA Y POR TANTO EL RESPONSABLE DE ASIGNARLE RECURSOS AL MOTOR ZEND PARA QUE SE EJECUTE.

EL motor zend toma el código lo pasa por sus diferentes analizadores, lo pre-compila en bycodes y se lo pasa al interprete. El interprete, ejecuta o interpreta el código e interactua con los módulos que necesite para completar su función  por ejemplo un modulo de mysql para hacer consultas en una base de datos, después el resultado se devuelve en un html que a su ves se pasa al servidor y este le envía al cliente.

¿Estoy en lo correcto? 

¿Donde ha fallado mi interpretación?

¿Donde entra aquí en núcleo de php, es allí donde están todas las funciones?

LO QUE ESTA EN MAYÚSCULA ES LO QUE PREGUNTABA CON RESPECTO A APACHE O A CUALQUIER SERVIDOR WEB: ¿QUE FUNCIÓN CUMPLE ALLÍ? YO ENTENDÍ DE ACUERDO A TODO LO QUE HE INVESTIGADO QUE HACE LO QUE COMENTE ANTERIORMENTE ESTOY EN LO CORRECTO? HACE MAS QUE ESO?

Saludos Atento a sus respuestas! 

Gracias! espero haberme explicado.  




-El que no puede explicar lo que hace, No sabe lo que hace- F.G.



Daniel Carrero

no leída,
17 may 2013, 1:44:36 p.m.17/5/13
para comuni...@googlegroups.com
Francisco, que buena iniciativa para la investigación y el estudio, sin duda que lograras mucho conocimiento, felicitaciones por ello. 
Si tienes conocimientos de C no habra problemas para que puedas recorrer el repositorio github que te mande y revisar que hace tal o cual función en php.
Te respondo entre lineas mejor :D

"Ya me hecho algunas ideas, a continuación las menciono y ustedes me dirán si estoy o no en lo cierto: php depende solo de su interprete que es motor zend para funcionar, de tal forma pues que lo podría usar para desarrollar con el en un computador sin la necesidad de un servidor (software), 
---
Correcto, aunque el motor zend esta desde al version 4 en adelante, y gracias a eso tambien podemos usar php en linux, windows, y la arquitectura que quieras usar.

pero php tiene algo que se llama SAPI que es la interfaz del lenguaje que le permite comunicarse con un servidor web y ejecutarse dentro del espacio de los recursos que le asigna el computador al mismo, por eso y las bondadosas características de php es mejor usarlo para la web y ponerlo por supuesto a trabajar en conjunto con un servidor web.
---
Así es de hecho el objetivo principal de php es servir paginas web aunque de todas formas puedes usarlo como php-cli es decir sin la necesidad de un navegador, solo en consola, pero aun asi no puedes librarte de la SAPI.
 
PHP tiene varias SAPI una para cada servidor lo que lo hace compatible con un gran numero de servidores, cuando un cliente web hace una petición después de pasar por el ISP y los servidores DNS llega a nuestro servidor y ES EL SERVIDOR COMO POR EJEMPLO APACHE, EL QUE SE ENCARGA DE RECIBIR LA PETICIÓN, PROCESARLA, BUSCAR EL ARCHIVO EN DISCO Y DÁRSELO AL MOTOR ZEND (EN CASO DE SER UN .PHP), TAMBIÉN ES EL SERVIDOR WEB EL ENCARGADO DE GESTIONAR LAS CAPACIDADES DE COMPUTO DE LA MAQUINA DONDE SE EJECUTA Y POR TANTO EL RESPONSABLE DE ASIGNARLE RECURSOS AL MOTOR ZEND PARA QUE SE EJECUTE.

EL motor zend toma el código lo pasa por sus diferentes analizadores, lo pre-compila en bycodes y se lo pasa al interprete. El interprete, ejecuta o interpreta el código e interactua con los módulos que necesite para completar su función  por ejemplo un modulo de mysql para hacer consultas en una base de datos, después el resultado se devuelve en un html que a su ves se pasa al servidor y este le envía al cliente.
----
Apache tiene manejadores (handlers) definidos en el archivo httpd.conf. Cuando tu solicitas un archivo con extension .php a apache este revisa en su lista de handlers que programa se tiene que ejecutar y te retornara la salida de este, puedes buscar informacion en la documentacion de httpd en apache.org. Apache gestiona de manera independiente al handler el tema de los recursos, por ejemplo la cantidad de hilos y de hilos hijos cantidad de segundos de espera etcs.
Php si mal no recuerdo no tiene codigo bytecode, como en el caso de java o python, pero puedes usar algunas librerias o extensiones para que la ejecucion de tu codigo sea mas rapida. (http://php.net/manual/en/book.bcompiler.php)
Recuerda que php es interpretado no compilado, dependera de lo que tu necesites para determinar si es una ventaja o desventaja :)

Eso, cualquier cosa por aca andaremos 



--
--
Has recibido este mensaje porque estás suscrito a
Grupo "ComunidadPHP" de Grupos de Google.
Si quieres publicar en este grupo, envía un mensaje de correo
electrónico a programad...@googlegroups.com
Para anular la suscripción a este grupo, envía un mensaje a
programadoresde...@googlegroups.com
Para obtener más opciones, visita este grupo en
http://groups.google.com/group/programadoresdephp?hl=es.
---
Has recibido este mensaje porque estás suscrito al grupo "ComunidadPHP" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a comunidadphp...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 

Aion

no leída,
17 may 2013, 2:04:22 p.m.17/5/13
para comuni...@googlegroups.com
PHP es un lenguaje de programación que tiene su propio interprete (no es Zend Motor), por lo tanto puedes programar en modo consola con el y ejecutar como si fuera un bash script, sin embargo php tiene la particularidad de utilizar librerias .so o .dll para complementar algunas cosas que el CORE de PHP no hace por si mismas, por ejemplo conexiones a bases de datos, o Reflection, Zend es solo una librería para optimizar PHP así como xDebug para debuguear y hacer perfiles.

SAPI son librerias que se crearon para que los servidores web o http puedan brindarte la capacidad de ejecutar SCRIPTS de php dentro del HTML y se encargan de gestionar como ejecutar ese SCRIPT. 

Para no hacer mas largo esto así es el funcionamiento general.

1. llega una petición al servidor web.
2. empieza a interpretar el request.
3. si se encuentra un script PHP
    - checa la configuración para saber que hacer.
    - Mientras no se termine el script PHP o encuentre un fatal error.
    - SAPI envía la línea de código al interprete de PHP.
    - PHP interpreta la línea (convierte el código a código máquina como si fuera un compilador).
    - si PHP retorna un FATAL ERROR.
         - entonces envía una señal a través del SAPI y se detiene el servidor web enviando un error 500 al navegador.
         - sino continua y envía la respuesta al web server para que procese la salida
4. continua la interpretación  si vuelve a encontrar un script PHP pasa al punto 3 de nuevo.
5. retorna la respuesta al browser.

Francisco Galindez

no leída,
17 may 2013, 2:41:39 p.m.17/5/13
para comuni...@googlegroups.com
Estoy muy agradecido por sus respuestas! me han ayudado mucho... 


--
--
Has recibido este mensaje porque estás suscrito a
Grupo "ComunidadPHP" de Grupos de Google.
Si quieres publicar en este grupo, envía un mensaje de correo
electrónico a programad...@googlegroups.com
Para anular la suscripción a este grupo, envía un mensaje a
programadoresde...@googlegroups.com
Para obtener más opciones, visita este grupo en
http://groups.google.com/group/programadoresdephp?hl=es.
---
Has recibido este mensaje porque estás suscrito a un tema del grupo "ComunidadPHP" de Grupos de Google.
Para anular la suscripción a este tema, visita https://groups.google.com/d/topic/comunidadphp/ZtnhINkwhf4/unsubscribe?hl=es-419. Para anular la suscripción a este grupo y todos sus temas, envía un correo electrónico a comunidadphp...@googlegroups.com.
Responder a todos
Responder al autor
Reenviar
0 mensajes nuevos