The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Создать новую тему
 - Свернуть нити
Пометить прочитанным
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Архив | Избранное | Мое | Новое | | |  
Форум WEB технологии
upstream cтатистика, !*! 999, (nginx) 21-Мрт-24, 20:02  [ | | | ] [линейный вид] [смотреть все]
Приветствую, коллеги.
Помогните решить задачу сбора статистики подключений к backend серверам.
Есть что-то такое
upstream backend {
    server server1;
    server server2;
}

server {
    listen 80;
    server_name default;

    location / {
        proxy_pass http://backend;
    }
}

Каким образом можно узнать сколько клиентов отправлено на server1, а сколько на server2?
RTFM не помогло))
Заранее спасибо.



Как сделать HTML страницу из трёх блоков с прокруткой среднего , !*! КриоМух, (CSS) 25-Окт-23, 09:22  [ | | | ] [линейный вид] [смотреть все]
Доброго дня Уважаемые!

Клепаю тут страницу, и хочу чтобы не было JS, а надо в частности мне сделать стандартную штуку:
<body>
   <div id="pgHeader">Тут шапка страницы. Её высота неизвестна</div>
   <div id="pgContent">Тут собственно блок с содержимым. Он должен быть высотой от шапки до подножья, и если содержимое не влазит, то с прокруткой (но только сам блок с прокруткой, а не страница)</div>
   <div id="pgFooter">Это подножье страницы, тоже неясна высота. Этот блок должен быть прикреплен к низу экрана.</div>
</body>

Подскажите как это на CSS сделать? Т.е. шапка и подножье всегда должны быть на своих местах соответственно сверху и снизу, а блок содержимого при необходимости скроллиться.



Паралельное выполнение обработки файлов, !*! Nightman_Sha, (PHP) 09-Янв-24, 08:15  [ | | | ] [линейный вид] [смотреть все]
Добрый день!
Имеем
PHP Version 7.4.10
Есть скрипт, который выполняет scandir нужного каталога в отдельной функции и возвращает массив

Затем бежит по этому массиву и выполняет процессинг "по одному":

foreach ($lrFiles as $lsKey => $lsFile) {
      $this->CopyToArchivDir($lsOrigDir. $lsFile , PRESENTATION_DIR.'../'.$irService['InFileDir']);
      $lbResult = $this->ProcessFile($lsOrigDir . $lsFile);
      if ($lbResult) {
        unlink($lsOrigDir . $lsFile);
      }
    }

ProcessFile достаточно тяжелая , выполняются всякие iconv, ввод/вывод в БД и другие преобразования. Не суть.

Вопрос: можно ли распараллелить выполнение ProcessFile минуя последовательную обработку"по одному".
Чтобы процессинг шел _безопасно_ в паралели на несколько трэдов.

googlение дает противоречивое, куча фремворков и встроенных возможностей PHP. А какие надежные и безопасные? Учитывая, что с PHP я знаком не хорошо ..
Направьте пожалуйста в нужное русло
Спасибо


Обновить letsencrypt с помощью certbot, если 80 порт занят, !*! userovich, (nginx) 20-Ноя-23, 21:22  [ | | | ] [линейный вид] [смотреть все]
Порты 443 и 80 слушаются nginx, входящие на 80 вообще-то просто редиректят на https (443), но отказаться от использования 80 порта не могу.

Вари1: /etc/letsencrypt/cli.ini:
pre-hook = service nginx stop
post-hook = service nginx start
(кривой способ освободить 80-й порт)
Но блин, так как-то неправильно. А как обойти то, что порт 80 занят?

Одновременно не могу понять следующее: сразу после перезагрузки (nginx стартует автоматом, все ок) запускаю certbot renew --dry-run - тесты проходит, все ок (это когда в /etc/letsencrypt/cli.ini стоит "post-hook = service nginx reload").

То есть мне, конечно, норм, что тест проходит, но как certbot с 80 портом обходится в этом случае, непонятно. Последующие тестовые запуски могут показывать ошибки nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Unknown error), но не всегда. При этом сайт работает нормально. Мистика какая-то.

Установка капчи для сайта на WP, !*! Uzer, (JavaScript) 21-Ноя-20, 14:21  [ | | | ] [линейный вид] [смотреть все]
Всем доброго времени. Появилась необходимость установить капчу для сайта на CMS WP применять буду капчу от гугла. В интеренете нашел готовые решения только для различных форм на сайте. В моем случае мне необходимо сделать капчу для определенных ссылок на сайте, чтобы при нажатии на ссылку выводилась капча.
Как я понял нужно использовать JS типа писать событие onclick на класс ссылки при котором вызвается капча?
Этого будет достаточно, обработчик на php не нужен?  
Kerberos авторизация в PHP8.2, !*! Doc, (PHP) 22-Июн-23, 10:13  [ | | | ] [линейный вид] [смотреть все]
    Коллеги , подскажите , что изменили с Kerberos авторизацией в v8.2?
    модуль auth_kerb_module отсутствует как класс
    при этом детектива AuthType Kerberos - работает, а все остальные вплоть до Krb5Keytab нет

    как организовать керберос авторизацию и SSO на 8.2?

  • кашу в голове надо иногда перемешивать чтобы не пригорала начнем с того, что aut, !*! Ann None (?), 14:37 , 23-Июн-23 (1)
    >     Коллеги , подскажите , что изменили с Kerberos
    > авторизацией в v8.2?
    >     модуль auth_kerb_module отсутствует как класс
    >     при этом детектива AuthType Kerberos - работает, а
    > все остальные вплоть до Krb5Keytab нет
    >     как организовать керберос авторизацию и SSO на 8.2?

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

    сообщить модератору +/ответить
  • В Apache HTTP Server версии 8 2 модуль auth_kerb_module был интегрирован в моду, !*! nicholas21 (ok), 16:31 , 12-Июл-23 (3) –3
    >     Коллеги , подскажите , что изменили с Kerberos
    > авторизацией в v8.2?
    >     модуль auth_kerb_module отсутствует как класс
    >     при этом детектива AuthType Kerberos - работает, а
    > все остальные вплоть до Krb5Keytab нет
    >     как организовать керберос авторизацию и SSO на 8.2?

    В Apache HTTP Server версии 8.2 модуль auth_kerb_module был интегрирован в модуль mod_auth_gssapi для авторизации Kerberos. Модуль auth_kerb_module больше недоступен как отдельный объект. Чтобы организовать авторизацию Kerberos и единый вход (SSO) в Apache HTTP Server 8.2, убедитесь, что модуль mod_auth_gssapi установлен и включен.

    Настройте необходимые параметры, такие как область Kerberos, файл keytab и имя участника-службы (SPN), в конфигурации Apache. Используйте директиву AuthType GSSAPI для проверки подлинности Kerberos и установите элементы управления доступом с помощью директивы Require, чтобы определить доступ пользователя или группы.


    сообщить модератору –3 +/ответить
Резиновое горизонтальное меню с 'прыгающими' пунктами, !*! Дмитрий, (CSS) 16-Сен-23, 16:37  [ | | | ] [линейный вид] [смотреть все]
Доброго времени суток!

Потребовалось сделать горизонтальное меню, но чтобы пункты, которые не умещаются в экран "уходили" во всплывающее меню. Например:

Пункт1 Пункт2 Пункт3 Пункт4 Пункт5

При изменении ширины экрана до "Пункта3", получается:

Пункт1 Пункт2 ...

... - при нажатии сюда, выпадает меню с пунктам "3, 4, 5".

Может кто знает, где посмотреть образец?

Синхронизация содержимого таблицы для PostgreSQL 9.1, !*! xintrea, (PostgreSQL) 04-Мрт-20, 16:30  [ | | | ] [линейный вид] [смотреть все]
Ковыряюсь сейчас с древним Astra Linux 1.3 (Debian Wheezy с ядром 3.2.0), и нужно мне сделать синхронизацию идентичных таблиц на 5-ти хостах.

Таблицы имеют идентичную структуру. Есть поля:

    PRIMARY KEY id,
    TIMESTAMP,
    UUID,
    прочие поля

Содержимое записей не меняется. Синхронизация должна быть двунаправленная (master-master?). То есть, нет никакой «главной» таблицы. Просто все записи, созданные на разных хостах, должны в итоге присутствовать на инстансах PostgreSQL на всех хостах.

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

Не факт, что все хосты будут работать одновременно. Может 4 хоста работать, а 1 быть выключен. После его включения он должен принять все данные, которые «пропустил» когда был выключен. Может быть и наоборот: работает только 1 хост, остальные выключены. После включения остальных хостов, данные с первого хоста должны перетечь на все остальные.

* * *

