G|Translate: English EN Français FR Deutsch DE Italiano IT Русский RU Español ES

Яндекс Metrika добавила кнопку на фронтенд

На сайтах появилась новая кнопка

Яндекс Metrika добавила кнопку на фронтенд

Вот она — маленькая, круглая справа внизу, рядом с кнопкой «Наверх»

При нажатии появляется статистика Яндекс.Метрика.

Яндекс Metrika добавила кнопку на фронтенд

Вообще это некрасиво. Счетчик должен считать — а не добавлять что-то на сайт. 

Скрипт, которые Вы установили на сайт для подсчета посетителей — начал что-то добавлять на фронтенде Вашего сайта — и Вас никто не спрашивал.

Да — конечно, статистика показывается только владельцу счетчика (т.е. он зарегистрирован в текущей сессии в Яндексе под своим логином).

Модуль статистики на сайте

Статистика будет отображаться только при условиях:
  • ваш браузер поддерживает third-party cookie;
  • вы авторизованы в Яндексе под учетной записью владельца счетчика;
  • домен вашего сайта совпадает с тем, что указан в настройках счетчика.

В настройках счетчика можно отключить.

 Яндекс Metrika добавила кнопку на фронтенд

Похоже, придется вообще от внешних счетчиков отказываться.


Пароль для внешних приложений mail.ru

Упс… А что случилось?

Пароль для внешних приложений mail.ru

Пришло письмо на почту. А что это?

А это Вы используется сервер SMTP Вашего почтового ящика от mail.ru на своем сайте — и он перестал работать :(

Читаем статью 

Как отправить e-mail с сайта?

И теперь всё перестало работать — где-то с июня 2022 г.

Почта mail.ru ввела дополнительную защиту аккаунта

Теперь Ваш пароль от почтового ящика работает только для Вас. Для входа в аккаунт и для использования почты.

Если Вы хотите использовать сервер SMTP для отправки почты с сайта — Вам теперь нужен отдельный пароль для приложений. Если враги его узнают — они не получат доступа к аккаунту,  с его помощью можно только получать и оправлять письма с помощью роботов.

Подробнее ниже:

https://help.mail.ru/mail/security/protection/external

Создаем пароли для внешних приложений

Заходим в раздел паролей для внешних приложений и создаем

https://account.mail.ru/user/2-step-auth/passwords/

  • от Вас требуется только названия приложения (просто Ваше название)
  • система сама создаст пароль

Список паролей Вы не увидите — их надо себе сохранить сразу после создания,

Вам будет доступен список приложений,  к которым есть пароли.

Пароль для внешних приложений mail.ru

Это позволяет видеть, каким приложением были отправлены письма. Во входящее письмо к отправителю будет добавлено название приложения.

Пароль для внешних приложений mail.ru

В данном случае письмо было отправлено с формы обратной связи, с паролем от «Форма».

Достаточно удобно, если у Вас много разных приложений и разных сайтов.


Как выбрать регистратора доменов в 2022 году

Простой вопрос.

Как выбрать регистратора доменов в 2022 году

Выбираем подешевле — и вперед? Какая разница?

Цена за регистрацию и за продление обычно разная

Да, есть такое дело. Цена может отличаться в 4 раза.

Как выбрать регистратора доменов в 2022 году

Срок регистрации для доменов в зоне .RU один год, первый год — дешево, потом дороже. Но это не является совсем уж ключевым параметром. Есть другая проблема — часть регистраторов занимается «продажей» услуг в нагрузку. 

Добавление навязанных услуг в корзину — очень плохой вариант

Невозможно купить нормально домен — смотрим примеры

выбираем домен и добавляем его в корзину

Как выбрать регистратора доменов в 2022 году

Упс, добавилась позиция за 89 руб.  Т.е. не просто добавили товар с нулевой стоимостью в рамках акции — а добавили то, что клиент не собирался оплачивать вообще.

Ладно — попробуем оплатить.

Как выбрать регистратора доменов в 2022 году

Оплатить не получится — надо еще добавлять.

Идем дальше и пробуем оплатить — еще одна попытка.

Как выбрать регистратора доменов в 2022 году

Еще 590 рублей в корзину.

И все-таки продолжить и оплатить?

Как выбрать регистратора доменов в 2022 году

Еще 790 рублей в корзину.

Как выбрать регистратора доменов в 2022 году

Правда же мило. Полноценный квиз (quiz — викторина) на много этапов.

Пока Вы шли до кассы с товаром на 299 рублей — Вам автоматом накидали еще товаров и общая сумма заказа составила 2 227 рублей. Спасибо, что крестики оставили, что бы можно было удалять добавленное.

Стоимость заказа увеличилась в 10 раз! Ведь кто-то это сидел и придумывал :)

