@phpclubru

Страница 684 из 956
Dmitry
16.10.2018
20:25:28
TIME_WAIT - это закрытые уже соединения

Время
16.10.2018
20:25:28
если потоков скажем 100, то это будет в разы медленее идти всё. но будет.

Dmitry
16.10.2018
20:25:53
по идее TIME_WAIT - это между тем, как соединение закрылось и тем, как ты сказал curl_close

Время
16.10.2018
20:26:24
по идее TIME_WAIT - это между тем, как соединение закрылось и тем, как ты сказал curl_close
может быть они в соединениях какое то время тупо числятся?

Google
Pavel
16.10.2018
20:26:31
если ходить на низкий уровень то time_wait это также время до сборки мусора

Время
16.10.2018
20:26:39
а по факту сокеты не забивают

Pavel
16.10.2018
20:26:43
Если она у тебя не случилась или протекло что, то сокет может так и висеть

Dmitry
16.10.2018
20:26:43
ядром?

Pavel
16.10.2018
20:27:14
ядром?
Не, пхп интерпретатором

Dmitry
16.10.2018
20:27:53
мм... курл уже сказал ядру close на сокет, сборка мусора уже не должна влиять на сокеты ядра

Pavel
16.10.2018
20:27:54
а может быть и curl библиотекой, если там какой-то свой пул сделан

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

Можешь номер сокета логировать

Время
16.10.2018
20:29:53
Можешь номер сокета логировать
во! как мне это сделать? от курла получить номер сокета

и замерить время сколько он после закрытия висит

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

Dmitry
16.10.2018
20:31:50
кстати, попробуй CURLOPT_FORBID_REUSE = true

Google
Dmitry
16.10.2018
20:32:18
возможно курл не закрывает сокеты что бы реюзать их, это в принципе нормально

Pavel
16.10.2018
20:33:03
божечки сколько же проблем когда пытаешься заюзать пшп не по назначению ) Уже бы давно свой парсер на go написал или c++

Dmitry
16.10.2018
20:33:40
написание на go не даст автоматически знания, как работает tcp стек

Pavel
16.10.2018
20:34:06
Ну там хотя бы все инструменты наружу торчат, и наверняка можно будет номер сокета увидеть

А еще наплодить кучу горутин не парясь

Dmitry
16.10.2018
20:34:25
что такое номер сокета? ;)

Pavel
16.10.2018
20:35:11
Это число int которое возвращает функция создания сокета из ядра же

Dmitry
16.10.2018
20:44:56
ах, ну это можно и в proc глянуть, только толку то

Pavel
16.10.2018
20:51:28
Так то что надо изнутри приложения залогировать номера сокетов и посмотреть, какие из них зависают и есть ли какая-то закономерность

Может там не все висят а только какие-то определенные..

Gregory
17.10.2018
01:37:38
Доброго времени суток! Прошу помочь разобраться: Хочу, чтобы при создании экземпляра класса происходило подключение к БД, и в дальнейшем, работа с данной БД из методов класса. Однако после того, как объект БД был инициализирован в конструкторе, в других функциях переменная уже ничего не содержит. Ниже код: class user { //Параметры подключения к БД private $sdb_host = 'localhost'; private $sdb_name = 'test'; private $sdb_user = 'root'; private $sdb_password = '***'; public function __construct() { $sdb = new mysqli($sdb_host, $sdb_name, $sdb_user, $sdb_password); if ($sdb->connect_error) { die($sdb->connect_error . " PIZDETS"); } } function test() { var_dump($sdb); } } Вызов $user = new user; $user ->test(); дает значение NULL. Как правильно реализовать такое взаимодействие? Спасибо!

Если изменить код на function test() { var_dump($this->$sdb); } то сервак выдает ошибку 500 с описанием: PHP Fatal error: Cannot access empty property in *строка var_dump($this->$sdb);*

Дмитрий
17.10.2018
01:46:17
Привет, чтобы использовать какой то объект или переменную из других методов класса, необходимо её присвоить к свойству этого класса. В php это делается через ключевое слово $this. Таким образом нужно объявить свойство private $sdb; после этого в конструкторе присвоить свойству объект подключения к БД $this->sdb=new mysqli(...); Далее в других методах можно обращаться к $this->sdb, как к подключению к БД

еще советую сразу переменные называть camelCase типа private $sdbHost, private $sdbName. И классы называть с большой буквы

Gregory
17.10.2018
01:57:43
Привет, чтобы использовать какой то объект или переменную из других методов класса, необходимо её присвоить к свойству этого класса. В php это делается через ключевое слово $this. Таким образом нужно объявить свойство private $sdb; после этого в конструкторе присвоить свойству объект подключения к БД $this->sdb=new mysqli(...); Далее в других методах можно обращаться к $this->sdb, как к подключению к БД
Спасибо, что откликнулись! Изменил код, теперь ошибка 500 с тем же текстом на строку с созданием экземпляра БД class User { //Параметры подключения к БД private $sdb_host = 'localhost'; private $sdb_name = 'test'; private $sdb_user = 'root'; private $sdb_password = '***'; private $sdb; public function __construct() { $this->$sdb = new mysqli($sdb_host, $sdb_name, $sdb_user, $sdb_password); //На эту строку ругается PHP с ошибкой 500

Дмитрий
17.10.2018
01:59:21
Если прочитать внимательней, то видно как я показал присваивание $this->sdb=new mysqli(...); при обращении к свойству объекта я не указывал $ перед его именем sdb

чего и вам советую ?

Gregory
17.10.2018
02:01:10
Прошу прощения за глупость:) Мог бы и сам догадаться...

Дмитрий
17.10.2018
02:01:53
ничего) пока глаз не привык к таким штукам и не цепляется за них в коде)

