Помогаю ответами на не сложные вопросы, или подсказки.
В основном пишу с телефона, могут быть очипятки, прошу понять и простить)
Контакты
Местоположение
Россия, Калининградская обл., Калининград (Кенигсберг)

Достижения

Все достижения (3)

Наибольший вклад в теги

Все теги (62)

Лучшие ответы пользователя

Все ответы (115)
  • Почему nginx ставит 500 статус при отдаче файла скриптом?

    Compolomus
    @Compolomus
    Комполом-быдлокодер
    header($_SERVER['SERVER_PROTOCOL'] . ' 200 OK');
    header('Content-Type: application/force-download');
    header('Content-Description: inline; File Transfer');
    header('Content-Transfer-Encoding: binary');
    header('Content-Disposition: attachment; filename="' . $output_name . '";', false);
    header('Content-Length: ' . filesize($file));
    
    $upload = new SplFileObject($file, 'rb');
    while (!$upload->eof()) {
        echo($upload->fgets());
    }
    
    // тут возможно сначала надо закрыть, потом сбросить буфер
    header('Connection: close'); 
    flush();
    exit;
    Ответ написан
  • Как поместить изображение в шаблон с помощью PHP?

    Compolomus
    @Compolomus
    Комполом-быдлокодер
    $img = 'test.jpg'; // исходник
    
    $image = imagecreatefromstring(file_get_contents($img)); // ресурс исходника
    
    # прозрачность
    imagesavealpha($image, true);
    imagealphablending($image, false);
    
    # замеры исходника
    $image_w = imagesx($image); // 1920
    $image_h = imagesy($image); // 1080
    
    # вычисляем размеры чтоб сохранить пропорции
    $params = ['width' => 400, 'height' => $image_h * (400 / $image_w)]; // 400 x 225
    
    # прозрачная подложка
    $newimage = imagecreatetruecolor($params['width'], $params['height']);
    $transparent = imagecolorallocatealpha($newimage, 255, 255, 255, 127);
    imagefill($newimage, 0, 0, $transparent);
    imagealphablending($newimage, true);
    imagesavealpha($newimage, true);
    
    # уменьшаем
    imagecopyresampled($newimage, $image, 0, 0, 0, 0, $params['width'], $params['height'], $image_w, $image_h);
    
    # прозрачная подложка для итогового изображения
    $background = imagecreatetruecolor(400, 300);
    $transparent = imagecolorallocatealpha($background, 255, 255, 255, 127);
    imagefill($background, 0, 0, $transparent);
    imagealphablending($background, true);
    imagesavealpha($background, true);
    
    /*
     300 - $params['height']) / 2 -> ровнение по центру
     сохраняем
    */
    imagecopyresampled($background, $newimage, 0, (300 - $params['height']) / 2, 0, 0, $params['width'], $params['height'], $params['width'], $params['height']);
    
    imagepng($background, 'test.png', 9, PNG_ALL_FILTERS);

    исходник
    5d3960aac3b1c157151307.jpeg
    результат
    5d3960bfac93e626534890.png
    проверка прозрачности (оранжевый фон сайта)
    echo '<img src="test.png" alt="image" style="background-color: orange;" />';

    5d396126d595a206710977.png
    Ответ написан
  • Как убрать фон который образуется при повороте картинки imagerotate()?

    Compolomus
    @Compolomus
    Комполом-быдлокодер
    $image = imagecreatefromstring(file_get_contents('test.jpg'));
    
    // получаем разеры исходника
    
    $ix = imagesx($image);
    $iy = imagesy($image);
    
    // делаем холст с заливкой фона
    
    $newimage = imagecreatetruecolor($ix, $iy);
    $transparent = imagecolorallocatealpha($newimage, 255, 255, 255, 127);
    imagefill($newimage, 0, 0, $transparent);
    imagealphablending($newimage, true);
    imagesavealpha($newimage, true);
    
    // накладываем исходник на холст
    
    imagecopyresampled($newimage, $image, 0, 0, 0, 0, $ix, $iy, $ix, $iy);
    
    // берем вотермарку
    
    $imageW = imagecreatefromstring(file_get_contents('logo.png'));
    
    $wx = imagesx($imageW);
    $wy = imagesy($imageW);
    
    // для поворота нужен прозрачный холст
    
    $new = imagecreatetruecolor($wx, $wy);
    
    $transparent = imagecolorallocatealpha($new, 0, 0, 0, 127);
    $rotate = imagerotate($imageW, 45, $transparent);
    imagealphablending($rotate, true);
    imagesavealpha($rotate, true);
    
    // пересчет размеров после поворота
    
    $ix = imagesx($rotate);
    $iy = imagesy($rotate);
    
    // наложение 50 50 начало от левого верхнего угла
    
    imagecopyresampled($image, $rotate, 50, 50, 0, 0, $ix, $iy, $ix, $iy);
    
    // сохранение
    
    imagepng($image, 'testus.png', 9, PNG_ALL_FILTERS);

    5d2518ff9776c439694328.jpeg
    5d25190dbbe14223771085.png
    5d2519bb92a74841010101.png
    Ответ написан
  • Как передать файл пользователю с удаленного сервера на php?

    Compolomus
    @Compolomus
    Комполом-быдлокодер
    Делается это все просто, кидаем заголовки что это файл, сами забираем удалённый файл и отдаём

    ob_get_level() && ob_end_clean();
    header($_SERVER['SERVER_PROTOCOL'] . ' 200 OK');
    header('Content-Type: application/force-download');
    header('Content-Description: inline; File Transfer');
    header('Content-Transfer-Encoding: binary');
    header('Content-Disposition: attachment; filename="' . $name . '";', false);
    header('Content-Length: ' . $len);
    
    $upload = new SplFileObject($url, 'rb');
    while (!$upload->eof()) {
        echo($upload->fgets());
    }
    
    
    flush();
    exit;
    Ответ написан
  • Вывод товаров по категориям учитывая вложенность, как сделать?

    Compolomus
    @Compolomus
    Комполом-быдлокодер
    $config = array(
        'host' => 'localhost',
        'name' => 'test',
        'user' => 'root',
        'pass' => '',
    );
    
    $pdo = new \PDO('mysql:host=' . $config['host'] . ';dbname=' . $config['name'], $config['user'], $config['pass'],
        [
            \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
            \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
            \PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8mb4'",
            \PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,
        ]
    );
    
    $res = $pdo->query('select * from `products` order by `parent_id` asc');
    
    $cats = [];
    $structure = [];
    
    while ($row = $res->fetch()) {
        $cats[$row['id']] = $row;
        $structure[$row['parent_id']][] = $row['id'];
    }
    
    class Printer
    {
        private $cats = [];
        private $structure = [];
    
        public function __construct(array $cats, array $structure)
        {
            $this->setCats($cats);
            $this->setStructure($structure);
        }
    
        private function setCats(array $cats): void
        {
            $this->cats = $cats;
        }
    
        private function setStructure(array $structure): void
        {
            $this->structure = $structure;
        }
    
        protected function element(int $element): string
        {
            return '<a href="' . $this->cats[$element]['id'] . '">' . $this->cats[$element]['name'] . '</a>';
        }
    
        private function printElement(int $element, int $dept): string
        {
            $str = $this->element($element) . PHP_EOL;
            if (is_array($this->structure[$element]) && count($this->structure[$element]) > 0) {
                foreach ($this->structure[$element] as $id) {
                    $str .= $this->print($id, $dept + 1);
                }
            }
    
            return $str;
        }
    
        private function print(int $element, int $dept = 1): string
        {
            return '<ul><li>' . $this->printElement($element, $dept) . '</li></ul>' . PHP_EOL;
        }
    
        private function run(): string
        {
            return $this->print(current(current($this->structure)));
        }
    
        public function __toString(): string
        {
            return $this->run();
        }
    }
    
    echo(new Printer($cats, $structure));

    структура бд
    -- phpMyAdmin SQL Dump
    -- version 4.8.3
    -- https://www.phpmyadmin.net/
    --
    -- Хост: 127.0.0.1:3306
    -- Время создания: Фев 16 2019 г., 11:41
    -- Версия сервера: 8.0.12
    -- Версия PHP: 7.2.10
    
    SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    SET AUTOCOMMIT = 0;
    START TRANSACTION;
    SET time_zone = "+00:00";
    
    
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8mb4 */;
    
    --
    -- База данных: `test`
    --
    
    -- --------------------------------------------------------
    
    --
    -- Структура таблицы `products`
    --
    
    CREATE TABLE `products` (
      `id` int(11) NOT NULL,
      `name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL,
      `parent_id` int(11) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
    
    --
    -- Дамп данных таблицы `products`
    --
    
    INSERT INTO `products` (`id`, `name`, `parent_id`) VALUES
    (1, 'Рыбалка', 0),
    (2, 'Удилища', 1),
    (4, 'Спининговые', 2),
    (5, 'Морские', 2),
    (6, 'Катушки', 1);
    
    --
    -- Индексы сохранённых таблиц
    --
    
    --
    -- Индексы таблицы `products`
    --
    ALTER TABLE `products`
      ADD PRIMARY KEY (`id`);
    
    --
    -- AUTO_INCREMENT для сохранённых таблиц
    --
    
    --
    -- AUTO_INCREMENT для таблицы `products`
    --
    ALTER TABLE `products`
      MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7;
    COMMIT;
    
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

    5c67cd0973e35415319613.png
    Ответ написан