Выбор формы оплаты

Что тут можно придумать плохого? У нормального регистратора есть все варианты:

  • картой
  • на счет по реквизитам
  • электронные деньги

Как выбрать регистратора доменов в 2022 году

Вот это норма.

Как выбрать регистратора доменов в 2022 году

А вот это не норма — только банковская карта и привязка. Потом будут по тихому услуги добавляться — и так же по тихому они будут оплачиваться с Вашей карты.

Сюда же — бонусная система-обманка. Бонусы нельзя потратить на нужные услуги, а можно потратить только на не нужные.

Выбираем приличных регистраторов доменов

Нормальный регистратор доменов понимаем две базовые вещи:

  • только на регистрации доменов много денег не заработаешь (как ни придумывай обманки при оплате)
  • и репутация дороже (иначе клиенты начнут разбегаться)

То есть у приличного регистратора:

  • полный спектр услуг (регистрация, хостинг, почта, VPS/VDS, ЦОД)
  • есть полный спектр форм оплаты  (карты, на счет, электронные деньги)
  • и нет активного навязывания не нужных услуг

И как привила — и клиентов много и цены нормальные.

REG.RU

https://www.reg.ru/

Как выбрать регистратора доменов в 2022 году

Количество зарегистрированных доменов — 3 300 000

Количество зон доменов — 754

Стоимость домена .ru (регистрация / продление) — 199 руб. / 899 руб.

Стоимость продления доменов при оплате хостинга — 0 руб.

BEGET.RU

https://beget.com/

Как выбрать регистратора доменов в 2022 году

Количество зарегистрированных доменов — 1 000 000

Количество зон доменов — 616

Стоимость домена .ru (регистрация / продление) — 179 руб. / 289 руб.

BEGET тоже шутит. При первичной регистрации по умолчанию подключается тариф «Старт» для хостинга:

  • первые 30 дней бесплатно
  • потом за деньги

Как выбрать регистратора доменов в 2022 году

Фокус в том, что отменить услугу хостинга из панели управления нельзя, нет такого выбора :(

Нужно писать в поддержку, что Вам нужны только домены — и Вас переведут на тариф «Парковка доменов», описание которого еще на сайте поискать надо.

Тарифный план “Парковка доменов” предназначен для приобретения доменов и управления ими. Другие услуги — почта, размещение сайтов и прочие — не предоставляются. Также на данном тарифе недоступна партнерская программа и VPS.

Ранее был вариант «Бесплатный» для хостинга с сильными ограничениями по памяти и загрузки процессора. Сейчас такого тарифа нет.

TIMEWEB

https://timeweb.com/

Как выбрать регистратора доменов в 2022 году

Количество зарегистрированных доменов — 1 000 000

Количество зон доменов — 350

Стоимость домена .ru (регистрация / продление) — 179 руб. / 399 руб.

Стоимость продления доменов при оплате хостинга — 0 руб.

МАКХОСТ

https://mchost.ru/

Как выбрать регистратора доменов в 2022 году

Количество зарегистрированных доменов — 1 00 000

Количество зон доменов — 657

Стоимость домена .ru (регистрация / продление) — 200 руб. / 490 руб.

 


Приключение пробелов и TAB в html

Крайне забавная тема.

Приключение пробелов и TAB в html

Вот они.

Мнемоника — специальный синтаксис для указания символов в html коде.

Читаем Мнемоники в HTML

Символ пробела, ASCII / UNICOD код 32

В спецификации HTML сделана интересная схема отображения пробелов:

  • несколько пробелов между символами отображается как один
  • несколько пробелов до символа отображаются как один
  • один пробел на пустой строке не отображается
  • внутри тэгов <pre> показываются все пробелы

Зачем это сделано?

Для удобства редактирования кода html руками :)

