За последние 24 часа нас посетили 53869 программистов и 1712 роботов. Сейчас ищут 804 программиста ...

http daemon

Тема в разделе "Прочие вопросы по PHP", создана пользователем dobs, 31 авг 2009.

  1. dobs

    dobs Активный пользователь

    С нами с:
    23 дек 2006
    Сообщения:
    145
    Симпатии:
    0
    Есть скрипт с мануала

    PHP:
    1. <?
    2.  
    3. $master = array();
    4. $socket = stream_socket_server("tcp://0.0.0.0:8000", $errno, $errstr);
    5. if (!$socket) {
    6.     echo "$errstr ($errno)<br />\n";
    7. } else {
    8.     $master[] = $socket;
    9.     $read = $master;
    10.     while (1) {
    11.         $read = $master;
    12.         $mod_fd = stream_select($read, $_w = NULL, $_e = NULL, 5);
    13.         if ($mod_fd === FALSE) {
    14.             break;
    15.         }
    16.         for ($i = 0; $i < $mod_fd; ++$i) {
    17.             if ($read[$i] === $socket) {
    18.                 $conn = stream_socket_accept($socket);
    19.                 fwrite($conn, 'Hello! The time is '.date('Y-m-d   H:m:s')."\n");
    20.                 $master[] = $conn;
    21.                
    22.             } else {
    23.                 $sock_data = fread($read[$i], 1024);
    24.                 fwrite($read[$i], '<br />Welcome to the PHP Test Server.<br /> ACT: '.$_GET['act']);
    25.                
    26.                 var_dump($sock_data);
    27.                 if (strlen($sock_data) === 0) { // connection closed
    28.                     $key_to_del = array_search($read[$i], $master, TRUE);
    29.                     fclose($read[$i]);
    30.                     unset($master[$key_to_del]);
    31.                 } else if ($sock_data === FALSE) {
    32.                     echo "Something bad happened";
    33.                     $key_to_del = array_search($read[$i], $master, TRUE);
    34.                     unset($master[$key_to_del]);
    35.                 } else {
    36.                    
    37.                     #echo "The client has sent :"; var_dump($sock_data);
    38.                    
    39.                    
    40.                     fwrite($read[$i], "<br /><br /><b>You have sent :</b>[".$sock_data."]\n");
    41.                     fclose($read[$i]);
    42.                      unset($master[array_search($read[$i], $master)]);
    43.                 }
    44.             }
    45.         }
    46.     }
    47. }
    48. ?>

    Вопрос
    Как можно получить "реакцию" на какое то событие чет по типу

    localhost:8000/?do=main

    И чтоб сработало какое то условие, допустим такое
    PHP:
    1. if($_GET['do'] == 'main')
    выдать на хосте какой то текст...

    Одним словом демон принял данные и дал ответ...
     
  2. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    В $sock_data у тебя попадают данные пришедшие от клиента. Соотвественно туда попадает http запрос который выполняет браузер. Все что тебе нужно это накопить данные в некотором буфере, а потом распарсить их.
     
  3. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    dobs
    И де тут HTTP? =)
     
  4. dobs

    dobs Активный пользователь

    С нами с:
    23 дек 2006
    Сообщения:
    145
    Симпатии:
    0
    ОК спс попробую...
     
  5. dobs

    dobs Активный пользователь

    С нами с:
    23 дек 2006
    Сообщения:
    145
    Симпатии:
    0
    2 [vs]
    Ну если запустить скрипт то на 8000 порте можно увидеть текст, никто не запрещал поменять на 80 порт, но ет если его никто до этого не юзал...
     
  6. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    dobs
    Вопрос не в порте, а в протоколе. Прочитай, как устроен HTTP протокол.