Сообщество - Программирование на PHP

Программирование на PHP

64 поста 1 971 подписчик

Популярные теги в сообществе:

0

Какие индексы существуют в PostgreSQL

Какие индексы существуют в PostgreSQL

Индекс B-дерева: это тип индекса по умолчанию в PostgreSQL, который используется для большинства типов данных. Он эффективен как для маленьких, так и для больших таблиц, а также для запросов на равенство и диапазона.

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

Индекс GiST (обобщенное дерево поиска): этот тип индекса используется для сложных типов данных, таких как геометрические или текстовые данные, а также для сложных запросов, включающих операции включения, перекрытия или расстояния.

Индекс SP-GiST (обобщенное дерево поиска с пространственным разделением): аналогичен индексу GiST, но его можно использовать для более сложных типов данных и более сложных запросов.

Индекс GIN (обобщенный инвертированный индекс): этот тип индекса используется для полнотекстового поиска и для типов данных, которые имеют большое количество различных значений.

Индекс BRIN (Block Range INdex): этот тип индекса используется для больших таблиц, которые физически упорядочены по индексированным столбцам, например данные временных рядов.

Индекс фильтра Блума: этот тип индекса используется для быстрой проверки того, присутствует ли значение в столбце или нет.

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

Показать полностью
5

Поиск в файлах CSV через базу данных

Имеется папка с большим количеством файлов формата CSV, все они одной структуры(столбцы одинаковы)

Файлы CSV являются текстовыми и имеют структуру через разделение символом ;

Сделаем обработку файлов и сохранение в базу данных

В общем виде, открываем файл на чтение, читаем каждую строку, получаем данные столбцов и сохраняем в таблицу:

$DIR = 'data/';
$files = scandir($DIR);
foreach($files as $k => $file)if($file!='.'&&$file!='..'){
$cfile = $DIR.$file;
$pi=pathinfo($cfile);
$open = fopen($cfile, "r");
$strnum=0;
while (($data = fgetcsv($open, 10000, ";")) !== FALSE){
$data = array_map( "convert", $data );
if($strnum>$proc['pos']){
DB_insert($DB,$data,$file);//записываем в таблицу
}
}
fclose($open);
}
function convert( $str ) {//преобразуем кодировку для базу данных
return iconv( "Windows-1251", "UTF-8", $str );
}

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

function DB_insert($DB,$data,$file){
$values = array();
$kol=0; $i=0; foreach($polya as $k => $v){
if(isset($data[$i])&&$data[$i]!='') $values[] = '"'.$DB->rescape($data[$i]).'"';
else { $values[] = '""'; $kol++; }
$i++;
}
if(count($polya)!=$kol){
$sql = 'INSERT INTO tablevins VALUES(0,"'.$DB->rescape($file).'",'.implode(',',$values).');';
$rez = $DB->QUR($sql);
}
}

Реализация WEB интерфейса для поиска данных

Поиск происходит по двум полям VIN и номеру кузова. Опция «тип поиска» позволяет объединять искомые по условию «И» или «ИЛИ»

Функция для поиска в таблице данных, универсальная и получает опции поиска через переменную $data

function DB_search($DB,$data){
$out = array(); $usl = array();
foreach($data['where'] as $k => $v){ if($v!=''){
$usl[] = $k.' LIKE "%'.$DB->rescape($v).'%"';
}
}
if(count($usl)){
$tip = ' OR '; if($data['tipsearch']==1) $tip = ' AND ';
$sql = 'SELECT * FROM tablevins WHERE '.implode($tip,$usl);
$rez = $DB->QUR_SEL($sql);
if(!$rez['err']&&$rez['kol']){ $out = $rez['rez']; }
}
return $out;
}

Более подробно можно посмотреть на https://alneo.ru/2022/12/poisk-v-fajlah-csv/

Показать полностью 1

Авторизация по AD в PHP

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

<?php

//ip адрес или название сервера ldap(AD)

//Порт подключения

$ldapport = "389";

//Полный путь к группе которой должен принадлежать человек,

//что бы пройти аутентификацию.

$memberof = "CN=ОТДЕЛ 1,OU=Security,OU=GROUPS,OU=GTN, DC=g,DC=group,DC=local";

//Откуда начинаем искать