Вот пример кода в тегах <pre>

<p><b>
   пример текста
   пример текста
   пример текста
</b></p>

данный текст отобразится как

пример текста пример текста пример текста

все пробелы слева и справа будут сокращены до одного.

Кстати, именно по этому вывод массива в PHP необходимо делать в тегах <pre>, что бы браузер не удалял пробелы, которые обеспечивают форматирование

echo '<pre>';
print_r($array);
echo '</pre>';

Символ неразрывного пробела ASCII код 255, UNICODE 0160

Почитать статью

Неразрывный пробел

Можно набрать как ATL 255, визуально пробел 32 и пробел 255 будут выглядеть одинаков

» «

» «

можно посмотреть с помощью конвертера символов в html код

http://wb0.ru/chrconv.php

Приключение пробелов и TAB в html

Так и есть:

  • первый пробел это &#32;
  • второй пробел это &#160;

Пробел называется «неразрывным», т.к. браузер эти пробелы:

  • не сокращает
  • не переносит на другую сторону

Также этот пробел используется в визуальных редакторах CMS для обозначению пустой строки в виде 

<p>&nbsp;</p>

Это же html страница, а не полноценный текстовый редактор. Для визуального редактированию нужно как-то поставить курсор в начале пустой строки.

Вариант <p></p> ничего не даст, так как в самом тексте html будет пустота и курсор между тэгами не поставить.

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

А. С. Пушкин

Приключение пробелов и TAB в html

Точно — код 8239 — Narrow No-Break Space

Символ табуляции TAB ASCII / UNICOD код 09 и его отображение

Вот тут вообще зоопарк.

Читаем статью Табуляция

Да, табуляция — это смещение на 8, 16 символов (и так далее).

Если посмотреть в классическом блокноте Windows, то оно так и будет.

Приключение пробелов и TAB в html

вверху символ табуляции — смещение 8 позиций

ниже — 4 обычных пробела

Приключение пробелов и TAB в html

Так и есть, до первой единицы символ табуляции 09, до второй — 4 пробела 32

В коде html смещение 8 символов для табуляции останется, 4 пробела превратятся в один. Если код html в тэгах <pre> = то обычные пробелы останутся на месте.

Так, стоп.

А почему в части обычных редакторов и IDE для разработки (которые есть и виде сайтов html) кода клавиша TAB делает сдвиг на 4 символа, а не на 8?

Приключение пробелов и TAB в html

Вот редактор Notepad++ = смещение одинаковое. Если посмотреть коды — то картина будет такая же: стандартный символ табуляции (на первой строке) и 4 пробела (на второй).

А просто так договорились. Что сдвиг 4 позиции будет красившие,  чем 8 позиций. И программно прописано показывать сдвиг на 4 символа.

Более того — клавиша TAB передает в ПК только код нажатия, а что делать дальше — решает программа.

И вот тут могут быть варианты:

  • вставляет код 09, показываем как смещение на 4 позиции
  • вставляет код 09, показываем как смещение на 8 позиций
  • вставляем код 32, показываем смещение на 4 пробела
  • вставляем код 0160 (он же ALT 255), показываем смещение на 4 пробела

В результате, если Вам необходимо показать код на своей веб-страницы = нужно перехватить буфер и программного его обработать:

  • заменить 09 на 4 символа 32 (если вставка в тэгах <pre>) и добавить в конец строки <br / >
  • заменить 09 на 4 символа 0160 (если вставка просто на странице html) и добавить в конец строки <br / >
  • или заставить браузер показывать 09 как смещение на 4 позиции (через стили CSS)

