• Вместо страницы сайта yii2 на ubuntu 16.04 отображается текст, как исправить?

    @Silverviql Автор вопроса
    Максим Федоров, ваш пример от моего отличается только путями и все .
    server {
    charset utf-8;
    client_max_body_size 128M;

    listen 80; ## listen for ipv4
    #listen [::]:80 default_server ipv6only=on; ## слушаем ipv6

    server_name mysite.test;
    #root /var/www/yii/project/backend/web;
    root /var/www/yii/crm_2.3/frontend/web;
    #root /var/www/yii/crm_2.3/backend/web;
    index index.php;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    location / {
    # Перенаправляем все запросы к несуществующим директориям и файлам на index.php
    try_files $uri $uri/ /index.php?$args;
    }

    # раскомментируйте строки ниже во избежание обработки Yii обращений к несуществующим статическим файлам
    location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
    try_files $uri =404;
    access_log off;
    log_not_found off;
    expires off;
    expires off;
    }
    #error_page 404 /404.html;

    location ~ \.php$ {
    include fastcgi_params;
    #fastcgi_pass 127.0.0.1:9000;
    #fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    fastcgi_read_timeout 3000;

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_buffers 16 16k;
    fastcgi_buffer_size 32k;
    }

    location ~ /\.(ht|svn|git) {
    access_log off;
    log_not_found off;
    deny all;
    }
    }

  • Вместо страницы сайта yii2 на ubuntu 16.04 отображается текст, как исправить?

    @Silverviql Автор вопроса
    Максим Федоров, server {
    charset utf-8;
    client_max_body_size 128M;

    listen 80; ## listen for ipv4
    #listen [::]:80 default_server ipv6only=on; ## слушаем ipv6

    server_name mysite.test;
    root /var/www/yii/crm_2.3/frontend/web;
    index index.php;

    access_log /path/to/project/log/access.log;
    error_log /path/to/project/log/error.log;

    location / {
    # Перенаправляем все запросы к несуществующим директориям и файлам на index.php
    try_files $uri $uri/ /index.php?$args;
    }

    # раскомментируйте строки ниже во избежание обработки Yii обращений к несуществующим статическим файлам
    location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
    try_files $uri =404;
    }
    error_page 404 /404.html;

    location ~ \.php$ {
    include fastcgi.conf;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_pass unix:/var/run/php7.0-fpm.sock;
    }

    location ~ /\.(ht|svn|git) {
    deny all;
    }
    }
    С таким конфигом нджинкс падает с ошибкой

    ● nginx.service - A high performance web server and a reverse proxy server
    Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
    Active: failed (Result: exit-code) since Вс 2018-07-22 16:48:18 MSK; 3min 8s ago
    Process: 13055 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCC
    Process: 12939 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 13098 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=1/FAILURE)
    Main PID: 12941 (code=exited, status=0/SUCCESS)
  • Как реализовать ratchet websocket push?

    @Silverviql Автор вопроса
    Максим Тимофеев, Короче так и не заработало даже элементарный пример через консоль, я думаю у меня на локальной машине или какое то приложение блочит или не установлено какое то обновление и т.д т.к на гитхабе уже сталкивались с этим, на убунту работает. Вы не знаете как можно еще реализовать подписки ? Можно закостылить конечно и конектить сервер как клиент и каждое событие отправлять на какой нибудь обработчик ,который от севера напишет сообщение "Я добавил данные в бд" и делать клиентов которые будут подключатся к чатам как отдельные диалоги. Но это прям костыльное решение. Ну и дальше я не вижу смысла zmq ковырять т.к хостинг на котором развернут сайт не поддерживает данный модуль.
  • Как реализовать ratchet websocket push?

    @Silverviql Автор вопроса
    Максим Тимофеев, Вы неправильно поняли ,я проверил что доступ на запись есть, а так я
    file_put_contents('mekas25.txt', $msg, FILE_APPEND);
    только для $pull->on('message', function ($msg) { прописал чтобы проверить приходит ли сообщение. Как выяснилось не приходит. А почему непонятно.
  • Как реализовать ratchet websocket push?

    @Silverviql Автор вопроса
    Максим Тимофеев, Если прописать вот так file_put_contents('mekas25.txt', $pull, FILE_APPEND);
    При запуске сервера он создает файл т.к $pull = $context->getSocket(\ZMQ::SOCKET_PULL); но внутри пусто)

    метод on
    public function on($event, callable $listener)
        {
            if (!isset($this->listeners[$event])) {
                $this->listeners[$event] = [];
            }
    
            $this->listeners[$event][] = $listener;
    
            return $this;
        }

    Я вообще правильные параметры ему задаю ?)
    Метод send
    public function send($message, $mode = 0)
        {
        }
  • Как реализовать ratchet websocket push?

    @Silverviql Автор вопроса
    Максим Тимофеев, Есть ощущение что , что то не так с настройками сервера. т.к
    bind сервера и connect отправки работают .
    При включение сервера он создает прослушку данного канала
    5b4f01fd23b02797919437.png
    Коннект тоже происходит.
    5b4f020549484144474313.png
    Но вот работает ли send или работает $pull->on('message', function ($msg) {
    file_put_contents('mekas25.txt', $msg, FILE_APPEND);
    });
    Непонятно, т.к файл не создается .
  • Как реализовать ratchet websocket push?

    @Silverviql Автор вопроса
    Метод который должен эти данные обработать и отдать клиентам которые на данное событие подписаны.
    public function onPushEventData($event)
        {
    
            $eventData = json_decode($event, true);
            file_put_contents('mekas3.txt', $eventData, FILE_APPEND);
            //Здесь в массиве $eventData мы тоже передаём идентификатор и проверяем есть ли подписанные клиенты.
            if (!array_key_exists($eventData['subscribeKey'], $this->subscribedTopics))
            {
                return;
            }
            // Через этот идентификатор получаем нужный нам объект instanceof Topic.
            $topic = $this->subscribedTopics[$eventData['subscribeKey']];
            if($topic instanceof Topic)
            {
                foreach($eventData as $eventField => &$fieldValue)
                    $fieldValue = Html::encode($fieldValue);
    
                // Посылаем данные клиенту
                $topic->broadcast($eventData);
            }
            else
            {
                return;
            }
        }


    Но $eventData пустой. Поэтому я и спрашиваю, как узнать данные до сервера вообще дошли или нет. Данных нет поэтому клиент ничего не получает.

    Вот даже цитирую того кто писал этот пост. Но данных нет)

    $eventModel['subscribeKey'] = 'eventMonitoring';
    $eventData = json_encode($eventModel);
    $socket->connect("tcp://127.0.0.1:5555");
    $socket->send($eventData);

    Вот это и есть передача данных. $eventData
    Здесь хочу заметить, что там куда они "прилетят", в моём примере это метод onPushEventData
    для отладки xdebug и подобные отладки не сработают. Я много времени убил, пытаясь понять где же данные. А оказалось xdebug просто не делал останов в нужном месте ;)
    В этом методе, после строчки $eventData = json_decode($event, true); можно поставить отладку, запись в файл, например. и там увидеть данные в массиве $eventData.

  • Как реализовать ratchet websocket push?

    @Silverviql Автор вопроса
    Максим Тимофеев,
    $pull->bind('tcp://127.0.0.1:'.$port);
            $pull->on('message', array($pusher, 'onPushEventData'));

    Подключается к каналу 'tcp://127.0.0.1:'.$port и ждет сообщения. Если есть запускает объект $pusher = new EventPusher; с методом onPushEventData

    $eventData = json_encode($eventModel);
                $socket->connect('tcp://127.0.0.1:'.$port);
                $socket->send($eventData);

    Массив полученный в json запихиваю подключаюсь к каналу , и отправляю данные . который сервер ждет. Но как узнать что подключились они вообще, пришло ли сообщение, словил его сервер ? Ошибок нету.
  • Как реализовать ratchet websocket push?

    @Silverviql Автор вопроса
    Максим Тимофеев, переделал код по данному примеру https://gostash.it/ru/stashes/1533-podklucenie-k-s...
    Сервер запускается, данные
    public function get () {
        $eventModel = [
            'subscribeKey' => 'eventMonitoring',
            'data'  => 'eventData' . rand(1,100)
        ];
        Book::pushEventToSocket($eventModel);
        var_dump($eventModel);
        }
    отправляю, в pushEventToSocket данные приходят, а вот как проверить что они до сервера дошли ?
    static function pushEventToSocket(array $eventModel)
        {
            $context = new \ZMQContext();
            $socket = $context->getSocket(\ZMQ::SOCKET_PUSH, 'desktop');
            if($socket instanceof \ZMQSocket)
            {
                // Здесь тоже передаём идентификатор, чтобы в push классе мы смогли получить объект topic
                $eventModel['subscribeKey'] = 'eventMonitoring';
                $eventData = json_encode($eventModel);
                $socket->connect("tcp://127.0.0.1:5555");
                $socket->send($eventData);
                file_put_contents('mekas1.txt', $eventData, FILE_APPEND);
            }
        }


    Сервер
    public function actionPushServer($port=5555)
        {
            $loop = Factory::create();
            // Класс, который реализуем ниже.
            $pusher = new EventPusher;
    
            // Listen for the web server to make a ZeroMQ push after an ajax request
            $context = new Context($loop);
            $pull = $context->getSocket(\ZMQ::SOCKET_PULL);
            // Binding to 127.0.0.1 means the only client that can connect is itself
            $pull->bind('tcp://127.0.0.1:'.$port);
            $pull->on('message', array($pusher, 'onPushEventData'));
            // Set up our WebSocket server for clients wanting real-time updates
            $webSock = new Server($loop);
            // Binding to 0.0.0.0 means remotes can connect
            $webSock->listen(8080, '0.0.0.0');
            $webServer = new IoServer(
                new HttpServer(
                    new WsServer(
                        new WampServer(
                            $pusher
                        )
                    )
                ),
                $webSock
            );
    
            $loop->run();
        }
  • Как реализовать ratchet websocket push?

    @Silverviql Автор вопроса
    Максим Тимофеев, Вы сказали что нету объекта. У меня есть 2 класса . 1 BasePusher с основными методами , и 2 класс Pusher с методом который отправляет данными в виде массива и методом где сервер отправляет сообщения тем кто подписан на события.
    public function __construct()
    {
    $pusher = new Pusher; // Создаем объект класса Pusher
    parent::__construct($this->id,$this->pusher);
    }
    Вы это имели ввиду ?
  • Как реализовать ratchet websocket push?

    @Silverviql Автор вопроса
    Максим Тимофеев, Ну тот был вопрос про запуск скрипта для запуска вебсокета на примере чата. А тут немного другое. И тот вопрос я в итоге сам решил... Вроде нашел решение https://gostash.it/ru/stashes/1533-podklucenie-k-s...
  • Как вызвать функцию из подключаемого js файла при выполнение условий в скрипте php файла на yii2?

    @Silverviql Автор вопроса
    Максим Тимофеев, Для чата метод конструктор использовал
    protected $clients;
        public function __construct()
        {
            $this->clients = new \SplObjectStorage; // Для хранения технической информации об присоединившихся клиентах используется технология SplObjectStorage, встроенная в PHP
        }

    А в console\controller я прописал action для запуска сервера и он прекрасно работает.
    Для пуша примера на yii2 нет только на ларавел нашел https://www.youtube.com/watch?v=wXCORk5xXPs&t=139s.
    Если из метода запуска пуш сервера убрать метод вызова коструктора выйдет ошибка что он нужен для передачи 2 параметров для данного метода $loop = ReactLoop::create();
    Argument 2 passed to React\Socket\Server::__construct() must implement interface React\EventLoop\LoopInterface, none given.
    В примере метод конструктор как выше писал вообще никаких параметров не имеет.
    Если я объявлю объект как в примере с сокетами
    protected $clients;
        public function __construct()
        {
            $this->clients = new \SplObjectStorage;
            parent::__construct($this->id, $this->module);
        }

    То выйдет та же ошибка)
    А так как примера нормального нет , я не знаю куда дальше копать..
    Взялся я за это т.к поставили задачу чтобы таблица gridview обновлялась не по сетинтервал , а только когда произошло какое то изменение ( добавили новую запись, удалил, изменили статус). Поэтому я выбрал сокеты. После того как я реализовал метод с чатом, я запил ил вызов скрипта обновление таблицы при отправке сообщения каким то из пользователей которые сейчас подключены к серверу, но я понял , что таблица обновится у всех кто подписан , тогда в случаях когда надо обновить таблицу только у конкретных пользователей ,встанет вопрос как отделять пользователей кому нужно обновление ,а кому нет. Поэтому я решил реализовать метод пуш, которые дает возможность делать подписку клиентов на конкретные обновления.
  • Как вызвать функцию из подключаемого js файла при выполнение условий в скрипте php файла на yii2?

    @Silverviql Автор вопроса
    Максим Тимофеев, PHP Fatal Error 'yii\base\ErrorException' with message 'Call to a member function getUniqueId() on null'

    in C:\OpenServer\domains\crmas\vendor\yiisoft\yii2\base\Controller.php:328
    /Stack trace:
    #0 C:\OpenServer\domains\crmas\vendor\yiisoft\yii2\base\Controller.php(130): yii\base\Action->getUniqueId()
    #1 C:\OpenServer\domains\crmas\vendor\yiisoft\yii2\console\Controller.php(128): yii\base\Controller->runAction()
    #2 C:\OpenServer\domains\crmas\vendor\yiisoft\yii2\base\Module.php(523): yii\console\Controller->runAction()
    #3 C:\OpenServer\domains\crmas\vendor\yiisoft\yii2\console\Application.php(180): yii\base\Module->runAction()
    #4 C:\OpenServer\domains\crmas\vendor\yiisoft\yii2\console\Application.php(147): yii\console\Application->runAction()
    #5 C:\OpenServer\domains\crmas\vendor\yiisoft\yii2\base\Application.php(380): yii\console\Application->handleRequest()
    #6 C:\OpenServer\domains\crmas\yii(27): yii\base\Application->run()
    #7 {main}


    Не может получить уникальный айди ?
    /**
         * Returns the unique ID of the controller.
         * @return string the controller ID that is prefixed with the module ID (if any).
         */
        public function getUniqueId()
        {
            return $this->module instanceof Application ? $this->id : $this->module->getUniqueId() . '/' . $this->id;
        }
  • Как вызвать функцию из подключаемого js файла при выполнение условий в скрипте php файла на yii2?

    @Silverviql Автор вопроса
    Максим Тимофеев, я начал делать пуш т.к решение с чатом не дает полного функционала в плане обновление контента, потому что подписывать каждую кнопку на отправку сообщения в чат чтобы другие пользователи узнали о обновление, а так же есть обновление которое коснется не всех пользователей а например двоих. Нашел пример с пуш для ларавел, прописал у себя , но выходит ошибка с
    public function __construct()
        {
            parent::__construct();
        }

    Возможно в ларавел он сам определяет какие параметры передавать конструктору родителя. но в yii он выдает ошибку что необходимо передать 1 параметр, по гуглил прописал так .
    public function __construct()
        {
            parent::__construct($this->id, $this->module);
        }

    Теперь уже выдает ошибку 'Call to a member function getUniqueId() on null'. И у меня нет понимания, какой параметр id я должен передать)
  • Как вызвать функцию из подключаемого js файла при выполнение условий в скрипте php файла на yii2?

    @Silverviql Автор вопроса
    Т.к я программирую 2-3 месяца я не знаю как это реализовать.( Выше написал свое костыльное решение.)
  • Как ограничить pjar на обновление иконки?

    @Silverviql Автор вопроса
    Максим Федоров, Можете подсказать как это примерно реализовывать через веб сокет ?. Я поднял сервер, сделал клиент, сообщениями могу обмениваться. Если есть какой то пример буду благодарен.
  • Как завершить выполнение скрипта на jquery?

    @Silverviql Автор вопроса
    Сергей Соколов, Не подскажешь как вызвать из

    <?php
    
        $js = <<<JS
      function send(){
          var data='Данные для отправки: '+Math.random();
          conn.send(data);
          console.log('Отправлено: '+data);
      }
    JS;
    
        $this->registerJs($js);
    ?>
    
    <button onclick="send();">Send</button>


    Функцию сенд .
  • Как завершить выполнение скрипта на jquery?

    @Silverviql Автор вопроса
    $('#modalReminder').off('beforeSubmit', form);
  • Как завершить выполнение скрипта на jquery?

    @Silverviql Автор вопроса
    Так если вешать на модальное окно будет тоже самое, ведь оно не генерируется.
    Тогда как можно снимать слушателя после отправки формы?
  • Как отправлять данные методом ajax в модальном окне на yii2?

    @Silverviql Автор вопроса
    Смотри, есть представление есть контроллер.
    При нажатие он пост запросом отправляет данные, если я в контроллере отключу редирект после сохранение он будет переходить на страницу форма ввода которая подругружалась в модальное окно.
    Как после того данные в бд сохранились просто закрыть модальное окно и чтобы можно было дальше работать?.
    То что ты скинул очень громозкое решение.