Пользователи, которые впервые приобрели роутер, часто не могут разобраться, как подключить его к компьютеру и как начать с ним работать. Данная статья должна помочь именно в такой ситуации. Здесь вы узнаете, как подключить роутер ZyXEL Keenetic к компьютеру и как зайти в его настройки. Статья будет актуальной для любого роутера ZyXEL, включая ZyXEL Keenetic Omni 2, Giga 2 и Lite 2. Читать
Химический состав масла | Масло чайного дерева — сильнейший антисептик
Химический состав масла
По своему химическому составу масло чайного дерева может претендовать на первенство среди остальных эфирных масел. Кроме того, что в нем содержится, как минимум 48 полезных органических компонентов (монотерпены (до 50 %), дитерпены (до 40 %) и цинеол (до 15%)), в состав масла чайного дерева входят несколько соединений, которые в природе практически не встречаются: виридифлорен (до 1 %), В-терпинеол (0,24%), L-тернинеол (следы) и аллигексаноат (следы).
Качество масла определяется по количеству содержащегося в нем терпинен-4-ола, его процентное соотношение должно быть не менее 30% от общего количества, а вот цинеола должен быть не более 15%, иначе это вызовет раздражение кожи.
Лечебные свойства:
Масло чайного дерева очень сильный антисептик (в 8 раз сильнее карболовой кислоты и в 12 раз сильнее фенола), также обладает явно выраженным бактерицидным, противогрибковым, противовирусным и иммуностимулирующим действием.
Масло чайного дерева успешно применяется в борьбе с такими патогенными микроорганизмами как: Staphylococcus (более шести видов включая aureus, erider-midis, pneumoniae, faecalis и др.) Propionibacterium acnes, Beta haemolytic streptococcus, Klebsiella pheuraoniac, Citrobacter spp., Shigella sonnei, Proteus mirabolis, Legioneila spp., Pseudomonas aeriginosa, Candida albicans и др. Уничтожая эти бактерии и грибки, масло чайного дерева при этом усиливает иммунную систему организма.
Эфир чайного дерева также обладает успокоительным и отхаркивающим свойством, его широко применяют при простудных заболеваниях, оно способствует очищению дыхательных путей от слизи и значительно облегчает состояние больного.
При различных кожных заболеваниях, ранах, порезах, повреждениях кожи (ожоги, укусы, занозы, бородавки) также применяют масло чайного дерева. Оно прекрасно снимает боль, дезинфицирует место поражения и способствует заживлению, особенно гнойных ран. Даже при поражении кожи паразитами (вши, чесоточный клещ) применение масла чайного дерева дает хороший эффект.
Применение масла чайного дерева
Масло чайного дерева применяют исключительно в качестве наружного средства, внутрь его прием не рекомендован.
Перед первым применением масла необходимо провести тест-пробу, нанести немного масла на тыльную сторону запястья и подождать один час, если раздражения не возникло, можно его использовать, при этом возникающее легкое жжение и покраснение кожи считается нормальной реакцией. Как правило, масло чайного дерева не раздражает кожу, это исключительные случаи, когда имеется индивидуальная непереносимость этого препарата.
Масло чайного дерева применяют при всех видах заболеваний дыхательной системы (простудах, ОРЗ, ОРВИ, ларингиты, тонзиллиты), для лечения гинекологических заболеваний (молочнице, воспалениях). При различных заболеваниях полости рта (гингивите, пародонтозе), при зубной боли.
Масло чайного дерева добавляют во все виды косметических средств: кремы, лосьоны, шампуни, гели, спреи, эмульсии. Оно эффективно борется с перхотью, устраняет косметические недостатки кожи (бородавки, мозоли, угревая сыпь), а также способствует заживлению любых раневых и паразитарных очагов на коже.
Хороший эффект оказывает масло чайного дерева и на психику человека, успокаивает, снимает напряжение, тревожность, улучшает работоспособность, способствует концентрации внимания.
Если болит живот | Признаки беременности: как не принять желаемое за действительное
Болит живот — признак беременности?
Живот у будущих мам может болеть на любом сроке беременности и это всегда вызывает у них определенные опасения. Повод для этого есть, однако в большинстве случаев боли не являются сигналом о сбоях работы организма или нарушениях беременности.
В первом триместре почти у всех женщин болит живот во время имплантации плодного яйца. В это же время начинается легкое вагинальное кровотечение, которое часто принимают за начало месячных, однако на самом деле оно означает, что произошло внедрение плодного яйца в стенки матки. Боль, как и кровотечение, очень быстро проходит. Это является одним из самых ранних признаков беременности, на который, однако, редко обращают особенно внимание, поскольку подобные симптомы наблюдаются у женщин каждый месяц.
Если живот болит во втором триместре, это может быть более тревожным признаком. Вероятность выкидыша довольно высока, и в случае сильных болей, сохраняющихся на протяжении нескольких часов, позвоните своему врачу. Если боль сопровождается вагинальным кровотечением, вам нужна экстренная медицинская помощь. Боль в животе также может симптомом опухоли. В этом случае обычно присутствуют и такие признаки, как головокружение, обмороки или повышенная температура тела. Слабые и умеренные боли во время второго триместра, как правило, являются просто следствием растяжения мышц под давлением растущей матки.
В третьем триместре будущая мама ожидает родов и практически любую боль может принять за признак их приближения. На самом деле, кроме схваток, в это время женщина может ощущать тренировочные сватки; кроме того, живот может болеть от усиливающегося давления матки на внутренние органы.
Как шафран влияет на мозг человека?
Известно, что воспалительный процесс представляет из себя попытку организма избавиться от патогенов, поврежденных клеток или раздражающих веществ, дабы инициировать процесс заживления.
Автор: Культура Процветания
Простая обрезка изображения с помощью cropper.js и PHP
Привет друзья. Сегодня мы хотим поделиться, как вы можете обрезать изображение с помощью простого скрипта cropper.js и PHP. Это простой JQuery плагин изображения кадрирования cropper.js. Cropper Js наследуется от размера родительского элемента изображения (wrapper), так что не забудьте обернуть изображение с видимым блочным элементом и вывод укороченных размеров исходного изображения, так что вы можете использовать их, чтобы обрезать изображение непосредственно.
Особенности списков:
- Поддерживает связь (мобильный)
- Поддерживает масштабирование
- Поддержка вращения
- Поддерживает масштабирование (листать)
- Поддержка нескольких croppers
- Поддерживает обрезку на холсте
- Поддерживает обрезку изображения в холсте браузера
- Поддержка для преобразования информации Exif
- Поддержка кросс-браузерности
Зависимости сервера
— PHP 5.5+
Поддержка браузеров
- — Chrome (последняя 2)
- — Firefox (последняя 2)
- — Internet Explorer 8+
- — Opera (последние 2)
- — Safari (последние 2)
Включите JS файлы:
<script src="/путь_к/jquery.js"></script><!-- требуется jQuery --> <link href="/путь_к/cropper.css" rel="stylesheet"> <script src="/путь_к/cropper.js"></script>
PHP код в файл ‘crop.php’, чтобы обрезать изображение
<?php
class CropAvatar {
private $src;
private $data;
private $dst;
private $type;
private $extension;
private $msg;
function __construct($src, $data, $file) {
$this -> setSrc($src);
$this -> setData($data);
$this -> setFile($file);
$this -> crop($this -> src, $this -> dst, $this -> data);
}
private function setSrc($src) {
if (!empty($src)) {
$type = exif_imagetype($src);
if ($type) {
$this -> src = $src;
$this -> type = $type;
$this -> extension = image_type_to_extension($type);
$this -> setDst();
}
}
}
private function setData($data) {
if (!empty($data)) {
$this -> data = json_decode(stripslashes($data));
}
}
private function setFile($file) {
$errorCode = $file['error'];
if ($errorCode === UPLOAD_ERR_OK) {
$type = exif_imagetype($file['tmp_name']);
if ($type) {
$extension = image_type_to_extension($type);
$src = 'img/' . date('YmdHis') . '.original' . $extension;
if ($type == IMAGETYPE_GIF || $type == IMAGETYPE_JPEG || $type == IMAGETYPE_PNG) {
if (file_exists($src)) {
unlink($src);
}
$result = move_uploaded_file($file['tmp_name'], $src);
if ($result) {
$this -> src = $src;
$this -> type = $type;
$this -> extension = $extension;
$this -> setDst();
} else {
$this -> msg = 'Ошибка сохранения файла';
}
} else {
$this -> msg = 'Пожалуйста, загрузите изображения следующих типов: JPG, PNG, GIF';
}
} else {
$this -> msg = 'Пожалуйста, загрузите файл изображения';
}
} else {
$this -> msg = $this -> codeToMessage($errorCode);
}
}
private function setDst() {
$this -> dst = 'img/' . date('YmdHis') . '.png';
}
private function crop($src, $dst, $data) {
if (!empty($src) && !empty($dst) && !empty($data)) {
switch ($this -> type) {
case IMAGETYPE_GIF:
$src_img = imagecreatefromgif($src);
break;
case IMAGETYPE_JPEG:
$src_img = imagecreatefromjpeg($src);
break;
case IMAGETYPE_PNG:
$src_img = imagecreatefrompng($src);
break;
}
if (!$src_img) {
$this -> msg = "Не удалось прочитать файл изображения";
return;
}
$size = getimagesize($src);
$size_w = $size[0]; // натуральная ширина
$size_h = $size[1]; // натуральная высота
$src_img_w = $size_w;
$src_img_h = $size_h;
$degrees = $data -> rotate;
// Повернуть исходное изображение
if (is_numeric($degrees) && $degrees != 0) {
// Градусов в PHP противоположно градусов по CSS
$new_img = imagerotate( $src_img, -$degrees, imagecolorallocatealpha($src_img, 0, 0, 0, 127) );
imagedestroy($src_img);
$src_img = $new_img;
$deg = abs($degrees) % 180;
$arc = ($deg > 90 ? (180 - $deg) : $deg) * M_PI / 180;
$src_img_w = $size_w * cos($arc) + $size_h * sin($arc);
$src_img_h = $size_w * sin($arc) + $size_h * cos($arc);
// Исправить поворачивая изображения на 1px, когда градусов < 0
$src_img_w -= 1;
$src_img_h -= 1;
}
$tmp_img_w = $data -> width;
$tmp_img_h = $data -> height;
$dst_img_w = 220;
$dst_img_h = 220;
$src_x = $data -> x;
$src_y = $data -> y;
if ($src_x <= -$tmp_img_w || $src_x > $src_img_w) {
$src_x = $src_w = $dst_x = $dst_w = 0;
} else if ($src_x <= 0) {
$dst_x = -$src_x;
$src_x = 0;
$src_w = $dst_w = min($src_img_w, $tmp_img_w + $src_x);
} else if ($src_x <= $src_img_w) {
$dst_x = 0;
$src_w = $dst_w = min($tmp_img_w, $src_img_w - $src_x);
}
if ($src_w <= 0 || $src_y <= -$tmp_img_h || $src_y > $src_img_h) {
$src_y = $src_h = $dst_y = $dst_h = 0;
} else if ($src_y <= 0) {
$dst_y = -$src_y;
$src_y = 0;
$src_h = $dst_h = min($src_img_h, $tmp_img_h + $src_y);
} else if ($src_y <= $src_img_h) {
$dst_y = 0;
$src_h = $dst_h = min($tmp_img_h, $src_img_h - $src_y);
}
// Масштаб конечная позиция и размер
$ratio = $tmp_img_w / $dst_img_w;
$dst_x /= $ratio;
$dst_y /= $ratio;
$dst_w /= $ratio;
$dst_h /= $ratio;
$dst_img = imagecreatetruecolor($dst_img_w, $dst_img_h);
// Добавить прозрачный фон в целевом изображении
imagefill($dst_img, 0, 0, imagecolorallocatealpha($dst_img, 0, 0, 0, 127));
imagesavealpha($dst_img, true);
$result = imagecopyresampled($dst_img, $src_img, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h);
if ($result) {
if (!imagepng($dst_img, $dst)) {
$this -> msg = "Не удалось сохранить обрезанный файл изображения";
}
} else {
$this -> msg = "Не удалось обрезать файл изображения";
}
imagedestroy($src_img);
imagedestroy($dst_img);
}
}
private function codeToMessage($code) {
$errors = array(
UPLOAD_ERR_INI_SIZE =>'Загруженный файл превышает директиву upload_max_filesize в php.ini',
UPLOAD_ERR_FORM_SIZE =>'Загруженный файл превышает размер max_file_size, указанного в HTML-форме',
UPLOAD_ERR_PARTIAL =>'Загружаемый файл был загружен лишь частично',
UPLOAD_ERR_NO_FILE =>'Файл не был загружен',
UPLOAD_ERR_NO_TMP_DIR =>'Отсутствует временная папка',
UPLOAD_ERR_CANT_WRITE =>'Не удалось записать файл на диск',
UPLOAD_ERR_EXTENSION =>'Ошибка загрузки файла из-за расширения',
);
if (array_key_exists($code, $errors)) {
return $errors[$code];
}
return 'Неизвестная ошибка загрузки';
}
public function getResult() {
return !empty($this -> data) ? $this -> dst : $this -> src;
}
public function getMsg() {
return $this -> msg;
}
}
$crop = new CropAvatar(
isset($_POST['avatar_src']) ? $_POST['avatar_src'] : null,
isset($_POST['avatar_data']) ? $_POST['avatar_data'] : null,
isset($_FILES['avatar_file']) ? $_FILES['avatar_file'] : null
);
$response = array(
'state' => 200,
'message' => $crop -> getMsg(),
'result' => $crop -> getResult()
);
echo json_encode($response);
HTML код
<!-- Обрезка -->
<div class="modal fade" id="avatar-modal" aria-hidden="true" aria-labelledby="avatar-modal-label" role="dialog" tabindex="-1">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<form class="avatar-form" action="crop.php" enctype="multipart/form-data" method="post">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title" id="avatar-modal-label">Изменить аватар</h4>
</div>
<div class="modal-body">
<div class="avatar-body">
<!-- Загрузка изображения и данных -->
<div class="avatar-upload">
<input type="hidden" class="avatar-src" name="avatar_src">
<input type="hidden" class="avatar-data" name="avatar_data">
<label for="avatarInput">Локальная загрузка</label>
<input type="file" class="avatar-input" id="avatarInput" name="avatar_file">
</div>
<!-- Кадрирование и просмотр -->
<div class="row">
<div class="col-md-9">
<div class="avatar-wrapper"></div>
</div>
<div class="col-md-3">
<div class="avatar-preview preview-lg"></div>
<div class="avatar-preview preview-md"></div>
<div class="avatar-preview preview-sm"></div>
</div>
</div>
<div class="row avatar-btns">
<div class="col-md-9">
<div class="btn-group">
<button type="button" class="btn btn-primary" data-method="rotate" data-option="-90" title="Rotate -90 degrees">Поворот налево</button>
<button type="button" class="btn btn-primary" data-method="rotate" data-option="-15">-15 град</button>
<button type="button" class="btn btn-primary" data-method="rotate" data-option="-30">-30 град</button>
<button type="button" class="btn btn-primary" data-method="rotate" data-option="-45">-45 град</button>
</div>
<div class="btn-group">
<button type="button" class="btn btn-primary" data-method="rotate" data-option="90" title="Rotate 90 degrees">Поворот направо</button>
<button type="button" class="btn btn-primary" data-method="rotate" data-option="15">15 град</button>
<button type="button" class="btn btn-primary" data-method="rotate" data-option="30">30 град</button>
<button type="button" class="btn btn-primary" data-method="rotate" data-option="45">45 град</button>
</div>
</div>
<div class="col-md-3">
<button type="submit" class="btn btn-primary btn-block avatar-save">Готово</button>
</div>
</div>
</div>
</div>
</form>
</div>
</div>
</div><!-- /.modal -->
Что сделать, если я получил неизвестную ошибку загрузки?
Вы можете загрузить огромное изображение, просто настроить upload_max_filesize, post_max_size и memory_limit в вашем файле php.ini. Или проверьте ** php_error.log ** файл, чтобы выяснить проблему.
Как создать пользовательский мета-бокс в WordPress
В этом посте я объясню, как создать пользовательский мета-бокс в WordPress. Когда вы редактирует свой пост, страница состоит из множества мета-боксов по умолчанию, такие как: редактор, изображение записи, опубликовать, рубрики, теги и т.д. Эти мета-боксы находятся на правой стороне экрана редактирования.
Вы можете создавать свои собственные мета-боксы, путем добавления нескольких кодов в файл function.php вашей темы в WordPress или можете создать отдельный плагин для этого. Ниже примеры демонстрируют шаги, как создать пользовательские мета-боксы.
Как создать мета-бокс
Добавьте ниже крюк в add_meta_boxes действие и сделать вызов add_meta_box().
/* Добавить метабокс на экран редактирования поста */
add_action( 'add_meta_boxes', 'andreyex_add_custom_box' );
function andreyex_add_custom_box() {
$screens = array( 'post', 'my_cpt' );
foreach ( $screens as $screen ) {
add_meta_box(
'andreyex_box_id', // Unique ID
'Пользовательский заголовок метабокса', // Заголовок мета-бокса
'andreyex_inner_custom_box', // Content callback
$screen // тип поста
);
}
}
Создание формы мета-бокса
Ниже код будет создать форму для пользовательского meta box. Пожалуйста, измените приведенный ниже код согласно вашему требованию.
/* Печать содержимого бокса */
function andreyex_inner_custom_box( $post ) {
?>
<label for="andreyex_field"> Описание для этой области </label>
<select name="andreyex_field" id="andreyex_field" class="postbox">
<option value="">Выберите что-то…</option>
<option value="something">Что-то</option>
<option value="else">Иначе</option>
</select>
<?php
}
?>
Сохранение значений мета-полей
Добавьте код, приведенный ниже, чтобы сохранить данные формы в базе данных, соответствующих текущему посту.
add_action( 'save_post', 'andreyex_save_postdata' );
function andreyex_save_postdata( $post_id ) {
if ( array_key_exists('andreyex_field', $_POST ) ) {
update_post_meta( $post_id,
'_my_meta_value_key',
$_POST['andreyex_field']
);
}
}
Получение значений мета-полей
Отображение мета значения в боксе из базы данных на экране редактирования поста.
<?php $value = get_post_meta( $post->ID, '_my_meta_value_key', true ); ?>
<select name="andreyex_field" id="andreyex_field" class="postbox">
<option value="">Выберите что-то…</option>
<option value="something" <?php if ( 'something' == $value ) echo 'selected'; ?>>Что-то</option>
<option value="else" <?php if ( 'else' == $value ) echo 'selected'; ?>>Иначе</option>
</select>
Как удалить Meta Boxes
Если вы хотите удалить мета-бокс по умолчанию из экрана редактирования поста, используйте remove_meta_box() для этого.


