Здравствуйте, уважаемые. Я - не так, чтобы новичок, но сейчас столкнулся с тем, что простая вещь мне не даётся. И Гугл не помог, там решения излишне сложные. Суть такова: Понадобилось мне сделать просмотрщик галерей картинок в одном файле. Чтобы его просто закинул в любую папку на сайте и он нормально показывал картинки в этой папке и во всех вложенных. Ну, я в него впихнул и css BootStrap, и простой javascript LightBox типа. Но, как ни крути, превью надо делать и кэшировать. Вот тут и проблема. На сайте может быть много картинок. Чтобы показать превью на странице, у всех у них адреса типа https://сайт/папка/index.php?act=prev&path=./путь-к-реальной-картинке.jpg . Обратите внимание на параметр act. Если этот же скрипт вызывается с ним, то он или ищет превью, или генерирует. Причем, генерация - это нагрузка на сервак, поэтому мне нужно, чтобы если скрипт вызывается с act-параметром "prev", то одновременно с ним уже ничего бы не генерировалось. Дальше сделано тоже просто. При таком запросе я создаю файл и после отработки - удаляю. А если файл такой есть -- чуточку жду и снова пробую. Код (Text): $flagFile=true; while ($flagFile==true){ $flagFile=file_exists("flagfile.txt"); if ($flagFile==true)usleep(rand(230000, 700000)); } $handle = fopen("flagfile.txt", "w"); $somecontent = "Отрабатывается скрипт...\n"; fwrite($handle, $somecontent); fclose($handle); Вот, если сюда заходит, то проверяется наличие превью. И или делается Код (Text): header("location на это превью, или создается превьюшка и потом производится перенаправление. Два варианта. Перед перенаправлением, понятно, делается Код (Text): unlink('flagfile.txt'); . Выглядит всё просто, но что-то идёт не так. Стопиццот ошибок 518, типа "обнаружен бесконечный цикл" или "превышена нагрузка на сервер. Что я делаю не так, почему не работает? Несколько часов уже сижу. Не критично, но всё же... Буду очень благодарен за помощь!
ппц просто.... про кеширование не слышали? в вашем случае кратко - при вызове с act=prev в скрипте смотрите - а нет ли у нас уже превьюшки сгенерированой? если есть - отдает именно ее, ничего не надо повторно генерить ну а если нет - значит еще не генерировали - смело генерьте и отдавайте надеюсь вы превью в файл генерите... а не динамически на каждый чих?
Добавлю, что путь к превьюшке должен быть обычным адресным путем, тогда сам Web-сервер будет ее отдавать, когда она физически присутствует. А когда ее нет, управление будет передаваться в скрипт генерации. --- Добавлено --- P.S. Генерация выполняется во временной папке под временным именем, а потом файл перемещается на постоянное место с постоянным именем. Перемещение нужно делать в пределах одного диска. По крайней мере в нашей конторе я видел только такой вариант.
Уважаемый ADSoft, я просто не написал, но конечно же, у меня в начале стоит Код (Text): if ($_GET['act']=="prev"){ ... ... ... if (file_exists($prevFile)){ header("Location: ".$prevFileWeb, 0); exit(); } } И только потом, если нет такого файла, проверяется структура директорий для превьюшки (если надо - создаются папки) и создаётся превьюшка. Она помещается в нужную папку в превью-дереве и в следующий раз на неё сразу пройдёт переадресация. И вот, если скрипт запускается в первый раз и превьюшек пока или нет вообще или почти нет, происходит то, что я описал. 518. Мне надо как-то отследить, что сейчас генерится одна превьюшка и чуточку подождать. miketomlin, "путь к превьюшке должен быть обычным адресным путем, тогда сам Web-сервер будет ее отдавать, когда она физически присутствует. А когда ее нет, управление будет передаваться в скрипт генерации.". Нет, я не могу сразу путь к превьюшке ставить. Потому что задумка в том, что просмотрщик в одном файле. Без джава-скриптов, css и прочего. То есть, .htaccess я тоже не могу править (чтобы при 404 у превьюшки запрос отдавался бы файлу генерации).
поверьте - не нужно.... это вы так думаете.. классическая проблема XY В зависимости от полного понимания вопроса решения могут быть различны, например: - изображения загружаются через скрипт/админку/апи .. то есть программно - решение: генерить превьюшку одновременно с загрузкой - изображения загружаются хз как... или просто они там есть и особо не пополняются - решение: генерить превьюхи разово/по расписанию перебирая все в каталоге итд итп ...попробуйте сформулировать адекватно текущую ситуацию и проблему
ADSoft, я уже решил, в другом месте посоветовали. Банальный lazy load. И всё отлично работает. Просмотрщик получился отличный. И вам спасибо за попытку помочь!
Это вообще не проблема при использовании современного подхода к построению сайта. Это все выводится через «один файл» (единую точку входа): g09.ru/index.html g09.ru/sexygirl.jpg g09.ru/sansfont.png А редирект там, где он не нужен, – зло!
Понятно Хотя бы на досуге почитайте, как сейчас работает большинство сайтов. Ключ для поисков я упомянул. В принципе у Вас, если я правильно понял, что-то похожее (act=prev). Только уже давно принято использовать более нативные адреса, где путь играет основную роль, а строка параметров вспомогательную. Причем уже давно нативные адреса не транслируют в технические вроде вашего, а разбирают их сразу в единой точке входа. --- Добавлено --- Как сделать единую точку входа с ЧПУ?
Спасибо за ссылку, но боюсь, что вы не поняли. Мне нужен был такой просмотрщик, чтобы его можно было кинуть на любой сайт. Который неизвестно кто строил и настраивал. И чтобы всё сразу работало. Без настройки .htaccess , Апача, nginx и т. п. Даже не трогать их. Чтобы в каких-то завалах Images или Uploaded можно было быстро всё просмотреть. У меня чуть меньше 40 корпоративных сайтах. Создавались на протяжение многих лет на чём попало. Несколько хостингов. Плюс часто просят помочь. И мне понадобился такой вьювер, all-in-one. Была одна проблема, с которой я создал тему на форуме. Но в другом месте подсказали, как её обойти.
Да, «кинуть на сайт» – это не наш метод Но в принципе все подкручивается. И лучше постепенно прикручивать более современные штуки, пытаясь со временем все свести воедино, чем разводить еще больший зоопарк. Ну, ладно, у каждого свой путь.