$base = "OU=Work,OU=USERS,OU=GTN,DC=g,DC=group, DC=local";

//Собственно говоря фильтр по которому будем аутентифицировать пользователя

$filter = "sAMAccountName=";

//Если прилетели данные пользователя, то проверить его используя LDAP

$password = $_POST['password'];

$username = $_POST['username'];

//подсоединяемся к LDAP серверу

$ldap = ldap_connect("g.group.local") or die("Cant connect to LDAP Server");

//Включаем LDAP протокол версии 3

echo "connect to LDAP". "<br />";;

ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3) or die("Cant SELECTION LDAP Server");

if ($ldap)

{

// Пытаемся войти в LDAP при помощи введенных логина и пароля

$bind = ldap_bind($ldap,$username,$password);

if ($bind) //логин

{

echo "Autorize as : ". $_SERVER['AUTH_USER']. "<br />";;

// Проверим, является ли пользователь членом указанной группы.

$result = ldap_search($ldap,$base,"(&(memberOf=".$memberof.")(".$filter.$username."))") or die ("NO object"); //поиск по группе

$result = ldap_search($ldap,$memberof ,"member=*") or die ("NO object"); //вывести всех пользователей

echo "searching";

// Получаем количество результатов предыдущей проверки

$result_ent = ldap_get_entries($ldap,$result) or die("Error1");

echo "Res <".$result. "<br />";

}

else

{

die('Login failed');

}

}

// Если пользователь найден, т.е. результатов больше 0 (1 должен быть)

if ($result_ent['count'] != 0)

{

// тут код для запоминания авторизаЦии

echo "1";

}

else

{

echo "0";

}

?>

Авторизация по AD в PHP
Показать полностью 1
10

Что означает хорошее знание SQL в вакансиях?

Постоянно вижу такое требование в вакансиях на джуна на бэкенд, можете кто нибудь объяснить что это означает(по меркам новичка) ? Понятно что нужно знать что такое CRUD а дальше что?

0

Странное поведение бд, или я чего то не вижу?

Доброго утречка))

вопрос такой вот есть такой запрос к бд

insert into data_rows (ID,DATA_TYPE_ID,FIELD,`type`,DISPLAY_NAME,REQUIRED,BROWSE,`read`,EDIT,`add`,`delete`,DETAILS,`order`) values (356,1,'color','color','Color',0,1,1,1,1,1,'{}',15);

и он возвращает нормальный ответ

SQL Error [1062] [23000]: Duplicate entry '356' for key 'data_rows.PRIMARY' то есть все гуд


а вот такой же запрос только сгенерированный

insert into data_rows (ID,DATA_TYPE_ID,FIELD,`type`,DISPLAY_NAME,REQUIRED,BROWSE,`read`,EDIT,`add`,`delete`,DETAILS,`order`) values (356,1,'color','color','Color',0,1,1,1,1,1,'{}',15);


он возвращает вот это

SQL Error [1064] [42000]: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'insert into data_rows (ID,DATA_TYPE_ID,FIELD,`type`,DISPLAY_NAME,REQUIRED,BRO' at line 1


где я опечатался? не могу найти , глаз замылился видимо

и вообще может там непечатанные символы? на них mysql может реагировать?

Показать полностью

Проблема фронт или бак

Вот к примеру есть такой скрипт

Он обрабатываться апишкой и выполняет скрипт передаваемый ажакс.
вы скажете ужас ужас, инъекции и дыра в коде и я с вам согласен
но вот например такой код

Тут весь запрос зашифрован и расшифровывается на сервере, и вот что с ним не так? Чем он небезопасен? Параметры в val передаём.. все бекендеры кричат что мол низя, а почему нельзя?
Upd. Правильно сказали что есть вероятность хоть и низкая похищения самого ключа ну и соответственно полный доступ, обходим это шифрованием запроса с ключом плюс сессией, то есть шифрация будет только на одну сессию работать, соответственно ключ тут уже не поможет

Показать полностью
24

Почему мы не любим Legacy?

Всем ку! Не так давно я задался вопросом, а почему мне нравится такая нудная работа? На самом деле, ответ кроется не на поверхности. Чтобы понять всю суть любви к программированию, нужно копнуть немного глубже, нежели просто придерживаясь тех фактов, что у программистов высокая заработная плата (хотя, по секрету, это не совсем так).

