
Василий
16.03.2017
13:01:41
поток и читай

Yuriy
16.03.2017
13:03:18
а как правильно передать чтобы получить файл а не поток?

Alexander
16.03.2017
13:03:59
Сделай как работает ,) Потом заведешь pat project и разберешься

Василий
16.03.2017
13:06:39

Google

Василий
16.03.2017
13:07:07
отправь отдельным запросом, получи имя созраненного файла и прилои его к остальной отправке
либу какую подбери
тут вопрос больше к js, а не к php

Yuriy
16.03.2017
13:07:53
мне нужна альтернатива, т.к. форму использовать не могу из за накладок

Max
16.03.2017
14:08:31
http://stackoverflow.com/questions/9395911/sending-a-file-as-multipart-through-xmlhttprequest
и не забудь multipart/form-data
заголовок
и вот еще пример https://gist.github.com/ebidel/2410898
а проблема у тебя была в том что не правильно формируется тело multipart реквеста и из-за $_FILES пустой
хотя в потоке ты данные видишь

Yuriy
16.03.2017
15:07:59

Aleh
16.03.2017
17:24:20
посоны, вопрос про деструкторы, были ли у вас кейсы, ломался ли ваш код из-за изменений в gc и прочее?
если коротко, то зачем вы юзали и как сильно вас после этого наказала жизнь?

Google

Sergey
16.03.2017
17:29:41
в пхп даже не помню когда последний раз вручную деструктор делал
ну там максимум коннекты закрыть к кролику

da horsie
16.03.2017
17:30:42
мне нужен был враппер над курлом однажды. я в деструкторе убивал курловый хендлер
это был единственный раз

Aleh
16.03.2017
17:31:17

da horsie
16.03.2017
17:31:39
да ни зачем. надо же хоть раз в жизни деструктор заюзать

Sergey
16.03.2017
17:31:57
https://github.com/php-amqplib/RabbitMqBundle/blob/df756411351497063b79581a388589de200a496e/RabbitMq/BaseAmqp.php#L78

Aleh
16.03.2017
17:34:35
я думал это ты руками делал)

Sergey
16.03.2017
17:39:03
а какие у тебя были проблемы с gc?

Aleh
16.03.2017
17:40:07
никаких
да тут топят за то, что локи там освобождать удобно в деструкторе)

Sergey
16.03.2017
17:41:18
локи?

Aleh
16.03.2017
17:41:45
упс, опечатался
ну, лок на ресурс
блокировки во

Sergey
16.03.2017
17:43:19
ну я понял
если жизненный цикл обьекта совпадает с локом, то почему бы и нет)

Aleh
16.03.2017
17:43:58
нууууууууу
если вдруг совпадает с реализацией gc
жизненный цикл объекта

Google

Aleh
16.03.2017
17:44:20
хороший кейс)

Sergey
16.03.2017
17:45:22
а что gc? он молча вызовет destruct, дождется пока отработает и сольет обьект

Aleh
16.03.2017
17:45:32
да, но ты ж не знаешь когда

Sergey
16.03.2017
17:45:34
или ты за дедлоки переживаешь?
не знаешь когда destruct вызовут?

Aleh
16.03.2017
17:45:49
ну я за то, что руками лучше дернуть

Artem
16.03.2017
17:46:27
руками можно забыть или не отловить где-то исключение
raii на то и придумали
но в пыхе в документации я не видел гарантий что объект должен уничтожиться _сразу_ после исчезновения последней ссылки. Хотя на практике это всегда было так

Sergey
16.03.2017
17:47:46
destruct срабатывает даже при фаталах
ну и отрабатывает в ожидаемые моменты
его сложно проебать)

Artem
16.03.2017
17:48:04
деструктор - да, в этом его прелесть и есть
речь-то про ручное освобождение

Sergey
16.03.2017
17:48:36
мне правда finally вариант больше нравится
с ручным освобождением

Artem
16.03.2017
17:48:42
но только если php гарантирует момент вызова деструктора

Aleh
16.03.2017
17:48:45
ну про то, что raii круто, но момент смерти ты не контролируешь и не гарантируется
в gc
ну точнее, в пыхе\жсе

Google

