LINUX.ORG.RU

Сообщения Novascriptum

 

HTTP_PROXY и php

Форум — General

Здравствуйте! Возникла необходимость глобально использовать прокси для всех внешних соединений из php. Php работает как модуль apache (есть также cli-режим, но он сейчас меньше интересует). Можно ли как-то глобально задать для php настройки прокси, чтобы он использовал их при всех внешних подключениях? Вроде file_get_contents и curl к внешним адресам. Пробовал задать переменные окружения http_proxy и https_proxy - конкретно php их не подхватывает в своих запросах. Есть ли какой-то иной способ?

 , ,

Novascriptum
()

npm: «no such file or directory»

Форум — Web-development

Всем привет! Начал изучать vue.js, пытаюсь создать проект через «vue create» и сразу словил ошибку: https://www.screencast.com/t/kmBzJfPso

Как я понимаю, какой-то пакет не может быть установлен по какой-то причине. Но, вроде ничего сверхъестественного я не устанавливаю, вот содержимое package.json:

{
  "name": "prj10",
  "version": "0.1.0",
  "private": true,
  "devDependencies": {
    "@vue/cli-plugin-babel": "~4.3.0",
    "@vue/cli-plugin-eslint": "~4.3.0",
    "@vue/cli-service": "~4.3.0"
  }
}

Пробовал без eslint - та же ерунда. Помогите, пожалуйста, разобраться. Тестирую в docker-контейнере на основе CentOS 7.7.1908

 ,

Novascriptum
()

Компоненты Laravel 7 & page title

Форум — Web-development

В blade Laravel 7 презентован новый синтаксис компонентов, когда внутри view стало возможным писать что-то вроде

<x-mycomponent param1="value" param2="value"/>

Всё круто, но возникает вопрос, на который нигде не могу найти ответ. А можно ли как-то изнутри компонента задать значение переменной в родительском view (в котором прописан тег компонента)? Ну то есть это то, что возможно делать с помощью @yield и @extends.

Поясню. Пусть, например, есть файл layout.blade.php:

<html>
<head>
   <title>@yield('title')</title>
</head>
<body>
    <x-mycomponent param1="value" param2="value"/>
</body>
</html>

И, собственно, шаблон подключаемого компонента:

@section('title', 'Заголовок страницы');

<div>
А здесь какой-то контент компонента
</div>

Я ожидаю, что title будет установлен компонентом, как если бы он наследовал layout через @extends. Но этого не происходит. Как-то можно сделать это с использованием нового синтаксиса компонентов Laravel 7? А то если нет, то это весьма существенное ограничение его использования.

 ,

Novascriptum
()

PHP: Imagick & pcntl_fork

Форум — Development

Всех приветствую! Пишу многопоточный скрипт на php, который анализирует изображения. Он создаёт ресурс изображения (в моём случае это Imagick), потом делится с помощью pcntl_fork(), потом вызывает на этом ресурсе какой-нибудь фильтр (например, despeckle). Так вот странно то, что если используется работа в один поток, то время применения фильтра около 0.14 сек, а на двух потоках - уже 1.14 (внутри каждого). На трёх уже больше 2.5 сек. Не могу понять, что происходит, за какие ресурсы между потоками может происходить конкуренция? Вроде у каждого процесса своя память (общей памяти между процессами в php нет, shmop не в счёт). Диск тоже не задействуется (изображение уже прочитано в память). Видеокарта простаивает. Какие-то взаимные блокировки?

Вот кусок кода для ориентировки:

$sketchFile = '/path/to/file.jpg';

$tmpMagick = new \Imagick();
$tmpMagick->setResolution(300, 300);
$tmpMagick->readImage($sketchFile);

$threads = 3;

$workerPids = array();

for($i = 1; $i < $threads; $i++){ 
    $pid = pcntl_fork();
    if($pid == -1){
        throw new \Exception('Couldn\'t fork()!');
    }elseif($pid > 0){
        //parent
        $workerPids[] = $pid;
    }else{
        //child
        break;
    }
}

$start = microtime(true);
$tmpMagick->despeckleImage();
$duration = round(microtime(true) - $start, 4);
fwrite(\STDERR, 'time: '.$duration.' sec'."\n");

Нелогичность применения одного и того же фильтра в разных потоках на ресурсе одного и того же изображения прошу не озвучивать. :) Это может быть оправдано при нескольких страницах изображений внутри одного Imagick, где каждый поток выполняет фильтр к своей странице. Просто случайно столкнулся вот с такими «тормозами» и не могу понять, откуда у них ноги растут. Буду признателен за любые предположения!