Многим разработчикам действительно нравится создавать нечто новое, решать сложные и необычные задачи, однако, на практике, все выходит совершенно обратно. Чаще всего задачи скучные и однотипные, а работать приходится не с неизведанным и новым, а с устаревшим и скудным.

И ведь действительно, большинство наработок, используемых в бизнес-проектах, уже достаточно стары (возьмем банальные Java 8, PHP 3 или 5, C++7). Почему же так происходит? Все дело в том, что бизнесу не нужны новомодные решения (если речь не о стартапах) - бизнесу нужна стабильность, чтобы она стабильно приносила деньги с минимальными затратами, то есть для бизнеса лучше написанная система 2003 года, зато стабильная. Когда речь доходит до обновления какой-либо системы или сервиса с legacy-кодом, то процесс затягивается надолго, ибо бизнес начинает просчитывать риски, бюджет, время. Нельзя обновить систему так, чтобы она приносила убытки - это, как минимум, глупо.

В программировании достаточно часто встречаются такие проекты-динозавры, которые придерживаются принципа "работает - не трогай". И, чаще всего, джун, изучающий самые новые технологии, после успешно пройденного собеседования, сильно огорчачется, ведь ему приходится перелопачивать код, который в последний раз до него трогал только дед Василий в 1998 году, не закончивший пару фич из-за наступления маразма. И вот паренек (или девушка) трогает код динозавров с функциональным стилем, на старой CRM alpha-версии, используя при этом технологии, которые джун не изучал, ведь... он думал, что сфера ИТ никогда не стоит на месте, а шутки про legacy всегда были смешными, но смешно все, пока с этим не столкнешься.

Сфера IT действительно не стоит на месте, сервисы обновляются чуть ли не каждый день, каждый день появляется новый фреймворк, обновление для языка и т.д., но все забывают главное - бизнес должен быть стабильным. Просто крупным компаниям совершенно невыгодно переписывать базу, да и зачем, если это просто займет время и толком ничего не изменит (лишь на 0.0003 мс быстрее станет). Legacy делаются с упором на то, что никто и никогда не будет в него лезть, код должен быть максимально непонятным, держащимся на костылях и goto.

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

Показать полностью 4
7

Работа разработчиком в ИП

Всем ку! Буквально недавно я устроился веб-разработчиком на PHP в одно местное ИП (если считать по Москве). В общем, работка не пыльная - сидишь в офисе и делаешь сайты на заказ, а также занимаешься их поддержкой. Если так подумать, то что еще нужно для счастья? Думаю, что потребовалось неплохо оплачивать ту часть работы, которую я опишу ниже.

Все наши ребята занимаются не только разработкой и/или поддержкой сайтов, хотя именно "PHP-разработчик" вписан над графой "Должность", они охватывают больший спектр задач, чем могли себе представить изначально. То есть приходит PHP-разработчик и говорит HR'у: "хочу у вас работать на должности PHP-программист, заниматься созданием бекенда сайтов с нуля или, максимум, с использованием какого-либо движка для упрощения задачи себе и ускорения выполнения задачи для заказчика", в ответ же юнец слышит, что все будет именно так, что именно такой разработчик, выполняющий именно такие задачи, им и нужен. Зеленого принимают, неделька на вливание в коллектив, распределение задач, осознание происходящего.

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

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

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

Заработная плата работника также странно формируется — деньги за выполненные задачи, однако бывают задачи, которые можно выполнять месяцами и что же, сидеть без денег все это время? Нет, конечно! Задачи будут кидать и кидать... Без остановки. Когда у разработчика уже более 50 различных задач, каждая из которых "срочная", то абсолютно размываются какие-либо границы "когда это закончится". Задач становится все больше, времени все меньше, заказчики подгоняют, но у разработчика упал сервер, который в срочном порядке нужно поднять...

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

Каждый работник ИП, устроившись программистом, выполняет роли всех работников, то есть разработчику могут спокойно сказать "иди пиши статью", а сделать он ничего не сможет — штата не хватает, а организация выполнения задач хромает на своих трех сломанных ножках.

В ИП сложно работать, а с ИП трудно иметь дело.

Показать полностью 3
Отличная работа, все прочитано!