Сейчас я раздумываю, с помощью каких инструментов проще всего решить эту задачу. Насколько я понял, средства репликации, существующие для PostgreSQL 9.1 (тот же slony), умеют делать только master-slave репликацию, да и работа такой репликации в условиях нестабильной сети под большим вопросом.

Мне нужно что-то более простое, типа pt-table-sync от Percona, только не для MySQL, а для PostgreSQL. И чтобы оно работало на древних линухах.

Перед тем, как я начну писать решение на коленке, я хочу попробовать решить задачу уже готовыми инструментами. Кто что может предложить? Да, сменить дистрибутив не получится, ибо при аттестации/сертификации/лицензиации средства стандартного программного обеспечения зафиксированы

  • Проще и надежнее - штатными средствами постгреса Но будет только православный, !*! Аноним (1), 18:44 , 04-Мрт-20 (1)
    > Сейчас я раздумываю, с помощью каких инструментов проще всего решить эту задачу.

    Проще (и надежнее) - штатными средствами постгреса. Но будет только православный master-slave.

    Вы ТОЧНО хотите master-master?
    Ооно вам ДЕЙСТВИТЕЛЬНО надо?
    Тогда - только на уровне логической репликации. И неважно, сами вы напишете скрипты синхронизации или воспользуетесь каким-то готовым решением (да, их есть, нет, я их на память не помню, но гугль знает все) - это в любом случае будет уродство из говна и палок, криво работающее и то и дело падающее.

    сообщить модератору +/ответить
  • gt оверквотинг удален с вашими устаревшими версиями - вам нужно менять структу, !*! odmin (??), 04:38 , 05-Мрт-20 (5)

    >[оверквотинг удален]
    > Скорость репликации не важна. Достаточно, если синхронизация будет происходить периодически.
    > В минуту каждый хост может добавить в таблицу от 0 до
    > ~1000 новых записей. В любой момент сеть может «развалиться» и хосты
    > не смогут видеть друг друга, при этом новые записи будут создаваться.
    > После восстановления сети все новые записи должны засинхронизироваться на всех хостах.
    > Не факт, что все хосты будут работать одновременно. Может 4 хоста работать,
    > а 1 быть выключен. После его включения он должен принять все
    > данные, которые «пропустил» когда был выключен. Может быть и наоборот: работает
    > только 1 хост, остальные выключены. После включения остальных хостов, данные с
    > первого хоста должны перетечь на все остальные.

    с вашими устаревшими версиями - вам нужно менять структуру приложения, по простому будут две базы, одна postgres на чтение и синхронизируется она стандартными средствами репликации stream master slave + wal (в 9.1 это должно быть),
    вторая база это sqlite локальный кеш на запись.
    далее понятно, дополнительно отдельный процесс на синхронизацию локальных данных в глобальную базу, назад они вернутся через репликацию.

    сообщить модератору +/ответить
  • gt оверквотинг удален Обновиться хотя-бы до 10 x и использовать логическую реп, !*! Мимикус Пипикус Онанимус (?), 10:18 , 08-Мрт-20 (33)
    >[оверквотинг удален]
    > Сейчас я раздумываю, с помощью каких инструментов проще всего решить эту задачу.
    > Насколько я понял, средства репликации, существующие для PostgreSQL 9.1 (тот же
    > slony), умеют делать только master-slave репликацию, да и работа такой репликации
    > в условиях нестабильной сети под большим вопросом.
    > Мне нужно что-то более простое, типа pt-table-sync от Percona, только не для
    > MySQL, а для PostgreSQL. И чтобы оно работало на древних линухах.
    > Перед тем, как я начну писать решение на коленке, я хочу попробовать
    > решить задачу уже готовыми инструментами. Кто что может предложить? Да, сменить
    > дистрибутив не получится, ибо при аттестации/сертификации/лицензиации средства стандартного
    > программного обеспечения зафиксированы

    Обновиться хотя-бы до 10.x и использовать логическую репликацию таблиц. Работает само и на автомате, правда только в одну сторону. Конфликты изменений в основной таблице и в реплике разруливать вручную. 9.x логическую репликацию не умеет.

    сообщить модератору +/ответить


Какую CMS выбрать, !*! globus1414, (Системы управления контентом) 29-Авг-13, 01:34  [ | | | ] [линейный вид] [смотреть все]
Посоветуйте бесплатную CMS для интернет-магазина.


Неполучается проксировать доступ к двум веб серверам одной сети, !*! lotric, (Редирект) 27-Июл-23, 20:00  [ | | | ] [линейный вид] [смотреть все]
Пробовал nginx, haproxy
одна проблема это ssl не могу настроить доступ по https(который добовляют и управляется на веб серверах).
В гуглах 99% вариантов описывают http но с этим проблем нету это просто.

вот суть задачи https://i.postimg.cc/vBR0vqkR/haproxy2.jpg


имеется 3 сервера
1. сервер  (192.168.0.2) у него есть wan ip который в интернет смотрит через DMZ роутера
2. веб сервер1 (192.168.0.36) на нем панель управления в том числе и ssl https
3. веб сервер2 (192.168.0.46) на нем панель управления в том числе и ssl https

сайты вручную каждый не вариант прописывать

