«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2017/08/14 07:43:56  №1044252 1
Принес задачу желающим немного размяться. Если есть вопросы то спрашивайте.
Аноним 2017/08/18 14:40:32  №1046265 2
CI.png (38, 512x512)
512x512
Привет, котоны. Занимаюсь сейчас разработкой проекта системы управления абонентами для местного провайдера. Суть в том, что часто приходится работать с IP-адресами, вследствие чего получается лютый говнокод т.к. приходится разбивать диапазоны на адреса, адреса на октеты, высчитывать подсети и т.д. Есть какие-нибудь библиотеки для удобной работы с IP? Пишу на Codeigniter 3 и для него точно таких либ нет, но зато находил просто на PHP, но что-то у меня с ними не срослось.
Аноним 2017/08/19 10:08:53  №1046697 3
>>1046265
Опытный игнайтеромакак в треде, что конкретно у тебя не получилось? Ты не смог либу подрубить в коде или что? И почему говнокод? Не можешь модель написать для работы с ip?

Приведи пример что ли типовых задач, интересно даже стало.
Ответы: >>1047802
Аноним 2017/08/19 13:41:44  №1046810 4
Кто-нибудь пользуется VS? Подходит для создания сайтов?
Ответы: >>1056189
Аноним 2017/08/19 17:51:31  №1046988 5
>>1044252
Лично я уже ускакал студентов пилить. Но можно и эту задачу посмотреть. У меня подозрение, что через рекурсию можно сделать, еще не пробовал. Можно и в лоб.
Я одного только не понял, почему функция называется persistence? Что это означает?
Ответы: >>1056189
Аноним 2017/08/21 09:22:26  №1047802 6
>>1046697
Ну ок, сейчас все распишу.
Текущая задача: Есть таблица абонентов, им выделяется определенный диапазон адресов (например 20.20.20.6/29, 8 адресов тобишь), также есть таблица услуг абонентов, услуги могут быть следующие: ТВ, телефония и интернет. В таблице услуг на ТВ и телефонию выделяется один фиксированный IP, а на интернет диапазон и хранится в базе он в таком виде: 20.20.20.6-20.20.20.8. На странице нужно отобразить какой адрес под какую услугу выделен и какие остались свободны. Получается если просто делать выборку из таблицы услуг, то получится получить только все занятые адреса (и то с адресами для интернета приходится повозиться). А вот чтобы показать свободные адреса приходится сильно говнокодить. https://ideone.com/LJ6xdf
А на счет библиотеки, вот например нашел такую https://github.com/tapmodo/php-ipv4
Игнайтер при инициализации библиотеки запускает конструктор, а конструктор этой либы запрашивает какое-то число типа long, я в принципе не знаю чего он хочет. Ну вот как-то так.
Ответы: >>1047807 >>1048411
Аноним 2017/08/21 09:51:53  №1047807 7
>>1047802
И еще вопрос такой: чтобы не пилить в контроллерах методы по 500 строк их лучше разбить на отдельные функции, и вызывать их в контроллере. А сами функции где лучше описывать, в этом же контроллере, в модели или в библиотеке?
Ответы: >>1048220 >>1048411
Аноним 2017/08/21 23:57:37  №1048278 8
Слышал мнение, что цены и похожие дробные значения стоит хранить не в Decimal, а в двух полях Int ? MySql
Есть в этом смысл? Зачем так извращаться?
Ничего не смог нагулить по этой теме.
Ответы: >>1056189
Аноним 2017/08/22 01:39:22  №1048364 9
wp.png (70, 822x573)
573x822
Почаны, я тут ковыряюсь в вордпресе и азах php и не могу понять работает простой if.

Как я думаю пикрил должнен работать: если категория является подкатегорией родителя с айди 4 - напечатать название, если нет - цифру 1.

Как она работает: если категория является подкатегорией родителя - напечатать название И ВСЕГДА печатает единицу.

Почему так происходит?
Ответы: >>1048400 >>1056189
Аноним 2017/08/22 06:27:14  №1048411 10
>>1047802
Лень разбирать детально твой код, но как я понял:

$customer_internet_ip = array(); //Массив назначенных абоненту адресов, определенных под интернет
$customer_ip = array(); //Массив назначенных абоненту адресов
$customer_free_ip = array(); //Массив свободных адресов абонента
Эти 3 массива из базы прилетает в метод?

Если ты не можешь средствами мускуля сделать 1 грамотный запрос, и в итоге вынужден средствами пхп фильтровать/пересортировывать или еще как-то работать с массивами - это нормально я думаю, ты же не можешь неделю ебаться с одним запросом если плохо знаешь мускуль.

И вообще это ведь не в контроллере у тебя этот код?
Если в контроллере то вынеси это в отдельный метод либы по работе с ip (если нет то создай её): https://www.codeigniter.com/userguide3/general/creating_libraries.html
В контроллере потом просто пишешь:

$this->load->library('ip_stuff');
$view_data['free_ips'] = $this->ip_stuff->get_free_ip($customer_internet_ip, $customer_ip, $customer_free_ip);
//$view_data - массив инфы который ты собираешь для вьюхи
$this->load->view('uslugi', $view_data);