Тогда, например код Python (с отступами) корректно отобразится на Вашем сайте.

Наилучшим решением (самый первый вариант) будет использование 4х стандартных пробелов с кодом 32 для смещения на 4 позиции и обертка тегами <pre>.

Это позволит корректно копировать код с сайта в среду разработки языка, «Блокнот» и Notepad++ (и там и там всё будет отображаться одинаково).

Мессенджер «Telegram» делает именно это — все отступы заменяет на набор стандартных пробелов.

Приключение пробелов и TAB в html

Вот код на Python подбора «пифагоровых троек», скопированный из среды разработки IDE в мессенджер. Что там с кодами символов после вставки?

Приключение пробелов и TAB в html

Всё в порядке — четыре символа 32 (стандартные пробелы) вместо одного символа 09 (табуляция). Причем визуально смещение кажется в три символа, но это не так. Просто «длина» пробелов меньше ширины стандартного шрифта.

 И при копировании и вставке обратно в IDE = всё будет нормально работать.

Использование, например «неразрывного пробела» при обратной вставке кода с сайта в IDE — приводит к проблемам.

Приключение пробелов и TAB в html

«Не нравятся» символы в начале строки :(

Четыре неразрывных пробела показываются как красные черточки.

 


Алгоритм суммы одинаковых элементов массива (на примере Python)

Простая задача — посчитать количество одинаковых элементов массива

Алгоритм суммы одинаковых элементов массива (на примере Python)

Глазами легко видеть, что суммы правильные :)

Попробуем теперь сделать тоже самое программно. Используем  Python. 

Логика кажется очень простой:

  • делаем счетчик
  • складываем
  • при смене элемента счетчик обнуляем
  • выводим то, что насчитали

Поехали. Будет картинками, правильный код в виде текста будет в конце статьи.

Используем интерпретатор Питона по ссылке

https://www.online-python.com/

Варианты неправильного кода для подсчета числа элементов массива

Конечно, массив надо сначала отсортировать, что бы одинаковые элементы были рядом. Будем считать, что это сделано заранее.

Алгоритм суммы одинаковых элементов массива (на примере Python)

Позвольте, а где элемент «Три»?

Так как он в конце массива, наше условие не сработало для последнего подсчета. Точнее — сумма посчиталась, но на экран не вывелась.

Добавим условие «ИЛИ последний элемент массива«

Алгоритм суммы одинаковых элементов массива (на примере Python)

Так:

  • последний элемент «Три» появился
  • но счет неправильный, не произошло последнее суммирование

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

Пробуем по другому — убираем условие последнего элемента и за пределами цикла еще раз выведем «print»

Алгоритм суммы одинаковых элементов массива (на примере Python)

Теперь всё посчитано правильно.

Но плохо, что у нас одинаковый вывод «print» в двух разных местах.  Это на примере просто.  А в реальности там может быть сложный вывод — и отлавливать ошибку вывода в двух местах вместо одного — это нехорошо.

Нам нужно, что бы «print» был один раз внутри цикла и всё было отображено правильно. Странно, у нас фактически простая конструкция:

  • цикл
  • внутри два модуля
    • модуль условия и вывода
    • модуль суммирования

Почему не работает нормально?

Уберем последний «print» и попробуем переставить модули внутри цикла местами.

Алгоритм суммы одинаковых элементов массива (на примере Python)

Вообще беда:

  • элемент «Три» пропал
  • первые два элемента считаются неправильно (что очевидно — теперь счетчик перед условием)

Внимание — сектор «приз»! 

А где ошибка, собственно?

Машина времени

Всего два модуля, один цикл, оба варианта мы попробовали.

И оба варианта неправильные..

А ошибка не в программе.

Ошибка в начальной логике. Если хорошо подумать — то нам нужна «машина времени».

Мы делаем вывод посчитанного:

  • или это последний элемент массива
  • или в следующей позиции массива уже другой элемент
  • причем эту проверку следующего элемента массива мы можем делать только, если текущий элемент не последний (иначе выйдем за пределы массива)

