Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Кто разбирается во "внутренностях" PHP драйвере?  [new]
Alexey Kovyazin
Member

Откуда: Moscow
Сообщений: 498
Всем привет,

если кто-нибудь разбирался или разбирается в начинке PHP-драйвере Firebird, напишите мне ak@ibase.ru, пожалуйста.

With best regards,
Alexey Kovyazin
HQbird www.ib-aid.com
Техподдержка www.ibase.ru
4 апр 19, 11:12    [21852272]     Ответить | Цитировать Сообщить модератору
 Re: Кто разбирается во "внутренностях" PHP драйвере?  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10020
Alexey Kovyazin,

я во внутренностях PDO немного разбираюсь. Даже багу там поправил. Ещё там разбирается Dorin Marcoci

Или речь про ibase_* драйвер который в PHP 8.0 решили убрать?
4 апр 19, 12:28    [21852457]     Ответить | Цитировать Сообщить модератору
 Re: Кто разбирается во "внутренностях" PHP драйвере?  [new]
o_v_a
Member

Откуда: Тула
Сообщений: 1071
Во кипит-то... https://externals.io/message/104883#104990
8 апр 19, 16:43    [21856199]     Ответить | Цитировать Сообщить модератору
 Re: Кто разбирается во "внутренностях" PHP драйвере?  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30502

пишут, пишут...
конгресс, немцы какие-то...
голова пухнет!
(С)

Posted via ActualForum NNTP Server 1.5

8 апр 19, 16:54    [21856212]     Ответить | Цитировать Сообщить модератору
 Re: Кто разбирается во "внутренностях" PHP драйвере?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48421

PHP изначально был ещё одним странным языком для генерации HTML. Назачем его ещё
поддерживают и куда-то развивают - непонятно в принципе.

Posted via ActualForum NNTP Server 1.5

8 апр 19, 16:56    [21856214]     Ответить | Цитировать Сообщить модератору
 Re: Кто разбирается во "внутренностях" PHP драйвере?  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30502

это стильно, модно, молодёжно! (С)

Posted via ActualForum NNTP Server 1.5

8 апр 19, 16:58    [21856215]     Ответить | Цитировать Сообщить модератору
 Re: Кто разбирается во "внутренностях" PHP драйвере?  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10020
o_v_a,

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

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

Порадовала новость https://firebirdsql.org/en/news/revival-of-php-driver-development/
Там Мартин Кодитц чего то делает, но что именно не ясно. Его форка в котором есть хоть какие-то изменения я не нашёл, наверное в приватной ветке. Можно было бы помочь, если понимать, что именно надо исправлять.

Что касается PHP PDO, то оно тоже не идеально.
Во-первых оно не поддерживает специфичных фич Firebird:
- множество транзакций на соединение
- события
- доступ к сервис API
- возможность узнать типы и свойства параметров после подготовки запроса

Во-вторых даже имеющиеся возможности PDO сделаны не до конца, так функция getColumnMeta не реализована вовсе. Параметры внутри реализованы тоже так себе: по возможности внутрях всё переводится в текст и меняется тип параметра, что уничтожает сведения о предыдущем значении типа. Я это понял когда на выходных прикручивал возможность передачи BOOLEAN в качестве параметра.
8 апр 19, 17:10    [21856244]     Ответить | Цитировать Сообщить модератору
 Re: Кто разбирается во "внутренностях" PHP драйвере?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48421

Чисто любопытно: про драйвер к LUA уже все забыли или кто-то ещё его пилит?

Posted via ActualForum NNTP Server 1.5

8 апр 19, 17:18    [21856264]     Ответить | Цитировать Сообщить модератору
 Re: Кто разбирается во "внутренностях" PHP драйвере?  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30502

08.04.2019 17:18, Dimitry Sibiryakov пишет:
> Чисто любопытно: про драйвер к LUA уже все забыли или кто-то ещё его пилит?

еретики!

Posted via ActualForum NNTP Server 1.5

