Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[52.15.63.145] |
|
Сообщ.
#1
,
|
|
|
В общем, задача такая. Скрипт рендерит картинки с формулами, вычисляет хеш-значение вида 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 |
Сообщ.
#2
,
|
|
|
Цитата 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 хорошая практика проверять, а не существует ли папка уже Плой вариант, отключить варнинги, но тоже вариант... |