Http dolgmo cramac ru php base php exit

Cramac.Blog

Собственно процесс установки extfilter довольно прост.
Дано:
ПК (как оказалось есть нюансы):
CPU AMD Ryzen 7
16gb RAM
LAN Intel i350-t2
Требования у меня оказались минимальны, трафика у нас не много, в итоге главное:

  • сетевая на intel с очередями > 3 (на i350 говорят очень не плохо работает) с минимум 2 портами (на вход и для отправки)
  • любая сетевая для менеджмента (у меня встроенная в мать)
  • CPU с поддержкой SSE

Все это дело собиралось на CentOS 7
Linux filter 3.10.0-862.14.4.el7.x86_64 #1 SMP Wed Sep 26 15:12:11 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

Итак, установка:
обновим систему до актуальной
yum update
yum upgrade

необходимые компоненты
yum install epel-release
yum install python-pyelftools
yum install git mc htop wget gcc make automake kernel-devel zip unzip
yum install net-tools (ifconfiga иначе нет)
yum groupinstall ‘Development Tools’
yum install libpcap-devel

cd /usr/src/
git clone https://github.com/max197616/extfilter.git
wget http://fast.dpdk.org/rel/dpdk-17.05.1.tar.xz
wget https://pocoproject.org/releases/poco-1.9.0/poco-1.9.0-all.tar.gz

Распаковываем и устанавливаем POCO
tar xf poco-1.9.0-all.tar.gz
cd /poco-1.9.0
./configure
make
make install
cd ../

распаковываем DPDK
tar xf dpdk-17.05.1.tar.xz
cd /dpdk-stable-17.05.1
make config T=x86_64-native-linuxapp-gcc
sed -ri ‘s,(PMD_PCAP=).*,\1y,’ build/.config
make
make install
mkdir -p /mnt/huge
mount -t hugetlbfs nodev /mnt/huge
cp /usr/src/dpdk-stable-17.05.1/build/kmod/igb_uio.ko /lib/modules/`uname -r`/kernel/net
depmod -a
cd ../

Собираем сам extfilter

cd /extfilter
./autogen.sh
./configure —with-dpdk_target=build —with-dpdk_home=/usr/src/dpdk-stable-17.05.1 —enable-native-code
make
make install

Теперь нам надо настроить загрузку ядра
Если у Вас не UEFI, то это можно сделать так:

Создаем в каталоге /usr/lib/tuned папку dpdk-tune
Создаем в dpdk-tune файл tuned.conf:

[bootloader]
cmdline=isolcpus=1,2,3 default_hugepagesz=1G hugepagesz=1G hugepages=4
применяем настройки
tuned-adm profile dpdk-tune

Если у Вас UEFI и в момент прочтения вышеизложенный вариант еще не исправили, а проверить с какими параметрами грузится ядро можно так
cat /proc/cmdline

Идем таким путем:
в /etc/default/grub
в строке GRUB_CMDLINE_LINUX после всего дописываем
isolcpus=1,2,3 default_hugepagesz=1G hugepagesz=1G hugepages=8

делаем
grub2-mkconfig -o /etc/grub2-efi.cfg
и перезагружаемся.

Проверяем что все как положено:
[root@filter ~]# cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-3.10.0-862.14.4.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet iommu=amd iommu=soft isolcpus=1,2,3 default_hugepagesz=1G hugepagesz=1G hugepages=8
[root@filter ~]# grep Huge /proc/meminfo
AnonHugePages: 6144 kB
HugePages_Total: 8
HugePages_Free: 8
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 1048576 kB

Читайте также:  Java jdbc connection null

Теперь запускаем
Смотрим сетевые командой
/usr/src/dpdk-stable-17.05.1/usertools/dpdk-devbind.py —status

нас интересует этот раздел:
Network devices using kernel driver
===================================
0000:21:00.0 ‘RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller 8168’ if=enp33s0 drv=r8169 unused= *Active*
0000:22:00.0 ‘I350 Gigabit Network Connection 1521’ if=enp34s0f0 drv=igb unused=
0000:22:00.1 ‘I350 Gigabit Network Connection 1521’ if=enp34s0f1 drv=igb unused=

загружаем нужные
modprobe uio
modprobe igb_uio

добавляем в дпдк сетевые
/usr/src/dpdk-stable-17.05.1/usertools/dpdk-devbind.py —bind=igb_uio 0000:22:00.1
/usr/src/dpdk-stable-17.05.1/usertools/dpdk-devbind.py —bind=igb_uio 0000:22:00.0

/usr/local/bin/extFilter —config-file=/usr/src/extfilter/etc/extfilter.ini —pidfile=/var/run/extfilter.pid

конфиг с чем испытывал и запускалось

Если повезло, все запустится, если нет, вылетит с ошибкой.

Если в логах messages Вы увидите такое:

Oct 13 13:38:25 filter kernel: AMD-Vi: Event logged [IO_PAGE_FAULT device=22:00.0 domain=0x000d address=0x00000003fc107e80 flags=0x0000]
Oct 13 13:38:30 filter kernel: AMD-Vi: Event logged [IO_PAGE_FAULT device=22:00.1 domain=0x000d address=0x00000003fc08c300 flags=0x0000]
Oct 13 13:38:30 filter kernel: AMD-Vi: Event logged [IO_PAGE_FAULT device=22:00.1 domain=0x000d address=0x00000003fc0aee00 flags=0x0000]
Oct 13 13:38:30 filter kernel: AMD-Vi: Event logged [IO_PAGE_FAULT device=22:00.1 domain=0x000d address=0x00000003fc069800 flags=0x0000]