Алгоритм суммы одинаковых элементов массива (на примере Python)

Вот теперь всё правильно (и убран print(i), который был для отладки).

Правильный код для подсчета числа одинаковых элементов

Ниже код в виде текста для копирования.

arr_data = ["Один", "Два", "Два", "Три", "Три", "Три"]
x = len(arr_data) # число элементов в массиве
find_me = arr_data[0]
count_my = 0
for i in range (x):
    # (№ 2) модуль увеличения счетчика
    count_my = count_my + 1 # увеличиваем счетчик
    #----------------
    out = False # условие вывода
    find_me_old = find_me
    if i == (x-1): # проверка на последний элемент
       out = True
    elif arr_data[(i+1)].find(find_me) < 0: #проверка следующего элемента
       out = True
       find_me = arr_data[(i+1)] #замена элемента на новый
    #---------------
    # (№ 1) модуль условия вывода и сброса счетчика
    if out : 
       print(' Элемент = ', find_me_old, '! Итог = ', count_my)
       count_my = 0
    #--------------
#---

Проверьте отступы (нужны TAB, а не пробелы) после копирования кода — это же Питон.

Как резюме — ошибка может быть не только в программе, но в самом алгоритме.

 


Используем PHP и псевдографику для простой гистограммы

Вот такой вывод «гистограммы» на основе данных массива

Используем PHP и псевдографику для простой гистограммы 

Нет никаких графических библиотек, чистый PHP и символ псевдографики (ASCII 2593). Разная насыщенность:

  • значение более 70% от размера ячейки
  • значение менее полного размера ячейки
  • нет значения — фон

Для построения используется цифровой массив — могут быть положительные и отрицательные данные.

Массив ниже — данные вначале более актуальные по времени, поэтому в коде используется реверс (что бы эти данные оказались справа на гистограмме)

$arr_count = array (150,145,20,10,5,0,99,85,41,34,21,56,75,46,78,34,125,130,128,10,15,24,50,30,20,0,10,20,30,50,30,20,10,5,0,5,10,20,30,50,150,145);

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

Вот еще «график» при наличии отрицательных значений в массиве

Используем PHP и псевдографику для простой гистограммы

Сами данные ниже, есть отрицательные значения

$arr_count = array (150,145,20,10,5,0,99,85,41,34,21,56,75,46,78,34,125,130,128,10,15,24,50,30,20,0,-10,-20,-30,-50,-30,-20,-10,-5,0,5,10,20,30,50,150,145);

 

Код PHP — функция вызывается с передачей ей цифрового массива.

Параметры:

  • массив
  • необходимость реверса массива (по умолчанию False)
  • высота вывода в строках, по умолчанию 20.
echo tsl_graph ($arr_count);

