← All posts tagged PHP

Rainbow-Spike

рассказываю историю
1. капча test.comicslate.org вызывается со страницы test.comicslate.org

2. сразу же в переменную отбирается реферрер
$cap_back = $_SERVER['HTTP_REFERER']; // > "https://test.comicslate.org/eo/sci-fi/freefall/index"

3. пообкусав его со всех сторон, получаем папку языка
$cap_lang = substr (stristr ($cap_back, '.org/'), 5, 2); // > "eo"
возможностью добавления в будущем языка с кодом li пока пренебрегаем

4. на первом заходе язык не равен li, поэтому ставится по этому обкусу
$lng = ($cap_lang != 'li') ? $cap_lang ... // > "eo"
далее $lng злостно используется для формирования всех текстов

5. колечко самопроверки на сбережение начального реферрера
$cap_back = ($cap_lang != 'li') ? $cap_back ... // > "https://test.comicslate.org/eo/sci-fi/freefall/index"
при удачном прохождении капчи есть ссылочка на возврат к прежней странице, вот ей и важно сберечь начальный реферрер

6. далее html-форма, в которой вбиты два глухих поля с начальными данными языка и реферрера
<input name="lng" type="hidden" value="'.$lng.'"/>
<input name="ref" type="hidden" value="'.$cap_back.'"/>

7. так что на втором заходе обкус равен li, но берётся eo из формы
$lng = ($cap_lang != 'li') ? $cap_lang : $_POST['lng'];

8. та же фигня происходит с реферрером — сберегается test.comicslate.org
$cap_back = ($cap_lang != 'li') ? $cap_back : $_POST['ref'];

и сколько я не размышлял над этим механизмом, ни избавиться от явно избыточного <input name="lng" type="hidden" value="'.$lng.'"/> в форме, ни упростить обработку $cap_lang, $lng и $cap_back без ещё большего наслоения проверок не получается

Rainbow-Spike

прорывчик. долго не мог догадаться, как выдавать русскому — русский текст в отдельно стоящем скрипте, а иностранцу — иностранный. наконец допёр — реферрер! наконец можно привести этот обезьянник в порядок

практически это выглядит так:
вызовите матан-капчу из красной заметки со страницы test.comicslate.org — и в капче будет русский текст
а со страницы test.comicslate.org — будет английский. он дефолтный, фразы на эсперанто я пока на скрипт не надевал
архитектура предполагает, что доступ к 18+ зонам сайта добавляется тому, кто есть в списке акков, кто уже зареган. так что скорее всего, скрипт будет писать вам, что надо зарегаться и залогиниться
это не обязательно. у меня и так уже список акков до××я толстый...

Rainbow-Spike

я капитулирт
comicslate.org работает
comicslate.org не работает
разница в использовании дефиса в названии папки. а у меня семилетний сайт везде их применяет
в github.com уже весь helper.php обсмотрен, предполагаемые места вклинивания — 217 либо 253 строка
пробовал mb_array_slice в 217 с.
нашёл php.net и пробовал htmlentities и quotemeta в 253 с.
у меня кончились идеи

Rainbow-Spike

у меня опять пц. поставил плагин translation чтоб многоязычность сделать... часть переменных для названий на английском (например) берётся из движковой библиотеки, часть из шаблоновой, с этим я справлюсь. но вот со ссылками жопа

на странице comicslate.org три строки меню
в первой строке вызывается wl($ID,'do=admin') текущая страница,поверх неё вызов админки и плагин корректно цепляет текущий язык перед $ID-страницей в виде кусочка адреса "/en"
в третьей строке тоже всё хорошо, вызывается текущая страница (wl($ID,'do=index'),$lang['btn_index']) == путь: текущая страница+вызов индекса, имя: из язык-переменной и плагин срабатывает снова
а вот во второй строке проблема. вызывается ('/start',tpl_getLang('start'),'_self') == путь: стартовая страница, имя: из шаблон-язык-переменной, таргет ссылки: на себя. ссылки от текущей страницы не зависят и плагин их не обрабатывает

dokuwiki.org заявляет, что есть алиасы @LANG@ (язык по умолчанию в вики = ru) и @TRANS@ (текущий язык страницы = en), но разумеется, на момент сборки в PHP этот транс бесполезен. залез в action.php плагина, есть строка обработки аалиаса $event->data['tpl'] = str_replace('@TRANS@', $this->helper->getLangPart($ID), $event->data['tpl']);
и вот этот $this->helper->getLangPart($ID) тож бесполезен, во всех кусках я его перебрал, и $ID на /start заменял...

