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+ зонам сайта добавляется тому, кто есть в списке акков, кто уже зареган. так что скорее всего, скрипт будет писать вам, что надо зарегаться и залогиниться
это не обязательно. у меня и так уже список акков до××я толстый...

vt

Кажется мы стали забывать об этом подвиде шизиков — secure.phabricator.com
you will need: ... a normal computer to install it on
You will need a computer
Strongly consider using a normal computer instead
you should not install Phabricator on these devices. Instead, install it on a normal computer
you will need an operating system on your normal computer which is not Windows
Mac OS X is an acceptable flavor of Linux.

Rainbow-Spike

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

justonemore
PHP

Установил Composer (https://getcomposer.org/download/). Оно затёрло переменную PATH и теперь там только C:\Users\User\AppData\Roaming\Composer\vendor\bin. Ну и никакого экзешника для Composer`а нету.

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 прежний. это, блин, алхимия какая-то, логика здесь не работает... или я какую-то тонкость не понял

segfault

opennet.ru
Обновление запрашивалось с внешней страницы simplywordpress.net с который загружался ZIP-архив с бэкдором. В ZIP-архиве размещалась текущая актуальная версия Captcha, отличающаяся от варианта из каталога WordPress.org наличием файла plugin-update.php с бэкдором, через котоорый любой сторонний злоумышленник получал возможность доступа к сайту с правами администратора (ID 1). Обновление также отличалось заменой имени обновления с captcha_pro_update.php на captcha_free_update.php, при загрузке которого выдавался ZIP-архив без бэкдора.
PRO версия с бэкдором ... божественно.

justonemore

Недавно стрельнула мысль что Web это по большей части полиграфия и что оно уменьшило сакральность нашей жизни (из–за низведения это самой полиграфии к подобию постоянно обновляющейся ленты с однотипной вёрсткой). WWW это некий каталог (поддерживаймый со всех сторон костылями) интерактивных журналов, рекламных буклетов, каталогов с товарами; каталогов с видео и аудио; почти что бесплатная рекламная площадка для тех кто желает заявить о себе. Народ пытается заработать на показе рекламы, наёбе населения и продаже чего–нибудь. Если раньше всё это говно было во врезках на страницах журналов и газет, то теперь оно прямо в наших ЭОМ и усердно грузит ЦП и кушает електричество. Типичный сайт это серверный скрипт с функциоанльностью инфузории и адок технологий каменного века ИТ на стороне клиента. Не зря большая часть работы по созданию сайтов занимает вёрстка и создание красивостей а PHP это в основном системы управления содержимым. Типичный выход в WWW типичного пользователя WWW это как поход в библиотеку, газетный киоск. Хотя, скорее всего, для большинства нынешних пользователей всё свелось к YouTube заменившему жвачку по телевизору, просмотру кинопродукции, Вкундахту и какому–нибудь viber. Выпусти более–менее популярные сайты типа Вкундахта программы для Окон, все бы только спасибо сказали. Идиоты тратят свою ничкчёмную жизнь активно создавая корпоративную (и не только) хуиту используя вэбную парашу вместо более вменяемых средств типа .NET (которое скорее всего и создавалось с прицелом на эту самую корпоративную хуиту).

Abaza

Проблемка с AJAX. Очень нужна помощь.

Есть такой вот кредитный калькулятор: lakaz.ru
Архив тут: lakaz.ru
Когда все файлы его в одной папке, он замечательно работает. Я хочу его интегрировать в DLE, там файл, отвечающий за AJAX в целях безопасности должен находится в специальной папке. Так вот, когда я этот файл переношу в отдельную папку — перестает скрипт работать.

Вот тут можно посмотреть: lakaz.ru Идет обращение к файлу lakaz.ru и сервер выдает 500 ошибку.

Что-то делаю не так, но что, понять не могу. Буду рад любой помощи. Спасибо

justonemore

Есть ORM на PHP под названием RedBeanPHP. Есть у неё функция find которая возвращает массив, но массив не простой а массив с индексами которые являются значениями полей id из таблицы в БД (игдексы не 0, 1, 2, 3 и т.д. а 9, 8, 12, 100)! Очен удобно.

justonemore

Чувак хотел ответственного похапешника, но вчера пропало электричество, потом доступ в Интернет, позже оказалось что Netbeans не полностью загрузил сайт почему–то не скачав содержимое одного каталога.

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" и не париться?

sl2

Кстати, программисты есть? Посоветуйте мне the best way. Есть некий сайт, на котором примерно раз в час (от 10 минут до часа) происходит некое событие и страница перегружается. После этого события надо прореагировать, скажем нажать появившуюся кнопку. В данный момент я решил это простым плагином для браузера. Но держать постоянно включенный комп не охота.

Есть такая мысль: на бесплатном хостинге установить PhantomJS и вместо плагина написать скрипт с аналогичным функционалом. Но непонятно как обеспечить непрерывность работы. Допустим есть php скрипт, который будет запускать фантом, который и будет выполнять действие. Но действие должно быть выполнено только после события. И как узнать произошло оно или нет? Постоянно мониторить сайт? А может вообще есть способы лучше, без этого гемора?

justonemore

Есть такое говнище как Qustion2answer. Как там удалить вопрос?
You must hide it first, and the in the admin page, go to the stats tab, and at the bottom of the page you have some buttons. Press the one which says Delete hidden posts. :) That's it. :)

justonemore

Узнал из комментария к описанию SplFileObject (The SplFileObject class offers an object oriented interface for a file.) что
Note that this class has a private (and thus, not documented) property that holds the file pointer. Combine this with the fact that there is no method to close the file handle, and you get into situations where you are not able to delete the file with unlink(), etc., because an SplFileObject still has a handle open.
Для закрытия файла нужно присвоить переменной содержащей объект NULL. Метода close() не напрограммировали.

Rainbow-Spike

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