То есть ты просто портянку кода перенес в отдельную функцию и поручаешь его ей.

>Игнайтер при инициализации библиотеки запускает конструктор
Во первых вот форк этой либы и чел что-то там работает над ней https://github.com/colinodell/php-ipv4

Во вторых ты когда создаешь новый объект у себя в коде, то это не игнайтер что-то требует, а у самого класса есть метод конструктор. Он на то и конструктор, что автоматически выполняется при создании объекта.
Пикрил1 - ты ему должен скормить ip туда
Там же есть примеры использования - пикрил2.

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

>>1047807
>чтобы не пилить в контроллерах методы по 500 строк их лучше разбить на отдельные функции, и вызывать их в контроллере.
Да. Любой код который ты можешь обернуть в функцию лучше обернуть и вынести в модель/либу.

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

Еще если у тебя например есть код который ты используешь в каждом методе контроллера, то ты его должен выносить в конструктор контроллера.
Скажем для доступа в контроллер личного кабинета юзер должен быть обязательно залогиненным, вот проверку на то что он залогиненность(куки или что у вас там) ты и выносишь в конструктор этого контроллера. И когда юзер будет ломиться в любой метод этого контроллера например /site/user/cabinet - то будет выполняться проверка его подлинности на этапе конструктора контроллера user

Далее если у тебя например есть код который используется во всех контроллерах на сайте: например подгрузка языка. То ты должен создать какой-то базовый контроллер который будет наследоваться от CI_controller - в его конструктор вынести этот код, и этого базового уже наследовать свои контроллеры, а в их конструкторах подгружать их конструкторы через parent::__construct
https://www.codeigniter.com/userguide3/general/core_classes.html


Ответы: >>1048478
Аноним 2017/08/22 09:20:21  №1048478 11
>>1048411
>Или ты просто либу засунул в папочку и игнайтер сам пытается создать объект без твоих выдзовов либы где-либо в коде?
Именно так. Просто загрузил либу и сразу эксепшн. Все остальные библиотеки, которыми я пользуюсь без конструкторов, поэтому у меня с этим проблема возникла.
Вообще, все что ты мне написал я и до этого знал, но все равно спасибо за развернутый ответ. Теперь буду выносить все методы в библиотеки.
Ответы: >>1048497 >>1048564
Аноним 2017/08/22 11:21:52  №1048564 12
>>1048478
Мне кажется ты что-то не так сделал.
я поключал в игнайтере вот эту вот тяжеловесную поебень: https://github.com/tecnickcom/TCPDF
и там тоже есть конструктор и всё такое. И всё работало. Возможно ты всё таки как-то не так подключаешь. Ты через автолоад подгружаешь левые либы или в коде вручную?
Ответы: >>1048584
Аноним 2017/08/22 11:49:39  №1048584 13
>>1048564
Положил файлы Address, Subnet и Subnetiteraror в папку libraries/ipv4. Подключаю так: $this->load->library('ipv4/Address');
И на этой строке эксепшн об отсутствующем параметре конструктора. Я понимаю что при подключении библиотеки вторым параметром можно передавать настройки для конструктора, но я все еще не знаю что за $long от меня хочет этот конструктор.
Ответы: >>1056189
Аноним 2017/08/22 18:55:47  №1048771 14
Где-нибудь можно посмотреть, как устроены внутри встроенные в ядро языка функции? В частности, меня интересуют функции сортировки массивов.
Ответы: >>1056189
Аноним 2017/09/02 17:26:25  №1056189 15
>>1048771

Да, PHP написан на Си, исходники открыты. Вот пример функции сортировки: https://github.com/php/php-src/blob/master/ext/standard/array.c#L922

>>1048584

Тебе надо разобраться с библиотекой, я не видел код, но предполагаю, что long - это численное представление IP-адреса. Ну то есть число, которое получается, если взять 4 байта из IP адреса и представить как число.

Сторонние библиотеки лучше ставить через композер, на худой конец вручную в отдельную папку вне codeigniter. Подключать через автозагрузку или реквайрами.

Ну и справедливости ради, для преобразования IP сложный ООП не нужен, хватит статической функции.

>>1048364

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

>>1048278

В чем выгода? Для цен иногда используют числа с фиксированной запятой (DECIMAL в БД).

>>1046988

> почему функция называется persistence? Что это означает?
У тебя же есть гугл под рукой, анон.

>>1046810

Обычно используют Sublime, Atom, Brackets, Notepad++, Netbeans, Eclipse PDT, PhpStorm.
Ответы: >>1056190
Аноним 2017/09/02 17:27:35  №1056190 16
напомню, что в старом треде проверил задачи:

про https://github.com/pricklynut/testhub >>1053064
про https://github.com/telepok/php-test/blob/master/oop4.php >>1056159
вопрос, где можно посмотреть исходники функций сортировки >>1056189

>>1056163

Добавить несколько букв наверно? Вообще, она на изучение функции strtr, если ты ее знаешь, можно не делать.