За последние 24 часа нас посетили 50725 программистов и 1688 роботов. Сейчас ищут 1130 программистов ...

Помогите понять порядок обработки скриптов ...

Тема в разделе "PHP для новичков", создана пользователем A.B.C., 12 май 2011.

  1. A.B.C.

    A.B.C. Активный пользователь

    С нами с:
    3 мар 2010
    Сообщения:
    109
    Симпатии:
    0
    Здравствуйте, не могу найти в инете ответ на простой вроде вопрос.

    Задался тут вдруг таким вопросом. Как сервер обрабатывает одновременно тысячи запросов от браузеров? Ставит их в очередь?

    На примере:

    Существует скрипт капчи, в определенном месте он инклюдится и генерирует изображение. В целях безопасности напрямую (в тег <img>) не прописывается, а создает сначала файл-картинку: kapcha.jpg, а уже она потом прописывается в <img>. В конце концов, после благополучного ее создания она выводится в браузер.

    Эта картинка для всех имеет одинаковое имя kapcha.jpg, создается капчей в одном и том же месте (правда имеет хвост ?rand() для борьбы с собственным куком), когда 1000 пользователей заходят на сайт, чтоб сгенерировать капчу...она проходит всю туже схему...каждая последующая затирает предыдущую ...(названия же одинаковые), что делает сервер???

    510 запрос ждет, пока предыдущие 509 создадут свою kapcha.jpg и затрут предыдущую kapcha.jpg, чтоб вывести их на экран? Или одновременно выполняются десятки, сотни запросов?...но ведь место на файле с этим именем и расширением одно?


    Не могу понять принцип работы. Даже если это происходит очень быстро...
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    обычно картинка это замаскированный файл того же пхп, и никакого сохранения картинки нету. Ибо тогда она при одновременном запросе будет одинаковой =) полюбас
     
  3. A.B.C.

    A.B.C. Активный пользователь

    С нами с:
    3 мар 2010
    Сообщения:
    109
    Симпатии:
    0
    но она сначала генерируется скриптом, тут же копируется и тут же выводится в браузер...в одновременный запросе все равно, должна создаться своя картинка...
     
  4. htaccess

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

    С нами с:
    9 авг 2009
    Сообщения:
    17
    Симпатии:
    0
    Согласен.

    У PHP есть функции генерации изображений, а имея хорошее воображение, можно такого напридумывать)
    Картинки этой может даже и не существовать на сервере, либо существовать, но только фоном для цифр и букв на ней.
     
  5. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    kaptcha.jpg - обычно это php-скрипт, который генерирует картинку.
    Web-сервер имеет лимит одновременных соединений. Когда достигается лимит, новый запрос на соединение отвергается. Браузер посылает несколько запросов, и если так и не удается соединиться, выводит ошибку что сервер недоступен. В пределах этого лимита операции выполняются параллельно, например если 100 браузеров одновременно запросили index.php, этот скрипт будет запущен 100 раз одновременно.
     
  6. A.B.C.

    A.B.C. Активный пользователь

    С нами с:
    3 мар 2010
    Сообщения:
    109
    Симпатии:
    0
    Парни вы не поняли...

    можно конечно сделать kapcha.php...переимновать его в kapcha.jpg и вставить в <img src='kapcha.jpg' />

    причем само собой в kapcha.php будет генерироваться картинка, рисоваться, а не копироваться с каког-нибудь место...
     
  7. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    A.B.C. картинка генерируется в оперативной памяти и, никуда не записываясь, отдаётся пользователю.
     
  8. A.B.C.

    A.B.C. Активный пользователь

    С нами с:
    3 мар 2010
    Сообщения:
    109
    Симпатии:
    0
    Хорошо я понял...

    Если это не будет скрипт, а скрипт будет в одном месте, картинка в другом. Как себя будет вести сервер? Будет успевать вывести ее в браузер юзеру "А" до того как ее затрет юзер "В" ?????
     
  9. htaccess

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

    С нами с:
    9 авг 2009
    Сообщения:
    17
    Симпатии:
    0
    Её не нужно затирать)
     
  10. A.B.C.

    A.B.C. Активный пользователь

    С нами с:
    3 мар 2010
    Сообщения:
    109
    Симпатии:
    0
    htaccess

    ну не специально :) же он ее затрет, а потому, что создаст свою картинку...которую тут же на экран выведет браузер.
     
  11. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Если скрипт при каждом запуске перезаписывает файл с каптчей, то да, может быть так, что пользователь увидит не "свою" каптчу, а каптчу предназначеную для другого пользователя, который сделал запрос на миллисекунду позже.
    Браузер для каждой картинки посылает отдельный запрос. Пока этот запрос отправится, будет получен и обработан, теоретически, каптча может перезаписаться хоть сто раз.
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    A.B.C.
    возможно и не будет. вы все правильно понимаете, и ситауция будет развиваться именно так как вам кажется - кто-то может получить не свою картирку.

    именно поэтому: http://www.php.ru/forum/viewtopic.php?p=280861#280861
     
  13. A.B.C.

    A.B.C. Активный пользователь

    С нами с:
    3 мар 2010
    Сообщения:
    109
    Симпатии:
    0
    Всем огромное спасибо! :)
     
  14. htaccess

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

    С нами с:
    9 авг 2009
    Сообщения:
    17
    Симпатии:
    0
  15. A.B.C.

    A.B.C. Активный пользователь

    С нами с:
    3 мар 2010
    Сообщения:
    109
    Симпатии:
    0
    htaccess

    я это вроде все умею...и написал капчу, которая рисует, а вы не могли бы подсказать, как замаскировать kapcha.php, например под картинку? Чтоб в исходном коде не видно было строки типа
    HTML:
    1. <img src="kapcha.php" />
    ???
     
  16. A.B.C.

    A.B.C. Активный пользователь

    С нами с:
    3 мар 2010
    Сообщения:
    109
    Симпатии:
    0
    Или это .htaccess запрещается? (извините за каламбур :))
     
  17. htaccess

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

    С нами с:
    9 авг 2009
    Сообщения:
    17
    Симпатии:
    0
    Никогда этим не занимался, но могу поделиться функцией, которая отдаёт файл на скачку с поддержкой докачки, там есть заголовки, которые потребуются.
    Код (Text):
    1. <?php
    2. set_time_limit(0);
    3. function file_download($filename, $mimetype='audio/mpeg') {
    4.     $download_speed =   51200; // 51200
    5.     $time_discret   =   1;
    6.     if (file_exists($filename)) {
    7.         $f              =   fopen($filename, 'r');
    8.         if (isset($_SERVER['HTTP_RANGE'])) {
    9.             $load_from      =   preg_replace('#[^0-9]#', '', $_SERVER['HTTP_RANGE']);
    10.             fseek($f, $load_from);
    11.             $filesize       =   filesize($filename);
    12.             header('HTTP/1.1 206 Partial Content');
    13.             header('Content-Type: ' . $mimetype);
    14.             header('Content-Range: bytes '.$load_from.'-'.$filesize.'/'.$filesize);
    15.             header('Last-Modified: ' . gmdate('r', filemtime($filename)));
    16.             header('ETag: ' . sprintf('%x-%x-%x', fileinode($filename), filesize($filename), filemtime($filename)));
    17.             header('Accept-Ranges: bytes');
    18.             header('Content-Length: ' . (filesize($filename)));
    19.             header('Connection: close');
    20.             header('Content-Disposition: attachment; filename="' . basename($filename) . '";');
    21.         } else {
    22.             header($_SERVER["SERVER_PROTOCOL"] . ' 200 OK');
    23.             header('Content-Type: ' . $mimetype);
    24.             header('Last-Modified: ' . gmdate('r', filemtime($filename)));
    25.             header('ETag: ' . sprintf('%x-%x-%x', fileinode($filename), filesize($filename), filemtime($filename)));
    26.             header('Content-Length: ' . (filesize($filename)));
    27.             header('Connection: close');
    28.             header('Content-Disposition: attachment; filename="' . basename($filename) . '";');
    29.         }
    30.             if((int) $download_speed > 0) {
    31.                 while(!feof($f)) {
    32.                     $time_start = microtime(true);
    33.                     echo fread($f, ceil($download_speed*$time_discret));
    34.                     flush();
    35.                     $time_end = microtime(true);
    36.                     $time = $time_end - $time_start;
    37.                     if($time_discret-$time > 0) usleep(($time_discret-$time)*1000000);
    38.                 }
    39.             } else {
    40.                 while(!feof($f)) {
    41.                     echo fread($f, 1024);
    42.                     flush();
    43.                 }
    44.             }
    45.         fclose($f);
    46.  
    47.     } else {
    48.         header($_SERVER["SERVER_PROTOCOL"] . ' 404 Not Found');
    49.         header('Status: 404 Not Found');
    50.     }
    51.     exit;
    52. }
    53. #
    54. file_download('./20_dt8_project.mp3', $mimetype='audio/mpeg');
    55. ?>
     
  18. htaccess

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

    С нами с:
    9 авг 2009
    Сообщения:
    17
    Симпатии:
    0
  19. A.B.C.

    A.B.C. Активный пользователь

    С нами с:
    3 мар 2010
    Сообщения:
    109
    Симпатии:
    0
    Вы наверное пост перепутали или пошутили? :)
     
  20. htaccess

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

    С нами с:
    9 авг 2009
    Сообщения:
    17
    Симпатии:
    0
    Нет, всё строится на этом.
     
  21. A.B.C.

    A.B.C. Активный пользователь

    С нами с:
    3 мар 2010
    Сообщения:
    109
    Симпатии:
    0
    htaccess

    Ну вы слишком круты для меня... :)
     
  22. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    A.B.C.

    дали ж вроде ссылку.

    Задача - отдать браузеру заголовок, что сейчас будет картинка, потом отдать в поток данные.

    Никакой картинки не создается. Можно данные обычным echo вывести, перед этим заголовок послать image/jpg. И браузер выведет картинку.
     
  23. A.B.C.

    A.B.C. Активный пользователь

    С нами с:
    3 мар 2010
    Сообщения:
    109
    Симпатии:
    0
    tommyangelo

    Я так понимаю это всего пара строчек..вы можете показать пример: <img src='kapcha.php' />
     
  24. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
  25. A.B.C.

    A.B.C. Активный пользователь

    С нами с:
    3 мар 2010
    Сообщения:
    109
    Симпатии:
    0
    tommyangelo

    Спасибо...но не подменяет заголовки почему то...даже их пример скачал все равно кажет название скрипта в исходнике...