FAQ
Saludos listeros:

Desde hace un tiempo que quiero sacarme unas dudas MUY GRANDES que tengo
con la forma en la que funciona el Engine de PHP y su interaccion con
Apache. Tal vez ustedes puedan "darme vuelta la tortilla" (invirtiendo
mis conceptos).

EL PLANTEO:
Hice un pequeño script para descargar archivos (el clásico) y quiero
tomar el tiempo que llevó el envío y obtener los bytes enviados. (eso es
todo!!!)

EL PROBLEMA:
El "timing" no coincide con la realidad y el número de bytes enviados
siempre es el tamaño del archivo (se halla completado o no la descarga).

LAS PREGUNTAS:
1) El siguiente script, se ejecuta mientras se está enviando el archivo
o termina antes?
2) Si el usuario cancela el envío, la función "readfile()" muere? o
termina de ejecutarse el script?
3) Hay alguna utilidad para monitorear los scripts que está ejecutando
PHP en un determinado momento?
    ...o por lo menos, un archivo de registro de todo lo que hace PHP o
algo asi...


download.php : Se usa asi: /download.php?file=archivo.zip
----------------------------------------------------------

<?php
// Suprimí muchas lineas para que sea mas específico.

if(isset($file)){
  header("Content-Type: application/octet-stream");
  header("Content-Disposition: filename=$file;");
  header("Content-Length: ".filesize("$path/".basename($file)));
  $start = time(); // <-------- Snapshot de la hora, antes de
enviar el archivo
  $bytes = readfile("$path/".basename($file)); // Envio del
archivo al navegador
  $end = time(); //<--------- Snapshot de la hora, posterior al
envío del archivo
}

// Aquí, se registran los tiempos de descagra y bytes enviados a un
archivo.
?>


Si alguien conoce la forma en la que trabaja el Engine de ZEND y me
puede aclarar estos conceptos estaré más que agradecido. Y por favor
díganme dónde puedo profundizar conceptos de bajo nivel sobre PHP. ;)

Saludos a todos.


Lucas Fonzalida
RT de MaxMedia S.C.

Search Discussions

  • Fernando Herrero Peletero at Dec 8, 2002 at 9:36 pm
    El problema radica, fundamentalmente, en el protocolo utilizado. El http se
    diseño de tal forma que no guarda ninguna información del estado de la
    conexión, por lo que no te permite saber nada del flujo de los datos.
    El servidor http envia los datos, pero puede que no exista ningun cliente a
    la escucha o, simplemente los ignore... y todo sin que el servidor se entere
    de ello.
    El protocolo ftp se diseño especificamente para el envio de archivos, asi
    pues tiene control sobre el flujo de datos y tanto servidor como cliente
    tienen y dan información sobre su estado. Es más, el ftp si tiene concepto
    de sesión, mientras que el http no, es implementada mediante soft y con
    ayuda de herramientas como son cookies y otros métodos.

    Son estas diferencias las que impiden controlar al php el flujo de datos: no
    es una incapacidad de el mismo, es una incapacidad del protocolo que está
    por debajo de el.

    Un saludo.
  • Lucas Fonzalida - Soporte Técnico at Dec 9, 2002 at 3:53 pm
    Estimada Lista (Léase Fernando):

            Es verdad que HTTP es un protoclo sin estado, pero si vamos un
    nivel más abajo, TCP no lo es y gracias a éste, Apache o cualquier
    servidor web pueden reconocer cuando alguien que realizó una petición
    abortó la conexión o canceló una transferencia.
    En el caso de Apache, reconoce perfectamente los bytes transferidos,
    transferencias de archivos abortadas, etc. y lo registra en el archivo
    de registro "access.log" gracias a 2 módulos, "mod_log_config" y
    "mod_logio".

    Como NO SÉ cómo interactuar con estos módulos con PHP (para capturar ésa
    información), pienso que es posible hacer algo similar al nivel de PHP y
    por ésta razón utilizo un script .php que hace de intermediario entre
    Apache y el sistema de archivos.

    Es un error muy común pensar que es PHP quien entrega los datos al
    cliente. En realidad, PHP entrega los scripts procesados a Apache y es
    Apache el encargado de establecer la conección TCP o UDP con el cliente,
    pero la duda es: PHP termina de ejecutar el script y luego los pasa al
    servidor o lo va pasando mientras los ejecuta?

    Más dudas:
    ----------
    2) Si un usuario aborta una conexión TCP que mantiene con Apache, Apache
    informa a PHP que el usuario canceló la transferencia y PHP puede
    abortar la ejecución del script en la mitad?
    3) Alguien conoce alguna forma de monitorear en tiempo real los scripts
    que ejecuta PHP?
    4) El siguiente Script, se ejecuta mientras se envía el archivo al
    cliente o termina antes?

    <?php
          readfile("$file");
    ?>

    El modelo que yo entiendo es éste:
    cliente -TCP--> Apache -API--> PHP --> archivo
    cliente <--TCP- Apache <--API- PHP <--

    Me gustaría poder entender BIEN el funcionamiento "a bajo nivel" de PHP
    (instalado como módulo en apache) y reconocer los pasos que realiza
    Apache y PHP cuando intercambian información.

    Esto es muy Importante y creo que todo programador (y/o Hostmaster) debe
    conocer esta "capa de abstracción".

    Saludos a todos y espero que algún loco sepa tanto de apache y PHP como
    para evacuar mis dudas.

    Lucas M. Fonzalida
    R.T. de MaxMedia S.C.

    -----Mensaje original-----
    De: Fernando Herrero Peletero
    Enviado el: domingo, 08 de diciembre de 2002 18:41
    Asunto: [PHP-ES] Re: PHP a bajo nivel.


    El problema radica, fundamentalmente, en el protocolo utilizado. El http
    se
    diseño de tal forma que no guarda ninguna información del estado de la
    conexión, por lo que no te permite saber nada del flujo de los datos.
    El servidor http envia los datos, pero puede que no exista ningun
    cliente a
    la escucha o, simplemente los ignore... y todo sin que el servidor se
    entere
    de ello.
    El protocolo ftp se diseño especificamente para el envio de archivos,
    asi
    pues tiene control sobre el flujo de datos y tanto servidor como cliente
    tienen y dan información sobre su estado. Es más, el ftp si tiene
    concepto
    de sesión, mientras que el http no, es implementada mediante soft y con
    ayuda de herramientas como son cookies y otros métodos.

    Son estas diferencias las que impiden controlar al php el flujo de
    datos: no
    es una incapacidad de el mismo, es una incapacidad del protocolo que
    está
    por debajo de el.

    Un saludo.

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupphp-general-es @
categoriesphp
postedDec 8, '02 at 6:57p
activeDec 9, '02 at 3:53p
posts3
users2
websitephp.net

People

Translate

site design / logo © 2022 Grokbase