а фильтр запустившись, все пакеты попадают в missed
в настройки grub необходимо еще такое добавить:
iommu=amd iommu=soft

перезагрузившись, все должно пойти как положено.

Сайт фильтра
https://github.com/max197616/extfilter

apache и fail2ban

Появилась надобность банить всех кто делает POST запросы и получает в ответ 404 ошибку на сервере под управлением ispmanager

создаем файл apache-404.conf в filter.d
и добавляем содержимое

[Definition]
failregex = (?P 2\.7\.6\.7) .+ 404 1+
ignoreregex = .*(robots.txt|favicon.ico|jpg|png|html)

enabled = true
port = http,https
filter = apache-404
logpath = /var/www/*/data/logs/*access.log
bantime = 2592000
findtime = 600
maxretry = 2

перезагружаем сервис fail2ban

Источник

PHP exit

Summary: in this tutorial, you will learn how to use the PHP exit construct to terminate a script immediately.

Introduction to the PHP exit construct

The exit construct ouputs a message and immediately terminates the execution of the current script.

Here’s the syntax of the exit construct:

exit ( string $status = ? ) : voidCode language: PHP (php)

If you use the $status as a string, the exit will output the $status before terminating the script.

However, if you use the $status as an integer:

exit ( int $status ) : voidCode language: PHP (php)

The exit will use the $status as the exit status and won’t output the value. The valid range for the $status is from 0 to 255. PHP reserves the status 255. And the status 0 indicates that the script is terminated successfully.

Читайте также:  Mail php отправляет только одно

Note that exit is not a function, but a language construct like if. else , foreach, etc. Therefore, you cannot call it using a variable function.

The exit is functionally equivalent to die .

PHP exit examples

Let’s take some examples of using the exit construct.

1) Simple PHP exit example

The following example uses the exit to terminate the script if the file readme.txt doesn’t exist:

 $filename = 'readme.txt'; $f = fopen($filename, 'r'); if (!$f) < exit('File ' . $filename . 'does not exist.'); > // process the fie // . // close the file fclose($f);Code language: HTML, XML (xml)

2) Using exit in try…catch…finally statement example

The following example uses the exit construct in the try clause. In this case, the exit doesn’t terminate the script immediately. Instead, the catch block executes to handle the exception and then the finally block executes:

 try < echo 'Execute the try block. ', PHP_EOL; throw new Exception('An error occurs'); exit(1); > catch (\Throwable $e) < echo $e->getMessage() , PHP_EOL; > finally < echo 'Execute the finally block'; >Code language: HTML, XML (xml)
Execute the try block An error occurs Execute the finally blockCode language: JavaScript (javascript)

3) Using PHP exit in a function example

The following example defines a function that has an exit construct:

 function shutdown() < echo 'Shutting down. '; exit; > shutdown(); // doesn't run echo 'After shutting down. ';Code language: PHP (php)

In this example, the last statement doesn’t execute because the exit terminates the script when the shutdown() function completed.

4) Using PHP exit with header() function

The header() function sends a raw HTTP header. Typically, you use it to redirect the brower to a new URL:

header('Location: https://ww.phptutorial.net');Code language: JavaScript (javascript)

The header() function must be called before any actual output is sent. In other words, after calling the header() function, the script must not send any output. Therefore, the exit is usually used with the header() function like this:

 header("Location: https://www.phptutorial.net/"); exit; ?>Code language: HTML, XML (xml)

Summary

  • The exit construct outputs a message and terminates the script immediately.
  • The exit won’t terminate the script immediately if it is used in a try block. The catch block will execute if an exception occurs, and the finally block will always execute.
  • Use exit with header() to prevent PHP from sending output when the header was already sent.

Источник

exit

Прекращает выполнение скрипта. Функции отключения и деструкторы объекта будут запущены, даже если была вызвана конструкция exit .

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

Список параметров

Если status задан в виде строки, то эта функция выведет содержимое status перед выходом.

Если status задан в виде целого числа ( int ), то это значение будет использовано как статус выхода и не будет выведено. Статусы выхода должны быть в диапазоне от 0 до 254, статус выхода 255 зарезервирован PHP и не должен использоваться. Статус выхода 0 используется для успешного завершения программы.

Возвращаемые значения

Эта функция не возвращает значения после выполнения.

Примеры

Пример #1 Пример использования exit

$filename = ‘/path/to/data-file’ ;
$file = fopen ( $filename , ‘r’ )
or exit( «Невозможно открыть файл ( $filename )» );

Пример #2 Пример использования exit со статусом выхода

//обычный выход из программы
exit;
exit();
exit( 0 );

//выход с кодом ошибки
exit( 1 );
exit( 0376 ); //восьмеричный

Пример #3 Функции выключения и деструкторы выполняются независимо

class Foo
public function __destruct ()
echo ‘Деинициализировать: ‘ . __METHOD__ . ‘()’ . PHP_EOL ;
>
>

function shutdown ()
echo ‘Завершить: ‘ . __FUNCTION__ . ‘()’ . PHP_EOL ;
>

$foo = new Foo ();
register_shutdown_function ( ‘shutdown’ );

exit();
echo ‘Эта строка не будет выведена.’ ;
?>

Результат выполнения данного примера:

Завершить: shutdown() Деинициализировать: Foo::__destruct()

Примечания

Замечание: Поскольку это языковая конструкция, а не функция, она не может вызываться при помощи переменных функций.

Замечание:

Эта языковая конструкция эквивалентна функции die() , однако в отличие от неё соединение не объявляется закрытым.

Смотрите также

Источник

Оцените статью