Sergey
16.03.2017
17:49:13
момент смерти не гарантируется если у тебя циклические референсы
тогда придется ждать пока он освободит его
и кстати если прибить процесс через SIGINT то нифига не сработает)

Aleh
16.03.2017
17:50:06
в плюсах там, все достаточно ясно, убил объект и все готово)

Artem
16.03.2017
17:50:11
вроде вообще не гарантируется ни в каких случаях, как бы там написано что удаляется после того, как рефкаунт станет равным нулю, но не написано что _сразу_ после этого

Sergey
16.03.2017
17:51:13
если есть островки

Artem
16.03.2017
17:51:35
где такие гарантии описаны?

Sergey
16.03.2017
17:51:53
прям гарантии не описаны, а гц в доках описан

Admin
ERROR: S client not available

Artem
16.03.2017
17:54:46
там есть такое "when the "refcount" reaches zero, the variable container is removed from memory". Больше ничего. Мне не кажется это гарантией немедленного удаления или хотя бы вызова деструктора

Sergey
16.03.2017
17:55:33
ты даже если сделаешь
new A();
у тебя сразу же гц зачистит обьект
вышел из функции - почистило
и только в случае циклических зависимостей оно не сразу чистит

Artem
16.03.2017
17:56:21
по реализации так, а по документации таких гарантий нет
ну или я их не нашёл

Aleh
16.03.2017
17:58:13

Artem
16.03.2017
17:58:14
скорее всего это поведение уже никогда не поменяется, но хотелось бы официальных гарантий

Aleh
16.03.2017
17:59:01
вообще 5.2 -> 5.3 должны были быть bc, и на 7 наверное
надо потестить

Sergey
16.03.2017
17:59:20
в 7 гц не менялся

Artem
16.03.2017
17:59:36
всегда удалялось сразу как refcount станет 0

Google

Sergey
16.03.2017
17:59:38
в 7 менялась только аллокация памяти
можешь форсить и юзать gc_collect_cycles()

Artem
16.03.2017
18:02:26
про циклические ссылки разговор отдельный, там понятно что никаких гарантий никто не даст никогда. Проблема в том, что даже с самым простым случаем, когда циклов нет, момент вызова деструктора не гарантируется
а спецификацию кто-нибудь читал? Может там это написано, раз уж в доке нет
или спеку так и не приняли в итоге?

Sergey
16.03.2017
18:04:30
че ты так пристал к этим гарантиям? у тебя есть реальные кейсы?

Artem
16.03.2017
18:05:16
реальные кейсы для чего?

Aleh
16.03.2017
18:05:18
hhvm ))))

Sergey
16.03.2017
18:05:38
кейс когда после сброса рефкаунта обьект не уходит из памяти

Artem
16.03.2017
18:06:26
пока это не описано, полагаться на это нельзя. Причём тут конкретная реализация

Sergey
16.03.2017
18:06:37
hhvm ))))
у них там политика с выделением памяти на много приятнее кстати чем 7ке

Artem
16.03.2017
18:06:49
я тоже на эту реализацию завязывался временами, а потом плохо спал по ночам

Aleh
16.03.2017
18:07:08
или типа того

Sergey
16.03.2017
18:07:12
о как. ну так поведай нас в свои кошмары)

Aleh
16.03.2017
18:07:15
но я может че путаю

Artem
16.03.2017
18:08:53
о как. ну так поведай нас в свои кошмары)
да кошмар понятен - вдруг вызовется не в том порядке, что делать тогда. Может мне просто сильно везло всегда. Или выйдет новая версия пыха, в которой будет иначе и тогда придётся код переписывать и придумывать как сделать иначе
я, знаешь ли, привык писать чётко по доке. Если гарантий в доке нет, значит хожу по тонкому льду

Aleh
16.03.2017
18:09:43
код верифицируешь потом?

Sergey
16.03.2017
18:09:57
если тебе так важно когда вызовется деструктор, то логично ж не пихать в него такую логику?

Artem
16.03.2017
18:10:45
так про то и речь, что если бы гарантия была, то можно было бы пихать невозбранно
у меня на деструкторах было сделано иерархическое логирование: строился стек с информацией о бизнесовых процессах, чтобы понимать в результате какого именно процесса был сгенерён тот или иной лог. Ничего бы не случилось, если бы что-то тут пошло не так, но было бы очень неприятно