что забавно, если перед '/start' вставить '@TRANS@'., то адрес меняется со /start на en@TRANS@/start но любые попытки почистить строку после получения сего через str_replace либо explode натыкаются на стену непонимания, функцией echo возвращается только /start прежний. это, блин, алхимия какая-то, логика здесь не работает... или я какую-то тонкость не понял

Rainbow-Spike
PHP

есть скрипт для объединения БД, который колотит на строки 1.txt с содержимым вида
0001.jpg|бла
0002.jpg|блабла
и 2.txt с
0001.jpg|кусь
0002.jpg|куськусь
оббегает через foreach в foreach, попутно рвя на две части по | и если 0001.jpg == 0001.jpg то 2.txt[ключ] = trim(0001.jpg)."|".trim(бла)."|".trim(кусь), то есть в памяти вместо массива 2.txt собирается модификат, который пишется в 3.txt

проблема. пока в обоих исходниках одинаковое число строк — всё нормально, но если в 1.txt не хватает строк, то в 3.txt следом за недозаполненной строчкой появляется пустая строка. где-то, может, это и удобно, чтоб видеть недозаполненную строку, но меня мучает творческий вопрос — как бы убить перенос? preg_replace ("/\n|\r/","",тримка) не помогает. повторный вызов preg_replace тоже ничего не дал, из чего я понял, что preg_replace бесполезен в любых количествах. сделать итоговому файлу preg_replace на "(/\n|\r/){2,}","\n" и не париться?

Rainbow-Spike

маленький ребрендинг. хотя со смартфона пока ещё тяжеловато, логотип в экран лезет из-за position: absolute;, но хотя бы боковое меню не мешается со старта страницы. убрал социалкнопки, основная загрузка страницы ускорилась с 12 до 4,5 секунд вне кэша. с менюшкой было около 30. подумываю ещё и счётчик яндекса убрать, 2,2 секунды будет

Rainbow-Spike

хочу на смарт воткнуть веб-сервер, а в нём Докувики — чтоб на работе комиксы свои размечать во время пауз

попробовал поставить KSWeb, но он требует лицензию, иных каких-то рычагов там не вижу. поставил kWS — тоже что-то непонятное, в настройках прописал sdcard/www, сделал www на смарте, сунул туда чистый билд докувики, в браузере пишу localhost:8080/install.php — а мне вываливает kWSный экран, в нём — строчку Сегодня, а в ней — бегущая полоска...

кто-нибудь пробовал веб-сервер на андроида втыкать? ни MySQL ни PHPMyAdmin для докувики не нужен, только PHP 5.3.3

Rainbow-Spike

вырвалось

Вижу в тестовом косяк,
Что-то явно тут не так!
Забегаю в код — а там
Нарисованный фигвам!

Пару строчек переставил —
Охренеть сервак заставил:
Только выделен контент —
Его сносит конкурент!

По итогу — хвост и грива,
Некорректна перспектива.
Уж, конечно, "тут не так"!
Хвать за голову: "Дураак!"

Rainbow-Spike

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

Rainbow-Spike
PHP

йей. PHP-сортировалка чуток улучшена, отчётность на экране пишет.
заголовок такой echo '<html><H1>Сортировщик девиантартовских картинок по подпапкам</H1>';
после rename ещё строка echo $file.' → '.$newdir[0].'<br >'; /пишет отчёт на экране
и хвост такой echo '<br ><br >Всё!</html>';

Rainbow-Spike
PHP

йей. PHP-сортировалка девиантартовских картинок pastebin.com
работает куда резче автоита. сразу что-то не подумалось, что я могу на PHP написать. работает так свирепо, что у меня не нашлось столько файлов, чтоб ощутимо притормознуть и объективнее оценить. за 12 секунд рассортировал 1188 файлов весом 850 мб. это намного быстрее, чем даже сделал бы тотал коммандер при всей доступной ему памяти. однопоточность же. мой вебсервер (древнейший апач 1) располагает всего 128 мб рамы, так что я подозреваю, что он менял прямо таблицу NTFS. это опасно.

Rainbow-Spike

имеется сайт, показывающий картинки. картинки могут находиться вне сайта или быть загруженными оттуда в локальную папку сайта. есть ли в природе скрипт, проверяющий локальный путь на существование картинки и выбирающий, что загрузить? предполагаю, этим должен заниматься пхп, но если джава тоже справляется, то и он годится