Gregory
17.10.2018
02:02:23
Получается, что когда я обращаюсь к любому свойству класса - я ставлю $this-> и имя свойства, без $

Google
Дмитрий
17.10.2018
02:02:43
да, так точно

Gregory
17.10.2018
02:03:12
Иначе идентификатор рассматривается не как свойство класса, а как локальная для метода переменная. Я правильно понимаю?

да, так точно
Дмитрий, спасибо!

Gregory
17.10.2018
02:05:36
я прям чувстсвую, как над головой засветился значок LevelUp'а

Алексей
17.10.2018
02:05:51
Раньше в PhpStorm создавал файлы по пути файла в коде, если файла прописаного в коде не существует по alt + enter можно было его создать. Теперь там нет этого. Кто знает, что я выключил в настройках или это новая версия такая?

Дмитрий
17.10.2018
02:07:57
прикольная штука) не пробовал даже так))

Время
17.10.2018
07:55:56
Подскажите такой момент, curl в php подходит для многопоточных соединений, или же лучше использовать сокеты под это дело? Если речь идёт о 500 потоках и выше.

Бэлигто
17.10.2018
07:58:59
ghbdtn

привет

ррр
17.10.2018
07:59:20
ku

Бэлигто
17.10.2018
07:59:40
ты программист?

Admin
ERROR: S client not available

ррр
17.10.2018
07:59:55
учусь тип

Бэлигто
17.10.2018
08:00:17
я тоже платных курсах?

ютубом?

учишся?

Время
17.10.2018
08:35:54
подходит
То есть совершенно не важно на чем многопоточность реализовывать? А то некоторые имеют мнение, что курл для многопоточных задач не подходит, мол глючный, а сокеты лучше

dypa
17.10.2018
08:38:06
покажи код уже, гадать скучно

Google
dypa
17.10.2018
08:40:40
@radonezh_ru протести https://github.com/dypa/phpmulticurl

Время
17.10.2018
08:42:07
покажи код уже, гадать скучно
ок, щас подготовлю и скину, если сможете найти в нем беду, очень поможете.

покажи код уже, гадать скучно
https://pastebin.com/NUT6U41M вот мой чудо код, если сможете найти в нем проблему, которая забивает соединения, буду безумно рад. Вот этот скрипт я тупо запускаю 500 раз, из разных директорий, и рядом со скриптом своя база доменов которую он и обрабатывает.

Сергей З.
17.10.2018
08:57:25
if(curl_errno($ch)) { return 'debug_curl_err: '.curl_errno($ch).' - '.curl_error($ch); } curl_close($ch); - если ошибка, то не закроет?

может return заменить на какой-то logger->log(). потом curl_close b потом return?

Время
17.10.2018
09:01:27
как я так мог оподливиться...

curl_close($ch); не выполняется, именно поэтому соединения накапливаются стало быть?

if(curl_errno($ch)) { return 'debug_curl_err: '.curl_errno($ch).' - '.curl_error($ch); } curl_close($ch); - если ошибка, то не закроет?
Красавчик в общем! Щас буду тестировать по новой всё, но походу в этом то и есть беда.

Сергей З.
17.10.2018
09:07:37
та сам так часто "промазываю" ? Хорошо, если моможет. Скорее всего оно...

Время
17.10.2018
09:08:56
Ещё вопрос такой, тут человек советует один раз инициировать курл в самом начале скрипта ДО цикла $ch = curl_init(); а после цикла закрывать curl_close($ch); хорошая ли это идея, или лучше так не делать?

Vitaliy Nameless
17.10.2018
10:24:57
зря

if(curl_errno($ch)) { return 'debug_curl_err: '.curl_errno($ch).' - '.curl_error($ch); } curl_close($ch); - если ошибка, то не закроет?
вот поэтому я страдаю изза отсутствия менеджеров контекста...

Бэлигто
17.10.2018
12:03:03
привет

профессинал появится скоро я не профи

я сам застрял

пойду учить js

Страница 684 из 956