P.S.: физических ядер у меня шесть, если что. Это к тому, что не за процессор идёт конкуренция.

 ,

Novascriptum
()

Передать STDOUT параллельно на два процесса

Форум — General

Всем привет! Хочу, выстроить примерно такую команду:

php parent.php | ( php child.php & php child.php; )

При этом нужно, чтобы standard output, генерируемый parent.php, уходил в оба child.php (одинаковый). И чтобы эти child.php работали параллельно. Пробовал и фигурные скобки писать, и разные комбинации & и ;. Всегда сталкиваюсь с тем, что либо процессы child.php работают последовательно (один после другого), либо standart output из parent.php приходит только в один из них.

То, что я хочу, вообще возможно составить?

 ,

Novascriptum
()

Автозагрузка firewalld ломает DNS (CentOS 7)

Форум — General

Всем здравствуйте! Данный топик является логическим продолжением вот этого Проблема с DNS в docker-контейнере (комментарий), но так как проблему удалось локализовать и конкретизировать, решил оформить её отдельно. В общем, имеется CentOS 7 в докер-контейнере. После того, как добавляю firewalld в автозагрузку:

[root@docker /]# systemctl enable firewalld
Created symlink from /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service to /usr/lib/systemd/system/firewalld.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/firewalld.service to /usr/lib/systemd/system/firewalld.service.

...после ребута прекращает работать преобразование доменных имён в IP (DNS):

[root@docker /]# ping ya.ru
ping: ya.ru: Name or service not known

Стоит отключить автозагрузку и снова ребутнуться, как DNS начинают работать вновь:

[root@docker /]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

[root@docker /]# reboot

[root@docker /]# ping ya.ru
PING ya.ru (87.250.250.242) 56(84) bytes of data.
64 bytes from ya.ru (87.250.250.242): icmp_seq=1 ttl=58 time=15.8 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=2 ttl=58 time=15.8 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=3 ttl=58 time=16.0 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=4 ttl=58 time=16.2 ms

Сам по себе факт запуска firewalld работе DNS не мешает. То есть если в запущенной системе выполнить «systemctl start fiewalld», то firewalld корректно запускается, DNS работает. Проблема где-то в самой автозагрузке, как будто возникает какой-то конфликт и что-то, что связано с DNS, не запускается. Вот содержимое файла службы, на который делаются симв. ссылки при автозагрузке:

[root@docker /]# cat /usr/lib/systemd/system/firewalld.service
[Unit]
Description=firewalld - dynamic firewall daemon
Before=network-pre.target
Wants=network-pre.target
After=dbus.service
After=polkit.service
Conflicts=iptables.service ip6tables.service ebtables.service ipset.service
Documentation=man:firewalld(1)

[Service]
EnvironmentFile=-/etc/sysconfig/firewalld
ExecStart=/usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS
ExecReload=/bin/kill -HUP $MAINPID
# supress to log debug and error output also to /var/log/messages
StandardOutput=null
StandardError=null
Type=dbus
BusName=org.fedoraproject.FirewallD1
KillMode=mixed

[Install]
WantedBy=multi-user.target
Alias=dbus-org.fedoraproject.FirewallD1.service

Может, достаточно порядок загрузки firewalld изменить, в конец его как-нибудь переместить? После чего тогда лучше поставить? Уже не знаю, что думать.

 , ,

Novascriptum
()

Проблема с DNS в docker-контейнере

Форум — General

Всем здравствуйте!

Ситуация следующая: есть хост-система (CentOS 7.6), в которой установлен докер. И (среди прочего) есть контейнер, в котором установлен CentOS из вот этого образа https://hub.docker.com/_/centos/ Причём немного «допилен» для поддержки systemd (на той же странице в hub.docker.com есть инструкция под заголовком «Dockerfile for systemd base image»).

Контейнер запускается в приватной сети с примерно вот такими параметрами:

docker run -dit --name="env4" --restart always --privileged --net mynetwork -p 22004:22 --expose 80 --expose 443 local/centos-systemd:my_tag

В «чистом» контейнере в плане DNS всё хорошо работает, можно пропинговать любой сайт по доменному имени.

Дальше я произвожу запуск определённого bash-скрипта (в контейнере), который написан не мной и который устанавливает веб-окружение и кучу-кучу всего (nginx, httpd, mysql, nodejs и мн.мн.др.) Так вот после его установки перестают ресолвиться доменные имена. При этом пинг по IP-адресам проходит:

