Ответы пользователя по тегу PHP
  • Можно ли организовать централизованное управление ошибками в данном случае?

    Azurre
    @Azurre
    Web Developer
    class Entity {
    }
    
    class EntityException extends \Exception {
        private $entity;
    
        public function getEntity() {
            return $this->entity;
        }
    
        public static function create($entity, $message = 'Error', $code = 0)
        {
            $exception = new static($message, $code);
            $exception->entity = $entity;
            return $exception;
        }
    }
    
    
    try {
        throw EntityException::create( new Entity, 'Internal error' );
    } catch(\EntityException $e) {
        // Handle entity exceptions
        echo $e->getMessage() . PHP_EOL;
        var_dump($e->getEntity());
    } catch(\Throwable $e) {
        // Handle other exceptions
    }
    Ответ написан
    Комментировать
  • Как передать переменную из PHP в JS?

    Azurre
    @Azurre
    Web Developer
    echo "const fileName = '$fileName';";
    Скрипт будет иметь доступ к такой переменной.

    Так же можно передавать переменную в js функцию как аргумент:
    echo "<a href='javascript:void(0)' onclick='showPdf($fileName)'>{$path_parts['basename']}</a>";


    P.S.
    То, что вы описываете выглядит как очень спорное решение и лучше бы вам использовать его только в качестве практики и наработки опыта.
    Ответ написан
    Комментировать
  • Reactphp socket server обрезает сообщения?

    Azurre
    @Azurre Автор вопроса
    Web Developer
    Проблема с stream_socket_recvfrom. На больших пакетах параметр length функцией нагло игнорируется и читает по 8192 байт (хотя иногда проскакивает и больше). Как это побороть нормально - не понятно, пока спасает костыль с несколькими проходами:

    $retry = 8;
    $emptyCountLimit = 4;
    $emptyCount = 0;
    $data = '';
    do {
        $rcv = stream_socket_recvfrom($stream, $this->bufferSize);
        //  echo "[+] Read ". strlen($rcv).' bytes. Total: '.strlen($data).PHP_EOL;
        if ($rcv === '' || $rcv === false) {
            $emptyCount++;
            if ($emptyCount >= $emptyCountLimit) break;
            continue;
        }
        $emptyCount = 0;
        $data .= $rcv;
    } while($retry--);
    Ответ написан
    Комментировать