8 апр 19, 17:32    [21856287]     Ответить | Цитировать Сообщить модератору
 Re: Кто разбирается во "внутренностях" PHP драйвере?  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1690
Dimitry Sibiryakov
PHP изначально был ещё одним странным языком для генерации HTML. Назачем его ещё
поддерживают и куда-то развивают - непонятно в принципе.

ну как бы есть спрос - https://w3techs.com/technologies/overview/programming_language/all
а причинах модно долго рассуждать, но факт остается фактом

Мимопроходящий
это стильно, модно, молодёжно! (С)

стильно модно молодежно это nodejs ))
8 апр 19, 20:09    [21856453]     Ответить | Цитировать Сообщить модератору
 Re: Кто разбирается во "внутренностях" PHP драйвере?  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1690
Симонов Денис
Очень неприятный момент с тем что параметры в подготовленный запрос можно передавать, только как переменное количество параметров. Крайне уродливый код выходит.

не понял о чем ты
??
8 апр 19, 20:10    [21856454]     Ответить | Цитировать Сообщить модератору
 Re: Кто разбирается во "внутренностях" PHP драйвере?  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10020
Дегтярев Евгений,

да вот про это

ibase_execute ( resource $query [, mixed $... ] ) : resource


нет чтобы

ibase_execute ( resource $query, array $params = []) : resource
8 апр 19, 20:14    [21856457]     Ответить | Цитировать Сообщить модератору
 Re: Кто разбирается во "внутренностях" PHP драйвере?  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1690
сложно судить почему сделали так а ни эдак, но я не вижу в этом проблемы, один раз обернул и забыл
8 апр 19, 20:19    [21856461]     Ответить | Цитировать Сообщить модератору
 Re: Кто разбирается во "внутренностях" PHP драйвере?  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1690
зы
поясните откуда весь этот кипишь пошел?
8 апр 19, 20:20    [21856464]     Ответить | Цитировать Сообщить модератору
 Re: Кто разбирается во "внутренностях" PHP драйвере?  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10020
Дегтярев Евгений,

да всё очень просто в PHP 8.0 (следующая за 7.4) решили переместить ibase_ расширение в PECL, потому что хендлы не потокобезопасные. Оно вроде как ничего, так как хендл соединения не выходит за пределы работающего скрипта, за исключением использования функции ibase_wait_event
8 апр 19, 20:27    [21856465]     Ответить | Цитировать Сообщить модератору
 Re: Кто разбирается во "внутренностях" PHP драйвере?  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10020
Дегтярев Евгений
сложно судить почему сделали так а ни эдак, но я не вижу в этом проблемы, один раз обернул и забыл


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

        $function = new \ReflectionFunction('ibase_execute');

        if (count($args) == 0) {
            $result = $function->invoke($this->sth);
        } else {
            array_unshift($args, $this->sth);
            $result = $function->invokeArgs($args);
        }


хрень с eval ещё большее уродство
8 апр 19, 20:34    [21856467]     Ответить | Цитировать Сообщить модератору
 Re: Кто разбирается во "внутренностях" PHP драйвере?  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1690
я вместо reflection использовал call_user_func_array
после выхода 5ки сделал себе маленьку библитечку и даже не вспоминал как оно там внутрях работает
8 апр 19, 20:43    [21856473]     Ответить | Цитировать Сообщить модератору
 Re: Кто разбирается во "внутренностях" PHP драйвере?  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10020
Дегтярев Евгений,

мне не нравится когда хендл перемешан с параметрами в одном массиве. Кстати да call_user_func_array наверное подешевле будет
8 апр 19, 20:46    [21856475]     Ответить | Цитировать Сообщить модератору
 Re: Кто разбирается во "внутренностях" PHP драйвере?  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1690
Симонов Денис
да всё очень просто в PHP 8.0 (следующая за 7.4) решили переместить ibase_ расширение в PECL, потому что хендлы не потокобезопасные. Оно вроде как ничего, так как хендл соединения не выходит за пределы работающего скрипта, за исключением использования функции ibase_wait_event