root# ping ya.ru
ping: ya.ru: Name or service not known
root# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=46 time=4.62 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=46 time=4.67 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=46 time=4.65 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=46 time=4.68 ms

Содержимое файла /etc/resolv.conf до и после установки скрипта одинаковое:

root# cat /etc/resolv.conf
nameserver 127.0.0.11
options ndots:0

Если прописать в этот файл ручками гугловские DNS-серверы (8.8.8.8 и 8.8.4.4), то всё начинает работать (имена ресолвятся), но вариант не подходит из-за того, что тогда теряются алиасы локальных IP-адресов, которые есть в приватной сети docker. Ну и плюс при каждом рестарте контейнера этот файл переписывается на то содержимое, которое я привёл.

Такое ощущение, что этот скрипт ставит какую-то свою службу разрешения доменных имён, которая работает криво. Посмотрел лог установки, по слову «DNS» нашёл следующее:

---> Package perl-Net-DNS.x86_64 0:0.72-6.el7 will be installed
Может, это как-то влияет.

Есть ли идеи, куда копать, чтобы в контейнере доменные имена начали ресолвиться?

 

Novascriptum
()

nginx для передачи запроса без дешифровки (ssl)

Форум — General

Всем здравствуйте! Возникла следующая задача: есть nginx, на который приходит https-запрос по 443 порту. Нужно передать его на другой сервер «как есть» без проверки сертификата (она будет выполняться дальше). Задача этого nginx - распределять запросы по разным серверам. Проверять SSL он не должен.

server {
        listen 443;
        server_name my.server.name; #тут имя нужного мне домена

        proxy_ssl_verify off;
        location / {
        	proxy_pass         https://172.17.0.2;
        }
}

Но nginx выдаёт непонятную ошибку в Access log (в hex-виде, поэтому не могу прочитать). Подозреваю, там что-то про то, что не удалось установить безопасное соединение с сервером (хотя могу ошибаться).

Можно ли как-то это реализовать?

 

Novascriptum
()

PHP: чтение программного канала №3

Форум — Web-development

Всем доброго времени. Использую proc_open для запуска своего php-скрипта:

$cmd = 'php -d mbstring.func_overload=0 "/path/to/script.php';
$procId = proc_open($cmd, array(3 => array('pipe', 'r')), $pipes);
$paramStreamId = $pipes[3];
fwrite($paramStreamId, "Line1\r\n");
fwrite($paramStreamId, "Line2\r\n");
fclose($paramStreamId);
proc_close($procId);

Вроде использовать №3 можно, так как в документации сказано:

Номера дескрипторов не ограничены только 0, 1 и 2 - вы можете назначить любой действительный номер дескриптора и он будет передан дочернему процессу.

Теперь вопрос, как в запускаемом таким образом скрипте обратиться к каналу №3 (в который передаются Line1 и Line2). Стандартный ввод (канал №0) мне не подходит, потому что туда будут идти данные, а в канал №3 хочу передавать служебные параметры (вроде паролей), которые нужны для работы скрипта.

Пробовал вот так:

$streamId = fopen('php://3', 'r');
...но это приводит к ошибке. Есть ли какой-нибудь способ прочитать этот канал?

 , ,

Novascriptum
()

mysqldump при отсутствии дискового пространства

Форум — Development

Здравствуйте! Возник вопрос насчёт выполнения mysqldump в потоковом режиме без записи на диск (через пайпы). Делается дамп и тут же отправляется по FTP. Теоретически он должен выполняться даже в случае, когда закончилось дисковое пространство полностью (но только если сервер остался работоспособен, конечно же). Но возник вопрос насчёт некоторых аргументов:
--single-transaction
--lock-tables

Первый из них позволяет (насколько я понял) применить механизм транзакций InnoDB, чтобы получить согласованные данные. А второй рассчитан на нетранзакционные таблицы, выполняя их блокировку на момент дампа. Но ведь данные о транзакциях/блокировках пишутся на диск? Выполнится ли вообще mysqldump с одной из таких опций при отсутствии свободного места вообще? Заранее спасибо за ответ!

 ,

Novascriptum
()

openssl aes-256-cbc & windows gui

Форум — General

Всем доброго времени! Делаю в CentOS бэкапы, которые шифруются командой:

{какие-то действия по подготовке архива} | openssl enc -e -aes-256-cbc -k {mypass} > file.tar.gz.aes

Эти архивы вполне корректно дешифруются той же командой с ключом -d. Возникла задача найти прогу под windows, которая позволяла бы дешифровать эти файлы. Перепробовал кучу из них, вот некоторые: AES Crypt, AES Crypter LITE 2014 1.2.346, TNTCrypter 2.0.0.0 (понравился больше всех). Везде одно и то же - итоговый файл получается битым. TNTCrypter понравился больше всего, там много настроек. И выбираю-то как раз те, которые соответствуют параметрам созданного архива: AES, 256 бит, режим CBC, пароль 100% верный - http://i.imgur.com/ieyvIKI.png. Соль и вектор, вроде, пустые в моём случае. И, тем не менее, дешифровка выдаёт битый файл, как будто пароль неверный.

Кто-нибудь может подсказать, из-за чего такое вообще возможно? У кого-то, может, получалось создать aes-шифрованный файл, совместимый с какими-то из программ под windows? Заранее спасибо!

 , ,

Novascriptum
()

Помогите с регулярным выражением (PHP)

Форум — Development

Привет всем! В PHP имеется строка примерно такого вида:

$string = 'random text {cmdType:cmdExpression} random text {cmdType:if(true){do something;}do something else;} {cmdType:cmdExpression} random text';

Нужно регулярное выражение для ф-ии preg_match_all, чтобы вычленить все блоки вида {cmdType:cmdExpression}.

Здесь cmdType - это просто какая-то строка, обозначающая тип команды (что-то вроде «regexp», «php» и пр)

cmdExpression - это какой-то код (непосредственно код php, регулярное выражение или что-то ещё).

Составил вот такое:

$regex = '#{([^:]+):(.*)}(?=([^}]*\{\w+\:|$|[^{}]+$))#iU';
$r = preg_match_all($regex, $string, $matches);
var_dump($r);

Возвращает в данном случае примерно такой результат:

array(4) {
  [0]=>
  array(3) {
    [0]=>
    string(23) "{cmdType:cmdExpression}"
    [1]=>
    string(50) "{cmdType:if(true){do something;}do something else}"
    [2]=>
    string(23) "{cmdType:cmdExpression}"
  }
  [1]=>
  array(3) {
    [0]=>
    string(7) "cmdType"
    [1]=>
    string(7) "cmdType"
    [2]=>
    string(7) "cmdType"
  }
  [2]=>
  array(3) {
    [0]=>
    string(13) "cmdExpression"
    [1]=>
    string(40) "if(true){do something;}do something else"
    [2]=>
    string(13) "cmdExpression"
  }
  [3]=>
  array(3) {
    [0]=>
    string(22) " random text {cmdType:"
    [1]=>
    string(10) " {cmdType:"
    [2]=>
    string(12) " random text"
  }
}

Всё прекрасно работает, вот только минус в том, что в части «random text» не должны встречаться фигурные скобки, поскольку тогда логика работы моего регулярного выражения нарушается. Например (добавлена закрывающая фигурная скобка во второй блок random text):

$string2 = 'random text {cmdType:cmdExpression} random } text {cmdType:if(true){do something;}do something else} {cmdType:cmdExpression} random text';
$regex = '#{([^:]+):(.*)}(?=([^}]*\{\w+\:|$|[^{}]+$))#iU';
$r = preg_match_all($regex, $string, $matches);
var_dump($r);

Выводит:


array(4) {
  [0]=>
  array(3) {
    [0]=>
    string(32) "{cmdType:cmdExpression} random }"
    [1]=>
    string(50) "{cmdType:if(true){do something;}do something else}"
    [2]=>
    string(23) "{cmdType:cmdExpression}"
  }
  [1]=>
  array(3) {
    [0]=>
    string(7) "cmdType"
    [1]=>
    string(7) "cmdType"
    [2]=>
    string(7) "cmdType"
  }
  [2]=>
  array(3) {
    [0]=>
    string(22) "cmdExpression} random "
    [1]=>
    string(40) "if(true){do something;}do something else"
    [2]=>
    string(13) "cmdExpression"
  }
  [3]=>
  array(3) {
    [0]=>
    string(15) " text {cmdType:"
    [1]=>
    string(10) " {cmdType:"
    [2]=>
    string(12) " random text"
  }
}