/////----------------------------------------------------------------
function tsl_graph ($arr_count, $revesr_arr = FALSE, $high_star = 20) {
	//$arr_count - числовой массив для вывода с использованием псевдографики
	//$revesr_arr - необходимость реверса массива, по умолчанию FALSE
	//$high_star - число строк для вывода "графики", по умолчанию 20
	
	$count_total = array_sum($arr_count) ; 	//сумма данных в массиве
	$arr_count_new = ($revesr_arr ? array_reverse($arr_count) : $arr_count); //реверс	
	$len_count_total = count($arr_count_new); 	//число элементов массива

	$max_array = max($arr_count_new); 
	$min_array_var = min($arr_count_new);
	$min_array = ($min_array_var < 0 ? $min_array_var : 0); //диапазон с учетом отрицательных значений
	$pik_arr = ($max_array - $min_array)/$high_star; 	//значение одного "деления" по вертикали
		
	$graph_line = '';
	$num_line = $high_star; 	//самая верхняя строка графика
	//сверху вниз
    while ($num_line > 0) {
		
		//формируем строку, используем одинаковый символ с разным цветом - иначе разная ширина
		$star_line = '';
		$num_element = 0;
		$shift = $min_array/$pik_arr ;  //смещение при наличии отрицательных чисел
		while ($num_element < $len_count_total) {
			$virt_line = $num_line + $shift ; //для 0 без изменений, для отрицательного будет вычитаться
					
			if ( ($arr_count_new[$num_element] > 0) && ($virt_line > 0 ) ) { //для положительных чисел и положительных строк
				$tail = $arr_count_new[$num_element] - ($pik_arr*($virt_line-1)); //хвост
				if ($tail >= ($pik_arr*0.7)){ // красим полностью при 70%
					$star_line .= '▓'; 
				}elseif ($tail >0 && $tail < $pik_arr) {
					$star_line .= ''; // слабый серый для мелких показаний
				}else{
					$star_line .= ''; //фон
				}
			}elseif ( ($arr_count_new[$num_element] < 0) && ($virt_line <= 0 ) ){ //для отрицательных чисел и линии 0, -1, -2
				$tail = abs($arr_count_new[$num_element]) + ($pik_arr*($virt_line)); //хвост
				if ($tail >= ($pik_arr*0.7)){ // красим полностью при 70%
					$star_line .= '▓'; 
				}elseif ($tail >0 && $tail < $pik_arr) {
					$star_line .= ''; // слабый серый для мелких показаний
				}else{
					$star_line .= ''; //фон
				}
			}else{ // ноль - делать черту не работает = ширина разная и график разваливается
				$star_line .= '';				
			}
			
			$num_element = $num_element + 1;
		}	
		//сборка элементов массива в одну строку с переводами строк
		$graph_line .= $star_line.'
';
		$num_line = $num_line - 1;
	}
return '
'.$graph_line.'
Total '.$count_total.'
';
}

Комментарии:

  • используется символ псевдографики (ASCII 2593)
  • символ используется и для гистограммы и для фона (серым цветом)
  • разные символы использовать нельзя, т.к. шрифты в разных браузерах могут быть разными и толщина их тоже может быть разной
  • можно использовать реверс массива, т.к. обычно более свежие данные в начале массива (в начале таблицы), а на графике они должны оказаться справа — при желании можно отключить, код простой
  • функция возвращает строку html с графиком и суммой элементов массива
  • гистограмма использована вместо точек графики из-за того, что эти символы «прилипают» друг к другу, использование «звездочек» дает некрасивую картинку
  • никакой защиты от некорректных данных в функции нет — можно при желании доработать

 

ВАЖНО: если WordPress что-то испортил в коде на этой странице — пишите через обратную связь (или site_post@bk.ru), вышлю файл PHP.

Можно, например, использовать для визуализации результатов логов по месяцам

Используем PHP и псевдографику для простой гистограммы

Как собрать информацию из лога по месяцам — читаем статью ниже

Алгоритм суммы одинаковых элементов массива

Вырезаем первые 7 символов из лога (как раз год-месяц) и считаем элементы по изменению этого поля. Никаких сложных формул по работе с датами.

 


В Debian 11 нет команды iptables

При вводе команды iptables получаем “command not found”. Это  как?

В Debian 11 нет команды iptables

А вот так :)

По умолчанию теперь есть nftables. Включена в ядро Linux, начиная с версии 3.13, выпущенной 19 января 2014 года. Является заменой четырех команд:

  • iptables
  • ip6tables
  • arptables
  • ebtables

Базовых отличий два:

  • в одной команде объедена работа с протоколами IPv4 и IPv6
  • теперь нет изначально созданных таблиц — нужно создавать самостоятельно

Таблицы могут быть одного из 6-ти семейств (families):
ip — для обработки пакетов IPv4
ip6 — IPv6
inet — обрабатывает сразу и IPv4 и IPv6 (чтобы не дублировать одинаковые правила)
arp — пакеты протокола ARP
bridge — пакеты, проходящие через мост
netdev — для обработки «сырых» данных, поступающих из сетевого интерфейса (или передающихся в него)