----------попытка в nginx(192.168.0.2) (для второго сервера аналогично)
В фале /etc/nginx/sites-available/default добавил следующее:
server {
listen 80;
server_name moodle.name.ru;
server_name_in_redirect on;
location / {
proxy_pass http://192.168.0.36:80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded_for $proxy_add_x_forwarded_for;
}
----------попытка в haproxy(192.168.0.2)
frontend http-https-in
bind 192.168.0.2:80
bind 192.168.0.2:443

use_backend http_nginx_pool if !{ ssl_fc }
use_backend https_nginx_pool if { ssl_fc }

backend http_nginx_pool
mode http
server nginx2 192.168.0.36:80 check
server nginx2 192.168.0.46:80 check

backend https_nginx_pool
mode http
server nginx2 192.168.0.36:443 check
server nginx2 192.168.0.46:443 check

Браузер Луна - брендированная сборка?, !*! rvs2016, (Разное) 20-Июн-23, 10:20  [ | | | ] [линейный вид] [смотреть все]
Нынче появилась новость о размещении в Апп Сторе российского браузера Луна.
Все сайты нахваливают только российскость этого браузера да всякие там сертификаты Минцифры в нём.
Но в гугле пока не попадаются на глаза его настоящие технические характеристики.
В частности не заметна пока информация - является ли браузер Луна написанной с нуля программой или он является очередной брендированной сборкой Файрфокса или Чрома подобно браузерам Яндекс, Амиго и т.п.


Почему при использовании оператор IN пропадает индекс?, !*! Дмитрий, (MySQL) 17-Июн-23, 22:22  [ | | | ] [линейный вид] [смотреть все]
Доброго времени суток!

Есть таблица. И два запроса:

select id FROM articles WHERE id in ( 45, 46);
select id FROM articles WHERE id IN(SELECT 45 union SELECT 56);

В первом случае стоимость (cost) 1.82. В таблице articles используется Primary Index и идет Index Range Scan .

Во втором случае стоимость (cost) 2003.22. В таблице используется другой индекс и идет Full Index Scan.

Откуда такая разница и как заставить второй запрос использовать Primary Index?

  • у вас есть стоимость, то наверняка можно посмотреть и план оптимизатора, а так, , !*! Сергей (??), 11:12 , 18-Июн-23 (1)
    > Доброго времени суток!
    > Есть таблица. И два запроса:
    > select id FROM articles WHERE id in ( 45, 46);
    > select id FROM articles WHERE id IN(SELECT 45 union SELECT 56);
    > В первом случае стоимость (cost) 1.82. В таблице articles используется Primary Index
    > и идет Index Range Scan .
    > Во втором случае стоимость (cost) 2003.22. В таблице используется другой индекс и
    > идет Full Index Scan.
    > Откуда такая разница и как заставить второй запрос использовать Primary Index?

    у вас есть стоимость, то наверняка можно посмотреть и план оптимизатора, а так, во в втором случае имеем запрос и оптимизатор считает его неопределенным, посему на каждую строчку "глобального" select'а его надо определить... т.е. выполнить сканированием всей таблицы...

    сообщить модератору +/ответить
  • Какой другой На момент составления плана выполнени запроса- количество возвра, !*! ыы (?), 10:14 , 19-Июн-23 (2)
    > Доброго времени суток!
    > Есть таблица. И два запроса:
    > select id FROM articles WHERE id in ( 45, 46);
    > select id FROM articles WHERE id IN(SELECT 45 union SELECT 56);
    > В первом случае стоимость (cost) 1.82. В таблице articles используется Primary Index
    > и идет Index Range Scan .
    > Во втором случае стоимость (cost) 2003.22. В таблице используется другой индекс и
    > идет Full Index Scan.

    Какой "другой" ?

    > Откуда такая разница

    На момент составления плана выполнени запроса- количество возвращаемых подзапросом значений неизвестно. И оптимизатор берет необходимые параметры "с потолка". Проведя достаточное колдичество экспериментов с разными данными - вы поймете что статистически - он прав.

    > и как заставить второй запрос использовать Primary Index?

    для конкретно двух этих значений?

    сообщить модератору +/ответить
  • У вас теоретический вопрос или практический Самое главное правило при написании, !*! Аноним (1), 11:05 , 19-Июн-23 (3)
    У вас теоретический вопрос или практический?

    >как заставить второй запрос использовать Primary Index?

    Самое главное правило при написании запросов - не пытаться плохие запросы оптимизировать и заставлять что-то использовать. Пишите запросы, у которых будет оптимальный план.
    Фактически вам нужен джойн к временной таблице составленной с помощью UNION. Значит надо написать к ней джойн, а не мутить с IN.

    Чисто в практической плоскости. Если у вас в articles будет за все время жизни сервиса 1000 записей, а в том, из чего вы юнион собираете - и того меньше, вам должно быть все равно, у вас фулл индекс скан или что-то другое. Добавьте памяти под кэш запросов и забудьте навсегда. Напишите запросы попроще, чтобы через пару лет не путаться в их логике. По моему личному опыту - до 2-3 сотен тысяч записей таблицы не тормозят даже если из них выбирают крайне неоптимальным образом.

    сообщить модератору +/ответить
  • Дать index hint пробовали , !*! Tron is Whistling (?), 08:27 , 20-Июн-23 (5)
    Дать index hint пробовали?
    сообщить модератору +/ответить
копия кластера и pg_basebackup, !*! ZlyddeN, (PostgreSQL) 30-Май-23, 16:00  [ | | | ] [линейный вид] [смотреть все]
Вопрос по созданию копии кластера. Такой план насколько плох?

1. Делаем pg_basebackup -D /mnt/newDATA
2. останавливаю кластер
3. копирую pg_wal/ в новый путь /mnt/newDATA/pg_wal
4. монтирую newDATA на место старого кластера /var/lib/pgsql/11/data
5. запускаю кластер.

Это мне гарантирует целостность данных? обязательно ли прописывать recover.conf?
PS. архивация WAL не настраивалась

не отправляется почта на внешние адреса одного домена, !*! deminart, (Разное) 23-Май-23, 14:17  [ | | | ] [линейный вид] [смотреть все]
Коллеги, помогите пожалуйста с проблемой.
Есть доменная почта на Яндексе, условно обозначим именем yagroup.ru
С таким же именем group.ru внутренний домен.
Подняли почтовый сервер Debian 11, postfix 3.5.18 на втором уровне домена с именем gkgroup.ru
Ситуация следующая, при отправке на внешнюю почту яндекса, с таким же доменным именем  как и внутренний домен (yagroup.ru ) сервер стучится на кд, в итоге получаю Connection refused, status=deferred и висящее в очереди письмо.
Во всех остальных случаях всё прекрасно работает…

[spoiler=mail.log]
May 23 13:17:22 mail postfix/submission/smtpd[3036]: connect from localhost[127.0.0.1]
May 23 13:17:22 mail postfix/submission/smtpd[3036]: Anonymous TLS connection established from localhost[127.0.0.1]: TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signa>
May 23 13:17:22 mail postfix/submission/smtpd[3036]: 4QQTH65NNZz3cq6H: client=localhost[127.0.0.1], sasl_method=LOGIN, sasl_username=petrov@gkgroup.ru
May 23 13:17:22 mail postfix/cleanup[3052]: 4QQTH65NNZz3cq6H: message-id=<30b74af0cab6e948c7a51a2d1b307d9e@gkgroup.ru>
May 23 13:17:22 mail postfix/qmgr[2057]: 4QQTH65NNZz3cq6H: from=<petrov@gkgroup.ru>, size=659, nrcpt=1 (queue active)
May 23 13:17:22 mail roundcube: <tl39kq6a> User petrov@gkgroup.ru [192.168.0.50]; Message <30b74af0cab6e948c7a51a2d1b307d9e@gkgroup.ru> for petrov@yagroup.ru; 250: 2.0.0 Ok: queued as 4QQTH65NNZz3cq6H
May 23 13:17:22 mail postfix/submission/smtpd[3036]: disconnect from localhost[127.0.0.1] ehlo=2 starttls=1 auth=1 mail=1 rcpt=1 data=1 quit=1 commands=8
May 23 13:17:23 mail postfix/10025/smtpd[3063]: connect from localhost[127.0.0.1]
May 23 13:17:23 mail postfix/10025/smtpd[3063]: 4QQTH72QbLz3cqfS: client=localhost[127.0.0.1]
May 23 13:17:23 mail postfix/cleanup[3052]: 4QQTH72QbLz3cqfS: message-id=<30b74af0cab6e948c7a51a2d1b307d9e@gkgroup.ru>
May 23 13:17:23 mail postfix/10025/smtpd[3063]: disconnect from localhost[127.0.0.1] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5
May 23 13:17:23 mail postfix/qmgr[2057]: 4QQTH72QbLz3cqfS: from=<petrov@gkgroup.ru>, size=1954, nrcpt=1 (queue active)
May 23 13:17:23 mail amavis[2179]: (02179-01) Passed CLEAN {RelayedInternal}, ORIGINATING/MYNETS LOCAL [127.0.0.1]:49942 ESMTP/ESMTP <petrov@gkgroup.ru> -> <petrov@yagroup.ru>, (), Queue-ID: 4QQTH65NNZz3cq6H,>
May 23 13:17:23 mail postfix/amavis/smtp[3057]: 4QQTH65NNZz3cq6H: to=<petrov@yagroup.ru>, relay=127.0.0.1[127.0.0.1]:10026, delay=0.76, delays=0.2/0.03/0.02/0.51, dsn=2.0.0, status=sent (250 2.0.0 from MTA>
May 23 13:17:23 mail postfix/smtp[3064]: connect to yagroup.ru[192.168.0.2]:25: Connection refused
May 23 13:17:23 mail postfix/smtp[3064]: connect to yagroup.ru[192.168.0.3]:25: Connection refused
May 23 13:17:23 mail postfix/smtp[3064]: connect to yagroup.ru[192.168.0.4]:25: Connection refused
May 23 13:17:23 mail postfix/qmgr[2057]: 4QQTH65NNZz3cq6H: removed
May 23 13:17:23 mail postfix/smtp[3064]: 4QQTH72QbLz3cqfS: to=<petrov@yagroup.ru>, relay=none, delay=0.05, delays=0.01/0.03/0/0, dsn=4.4.1, status=deferred (connect to yagroup.ru[192.168.0.4]:25: Connect>
May 23 13:18:33 mail postfix/postsuper[3147]: Deleted: 1 message [/spoiler]

[spoiler=dig gkgroup.ru MX]
; <<>> DiG 9.16.37-Debian <<>> gkgroup.ru MX
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18341
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;gkgroup.ru.                      IN      MX

;; AUTHORITY SECTION:
gkgroup.ru.               3600    IN      SOA     dc2.yagroup.ru.ru. hostmaster.yagroup.ru 25 900 600 86400 3600

;; Query time: 0 msec
;; SERVER: 192.168.0.6#53(192.168.0.6)
;; WHEN: Tue May 23 13:48:24 +04 2023
;; MSG SIZE  rcvd: 97  [/spoiler]


[spoiler=digdig mail.gkgroup.ru MX]
; <<>> DiG 9.16.37-Debian <<>> mail.gkgroup.ru MX
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56903
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;mail.gkgroup.ru.                 IN      MX

;; ANSWER SECTION:
mail.gkgroup.ru.          3600    IN      MX      10 mail.gkgroup.ru.

;; ADDITIONAL SECTION:
mail.gkgroup.ru.          3600    IN      A       192.168.0.200
mail.gkgroup.ru.          3600    IN      A       11.0.111.11

;; Query time: 0 msec
;; SERVER: 192.168.0.6#53(192.168.0.6)
;; WHEN: Tue May 23 13:50:49 +04 2023
;; MSG SIZE  rcvd: 90 [/spoiler]

Новая беда, !*! ACCA, (Разное) 25-Ноя-21, 05:24  [ | | | ] [линейный вид] [смотреть все]
У CA теперь укороченый срок действий SSL сертификатов. Типа платишь за 3 года, а дают сертификат на 1 год с обязательством обновить.

Недавно наехали на предмет обновить. Прислали .zip с новым сертификатом и новым КЛЮЧОМ. Очень смешно. Полагаю, 99.95% дятлов тупо схавают.

Получается, HTTPS в глобальном смысле скомпрометирован. Какие-то ещё мысли, коллеги?



Ребята, на чем сейчас лучше писать парсер/грабер?, !*! slavush, (PHP) 25-Июн-18, 23:23  [ | | | ] [линейный вид] [смотреть все]
народ, на чем сейчас писать софт для анализа рынка, мониторинга прайсобменников в интернете?
не хочу отставать от развития технологий
раньше программировал на php, sql, javascript
IOException в Java вызывается isReachable, !*! nicholas21, (Java, JSP, сервлеты) 09-Фев-23, 12:29  [ | | | ] [линейный вид] [смотреть все]
Если isReachable выдает исключение IOException в Java, что делать правильно и почему?

Приложение, как мне кажется, должно останавливать процесс и выдавать системное сообщение: хост недоступен. Поскольку isReachable генерирует исключение IOException, хост недоступен. Но я не уверен, что решение. Я был бы признателен, если бы вы могли мне помочь.

большое спасибо

Какой верный путь для получения экземпляро объектов по их типу?, !*! Вервер, (PHP) 11-Фев-23, 12:05  [ | | | ] [линейный вид] [смотреть все]
Доброго дня Товарищи!

Я тут пишу свои всякие поделки, и вот заинтересовался вопросом, а правильный ли я выбрал подход к созданию экземпляра объекта по его ТИПУ? Поясню это на примере:

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


//Общий предок
Class Document {
    const DOC_DOGOVOR = 1;
    const DOC_PISMO = 2;

    static public getDocByType(int $docType){
        switch($docType){
            case self::DOC_DOGOVOR:
                return new Doc_Dogovor();
                break;

            case self::DOC_PISMO:
                return new Doc_Pismo();
                break;
        }

        return false;
    }
}

Class Doc_Dogovor extends Document {
    protected static $docType = Document::DOC_DOGOVOR;
    //Своя какая-то кухня с свойствами и методами такого
    //типа документов ...
}

Class Doc_Pismo extends Document {
    protected static $docType = Document::DOC_PISMO;
    //Своя какая-то кухня с свойствами и методами такого
    //типа документов ...
}

//Получить объект нужного типа (из БД к примеру тип приходит)
$docObj = Document::getDocByType($neededTypeFromDB);


Так вот вопрос собственно в том, насколько оправданно или наоборот плохо и как лучше всего такой тип задачи реализовывать?
А задача значит получение экземпляра объекта указанного типа. Видел, что во всяких автозагрузчиках классов сейчас используется динамическое их получение условно такой схемой что если запрошенного класса нет, он подгружается по имени и дальше также создаётся объект класса, название которого в переменной
$docObj = new $objClassName();

  • Ещё дополню, что почему не стал использовать вариант с получением условно по име, !*! Вервер (?), 12:10 , 11-Фев-23 (1) +8 [^]
    Ещё дополню, что почему не стал использовать вариант с получением условно по имени класса в переменной, у меня ощущение, что такое динамическое получение объекта чем то сродни exec(), а такого рода финты вроде не совсем правильно использовать. А варианты типов объектов класса свё равно же создаются и их можно сразу в перечисление switch case добавлять.

    сообщить модератору +8 +/ответить
  • gt оверквотинг удален Дяденька, а зачем вы диспатчите типы через enum, как буд, !*! Аноним (3), 16:03 , 11-Фев-23 (2) +4
    >[оверквотинг удален]
    > //Получить объект нужного типа (из БД к примеру тип приходит)
    > $docObj = Document::getDocByType($neededTypeFromDB);
    >

    > Так вот вопрос собственно в том, насколько оправданно или наоборот плохо и
    > как лучше всего такой тип задачи реализовывать?
    > А задача значит получение экземпляра объекта указанного типа. Видел, что во всяких
    > автозагрузчиках классов сейчас используется динамическое их получение условно такой схемой
    > что если запрошенного класса нет, он подгружается по имени и дальше
    > также создаётся объект класса, название которого в переменной
    >
    $docObj = new $objClassName();

    Дяденька, а зачем вы диспатчите типы через enum, как будто у вас algebraic data types вместо классов?

    сообщить модератору +4 +/ответить
  • А это вам как зайдёт, вот вы изобрели в пхп типы данных из хаскеля - осваивайте,, !*! Аноним (3), 16:13 , 11-Фев-23 (4) +5
    >Так вот вопрос собственно в том, насколько оправданно или наоборот плохо и как лучше всего такой тип задачи реализовывать?

    А это вам как зайдёт, вот вы изобрели в пхп типы данных из хаскеля - осваивайте, укладывая мысль в них.

    сообщить модератору +5 +/ответить
  • сделай обычный class Document От него наследуются class Dogovor и class Pismo , !*! Аноним (52), 07:01 , 12-Фев-23 (11) +5
    сделай обычный class Document. От него наследуются class Dogovor и class Pismo (еще обзови их class DoroBop и class nuCbMo, раз так фанатеешь от русских названий - сарказм на всякий случай). Класс Document при этом не должен знать о существовании своих подклассов и никак их не упоминать. Далее создай в совершенно отдельном месте функцию, которая принимает $typeFromDb и делает по нему return new КонкретныйКласс, можно через switch.
    сообщить модератору +5 +/ответить
  • Фабричный метод с маппингом - подход имеющий право на жизнь Вопрос в том, для ч, !*! Аноним (15), 18:55 , 12-Фев-23 (15) +8 [^]
    Фабричный метод с маппингом - подход имеющий право на жизнь. Вопрос в том, для чего это применять.

    Очевидно, что у вас есть некая универсальная форма, которая посылает ид типа создаваемого документа. И дальше вы создаете документ исходя из его ид. И в базу потом пишете с тем же самым ид.
    Вместо этого можно для каждого типа документа сделать свои формы, тип создаваемого документа разруливать по маршруту обработчика, ид для базы держать в константе класса и работать с ним только при записи в базу - то есть, в контроллере вообще никогда.

    сообщить модератору +8 +/ответить
  • Надо не играть в бабу Вангу и чётко спросить В чём смысол поделки, самопальная O, !*! Аноним (18), 14:01 , 15-Фев-23 (20) +6 [^]
    Надо не играть в бабу Вангу и чётко спросить:

    >Я тут пишу свои всякие поделки

    В чём смысол поделки, самопальная ORM?

    сообщить модератору +6 +/ответить


Настройка вывода PHP сообщений в лог Lighttpd, !*! Кривотолк, (Apache, http-серверы) 08-Фев-23, 21:42  [ | | | ] [линейный вид] [смотреть все]
Здравствуйте Товарищи АйТи-Специалисты!

Скажите, кто знает, как в lighttpd убрать лишние поля в выводе сообщений от php в лог?
Коряво сформулировал, вот поясню:

Связка у меня FreeBSD 13-STABLE + Lighttpd 1.4.68 + php82 в fastcgi режиме.

fastcgi.conf

server.modules += ( "mod_fastcgi" )
fastcgi.server = ( ".php" =>
    ( "php-local" =>
        (
            "socket"        => "/var/php-fpm/php-fpm.sock",
            "max-procs"     => 1,
            "broken-scriptfilename" => "enable",
        )
    )
)

vhosts.d/my_site.conf
$HTTP["host"] =~ "(my\.site)" {
    var.server_name = "my.site"
    http_host       = "my.site"
    server.document-root = vhosts_dir + "/my.site/html"
    accesslog.filename          = log_root + "/" + server_name + "_access.log"
    server.errorlog             = log_root + "/" + server_name + "_error.log"
}

php.ini
. . . . .
error_log = /var/log/php_errors.log
. . . . .

Так вот в итоге в /var/log/php_errors.log - идёт в нормальном формате

[08-Feb-2023 23:31:11 Europe/NSK] PHP error_log() MESSAGE
но туда валятся сообщения из php со всех виртуальных хостов на lighttpd, а вот в индивидуальный лог, средствами самого веб-сервера, идёт лог с добавочными полями о том из какого модуля сервера это пришло и т.п.:
2023-02-08 23:18:38: (mod_fastcgi.c.449) FastCGI-stderr:PHP message: PHP error_log() MESSAGE

т.е. лог идёт с лишним куском: (mod_fastcgi.c.449) FastCGI-stderr:PHP message:

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

Возможны ли автопроверки всех SQL запросов в своём приложении, !*! Кровосток, (MySQL) 07-Апр-22, 20:51  [ | | | ] [линейный вид] [смотреть все]
Уважаемые, доброго дня!

У меня свой самописный "фреймворк" назовём его так, и там соответственно свой класс для работы с БД MySQL, средства отладки и прочие личные хотелки.

Так вот, я хочу иметь возможность все генерируемые SQL запросы при включении дебага - чтобы автоматом проверялись на всякие SQL минусы. Типа того, что там например индексы не используются, или временная таблица на диске создалась... Я на самом деле просто в глубинах SQL не так силён, но хочу так сказать погрузиться.

Что у вас хочу спросить: Посоветуйте пожалуйста, как можно анализировать запрос, ну т.е. к примеру всем проходящим через обёртку работы с БД запросам SELECT перед их исполнением делать EXPLAIN и там анализировать то-то и то-то, и в случае таких-то проблем сигнализировать, что данный запрос потенциально "проблемный". Какие есть способы диагностики, может кроме EXPLAIN'а, с ним я немного знаком. Может там на уровне самой БД что-то можно включить, я смогу это связать со своим "конструктором".

  • Тоесть вы хотите самостоятельно, повторно, анализировать план запроса который сг, !*! ыы (?), 21:56 , 07-Апр-22 (1) +2
    > Уважаемые, доброго дня!
    > У меня свой самописный "фреймворк" назовём его так, и там соответственно свой
    > класс для работы с БД MySQL, средства отладки и прочие личные
    > хотелки.
    > Так вот, я хочу иметь возможность все генерируемые SQL запросы при включении
    > дебага - чтобы автоматом проверялись на всякие SQL минусы. Типа того,
    > что там например индексы не используются, или временная таблица на диске
    > создалась... Я на самом деле просто в глубинах SQL не так
    > силён, но хочу так сказать погрузиться.

    Тоесть вы хотите самостоятельно, повторно, анализировать план запроса который сгенерирует вам оптимизатор SQL сервера...

    Тут есть два момента - прочитать как работает оптимизаптор.. хотя бы в том же оракле...
    в мускуле он тоже примерно так же, по смыслу, но описание ораклового есть, а описание мускульного- незнаю, обычно посылают в исходники.. что как понимаете не одно и то же.. :)
    и подумать, сильно ли вы компетентнее программистов написавших оптимизатор... раз беретесь поправлять их...

    И второе - использование индексов оправдано только в некоторых случаях. Есть много случаев когда использование индекса делает запрос медленнее... сююююрпрааааайзззззз :)))
    Временная таблица на диске создается только если она нужна. Просто так она не создается. Проверьте... :)


    > Что у вас хочу спросить: Посоветуйте пожалуйста, как можно анализировать запрос, ну
    > т.е. к примеру всем проходящим через обёртку работы с БД запросам
    > SELECT перед их исполнением делать EXPLAIN и там анализировать то-то и
    > то-то, и в случае таких-то проблем сигнализировать, что данный запрос потенциально
    > "проблемный". Какие есть способы диагностики, может кроме EXPLAIN'а, с ним я
    > немного знаком. Может там на уровне самой БД что-то можно включить,
    > я смогу это связать со своим "конструктором".

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

    сообщить модератору +2 +/ответить
  • Начиная с какого-то уровня сложности выборок нельзя просто так взять и сказать, , !*! Аноним (5), 23:13 , 07-Апр-22 (2) +2
    Начиная с какого-то уровня сложности выборок нельзя просто так взять и сказать, что запрос неоптимален. Вы хотите искусственный интеллект изобрести.
    сообщить модератору +2 +/ответить