Вместо первого «{cmdType:cmdExpression}» получили «{cmdType:cmdExpression} random }». Так не хотелось бы. Кто-нибудь может помочь составить вариант выражения, который обходит это ограничение (позволяет использовать фигурные скобки в части random text)?

 ,

Novascriptum
()

TAR: исключить одну из корневых папок архива

Форум — General

Здравствуйте, допустим, есть вот такая команда (составленная специально для теста опции --exclude):

tar -cf - /home/mytar/data -C /home/mytar data -C /home/mytar data2 --exclude="/data" > archive.tar
В результате в архиве:
/data
/data2
/home/mytar/data

А хотел опцией --exclude исключить корневую папку /data.

Если же написать --exclude=«data», то пропадает и корневая папка архива /data, и /home/mytar/data. Как правильно написать, чтобы была исключена только корневая папка /data? Никак не выходит.

 

Novascriptum
()

TAR средствами PHP - проблема с длинными путями файлов

Форум — General

Здравствуйте, добрые и умные люди. Возникла особая задача - формировать tar-архив средствами PHP. Стандартная linux утилита tar (равно как и встроенный в php класс PharData) не подходит, т.к. нужно читать данные из stdin и передавать в stdout. А tar не умеет читать stdin.

PHP выбран только потому, что его знаю лучше всего. Нагуглил вот такую библиотеку, которая решает мои задачи (класс TarArchive) За исключением некоторых багов работает прекрасно, но... формируемые ею архивы по какой-то причине читаются windows'овским WinRAR'ом лишь частично. Как я понял - это связано с файлами, у которых полная длина имени больше 155 символов (включая папки, в которых он лежит). Некоторые имена он просто обрезает, а некоторые тупо пропадают из списка файлов. В результате примерно 2/3 архива он не видит. Библиотечка для записи файлов с длинными именами использует вот такой код: http://imageshack.com/i/pnvKHZRlp http://imageshack.com/i/pnoVcFUkp И даже отсылает нас к описанию «Pax Interchange Format». Сама утилита tar потом прекрасно читает и распаковывает такие архивы без проблем, то есть вроде бы как всё работает. Но архив, сделанный PHP, получается меньше, чем сделанный tar'ом (630 Мб против 650). И если делать из командной строки стандартной утилитой, то потом ведь WinRAR прекрасно читает архивы, содержащие длинные пути до файлов. Такое ощущение, что для корректной работы WinRAR'а с полученными в результате работы php архивами в них просто не хватает каких-то метаданных (эти самые 20 Мб расхождения). Очень хочется понять, в чём же дело, какие данные нужно добавить, чтобы WinRAR увидел все файлы и не обрезал пути. Буду признателен за любую наводку, сам уже который день не могу победить данную особенность tar-архива, сделанного php.

 ,

Novascriptum
()

Zip 2 Bzip2

Форум — General

Всем доброго времени! Использую php-скрипт, который упаковывает файлы в zip-архив без сжатия. Tar использовать не получилось по ряду непреодолимых препятствий, над которыми бьюсь уже вторую неделю. В общем, получилось только zip. Но его степень сжатия меня не устраивает, поэтому решил поставить её вообще в ноль, чтобы потом сжимать другими утилитами. В результате хочу использовать что-то вроде

echo "asdfafsdasdf" | php myscript.php | bzip2 ... > file.zip.bz2

В этом конвейере «php myscript.php» как раз и возвращает zip-архив, выполняя ещё операции объединения STDIN с нужными мне данными.

И всё бы хорошо, но в результирующем архиве file.bz2 лежит один файл архива zip, а не его непосредственное содержимое (а мне хотелось бы именно так) как в случае использования tar. То есть получили архив в архиве. Можно ли как-то в результирующем архиве получить именно содержимое zip-архива, а не сам zip-файл?

 ,

Novascriptum
()

cat: имя файла в архиве

Форум — General

Всем доброго времени! Мне нужно добавить файл-картинку в архив с файлом базы данных, что-то вроде этого:

{ cat "/path/to/file.png"; mysqldump ...; } | bzip2 -1 -c > /path/to/archive.sql.bz2

И всё бы хорошо, но несмотря на то, что бинарные данные попали в архив, они там присутствуют как бы без имени, в результате чего архив даже нормально не распаковывается. Можно ли как-то задать имя этим бинарным данным в архиве? Чтобы в нём было два файла, например:

db.sql
some.png

Создавать промежуточные файлы на диске не хочется, нужно сделать именно одной командой. Это как-то возможно? Буду рад любым идеям, спасибо!

 ,

