Задать вопрос
  • Как сделать форматированный вывод в LESS подобно SASS?

    soprun
    @soprun
    Software Architecture
    У меня все в одну строчку ( компрессия )...
    Красотой нужно любоваться в самом less, а css должен быть оптимизирован для пользователей ( то есть как можно меньше весил )
    Ответ написан
    Комментировать
  • Можно ли адаптивно сверстать данный макет?

    soprun
    @soprun
    Software Architecture
    Ну вообще я тоже придерживаюсь мнения

    А ваш макет рожден быть фиксированным. Хотите адаптивный, то думайте об этом перед созданием дизайна.


    Однако можно и его адаптировать, но с дополнительным затрат времени.
    Под под планшеты можно сделать без особого геморроя.

    И если есть Возможность делайте редизайн! И не заморачивайтесь с адаптацией текущего макета.
    Ответ написан
    Комментировать
  • Где вы используете размеры в em?

    soprun
    @soprun
    Software Architecture
    Еще она отлично масштабируется и ее использую для указания размера элементов.
    Что касается сетки то лучше использовать не EM, а REM так как размер считается по другому..
    Так же посмотрите на VH и VW...
    Ответ написан
  • "Вечные" сессии на PHP. Выдержит ли сервер?

    soprun
    @soprun
    Software Architecture
    Можно обойтись и простой проверкой:
    Две куки, одна для ID пользователя другая для сесии..

    Проверять это добро можно вот так: ( это просто пример )
    function session()
    {
        @$i = $_COOKIE['account'];
        @$h = $_COOKIE['hash'];
    
        if (!empty($i) && int_($i) && !empty($h) && $h === hash('sha1', $i . SLAT, false))
            return (int)$i;
    }


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

    Примерно так построены многие системы...
    Ответ написан
    Комментировать
  • Возможно ли защитить сайт от скачивания файлов с других ресурсов?

    soprun
    @soprun
    Software Architecture
    Так как "парсеры" других ресурсов читают html, можно сделать добавление ссылки через javascript ( имею в веду на страницу ссылка будет вставляться в определенный элемент).

    Так же создать простую систему токенов.

    Например у вас есть папка где лежат Ваши файлы "site.com/myfile/", все запросы к данной папки будут перенаправляться на файл обработки, где и будет проверяться "токен"..

    Ссылка будет выглядеть так:
    site.com/myfile/prog.exe?token=1234567890

    GET параметр "token" сравниваем с тем что будет в сессии пользователя, если все хорошо от открываем файл, если нету то и скачать нельзя...

    Как правило парсеры не хранят сессии и не смогут скачать файл...

    -------- Решение:

    Давайте с начало определимся с видом ссылки на файл.

    Можно сделать так:
    /myfile/img.jpg?b31598b111cf1c175e956830b764e3f1e6d0a364
    или вот так:
    /myfile/img.jpg?token=b31598b111cf1c175e956830b764e3f1e6d0a364

    Мне более симпатичен первый вариант.

    1. Необходимо в конфигурационном файле сервера сделать что бы все запросы по определенной папки открывали файл проверки.

    Например download.php
    По настройки для вашего веб сервера можно найти примеры водяного знака для изображений.
    Принцип точно такой же.

    Настройка .htaccess
    <FilesMatch "\.(gif|jpg|jpeg|png)$">
       RewriteEngine On
       RewriteCond %{REQUEST_FILENAME} -f
       RewriteRule ^(.*)$ /download.php?file=$1 [T=application/x-httpd-php,L,QSA]
    </FilesMatch>


    2. Необходимо создать сессию и ключ.
    session_name('session');
    session_start();
    
    define('token', "?" . hash('sha1', session_id() , false));
    # define('token', "?token=" . hash('sha1', session_id() , false));


    Придется добавить в ваши шаблоны константу "token" в конец ссылки.

    3. Проверка ключа download.php

    <?php
    
    session_name('session');
    session_start();
    
    # if( !empty($_GET['token']) && $_GET['token'] == hash('sha1', session_id() , false) )
    
    if (isset($_GET[hash('sha1', session_id(), false)])) {
        if (ob_get_level()) {
            ob_end_clean();
        }
    
        # $file = $_SERVER['DOCUMENT_ROOT'] . '/' . preg_replace('/%2F/', '/', urlencode(trim(preg_replace('%\?.*%i', null, $_SERVER['REQUEST_URI']), '/')));
        $file = $_GET['file'];
    
        if (!is_file($file)) exit("Файл не найден!");
    
        // заставляем браузер показать окно сохранения файла
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename=' . basename($file));
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        header('Cache-Control: must-revalidate');
        header('Pragma: public');
        header('Content-Length: ' . filesize($file));
    
        // читаем файл и отправляем его пользователю
        readfile($file);
        exit;
    
    } else exit("Неверный ключ авторизации");


    Более короткий вариант:
    <?php
    
    session_name('session');
    session_start();
    
    if (!isset($_GET[hash('sha1', session_id(), false)])) exit("Неверный ключ авторизации");
    
    if (ob_get_level()) ob_end_clean();
    
    if (!(!empty($file = $_GET['file']) && is_file($file))) exit("Файл не найден!");
    
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename=' . basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    
    exit (readfile($file));
    Ответ написан
    5 комментариев
  • Как выбрать офисное кресло, чтобы не проседало быстро?

    soprun
    @soprun
    Software Architecture
    Советую не покупать кожаные или из кожзама, так как воздух не будет проходить...
    Да и летом будут следы на рубаке, что совсем не приятно...
    Ответ написан
  • Как создать условие в php для проверки странницы?

    soprun
    @soprun
    Software Architecture
    Наверное самый простой способ:
    switch($_SERVER['REQUEST_URI'])
    {
        case '/register/':
            echo '/register/';
            break;
        case '/page/':
            var_dump('/page/');
            break;
        case '/user/':
            print_r(array('/user/'));
            break;
        default:
            echo 'Хьюстон, у нас проблемы!';
            break;
    }
    Ответ написан
    Комментировать
  • Найти и удалить номер массива по значению?

    soprun
    @soprun
    Software Architecture
    Ну как пример:
    $array = [
            array(
                'ID' => 1,
                'DATA' => true
            ),
            array(
                'ID' => 2,
                'DATA' => true
            ),
            array(
                'ID' => 3,
                'DATA' => true
            ),
            array(
                'ID' => 4,
                'DATA' => true
            ),
        ];
    
        foreach( $array as $key => $value )
        {
            if( $value['ID'] == 2 ) {
                unset( $array[$key] );
            }
        }
    Ответ написан
    Комментировать
  • Как перенести данные с одной базы в другую?

    soprun
    @soprun
    Software Architecture
    Если сайт на тех поддержке рекомендую обратиться к специалистам за умеренную плату, если нет то самый простой способ это руками ( если не более 100 страниц на сайте ).
    Если у Вас много контента то нужно будет написать парсер который корректно перенест базу на новый сайт.
    Ответ написан
    Комментировать
  • 13'3 ноутбук для работы, удобно ли?

    soprun
    @soprun
    Software Architecture
    у меня ноутбук с 19 на 9, разрешение 1366 на 768 все очень удобно..
    Все ~ 1,2 кг.
    Меньше брать не рекомендацию...
    Для меня ух точно меньший размер просто будет неудобен в использовании..
    Ответ написан
    Комментировать
  • Как у вас реализовано чпу?

    soprun
    @soprun
    Software Architecture
    Ну почему нельзя передавать ?)
    Если сделать например так:
    $route = preg_replace( '/(\?.*)?$/', '', $_SERVER["REQUEST_URI"] );
    $route = preg_replace( '/%2F/' , '/' , urlencode( trim( $route , '/' ) ) );
    define( 'MAIN_URI' , $route );


    То можно реализовать так:
    /search/search_request?type=posts&sort=time
    Ответ написан
    Комментировать