Окончательные классы в Java, которые не должны быть окончательн, !*! nicholas21, (Java, JSP, сервлеты) 25-Янв-23, 17:18  [ | | | ] [линейный вид] [смотреть все]
Недавно мне задали этот вопрос в интервью:

Можете ли вы назвать какой-либо класс в Java API, который является окончательным, которого не должно быть, или тот, который не должен быть и должен быть?

Я ничего не мог придумать. Вопрос подразумевает, что я должен знать все классы API, как свои пять пальцев, чего лично я не ожидаю от любого Java-разработчика.

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

  • Я бы наверно в шутку спросил, в какой версии Java Вопрос очевидно для завязыван, !*! Аноним (1), 18:11 , 25-Янв-23 (1)
    Я бы наверно в шутку спросил, в какой версии Java. Вопрос очевидно для завязывания разговора на свободную тему.
    сообщить модератору +/ответить
  • на слове окончательные можно было бы заканчивать сам тоже не в курсе, но скор, !*! SpaceRave (?), 22:11 , 25-Янв-23 (2)
    > Недавно мне задали этот вопрос в интервью:
    > Можете ли вы назвать какой-либо класс в Java API, который является окончательным,
    > которого не должно быть, или тот, который не должен быть и
    > должен быть?
    > Я ничего не мог придумать. Вопрос подразумевает, что я должен знать все
    > классы API, как свои пять пальцев, чего лично я не ожидаю
    > от любого Java-разработчика.
    > Если кто-нибудь знает такие классы, пожалуйста, приведите примеры.

    на слове окончательные можно было бы заканчивать... сам тоже не в курсе, но скорее всего это что-то из легаси, обычно для final классов есть хорошая причина в jdk

    ps: вас на какую позицию интервювировали?

    сообщить модератору +/ответить