Novascriptum
()

Tar в конвейере на Windows

Форум — General

Всем доброго времени! Где-то нашёл в инете любопытный способ создания архивов и их отправки по FTP на лету без создания промежуточных файлов - идея очень понравилась. Делается примерно так:

tar -czf - somefile.txt | ncftpput -u user -p password -c somehost.ru /somefile.txt

Проверял в CentOS 6.5, всё работает. Захотел повторить трюк в Windows, скачал tar 1.21 отсюда, а NcFTP Client 3.2.5 for Microsoft Windows отсюда.

И вроде бы всё хорошо, по отдельности обе утилиты работают, но подружить их вместе не получается ни в какую. Это именно в Windows:

D:\utils>tar -cf - "D:\_temp\\video.mp4" | "C:\Windows\ncftpput" -u user -p password -c somehost.ru /v.mp4
tar: Removing leading `D:\' from member names
tar: -: Cannot write: Broken pipe
tar: Error is not recoverable: exiting now
Уже начитался в интернете, что при указании путей нужно экранировать слэши, чтобы не возникало спец. символов (именно по этой причине указано два \ перед video.mp4). Причём в паре со split'ом тот же самый tar прекрасно работает:
D:\utils>tar -cf - "D:\_temp\\video.mp4" | split -b 10m - "D:\_temp\video.tar"
tar: Removing leading `D:\' from member names

D:\utils>
В результате получаем распиленный на части архив, всё отлично. Что же не так в первом случае? Уже всю голову сломал. Буду признателен за любые идеи.

 

Novascriptum
()

Домен не видится по SSL

Форум — General

Все доброго времени! Имеется локальная установка CentOS 6.7 на вирт. машине (сетевой мост), на нем среди прочего nginx и apache + php. В файле /etc/hosts прописан тестовый домен:

192.168.1.100 example.ru
Этот IP адрес и есть адрес вирт. машины, т.е. домен прописан на нее саму.

В результате если из PHP вызвать что-то вроде

echo file_get_contents("http://example.ru");
то будет напечатано содержимое этой страницы, все отработает корректно.

А вот если вызвать через https:

echo file_get_contents("https://example.ru");
То уже ничего, хотя через браузер https открывается, хотя и с предупреждением, что подключение не защищено (сертификат не установлен). Проблема именно в неустановленном сертификате, или как-то можно научить PHP загружать содержимое через https даже без него? По факту сейчас получается, что сайт не может долбиться сам к себе через https на уровне PHP из-за вот этой какой-то фигни, не могу разобраться.

 ,

Novascriptum
()

.htaccess: отрицание нескольких слов (RewriteCond)

Форум — Admin

Пишу правило, которое должно запретить все «script» в запросе, за исключением нескольких случаев:

1) которые не начинаются на «de», "?" или «&». Хочется что-то вроде:

RewriteCond %{THE_REQUEST} (?<!(de|\?|&))script [NC]
RewriteRule ^(.*)$ - [F,L]

2) которые не заканчиваются на «ion» или «=». Хочется что-то вроде

RewriteCond %{THE_REQUEST} script(?!(ion|=)) [NC]
RewriteRule ^(.*)$ - [F,L]

3) Все вместе:

RewriteCond %{THE_REQUEST} (?<!(de|\?|&))script(?!(ion|=)) [NC]
RewriteRule ^(.*)$ - [F,L]
Получаем ошибку 500 - ошибка синтаксиса, стало быть. Вот только не пойму, где ошибка, вроде синтаксис правильный? Версия apache 2.2.15

 

Novascriptum
()

Кол-во айнодов одним числом

Форум — General

Всем доброго времени! Пишу command-line скрипт, для которого имеет значение количество оставшихся в файловой системе айнодов. Соответственно, нужно их определить и записать в переменную. Столкнулся с проблемой, что «df -i» выдает информацию в различном формате, имею в виду количество строк. Если в первом столбце (имя файловой системы) длинное наименование, то вывод будет в 3 строки:

Filesystem            Inodes  IUsed  IFree IUse% Mounted on
/dev/mapper/vg_virtual2-lv_root
                     1224000 587583 636417   49% /

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

Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda6             640848  640848       0  100% /home

Может быть есть способ унифицировать этот вывод? Или другая какая-нибудь команда есть. В идеале мне нужно получить количество оставшихся айнодов одним числом.

 , ,

Novascriptum
()

RSS подписка на новые темы