Цепочки получают на вход пакеты из хуков (цветные прямоугольники на картинке). Для ip/ip6/inet предусмотрены хуки prerouting, input, forward, output и postrouting.

В Debian 11 нет команды iptables

 

Прочитать про netfilter и fail2ban можно ниже

Установка fail2ban на Linux

Синтаксис nft более схож с реальной грамматикой языка.

Команда для добавления правила блокирования пакетов, направленных на адрес 1.2.3.4:

nft add rule ip filter output ip addr 1.2.3.4 drop

Синтаксис такого же действия для iptables:

iptables -t filter -A OUTPUT -j DROP -d 1.2.3.4

Для обеспечения обратной совместимости предоставляется специальная прослойка, позволяющая использовать iptables/ip6tables поверх инфраструктуры nftables.

Для облегчения перехода можно конвертировать правила iptables в nftables с помощью утилит iptables-translate, iptables-restore-translate, iptables-nft-restore и т.п. Утилиты находятся в пакете iptables, который нужно установить дополнительно.

Две полезные статьи по использованию команды nft

Как пользоваться NFT

Переход с iptables на nftables

 


Использование тройного === в программировании (PHP)

Любопытный пример.

Использование тройного === в программировании (PHP)

Программисты знают, что есть несколько вариантов «равно»:

  • присваивание $a = 10
  • сравнение if ($a == $b) {……..}
  • тождественное сравнение if ($a === $b) {……..}

Если с первыми двумя вариантами достаточно понятно, то третий вариант вызывает вопросы. 

Тождественно равно — должны совпадать не только значения, но и типы переменных. Основные типы в PHP:

  • число $a = 10;
  • строка $b = ’10’; // кавычки показывают, что внутри строка
  • логическая переменная $c = FALSE;

И например, условие $a == $b будет верным, т.к. сравниваются значения и интерпретатор PHP «понимает», что это десять.

А вот условие $a === $b будет ложным, т.к. дополнительно сравниваются и типы переменных —  число и строка.

На уровне определений понятно. Зачем это нужно в реальном программировании?

В PHP есть функция поиска подстроки в строке

$pos = strpos(‘abcdef’, ‘a’);

Функция возвращает позицию найденной подстроки, в данном случае 0 (поиск идет слева направо, позиции считаются от нуля). Если ничего не найдено — возвращается логическое значение FALSE.

И все бы было просто и  хорошо, но интерпретатор PHP может воспринимать 0 — как логическое FALSE

<?php
if (!$pos) { // условие в скобках истина
   echo 'ничего не найдено';
}
// так не правильно
?>

Ноль признается логической переменной (т.к. он находится в условии), инвертируется и получается TRUE. PHP помогает программисту. Можно использовать числа 0 и 1 в качестве логических переменных (если они в условии или сравнении).

Хотя просто это нулевая позиция, которая была найдена.

Вот тут нам и пригодится тройное равно

<?php
if ($pos === FALSE) { // переменная тождественно равна FALSE
   echo 'ничего не найдено'; 
} else {
   echo 'позиция символа '.$pos;
}
?>

Использование конструкции === позволяет избежать ошибок.

P.S.

В настоящее время лучше использовать функцию mb_strrpos() — она корректно работает с юникодом и многобайтовыми строками (наша кириллица и другие языки).

Функции для работы с многобайтовыми строками


Переадресация с https на http

Зачем это нужно?

Переадресация с https на http

Есть несколько причин:

  •  у нас сайт в разработке, пока работает на http, но поисковые боты проверяют и протокол https (и делают заглушку основным «зеркалом»…)
  • у нас сайт в процессе переезда на другой сервер, а сертификат SSL может выпускаться от 10 мин до 1 часа (если проверка по DNS) — а в поиске все страницы сайта выдаются в виде https://site.ru

Нужно как-то и поисковым машинам сказать, что это временно.

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

Основная статья по перевода на HTTPS

Как включить HTTPS на сайте?