сгенерировать последовательность чисел, !*! Romka, (MySQL) 06-Окт-21, 06:12  [ | | | ] [линейный вид] [смотреть все]
прошу вас не ругаться а просто помочь
сгенерировать последовательность чисел в mysql on 00001 до 10000 и вставить в таблицу


Создание сайта визитки на php, !*! steamgryshan, (PHP) 15-Фев-20, 18:22  [ | | | ] [линейный вид] [смотреть все]
Добрый день. Решил создать сайт школы в формате сайта-визитки на чистом PHP. Столкнулся с тем, что для меня проблематично разбить эту задачу на подзадачи, т.е., банально, трудно понять с чего начать. Очевидно, что первоначально это должна быть верстка, но хотелось бы понять и более "локальные" задачи. Посоветуете какой то выход из этой ситуации?
  • Возможно, что масштаб проекта вам позволит его выполнять с любым разбитием на за, !*! Licha Morada (ok), 20:57 , 15-Фев-20 (1)
    > Добрый день. Решил создать сайт школы в формате сайта-визитки на чистом PHP.
    > Столкнулся с тем, что для меня проблематично разбить эту задачу на
    > подзадачи, т.е., банально, трудно понять с чего начать. Очевидно, что первоначально
    > это должна быть верстка, но хотелось бы понять и более "локальные"
    > задачи. Посоветуете какой то выход из этой ситуации?

    Возможно, что масштаб проекта вам позволит его выполнять с любым разбитием на задачи, в любом порядке, с 10x оверхедом, и всё равно иметь хорошие шансы на успех.

    Запишите для себя, какую задачу должен решать ваш продукт. Пусть эти несколько строк или несколько слов отвечают на вопрос "Что в мире изменится к лучшему когда это будет сделано, по сравнению со случаем если этого сделано не будет". Нечто конкретное, приземлённое, про что будет легко отличить выполненную задачу от невыполненной.

    Возножно, имеет смысл сделать первые итерации не на PHP, а просто на HTML.

    Возможно, MVP (Minimal Viable Product) в вашем случае будет просто страничка на один экран с 0.5 кб текста, картинкой и контактными данными. На этом можно будет остановиться, или ответиь на вопрос "чего не хватает" и развивать дальше.

    Возможно, вам поможет нарисовать на бумажке примерную компоновку, сваять контент для примера (написать текст, добыть фотки) и закодить этот пример в HTML. Потом другой пример. Когда у вас их будет 2-3 штуки, должно стать ясно в чём разные странички будут похожи, а я чём отличаться.

    Веб рзработчиком не являюсь совсем, проходил мимо.

    сообщить модератору +/ответить
  • Открой для себя WordPress Это если тебе нужен сайт для школы, а не подзалачи , !*! Аноним (2), 22:05 , 15-Фев-20 (2) +1
    > Добрый день. Решил создать сайт школы в формате сайта-визитки на чистом PHP.
    > Столкнулся с тем, что для меня проблематично разбить эту задачу на
    > подзадачи, т.е., банально, трудно понять с чего начать. Очевидно, что первоначально
    > это должна быть верстка, но хотелось бы понять и более "локальные"
    > задачи. Посоветуете какой то выход из этой ситуации?

    Открой для себя WordPress.

    Это если тебе нужен сайт для школы, а не "подзалачи" "на чистом ПХП".

    сообщить модератору +1 +/ответить
  • Вы уже ошиблись, начиная планирование от инструмента, то есть от php Начать над, !*! Аноним (5), 23:11 , 15-Фев-20 (3)
    Вы уже ошиблись, начиная планирование от инструмента, то есть от php.
    Начать надо с понимания, какой требуется показать контент(что, о чем), каким образом(верстка, медиа), требуется ли интерактивность, взаимодействие с пользователями (какое именно).

    Если не требуется интерактив (не нужны чаты, форумы, регистрации и личные кабинеты с сохранением каких-то данных), вам вполне подойдет генератор статических сайтов. То есть, не нужно ничего делать на php. у этого подхода масса плюсов, его часто выбирают даже профессиональные программисты, если нужен простой сайт.

    Так-то вообще сайты визитки неактуальны уже лет 15. Страничка в контакте уже наверняка есть и вторичный по отношению к ней сайт вряд ли будет кому-то интересен. Если проект с целью обучения, лучше придумать какую-то другую тему и выбрать задачу нешаблонную. Например, текстовую игру, посвященную вашей школе.

    сообщить модератору +/ответить
  • Ваша постановка задачи столь наивна, что любой совет будет опираться на допущени, !*! ыы (?), 23:49 , 16-Фев-20 (6) +1
    Ваша постановка задачи столь наивна, что любой совет будет опираться на допущения, вероятно крайне далекие от реальности.

    Очевидно в вашей ситуации только то. что ни с одной из сторон предмета вы незнакомы в сколь нибудь полезной степени. А это означает практически только один практичный совет:

    почитайте уже что нибудь по предмету. А на форум лучше обращаться с конкретными вопросами.

    сообщить модератору +1 +/ответить
  • Локальная задача задать себе вопрос а смогу ли я написать безопасный код на пхп, !*! tonys (??), 17:46 , 20-Фев-20 (10)
    > Добрый день. Решил создать сайт школы в формате сайта-визитки на чистом PHP.
    > Столкнулся с тем, что для меня проблематично разбить эту задачу на
    > подзадачи, т.е., банально, трудно понять с чего начать. Очевидно, что первоначально
    > это должна быть верстка, но хотелось бы понять и более "локальные"
    > задачи. Посоветуете какой то выход из этой ситуации?

    Локальная задача задать себе вопрос "а смогу ли я написать безопасный код на пхп?".


    сообщить модератору +/ответить
  • 1 собираем и компонуем материал как это все должно выглядеть Можно в обычном в, !*! cool29 (?), 10:33 , 22-Фев-20 (11) +1
    > Добрый день. Решил создать сайт школы в формате сайта-визитки на чистом PHP.
    > Столкнулся с тем, что для меня проблематично разбить эту задачу на
    > подзадачи, т.е., банально, трудно понять с чего начать. Очевидно, что первоначально
    > это должна быть верстка, но хотелось бы понять и более "локальные"
    > задачи. Посоветуете какой то выход из этой ситуации?

    1) собираем и компонуем материал как это все должно выглядеть. Можно в обычном ворде. Определяемся с каждой страницей что и где у нас должно быть. В общем делаем простые макеты (чисто текст и картинки + описание ссылок и функционала).

    2) делаем карту сайта (лучше на бумаге или в том же ворде). Это в общем похоже на оглавление.

    3) Верстка: гуглим "botstrap шаблон для учреждения образования" ну или подобное

    4) Выбираем php инструмент по вкусу. Это может быть laravel(или другой фрэймворк) или cms (joomla, wordpress). Самый интерес это api на laravel и frontent на nuxt(это SSR для vue) + все это в Docker (4 месяца копаний и вы готовы к трудоустройству в web studio на junior), ну или js fullstek.

    5) Если вы хотите все таки самостоятельно разраббатывать а не использовать готовое, то используйте по максимуму уже готовые инструменты (composer, npm) и стандарты PHP (psr 4, 7). Окружение (т.е. всякие php, mysql, nodejs, nginx) только в Docker и только в Linux (ну ладно ладно, согласен на virtualbox в vagrant). Помните: разработка под web (не вестка и не дизайнерство!!!!) на винде, всегда подкидывает пусть и небольшие но лишние проблемы.

    6) При разработке помните все есть блог и все есть CRUD.

    7) НИКОГДА не разрабатывайте собственные костыли для авторизации. Взломают и присунут (а что и куда, не хочу даже говорить).

    8) А если все таки это разовая задача и вы не связываете свое будущее с разработкой, то все таки лучше взять cms. Но согласен, свое (даже чисто в развлекательных целях), делать гораздо интереснее. К тому же навык программирования (даже минимальный), никогда лишним не будет.

    9) а также используйте GIT. Пусть даже локально (без github) и в master-ветке. Но используйте. Вы даже не представляете скоко геммороя вы избежите при этом.

    Не ну я понимаю, что мои рекомендации слишком размытые. Но тут сложно что-то еще посоветовать. Ну может быть только еще один нюанс:
    В разработке инструмент часто не отличим от собственно решения задачи - и то и другое есть код. Соответственно представьте что вам нужно просверлить дырку. Вероятно вы купите для этого дрель или возьмете ее на прокат или просто попросите у знакомых. Но ВЫ НЕ БУДЕТЕ ДЕЛАТЬ ДРЕЛЬ. А даже если и сделаете что-то похожее на нее, качество будет несопоставимо с заводским продуктом.
    Но в разработке очень часто люди, вместо того что-бы сверлить дырки, делают дрели. И это еще пол-беды, но эти самописные дрели используют в собственных проектах. И в результате часто получается "взрыв дрели". Эти дрели кстати называют "велосипеды" и "костыли".
    Кроме того размер кода инструментов и кода решения задачи (так называемой бизнес-логики) может достигать соотношения: 99 к 1. Это означает что вы можете много дней, недель, месяцев  делать свой движок блога(что как раз и являеться инструментом), который все равно выйдет кривым косым и падающим, вместо того что-бы взять тот же laravel, изучить за пару дней его основные моменты (миграции, маршрутизация, работа с бд, безопасность, авторизация, тестирования, фронтент компоненты и интеграция c webpack). Т.е вы потратите не меньше месяца на то что можно сделать не напрягаясь за неделю.
    Поэтому лучший выход для начинающих это изучать процесс использования гоотовых компонентов. В том же PHP вы неизбежно столкнентесь с необходимостью понимания PSR и composer, а во фронтентде с webpack и его использованием в таких монстрах(в хорошем смысле) как react и vue.
    Да даже когда вы достигнете уровня мидла или сеньора, так ли уж появиться необходимость в разработке собственного инструментария, если сейчас (ну по крайней мере в web) 99% основного инструментария(именно готового кода инструментов, библиотек, фрэймворков) уже существует и собственно ваша основная основная задача это сборка проекта из готовых кирпичей(фрэймворков, библиотек) путем смазывания их цементом бизнес-логики.


    сообщить модератору +1 +/ответить
  • Здравствуйте Чтобы разобраться в том, как работать с php, можнопопробовать созд, !*! dcc0 (ok), 19:06 , 13-Май-22 (23)
    > Добрый день. Решил создать сайт школы в формате сайта-визитки на чистом PHP.
    > Столкнулся с тем, что для меня проблематично разбить эту задачу на
    > подзадачи, т.е., банально, трудно понять с чего начать. Очевидно, что первоначально
    > это должна быть верстка, но хотелось бы понять и более "локальные"
    > задачи. Посоветуете какой то выход из этой ситуации?

    Здравствуйте! Чтобы разобраться в том, как работать с php, можно
    попробовать создать две страницы php.
    1) Один php-файл с выводом информации из файла или БД.
    2) Второй файл с возможностью записи/удаления в/из файл или БД.
    И второй файл желательно под паролем.

    сообщить модератору +/ответить
  • да вроде то же самое случилось со мной, все еще ищу ответ, !*! nicholas21 (ok), 17:16 , 25-Янв-23 (37)
    да вроде то же самое случилось со мной, все еще ищу ответ
    сообщить модератору +/ответить


