На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Serafim, fatalist
  
    > Как функции работы с файловой системой блокируют ресурсы?
      В общем, задача такая. Скрипт рендерит картинки с формулами, вычисляет хеш-значение вида 3bf8b1dbe41ae2bca9f82c0564dcf65 и раскладывает их на хранение в кеш по таким путям 3/b/f/8b1dbe41ae2bca9f82c0564dcf65.png, а заодно выдает их клиенту.

      Делается это примерно так:

      $fpath = '3/b/f/';
      $fname = '8b1dbe41ae2bca9f82c0564dcf65';

      mkdir( CACHE_PATH.$fpath, 0755, true );

      rename( $fpath_img, CACHE_PATH.$fpath.$fname.'.png' );

      далее идет выдача файла в поток со всеми соответствующими http заголовками.

      Заметил проблему. Если две картинки лежат, скажем, в папках 3/b/f/, то вторая из них при первом рендеринге не отображается на странице.

      Если все картинки складываются в одну папку, то такой проблемы нет. Таким образом, скорее всего, проблему дает mkdir. Может эта функция блокирует на запись весь путь CACHE_PATH.$fpath во время его создания? Как вообще поведут себя разные потоки, если одновременно один из них вызовет mkdir в то время, когда второй уже вызвал mkdir с тем же путем?

      Добавлено
      В Firebug посмотрел ответы на запросы этих картинок.

      Выдает в заголовке ответа:
      Content-Type text/html; charset=utf-8

      Тело ответа:
      Цитата
      Перезагрузите страницу, чтобы получить источник для: http://local-site/getimg?x_{1,2}=%5cfrac{-...d}b^2-4ac}}{2a}


      в тех ответах, где картинки отображаются, выдает как и положено
      Content-Type image/png

      Что это может быть? Это из-за зависания скрипта?

      Добавлено
      Открыл две вкладки с двумя картинками. Нажал обновить все вкладки.

      В одной из вкладок вместо картинки отобразилось:
      Warning: mkdir() [function.mkdir]: File exists in D:\Server\htdocs\mysite\img\getimg.php on line 165
      Сообщение отредактировано: S.Eugene -
        Цитата S.Eugene @
        Warning: mkdir() [function.mkdir]: File exists in D:\Server\htdocs\mysite\img\getimg.php on line 165
        Ну вот тебе и ответ ;)
        Директория уже существует, македир выдает варнинг, есть варнинг - автоматически вместо картинки получаем Content-Type text/html; charset=utf-8

        Вообще перед mkdir хорошая практика проверять, а не существует ли папка уже ;)
        Плой вариант, отключить варнинги, но тоже вариант...
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0178 ]   [ 15 queries used ]   [ Generated: 28.04.24, 04:36 GMT ]