Избранное

Linux команды

16 марта 2016, 12:33

В данной статье будут команды для сервера Linux CentOS, что использую в жизни.

Поиск содержимого в файлах:

grep -r -n 'text' /path


Поиск файла:

find / -name "index.html"

Поиск файла в текущей папке:

find . -name "index.html"


Время и синхронизация, если надо:

date
ntpdate 3.centos.pool.ntp.org


Запуск Midnight Commander:

mc

Если нет, то команда для установки:

yum install mc


Утилита для скачивания файлов и сайтов:

wget -q https://URL
Пример с сайта djangoproject
wget -r -k -l 5 -p -E -nc -np https://docs.djangoproject.com/en/1.5/
-r - ходим по ссылкам (рекурсивное скачивание)
-k - преобразовываем ссылки к локальному виду
-p - скачивание ресурсов необходимых для отображения html-страницы (стили, картинки и т.д.)
-l - глубина скачивания, 0 - бесконечная вложенность ссылок
-nc - не перезаписывать существующие файлы
-np - не подниматься выше начального адреса при рекурсивной загрузке


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

curl -k https://URL


dig — просмотр DNS записей домена
Если не работает, то открыть файл на редактирование /etc/resolv.conf и вставить код:

search dsitelecom.com
nameserver 8.8.8.8 
nameserver 8.8.4.4


Список популярных команд

man     # читать руководство по всему
chmod   # изменить права к файлу или папке
chown   # изменить владельца и/или группу
top     # выводит список работающих в системе процессов
htop    # продвинутая top
ps -la  # Для получения основных сведений о процессах, запущенных текущем пользователем
ps -ela # Для всех пользователей 
ps -a   # Базовая информация для текущего пользователя
netcat  # позволяет передавать/принимать данные через TCP/UDP соединения
telnet  # это сетевой протокол, который используется для соединения удаленных компьютеров в сетях TCP/IP
telnet hostname port
sudo netstat -ntulp  # покажет все сервисы и прослушиваемые ими порты и ip адреса
nohup, kill
vi, mcedit # редакторы
watch
screen
df -h   # Смотреть свободное место на диске


P.S. Список команд будет расширяться по мере необходимости.

Решение ошибки: Starting httpd: (98)Address already in use

19 ноября 2015, 9:55

При попытке запуска Apache выдает ошибку:


Starting httpd: (98)Address already in use: make_sock: could not bind to address [::]:80
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down

При проверке ничего не выдает:

netstat -lnp | grep '0.0.0.0:80'

Решение ошибки:

killall -9 httpd
/etc/init.d/httpd start

Готово.

Советы по оптимизации PHP кода

6 октября 2015, 20:05

echo работает быстрее чем print

Заключайте строки в 'одинарные кавычки', когда в ней нет переменных

Используйте sprintf вместо переменных, заключенных в двойные кавычки. Это примерно в 10 раз быстрее

Передавайте в echo несколько параметров, вместо того, чтобы использовать конкатенацию строк

echo $a, 'text', $b, 'more text'; // множественные параметры, работает быстрее
echo $a . 'text' . $b . 'text'; //конкатенация

Не используйте вычисления числа элементов массива, длины строки и т. п., для определения последней итерации цикла в самом цикле. Установите максимальное значение для цикла for перед ним
Например:

for ($x=0; $x < count($array); $x), вызывает count() при каждой итерации, 
используйте $max=count($array); перед циклом.

Если довольно большой массив, то разница в производительности в 10 раз

Удаляйте свои переменные для освобождения памяти, тем более, если это большие массивы
Пример:

// так писать не стоит
$time = time();
$login = $_SESSION['login'];
$hash = md5($login . $time);

// если можно записать так
$hash = md5( $_SESSION['login'] . time() );

Избегайте магических методов, таких как __get, __set, __autoload

По возможности используйте require() вместо require_once()

Используйте полные пути в include(_once) и require(_once), уменьшая тем самым время на разрешение путей OS
Пример:

для путей лучше определить константы, используя $_SERVER['DOCUMENT_ROOT']

Определить время, когда скрипт был запущен, используйте

$_SERVER[’REQUEST_TIME’] вместо time()

Старайтесь использовать strncasecmp, strpbrk и stripos вместо регулярных выражений

str_replace быстрее, чем preg_replace, но strtr быстрее, чем str_replace

Лучше использовать конструкцию else if, чем несколько конструкцию if

Используйте модуль Apache mod_deflate

Закрывайте свои соединения с БД, когда закончите работать с ними

$row['id'] в семь раз быстрее, чем $row[id]

PHP-скрипты будут обрабатываться, как минимум, в 2-10 раз медленнее, чем статические HTML-страницы. Попробуйте использовать больше статических HTML-страниц и меньше скриптов

Ваши PHP-скрипты перекомпилируются каждый раз, если скрипты не кэшируются. Кэширование скриптов обычно увеличивает производительность на 25-100% за счёт удаления времени на компиляцию

mod_gzip — модуль Apache, который позволяет сжимать ваши данные на лету и может уменьшить объем передаваемых данных до 80%

Если в вашем коде есть функции, выполняющиеся очень долго, обдумайте их написание на C в виде расширения

PHP функции для преобразования символов и экранирование переменных

3 июня 2015, 13:15

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

Функция экранирования переменных

<?
function quote_smart($value,$link){
  // если magic_quotes_gpc включена - используем stripslashes
  if (get_magic_quotes_gpc()) {
    $value = stripslashes($value);
  }
  // экранируем
  $value = mysql_real_escape_string($value,$link);
  return $value;
}
?>



PHP функция htmlspecialchars — Преобразует специальные символы в HTML-сущности
Детально прочитать тут.
Пример:

<?php
$new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
echo $new; // &lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt;
?>



Данная простейшая функция поможет избежать чужеродных инъекций и сделать невозможным для инжекторов взлом базы данных.
Исходный код:

<?php
function protect($var)
{
  $var= mysql_real_escape_string(trim($var));
  return $var;
}
?>