посмотрел, с точки зрения разработчиков ядра пыха перенос в pecl выглядит логичным
да для тех кто пользуется неприятно, но тем не менее логично
8 апр 19, 20:53    [21856478]     Ответить | Цитировать Сообщить модератору
 Re: Кто разбирается во "внутренностях" PHP драйвере?  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1690
Симонов Денис
мне не нравится когда хендл перемешан с параметрами в одном массиве.

ну не перемешаны, порядок все таки важен

с одной стороны да, "не аккуратненько как-то", с другой стороны, а не пох ли, все равно в коллфреме все параметры друг за дружкой лягут
8 апр 19, 20:58    [21856481]     Ответить | Цитировать Сообщить модератору
 Re: Кто разбирается во "внутренностях" PHP драйвере?  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10020
Дегтярев Евгений,

кстати посмотрел в новом коде тоже используется call_user_func_array.

Тут неаккуратно со многих позиций. В массив аргументов включается хендл 1 элементом, теперь если надо использовать этот массив дальше, то сразу после вызова ibase_execute, его надо удалить хендл из массива. А ещё массив и по ссылке может быть передан.
8 апр 19, 21:10    [21856487]     Ответить | Цитировать Сообщить модератору
 Re: Кто разбирается во "внутренностях" PHP драйвере?  [new]
Siemargl
Member

Откуда: 010100
Сообщений: 6285
Dimitry Sibiryakov
PHP изначально был ещё одним странным языком для генерации HTML. Назачем его ещё
поддерживают и куда-то развивают - непонятно в принципе.
Ну он был как бы не первым <языком для генерации HTML>. Да и на него проще переходить с С-лайк
8 апр 19, 21:43    [21856505]     Ответить | Цитировать Сообщить модератору
 Re: Кто разбирается во "внутренностях" PHP драйвере?  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1690
Симонов Денис
В массив аргументов включается хендл 1 элементом, теперь если надо использовать этот массив дальше, то сразу после вызова ibase_execute, его надо удалить хендл из массива.

сделай на временной копии если так нужно
{
    $tmp = $params;
    array_unshift($tmp, $this->stmt);
    call_user_func_array("ibase_execute", $tmp);
    ...


А ещё массив и по ссылке может быть передан.

начиная с 5.0 передача по ссылке типа
$smt->execute(&$params)
мягко говоря не приветствуется
если параметр необходимо передать по ссылке, то это указывается в объявлении функции, иначе ссзб
9 апр 19, 10:09    [21856777]     Ответить | Цитировать Сообщить модератору
 Re: Кто разбирается во "внутренностях" PHP драйвере?  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10020
Дегтярев Евгений,

так речь и идёт про передачу по ссылке, которая указывается которое указывается в объявлении функции. Короче это попытка эмуляции PDO методов bindParam, bindValue. Первый связывает по ссылке, второй по значению.

Я в своей реализации все эти фиговины уже обошёл, и не спрашиваю как это сделать. Т.е. когда в своём коде вызываешь обёртку, то вроде всё нормально, но внутрях обёртки ужас, потому что функция ibase_execute изначально сделана неудобной. Собственно это расширение сделано вполне себе в стиле PHP 3, PHP 4 когда параметры у функций были в фиг знает в каком порядке.
9 апр 19, 10:55    [21856846]     Ответить | Цитировать Сообщить модератору
 Re: Кто разбирается во "внутренностях" PHP драйвере?  [new]
Коваленко Дмитрий
Member

Откуда: Липецк
Сообщений: 550
Симонов Денис
я во внутренностях PDO немного разбираюсь. Даже багу там поправил. Ещё там разбирается Dorin Marcoci

Вот вдвоем и тащите кольцо в Мордовию.

Группа поддержки вроде тоже вырисовывается.

:))
9 апр 19, 13:38    [21857094]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Firebird, InterBase Ответить