Книги


За бортом по своей воле / Ален Бомбар

Маленький принц / Сент-Экзюпери

Богатый папа, бедный папа / Роберт Кийосаки

Как разговаривать с кем угодно, когда угодно и где угодно / Ларри Кинг / оценка 5 из 10

Думай и Богатей! / Наполеон Хилл / оценка 9 из 10

Капитанская дочка

ЧИЧВАРКИН Е...ГЕНИЙ. ЕСЛИ ИЗ 100 РАЗ ТЕБЯ ПОСЫЛАЮТ 99... | Максим Котин

Не осилил:

Я и Оно / Зигмунд Фрейд / не осилил на половине /  1/2 прочитано

Очерки по психологии сексуальности / Зигмунд Фрейд / не осилил на половине /  1/4 прочитано



2021


"Деньги, успех и вы" | Кехо Джон

Хватит быть славным парнем! Проверенный способ добиться желаемого в любви сексе и жизни | Гловер Роберт

Нунчи. Корейское искусство предугадывать поступки людей и мягко управлять любой ситуацией | Хонг Юни
 
Бизнес в стиле Virgin | Ричард Брэнсон

Подсознание может все! | Кехо Джон

Как завоевывать друзей и оказывать влияние на людей | Дейл Карнеги

Самый богатый человек в Вавилоне | Клейсон Джорж Самюэль

Семь навыков высокоэффективных людей | Стивен Кови


В процессе

Принцип сперматозоида. Учебное пособие | Михаил Литвак

Как хочет женщина: Мастер-класс по науке секса

Эмоциональные триггеры | Дэвид Ричо

Сертификаты

Еще раз про сертификаты для сервера.

Если что то не выходит делаем следующие проверки.

1. ключ подходит с серитфикату.

Проверяем MD5 ключа и сертификата:

# openssl rsa -noout -modulus -in serov.1.key | openssl md5
(stdin)= 777711dbbab90e1b12e922bbdbde6716
# openssl x509 -noout -modulus -in serov.crt | openssl md5
(stdin)= 910a2dd2db8510094383563ed18c056d

Если строчки разные, то ключ не подходит к сертификату.

Ну и можно посмотреть что внутри

  • Check a Certificate Signing Request (CSR)
    openssl req -text -noout -verify -in CSR.csr
  • Check a private key
    openssl rsa -in privateKey.key -check
  • Check a certificate
    openssl x509 -in certificate.crt -text -noout

 

 

Сортировка данных в php

Например, у нас есть какой то набор данных, в stdClass. Он многомерный, и его надо сортировать, например по дате.
Делаем первое

array_walk_recursive($t, function(&$t) {return $t->date=strtotime($t->Created);});

Здесь мы создаем дополнительный элемент, к каждому набору записи, в которую записываем unix timestamp для сравнения.
Далее, сортируем набор данных по полю date

usort($t, function($a, $b){
return ($b->date - $a->date);
});

Не знаю, насколько это быстрее foreach или for, пока у меня не было несколько миллиардов записей, а до 1000 записей, существенной разницы не увидим.

Для более сложной сортировки, лучше использовать array_multisort, но это уже только для массива, хотя stdClass позволяет работать как с массивом.

Архивирование логов

Бывает так, что на машине остается ну например 5gb места, и все свободное место забито логами.

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

// переименовываем папку logs с текущей датой 
tar --remove-files -cvzf logs_03_11_2015.tar.gz logs_03_11_2015

 

После добавление файла в архив, он будет тут же удален.

 

Если совсем все плохо, и надо перетащить файлы на винте, где совсем нет место, можно сделать это по сети.

tar cvf - / | ssh -p2222 ted@8.8.8.8 "cat > archive.tar"

тут мы все что в корне отправляем на сервер 8.8.8.8 по 2222 порту под пользователем  ted

 

 

Тернарная условная операция

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

Синтаксис следующий

 

Синтаксис:

expression ? true_value : false_value
Выполнение этой инструкции начинается с операнда expression. Если значение выражения expression истинно (true), то возвращается значение выражения true_value, иначе возвращается false_value.
Вроде все ясно.
Например, если в $id нам передается номер статьи, то используем его, если нет, то перевод на первую новость.
Как это будет выглядеть
$id = '1212';
$id = empty($id) ? $id : 1;

Однако все не так просто. Что если передадут в id буквы?

$id = 'asdas';
$id = empty($id) ? $id : 1;
//  выведет asdas

Заюзаем проверку на число

$id = is_numeric($id) ? $id : 1;

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

$id = is_numeric($id)  && $id>0  ? (int)$id : 1;

 

Но мы можем развернуть эту схему в классический if else, т.е. сделать записать в одном из операндов выражение.

 

<?php

$id = 'sfg';
is_numeric($id) && $id>0  ? $id=(int)$id : $id=1;
echo $id;

Идентично

if (is_numeric($id) && $id>0){
    $id=(int)$id;
}else{
    $id=1;
}

 

 

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

<?php

$id = '21';
$id = (is_numeric($id) && $id>0) && $id!=1  ? (int)$id : 1;

echo $id;

Область видимости объектов в памяти PHP

1.php Создадим объект класса и запишем его в массив.

<?php
$std = new stdClass();
$std->first = 1;
session_start();
$_SESSION['test1'] = $std;
print_r($_SESSION['test1']);

2.php В другом файле прочитаем его.

<?php
session_start();
$std = $_SESSION['test1'] ;
$std->first = 'first';

3.php В третьем файле выводим

<?php
session_start();
print_r($_SESSION['test1']->first);

Что получим? Правильно

first

Хотя мы не записывали переменную std в Сессию, так как это объект, str ссылается на объект, который в сессии, и при изменение его, мы меняем этот же объект в сессии.

То же самое правильно для функции.

При передачи объекта в функцию, при модификации объекта в функции он изменяется и после нее.

 

 

 

Любимые фильмы

  1. Пассажиры / Passengers (2016)
  2. Остров / The Island (2005)
  3. Время / In Time (2011)
  4. Обливион / Oblivion (2013)
  5. Прометей / Prometheus (2012)
  6. Интерстеллар / Interstellar (2014)
  7. Марсианин / The Martian (2015)
  8. Гравитация / Gravity (2013)
  9. Жизнь Пи / Life of Pi (2012)
  10. Я, робот / I, Robot (2004) — самый дорогой фильм для меня, в плане $$$