Вышкл OpenChatPhp-1.1., !*! dcc0, (PHP) 18-Окт-22, 05:38  [ | | | ] [линейный вид] [смотреть все]
Состоялся релиз открытого чата OpenChatPhp-1.1.
В этой версии появилась возможность устанавливать пароль для создания канала.
На главной странице теперь отображается только 10 каналов. Остальные каналы скрыты. Для работы в них требуется знать имена каналов.

Напомним особенности:
Чат обновляется с помощью Ajax,
в базе данных хранятся только последние 50 сообщений (настраивается пользователем). Сообщения чата сохраняются только у пользователей в браузере, что разгружает сервер и делает недоступным чтение чужой переписки.

Ссылка на архив на сервере gitflic:
https://gitflic.ru/project/dcc0/open/blob?file=OpenChatPhp-1...

  • Ажакс - это уже даже не смешно Можно реализовать EventSource Причем, без базы , !*! Аноним (5), 10:52 , 18-Окт-22 (1)
    Ажакс - это уже даже не смешно. Можно реализовать EventSource. Причем, без базы данных (если история не хранится, она не нужна).
    сообщить модератору +/ответить
  • gt оверквотинг удален Ссылка на гит исправлена https gitflic ru project dcc0, !*! dcc0 (ok), 18:03 , 19-Окт-22 (9)
    >[оверквотинг удален]
    > В этой версии появилась возможность устанавливать пароль для создания канала.
    > На главной странице теперь отображается только 10 каналов. Остальные каналы скрыты. Для
    > работы в них требуется знать имена каналов.
    > Напомним особенности:
    > Чат обновляется с помощью Ajax,
    > в базе данных хранятся только последние 50 сообщений (настраивается пользователем). Сообщения
    > чата сохраняются только у пользователей в браузере, что разгружает сервер и
    > делает недоступным чтение чужой переписки.
    > Ссылка на архив на сервере gitflic:
    > https://gitflic.ru/project/dcc0/open/blob?file=OpenChatPhp-1...

    Ссылка на гит исправлена:
    https://gitflic.ru/project/dcc0/open

    сообщить модератору +/ответить
  • хорошая работа с домашней задачей по PHP курсу this- link mysqli_connect p , !*! eRIC (ok), 20:37 , 03-Ноя-22 (18)
    > Состоялся релиз открытого чата OpenChatPhp-1.1.
    > https://gitflic.ru/project/dcc0/open/blob?file=OpenChatPhp-1...

    хорошая работа с домашней задачей по PHP курсу:

    $this->link=mysqli_connect('p:' . $this->host, $this->user, $this->password, $this->db_name )

    а почему не PDO?

    сообщить модератору +/ответить
  • ох уж это и дерьмо нет это ДЕРЬМИШЕ не надо выставлять на показ свои экскр, !*! Аноним (19), 13:48 , 11-Ноя-22 (19)
    ох уж это и дерьмо... нет... это ДЕРЬМИШЕ!
    не надо выставлять на показ свои экскременты, тебе ещё учиться и учиться программировать. читай книги, набирайся опыта, года через два может что то и получится у тебя написать.
    сообщить модератору +/ответить