ВАЖНО: браузер проводит проверку наличия SSL-сертификата раньше (при запросе https), чем срабатывает редирект. Если у Вас нет активного SSL-сертификата (а его пока нет) — посетители сайта в любом случае увидят предупреждение браузера о незащищённом контенте раньше, чем сработает редирект.

Вариантов несколько.

У хостера настроена (на уровне Nginx) заглушка при запросе HTTPS

Очевидно, что запросы до файла .htaccess (Apache) не дойдут. Делаем переадресацию прямо в самом файле-заглушке html вида

<!DOCTYPE html>
<html>
<head>
<title>Сайт на реконструкции</title>
<meta http-equiv="refresh" content="0;URL=http://site.ru" />
<meta name="robots" content="noindex,nofollow">
</head>
<body>
<p>Скоро здесь будет сайт</p>
</body>
</html>

Делаем переадресацию (с нулевой задержкой) на протокол http и запрещаем его роботам индексировать. Если в Nginx всё настроено правильно, то и роботы получат код 302 Moved Temporarily («перемещено временно»).

Нам как раз это и нужно.

Переадресация с https на http

Код 301 Moved Permanently («перемещено навсегда») — ни нам, ни роботам не нужен.

Переадресация https->http средствами Apache

Если запрос https доходит до папки сайта — то можно использовать .htaccess

RewriteEngine On
RewriteCond %{SERVER_PORT} ^443$ [OR]
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ http://site.ru/$1 [R=302,L]

или

RewriteEngine On
RewriteCond %{ENV:HTTPS} =on
RewriteRule ^(.*)$ http://site.ru/$1 [R=302,L]

или без указания имени домена

RewriteEngine On 
RewriteCond %{ENV:HTTPS} =on 
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=302,L]

В всех случаях отдаем роботам ошибку 302!

Переадресация всех страниц сайта на главную страницу

У нас же только заглушка есть, остальных станиц пока нет.

Нам не нужен 404 код при переходе с поиска…

Используем конструкцию

RewriteEngine On
RewriteBase /
RewriteRule ^(.*)$ index.php [L,QSA]

Пусть пока посетители сайта видят основную заглушку index.php

 

 


Что выбрать HDD или SSD у хостера?

Простой вопрос HDD vs SSD

Что выбрать HDD или SSD у хостера?

Казалось бы — что тут выбирать?

Каждый, кто менял в своей Windows 7 на старом ПК диск HDD на SSD = радовался увеличению быстродействия системы.

SSD — быстрее:

  • нет механических систем
  • да и электроны быстрее по микросхемам бегают

Но у хостера — не домашний ПК, там сервер. И диски не по отдельности, а соединены в RAID-массив.

Некоторые хостеры предлагаю очень простой выбор

Что выбрать HDD или SSD у хостера?

У некоторых выбор посложнее: SAS или SSD

Что выбрать HDD или SSD у хостера?

А что такое SAS HDD?

Вот тут вся разница:

  • SAS HDD — это серверные диски, которые работают по протоколу SAS (дуплекс — умеют писать и читать одновременно)
  • SATA SSD — это диски, которые работают по протоколу SATA (полудуплекс — читают и пишут по очереди — как в рации «прием/передача» для примера)

Читаем статью

Интерфейсы SAS и SATA

Что выбрать HDD или SSD у хостера?

При увеличении числа дисков в массиве RAID:

  • физическая сущность диска нивелируется
  • фактическая скорость обмена начинает ограничиваться протоколом

В результате скорость обмена данными в массиве у SAS HDD может быть выше, чем у SATA SSD. Чистый маркетинг — все хотят SSD и на спрос есть предложение.

И конечно, всё еще зависит от:

  • какая версия протокола у дисков
  • в какой RAID собраны диски

Т.е. если Вам нужен сервер VDS/VPS для хостинга сайта — выбирайте SAS HDD. Это будет немного быстрее и немного дешевле варианта SATA SSD.

А если Вам надо быстро и дорого — берите NVMe — это твердотельная память с протоколом PCIe (быстрый и многопоточный).


X

    Please prove you are human by selecting the Plane.