Збереження файлу, відправленого через POST-запрос

Комментарии ()
$uploaddir = _DIR.'path/';

if (move_uploaded_file($_FILES['img']['tmp_name'],$uploaddir.$_FILES['img']['name']))
{

 ...

} 

 


Читать далее

Прокрутка текста в HTML

Комментарии ()
<style type="text/css">
   .layer {
    overflow: auto; /* Добавляем полосы прокрутки */
    width: 700px; /* Ширина блока */
    height: 350px; /* Высота блока */
    padding: 5px; /* Поля вокруг текста */
    border: solid 1px black; /* Параметры рамки */
   } 
  </style>
<div class=" layer">
...
</div>

 


Читать далее

Генератор паролей на JavaScript

Комментарии ()
<script>
    function str_rand() {
        var result = '';
        var words = '0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM';
        var max_position = words.length - 1;
        for (i = 0; i < 10; ++i) {
            position = Math.floor(Math.random() * max_position);
            result = result + words.substring(position, position + 1);
        }
        return result;
    }
</script>

 


Читать далее

Стойкое хеширование в PHP на примере bcrypt

Комментарии ()

Стойкость паролей, который захешированы с помощью md5/SHA-1 оченень ненадежна. Для решения  пробемы безопасности, необходимо использовть "соль" и более стойкие алгоритмы хеширования, которые значительно увеличивают надёжность.

Функция bcrypt использует алгоритм, который работает настолько медленно, что рассчёт радужных таблиц и атаки методом перебора стали абсолютно неэффективными.  Для необратимого шифрования она использует алгоритм blowfish с множеством итераций, и работает очень медленно. Путём изменения количества итераций можно регулировать время, затрачиваемое на шифрования пароля, и найти такую «золотую середину», когда шифрование одного пароля будет достаточно быстрым, а подбор его станет бессмысленным.

В PHP есть встроенная функция crypt(), которая являюется реализацией адаптивной криптографической хеш-функции bcrypt. С версиях PHP 5.3 и выше функция crypt() имеет встроенную реализацию алгоритмов шифрования и больше не зависит от поддержки этих алгоритмов ОС. Она поддерживает различные алгоритмы (от DES до SHA-512) и выбирает алгоритм в зависимости от того, какая соль задаётся в качестве её параметра.

Ниже пример генератора соли. Будучи скормленной функции crypt() данная соль заставит её использовать blowfish с 10 в квадрате итерациями. Это задаётся идентификатором $2a$ (использовать bcrypt), и идущим затем количеством итераций, которые задаются как логарифм по основанию 2 (в данном случае это 210, то есть 1024 итераций). Увеличение параметра на единицу удваивает количество итераций, и следовательно время рассчёта функции.

// Генерируем соль
$salt = '$2a$10$'.substr(str_replace('+', '.', base64_encode(pack('N4', mt_rand(), mt_rand(), mt_rand(),mt_rand()))), 0, 22) . '$';
// Шифруем пароль с применением данной соли
$hashed_password = crypt($password, $salt);

 


Читать далее

Принудительное скачивание файла при клике на ссылку

Комментарии ()

В одном проекте возникла необходимость, что бы mp3 файл скачивался при клике на ссылку, но не у всех браузерах это срабатывало. Где-то скачивалось, где-то аудиофайл проигровался. Следующий код застваит браузер отдавать файл пользователю для сохранения на ПК

$file=$_SERVER['DOCUMENT_ROOT']."sermons_mp3/".$_GET['id'].".mp3";
header("Cache-control: private");
header ("Content-type: octet/stream");
header ("Content-disposition: attachment; filename=\"sermons.oleh-sj.km.ua-".$_GET['id'].".mp3\";");
header("Content-Length: ".filesize($file));
readfile($file);
exit;

 


Читать далее

Планируем недоступность(работы) веб-сервера

Комментарии ()

Страница с HTTP кодом 503

ob_start();
header('HTTP/1.1 503 Service Temporarily Unavailable');
header('Status: 503 Service Temporarily Unavailable');
header('Retry-After: 3600');
header('X-Powered-By:');
?>

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>503 Service Temporarily Unavailable</title>
</head><body>
<h1>Сайт временно недоступен</h1>
<p>Сайт временно недоступен в связи с техническими работами, проводимыми на сервере.
Пожалуйста посетите наш сайт позже.</p>
</body>
</html>

 


Читать далее

In_array в JavaScript

Комментарии ()

аналог in_array() в php для JavaScript

function in_array(what, where) {
    for(var i=0, length_array=where.length; i<length_array; i++)
        if(what == where[i])
            return true;
    return false;
}

 


Читать далее

Закритие модального окна twitter bootstrap

Комментарии ()

При нажатии на ESC

Для того, что бы модальное окно (twitter bootstrap) закрылось при нажатии на ESC, необходимо добавить параметр tabindex="-1"

Пример кода

<a href="#my-modal" data-keyboard="true" data-toggle="modal">Open Modal</a>

<div class='modal fade hide' id='my-modal' tabindex='-1'>
    <div class='modal-body'>
    <div>Test</div>
    </div>
</div>

При нажатии на button

Необходимо прописать data-атрибут data-dismiss="modal"

Пример

<a href="#" class="btn " data-dismiss="modal"> Закрыть </a>

 


Читать далее

FireFox и крякозябра

Комментарии ()

Проявилось пока только в FireFox'е. Если выполнять POST запрос и выводить на страницу данные (исходники проекта в UTF-8) то будут крякозябры. Помогло только это:



header('Content-Type: text/html; charset=UTF-8');

Размещать нудно в самом начале php-файла


Читать далее

__call или вызов рутинных методов в движке

Комментарии ()

В каждом объекте, который работает с БД, плодятся методы, которые я называю рутинными. Примеров тьма: getLoginById, getIdByLogin, getAliasByName. getNameById и так далее. Поскольку практически суть везде одна и таже (выполнить select с некой таблицы БД по некому признаку и вернуть value) я утвердил в своем движке стандарт вызова метода __call

Для начала договоримся, что в каждом классе, который унаследован от Core, должно присутствовать свойство $call, которое содержит ассоциативный масив следующего виду

  • table - название таблицы по умолчанию, с которой брать данные. Значение задается в конструкторе класса.
  • fields_private - масив с перечнем названия полей, доступ к которым через метод __call нужно закрыть

public function __call($methodName, $args)

$methodName - название несуществующего метода, которого мы вызываем

$args - массив параметров:

первый параметр - значение поля, по которому ищем запись в БД

второй параметр - название таблицы, если нету - используется $call['table']

Пример

В классе User вызываем не существующий метод getEnableById - в даном случаи мне нужно получить значени поля enable из таблицы users по значению поля id. В классе задано свойсто   protected $call = array('table' => 'users', 'fields_private' => array()); 

На самом деле я создал метод   getEnableById только ради автодополнения в IDE. Также методы следует задавать явно, если необходимо выполнить дополнительные действия. В этом примере выполняется проверка на существование  $id (если отсутствует, тогда присвоить  $_SESSION['user']['id'])

 

 public function getEnableById($id = '')
    {
        if ($id == '')
        {
            $id = $_SESSION['user']['id'];
        }
        return parent::__call(__METHOD__, $id);
    }

 


Читать далее

Webit.in.ua 2013