Разумная пагинация, !*! CHIM, (PHP) 28-Окт-22, 10:35  [ | | | ] [линейный вид] [смотреть все]
Доброго времени суток уважаемые форумчане!

Вопрос мой заключается вот в чём. Я довольно давно занимаюсь простенькой разработкой WEB приложений и сайтов на php и всегда пытаюсь что-либо делать по другому и усовершенствовать свой код, сделать его более правильным и функциональным. Сейчас делая очередной проект меня посетила идея об изменении принципа пагинации. Как обычно происходила пагинация в моих проектах?
1. Был обычный запрос в базу данных с количеством записей,  делился на количество записей на странице и формировалось общее количество ссылок на страницы
2. Ссылки с переходом по GET на другие страницы передавали номер страницы для дальнейшего запроса в базу и среза offset, после чего выдавал новый срез данных и формировались страницы.

Всё просто до безобразия.
Но тут мне понадобилось сделать различные фильтры и поиск по всем(или определённым) полям, необходимой информации и динамически выводить это всё в таблицу. С этим проблем не возникло:
1. JS отслеживал ввод в поле поиска, селекты и выбор дат. Проверял все эти параметры в совокупности и отправлял через AJAX к PHP файлу
2. В PHP фале формировалось два запроса, первый был со всеми фильтрами и критериями поиска на количество записей, а второй с теми же критериями поиска, но с offset.

Данные в таблице успешно заполнялись, ссылки формировались, но при поиске или фильтрации я заполнял таблицу через innerHTML и вариантов добавить пагинацию не было, так как заполнялся один только id, а пагинация была в другом id. Соответственно пагинация не обновлялась. Было решено заносить данные для пагинации в сессии, но они срабатывали только после перехода или при перезагрузке страницы. В общем всё это выглядело  довольно-таки коряво. Я задумался, ведь я видел, как на многих сайтах страницы меняют содержимое при пагинации без перезагрузки. Начал копать в этом направлении и понял что в большинстве случаев, осуществляется полная загрузка данных в память, а далее просто js нарезается по странично. Если честно я сомневаюсь в разумности данного подхода, ведь если взять те же смартфоны и скажем таблицу из 1 миллиона строк, то загрузив это всё разом, всё будет ужасно тормозить. Всё-таки это огромный объём данных, который пусть сразу и не выводится на страницу, но хранится в памяти в виде массива данных.
Начал искать другие способы и наткнулся что сейчас многое делается на node.js + vue.js или react.js. Начал смотреть более подробно что за зверь такой этот node.js и везде русским по белому написано что это фактически замена любому серверному языку вроде php, python, perl, ruby и прочим. Тогда у меня появляется разумный(как мне кажется) вопрос, неужели нельзя создать динамическую пагинацию страниц без перезагрузки страницы на php+js без использования node.js? Или задумываясь об отзывчивых динамических интерфейсах уже нет речи о php и теперь нужно переучиваться на node.js?

  • Возьмите фреймворк, где уже реализована пагинация, и не мучайтесь Ларавел вам о, !*! Аноним (5), 12:38 , 28-Окт-22 (1)
    Возьмите фреймворк, где уже реализована пагинация, и не мучайтесь. Ларавел вам отлично подойдет.
    сообщить модератору +/ответить
  • Сейчас стараются отделять бэкэнд от фронтэнда Бэкэнд пишут на чём угодно, напри, !*! abi (?), 16:13 , 28-Окт-22 (3)
    Сейчас стараются отделять бэкэнд от фронтэнда. Бэкэнд пишут на чём угодно, например на php и делают там REST или GRAPHQL контроллеры.

    Фронт пишут на vue.js или на чём хотят, но на сервере никакого node.js нет. Он есть на машине разработчика для упаковки написанного кода. Когда я потыкал такой фреймворк ради интереса (quasar) я вообще не увидел там особого программирования на js.

    А принцип отдельного запроса для получения числа строк вообще не живёт на нагрузке/большом числе записей. Точное число строк так же мало кому нужно, не говоря уже о том, что пока навигируют туда-сюда, список может поменяться.

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

    сообщить модератору +/ответить
  • Просто используйте для ответа json, для начала можно просто отдавать 2 куска htm, !*! анонимомус (?), 17:31 , 02-Ноя-22 (7)
    Просто используйте для ответа json, для начала можно просто отдавать 2 куска html(если я правильно понял ваш поток сознания).

    > Я довольно давно занимаюсь простенькой разработкой WEB приложений и сайтов на php

    Чисто из интереса, давно - это сколько?

    сообщить модератору +/ответить
  • Не вижу проблемы, нужен только небольшой рефакторинг По-хорошему, ajax должен за, !*! wwwebc (ok), 17:07 , 03-Дек-22 (12)
    Не вижу проблемы, нужен только небольшой рефакторинг.
    По-хорошему, ajax должен запрашивать только данные, а не готовый html.
    Ответ в результате ajax-запроса будет выглядеть примерно так:

    {
        num_pages: 5,    // подсчитанное кол-во страниц, с учетом фильтров и т.п.
        page_limit: 50,  // кол-во записей на страницу
        data: [          // данные для текущей страницы
            { id: 123, text: "абырвалг..."},
            { id: 456, text: "абырвалг..."},
            { id: 789, text: "абырвалг..."}
        ]
    }

    сам запрос будет что-то типа такого:

    $.ajax({
        url: "/data.php",
        method: "post",
        dataType: "json", // важно указать, что данные возвращаются в формате json. как вариант, можно прописать нужный header в ответе от PHP
        data: {
            param1: "фильтр 1",
            param2: "фильтр 2"
        },
        success: function(response) {
            // console.log(response); // для отладки
            if (response.data) {
                // тут код для заполнения и отображения таблицы
            }
            if (response.num_pages > 1) {
                // тут код для отрисовки пагинатора
                // для этого достаточно знать, сколько всего страниц будет и сколько записей на каждую страницу
            }
            // если страница одна, то можно не выводить пагинатор
        }
    });

    Далее, с помощью js на стороне клиента можно сформировать и таблицу, и пагинатор (см. комменты в коде выше).

    Для пагинации можно взять любой готовый плагин jQuery, например, нашел вот такой простой плагин:
    https://www.jqueryscript.net/other/simple-versatile-paginati...

    сообщить модератору +/ответить
  • Привет, если интересно, посмотри код coffee cms там как раз идеология минимализм, !*! Oleg (??), 20:26 , 04-Дек-22 (15)
    Привет, если интересно, посмотри код coffee cms там как раз идеология минимализма хорошо реализована.
    сообщить модератору +/ответить
  • Доброго Всю тему не читал Самая простая пагинация делается с помощью инкремента , !*! dcc0 (ok), 12:15 , 14-Дек-22 (17)
    Доброго!
    Всю тему не читал.
    Самая простая пагинация делается с помощью инкремента и декремента переменной, которая передаётся методом POST или GET в качестве номера страницы для текстового файла или ID, если вывод из БД.
    Данный подход крайне прост, реализуется в PHP, но в то же время - это, скорее всего, самый надёжный подход.

    В Html5 фактитически уже есть тег для пагинации:
    https://www.w3schools.com/tags/tryit.asp?filename=tryhtml5_i...

    сообщить модератору +/ответить


Не работает директива Alias - почему?, !*! xintrea, (Apache, http-серверы) 18-Ноя-22, 14:11  [ | | | ] [линейный вид] [смотреть все]
Настраиваю сейчас gitweb. Сам CGI-скрипт работает, веб-интерфейс рисуется. Однако нет доступа к ресурсам http://our_server/git/static/..., т. е. к картинкам, CSS, JS-скриптам.

Конфиг в данный момент следующий:


...
<IfDefine ENABLE_GITWEB>

  # Turning on mod rewrite
  RewriteEngine on

  # Make the front page an internal rewrite to the gitweb script
  RewriteRule ^/git/$  /cgi-bin/gitweb.cgi [L,PT]

  # Make access for "dumb clients" work
  RewriteRule ^/git/(.*\.git/(?!/?(HEAD|info|objects|refs)).*)?$ /cgi-bin/gitweb.cgi%{REQUEST_URI}  [L,PT]

  Alias /git /home/git

  <Directory /home/git>
    Options +FollowSymLinks +ExecCGI
    AddHandler cgi-script .cgi
    Require all granted
    DirectoryIndex /cgi-bin/gitweb.cgi
  </Directory>
</IfDefine>

Я выяснил, что ресурсы лежат в каталоге /usr/share/gitweb/static. Поэтому подумал, что можно проблему решить такой опцией:


Alias /git/static /usr/share/gitweb/static

И с завершающим слешем пробовал:

Alias /git/static/ /usr/share/gitweb/static/


Опцию эту взял из документации git-scm (https://git-scm.com/docs/gitweb), прописываю рядом с Alias /git /home/git.

Но все равно, при запросе ресурсов типа http://our_server/git/static/gitweb.css выдается ошибка 404.

Вопрос: почему не работает данная опция? Вроде все правильно написал. Причем Alias /git /home/git - работает, без нее страница не генерируется. А алиас на static не работает.

Мультиканальный  чат, !*! dcc0, (PHP) 10-Янв-22, 18:41  [ | | | ] [линейный вид] [смотреть все]
Не помню, анонсировал ли я то, что написал открытый мультиканальный чат:
Исходники: https://github.com/dcc0/OpenChatPhp
Описание есть на github.
Модель MVC.
Технологии PHP7 (ООП), MYSQLI, AJAX, HTML5.
История чата хранится у клиента, что призвано заметно разгрузить сервер.
Мгновенное переключение между каналами мышью. Собственное оформление.

Особенности:
Автоматическое преобразование ссылок в чате, доступны изображения.

Пример работы:
http://comb.org.ru/chat/index.php

  • _htaccess это сильно - Кто-то еще использует апач , !*! shadow_alone (ok), 03:58 , 11-Янв-22 (1) –1
    _htaccess это сильно :-)
    Кто-то еще использует апач?
    сообщить модератору –1 +/ответить
  • gt оверквотинг удален Привет из 2005-го Спасиб за ностальгию , !*! Аноним (5), 11:50 , 11-Янв-22 (2) +1
    >[оверквотинг удален]
    > Исходники: https://github.com/dcc0/OpenChatPhp
    > Описание есть на github.
    > Модель MVC.
    > Технологии PHP7 (ООП), MYSQLI, AJAX, HTML5.
    > История чата хранится у клиента, что призвано заметно разгрузить сервер.
    > Мгновенное переключение между каналами мышью. Собственное оформление.
    > Особенности:
    > Автоматическое преобразование ссылок в чате, доступны изображения.
    > Пример работы:
    > http://comb.org.ru/chat/index.php

    Привет из 2005-го. Спасиб за ностальгию.

    сообщить модератору +1 +/ответить
  • gt оверквотинг удален Ну чисто поупражняться в стиле как оно там под капотом , !*! Виктор (??), 12:51 , 11-Янв-22 (3) –1
    >[оверквотинг удален]
    > Исходники: https://github.com/dcc0/OpenChatPhp
    > Описание есть на github.
    > Модель MVC.
    > Технологии PHP7 (ООП), MYSQLI, AJAX, HTML5.
    > История чата хранится у клиента, что призвано заметно разгрузить сервер.
    > Мгновенное переключение между каналами мышью. Собственное оформление.
    > Особенности:
    > Автоматическое преобразование ссылок в чате, доступны изображения.
    > Пример работы:
    > http://comb.org.ru/chat/index.php

    Ну чисто поупражняться в стиле "как оно там под капотом" наверно норм.. Но вообще Laravel бы хоть за основу взял чтоли... Писанины в разы меньше.

    сообщить модератору –1 +/ответить
  • Дорогой, я конечно понимаю, что дорого как память, что первый опыт и всё такое -, !*! freehck (ok), 17:01 , 17-Янв-22 (5)
    Дорогой, я конечно понимаю, что дорого как память, что первый опыт и всё такое -- но этот проект надо выбросить и забыть. И разумеется за публикацию такого ты заслуживаешь осуждения, равно как и каждый, кто публикует велосипеды.

    Любые языки в современном мире имеют библиотеку для работы с irc. Самый корректный способ реализации веб-чата, на каком бы языке ты ни писал -- поднять свой irc-сервер и заюзать подобную библиотеку.

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

    сообщить модератору +/ответить
  • тут помню, тут не помню , !*! Аноним (19), 14:17 , 11-Ноя-22 (17)
    тут помню, тут не помню...
    сообщить модератору +/ответить


Сылка на коды программ в книге Герберта Шилдта, !*! korbnik, (Java, JSP, сервлеты) 19-Окт-22, 15:18  [ | | | ] [линейный вид] [смотреть все]
Добрый день!

Подскажите, пожалуйста, ссылку на коды программ в книге Герберта Шилдта "Java Полное руководство 10-е издание".
В самой книге ссылка не работает.

Заранее благодарен. Борис.

Apache MPM ITK + PHP, !*! Pahanivo, (Модули apache) 14-Окт-22, 19:10  [ | | | ] [линейный вид] [смотреть все]
Имеется сабж.
Данный MPM позволяет отрабатывать под разными пользователями для разных vhost.

Исходно апач работает по дефолту под www-data:
ps axu |grep apache
root      370987  0.0  0.0 227504 35032 ?        Ss   09:40   0:00 /usr/sbin/apache2 -k start
www-data  370988  0.0  0.0 228060 16544 ?        S    09:40   0:00 /usr/sbin/apache2 -k start
www-data  370989  0.0  0.0 228060 16544 ?        S    09:40   0:00 /usr/sbin/apache2 -k start
www-data  370990  0.0  0.0 228072 16920 ?        S    09:40   0:00 /usr/sbin/apache2 -k start
www-data  370991  0.0  0.0 228072 16920 ?        S    09:40   0:00 /usr/sbin/apache2 -k start
все стандартно.

Заведен vhost, у него в настройках:
AssignUserID www-root www-root

Все работает - меняю у файлов владельца и группу на отличные от www-root - получаю форбидден, все логично.
Но вот phpinfo() упрямо показывает:
______
apache2handler
...
User/Group    www-data(33)/33
______
т.е. говорит что он работает под www-data.

Я было засомневался, но проверив созданием файла из php, он ожидаемо создается от www-root.
Почему php показывает другого пользователя??

Учебник по программированию Java, !*! korbnik, (Java, JSP, сервлеты) 05-Окт-22, 09:17  [ | | | ] [линейный вид] [смотреть все]
Добрый день!

Посоветуйте, пожалуйста, хороший учебник по программированию Java.

Не обязательно для начинающих, хотя можно и такой.

Заранее благодарен. Борис.

 
Пометить прочитанным Создать тему
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Архив | Избранное | Мое | Новое | | |



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру