Ответы пользователя по тегу PHP
  • Как передать данные из styles.PHP в styles.CSS?

    soprun
    @soprun
    Software Architecture
    Чтобы ты не пытался сделать, не нужно средствами PHP генерировать файлы стилей, динамические значения или ещё что либо.

    ---

    Давай переформатируем вопрос.

    Тебе необходимо передать N-данные для того чтобы динамической было "что-то".

    Наверное самый адекватный способ иметь некоторый класс в файле style.css
    .color {
     color: red;
    }


    И добавить тег style в HTML коде, который мог бы динамический менять необходимые параметры.

    <style>
    .color {
     color: <?php echo $color; ?>;
    }
    </style>
    Ответ написан
    2 комментария
  • Как правильно организовать ajax запросы в MVC архитектуре?

    soprun
    @soprun
    Software Architecture
    Как правильно организовать ajax запросы в MVC архитектуре?


    Вопрос абсолютно не логичен, не понятен про что вообще и как они могут быть взаимосвязанными.

    Будь то:
    • MVC - Model View Controller (Модель-Вид-Контроллер)
    • Page Controller (Контроллер страницы)
    • Front Controller (Контроллер входа / Единая точка входа)
    • Application Controller (Контроллер приложения)
    • Two Step View (Двухшаговая шаблонизация)


    да и вообще любой паттерн веб-представления, он не как не связан с AJAX или другим видом передачи данных.

    Не буду вдаваться в подробности реализации, кажется вопрос в том, как организовать пространство имен "namespace".

    Первое что нужно сделать, определится о каком Application Program Interface (API) мы будем говорить.
    Предлагаю для упрощения говорить далее о REST.

    Представим что у нас есть некий DTO (Data Transfer Object) Product - который необходимо серелизовать и передать по сети.

    Вот примеры простейших запросов REST:

    Корневые (независимые) сущности API:
    GET /products — получить все продукты.
    GET /products/123 — получить информацию по продукту с ID 123.
    GET /categories - получить все категории.

    Зависимые (от корневой) сущности:
    GET /products/555/variants — все варинты продукта с ID 555.
    GET /products/555/variants/456/specifications — получить спецификацию варианта 456 продукта 555

    Ух.. уже страшно.

    И так, коль вопрос про организацию пространства для REST, то как вариант можно рассмотреть следующие.

    App\......\Controllers\AbstractController.php - Абстрактрый класс контроллеров.
    App\......\Controllers\Product\ProductController.php - отвечает за продукт
    App\......\Controllers\Product\VariantController.php - отвечает за варианты продукта
    App\......\Controllers\Product\SpecificationController.php - отвечает за спецификацию варианта продукта

    Или же работу с каждым объектом сайта вынести в отдельный контроллер?


    Каждый из контроллеров отвечает за свою сущность и имеет свой набор CRUD методов.
    Ответ написан
    Комментировать
  • Как отдавать файл через свой домен без записи его на сервер?

    soprun
    @soprun
    Software Architecture
    Настрой веб сервер так что бы отдавал файл
    Ответ написан
  • Как получить куки с заголовками через guzzle?

    soprun
    @soprun
    Software Architecture
    1. Причем тут Laravel?!
    2. $guzzleResponse->getHeader('set-cookie');

    А вот как работать дальше читай в документации, там все написано, включая мой ответ.
    Ответ написан
    4 комментария
  • Syntax error, unexpected '$_SERVER' (T_VARIABLE) - как решить проблему?

    soprun
    @soprun
    Software Architecture
    Не использовать
    private $csv_file = $_SERVER['DOCUMENT_ROOT']."/csv.csv";


    Альтернатива: добавить конструктор
    public function __construct()
    {
        $this->csv_file = $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . 'csv.csv';
    }


    Так же стоит обратить внимание на PSR-2. Руководство по оформлению кода.
    Ответ написан
    Комментировать
  • Как обновить страницы у всех пользователей сайта?

    soprun
    @soprun
    Software Architecture
    Как ранее сообщалось, есть websockets.

    Но! Учти что websockets требуют постоянно соединения с сервером, что при достаточно большом количестве пользователей приведет к огромной нагрузке на интернет канала и избыточного количеств процессов...

    Тут можно долго спорить какой из методов лучше...

    Я порекомендую удаленные websockets сервер, а конкретно pusher.com.

    Аргументирую:

    1. Легкость внедрения в приложения любой* сложности.
    2. Никакой* нагрузки и избыточных процессов.
    3. Реальное время. (long polling - подразумевает чек раз в n секунд)

    Но он стоит денюшку, так что смотри сам на сколько важен реалтайм и какое количество запросов ты сможешь обработать.
    Ответ написан
    Комментировать
  • В чем проблема?

    soprun
    @soprun
    Software Architecture
    $header = new Header();
    $header->AddLink('title', 'href');
    Ответ написан
  • Как влияет на скорость загрузки страницы, если изменять размер картинки динамически?

    soprun
    @soprun
    Software Architecture
    Пример:
    http://yourhost.com/{route-name}/{template-name}/{file-name}


    route-name - название роутера
    например images

    template-name - шаблон обработки
    small - 120x90 Pixel
    medium - 240x180 Pixel
    large - 480x360 Pixel

    file-name - название файла

    После обработки изображения, его необходимо закэшировать и в следующий раз отдать кэш без обработки.

    как сильно будет нагружать сервер - все зависит от количества картинок на нем.
    Ответ написан
  • Как бороться с кешем в MODX?

    soprun
    @soprun
    Software Architecture
    1. утери у ресурса кэширование
    2. можешь через плагин чистить кэш
    Ответ написан
    Комментировать
  • Return в конструкторе PHP?

    soprun
    @soprun
    Software Architecture
    Вам нужен __toString

    class GetInfo
    {
    
        public $name;
    
        function __construct($name)
        {
            $this->name = strtoupper($name);
        }
    
        function __toString()
        {
            return $this->name;
        }
    
    }
    
    $a = new GetInfo('Ivan');
    
    // ...
    Ответ написан
    2 комментария
  • Нужно ли хорошо уметь программировать на PHP, если работаешь с фреймворками?

    soprun
    @soprun
    Software Architecture
    Думаю что да! Стоит!
    Но учти что при работе с фреймворками вряд ли ты сделаешь свой первый проект в хорошем качестве.. Но ты получишь опыт, что очень ценно..
    Ответ написан
    Комментировать
  • Как в MODX загружать ресурсы (документы) через базу данных?

    soprun
    @soprun
    Software Architecture
    У MODx есть api позволяющая создавать ресурсы и т.д.

    Небольшой пример полезных функций code.re/7Re
    Ответ написан
    Комментировать
  • Изменение CMS под свои интересы?

    soprun
    @soprun
    Software Architecture
    "изобретение велосипеда" весьма шаткое понятие.

    CMS - это уже готовое решение проблем, то есть например "wordpress" установили на сервер, скачали нужный Вам шаблон и все..
    Так как многие вещи уже были написаны (имею в веду премиум шаблоны).

    А вот что касается творчества "разработки", лучше обратить внимание на фреймворки.
    Именно для этого они и нужны*
    Ответ написан
    Комментировать
  • Что мне надо знать, что бы создать интернет магазин?

    soprun
    @soprun
    Software Architecture
    Настоятельно рекомендую использовать готовое решение "CMS".
    Вы можете написать собственные модули, плагины и т.д. что бы научится работать с кодам.
    Для написания с 0 собственного интернет магазина понадобится кучу времени, проб, ошибок и т.д.
    Да и без понимания как работают сайты вряд ли можно создать что то человеческое.
    Ответ написан
    2 комментария
  • "Вечные" сессии на PHP. Выдержит ли сервер?

    soprun
    @soprun
    Software Architecture
    Можно обойтись и простой проверкой:
    Две куки, одна для ID пользователя другая для сесии..

    Проверять это добро можно вот так: ( это просто пример )
    function session()
    {
        @$i = $_COOKIE['account'];
        @$h = $_COOKIE['hash'];
    
        if (!empty($i) && int_($i) && !empty($h) && $h === hash('sha1', $i . SLAT, false))
            return (int)$i;
    }


    А настройки или другие параметры хранить в базе данных, так кстати и надежнее, сервер все равно когда нибудь перезагрузиться и сессии удаляться, а из базы нет...

    Примерно так построены многие системы...
    Ответ написан
    Комментировать
  • Возможно ли защитить сайт от скачивания файлов с других ресурсов?

    soprun
    @soprun
    Software Architecture
    Так как "парсеры" других ресурсов читают html, можно сделать добавление ссылки через javascript ( имею в веду на страницу ссылка будет вставляться в определенный элемент).

    Так же создать простую систему токенов.

    Например у вас есть папка где лежат Ваши файлы "site.com/myfile/", все запросы к данной папки будут перенаправляться на файл обработки, где и будет проверяться "токен"..

    Ссылка будет выглядеть так:
    site.com/myfile/prog.exe?token=1234567890

    GET параметр "token" сравниваем с тем что будет в сессии пользователя, если все хорошо от открываем файл, если нету то и скачать нельзя...

    Как правило парсеры не хранят сессии и не смогут скачать файл...

    -------- Решение:

    Давайте с начало определимся с видом ссылки на файл.

    Можно сделать так:
    /myfile/img.jpg?b31598b111cf1c175e956830b764e3f1e6d0a364
    или вот так:
    /myfile/img.jpg?token=b31598b111cf1c175e956830b764e3f1e6d0a364

    Мне более симпатичен первый вариант.

    1. Необходимо в конфигурационном файле сервера сделать что бы все запросы по определенной папки открывали файл проверки.

    Например download.php
    По настройки для вашего веб сервера можно найти примеры водяного знака для изображений.
    Принцип точно такой же.

    Настройка .htaccess
    <FilesMatch "\.(gif|jpg|jpeg|png)$">
       RewriteEngine On
       RewriteCond %{REQUEST_FILENAME} -f
       RewriteRule ^(.*)$ /download.php?file=$1 [T=application/x-httpd-php,L,QSA]
    </FilesMatch>


    2. Необходимо создать сессию и ключ.
    session_name('session');
    session_start();
    
    define('token', "?" . hash('sha1', session_id() , false));
    # define('token', "?token=" . hash('sha1', session_id() , false));


    Придется добавить в ваши шаблоны константу "token" в конец ссылки.

    3. Проверка ключа download.php

    <?php
    
    session_name('session');
    session_start();
    
    # if( !empty($_GET['token']) && $_GET['token'] == hash('sha1', session_id() , false) )
    
    if (isset($_GET[hash('sha1', session_id(), false)])) {
        if (ob_get_level()) {
            ob_end_clean();
        }
    
        # $file = $_SERVER['DOCUMENT_ROOT'] . '/' . preg_replace('/%2F/', '/', urlencode(trim(preg_replace('%\?.*%i', null, $_SERVER['REQUEST_URI']), '/')));
        $file = $_GET['file'];
    
        if (!is_file($file)) exit("Файл не найден!");
    
        // заставляем браузер показать окно сохранения файла
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename=' . basename($file));
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        header('Cache-Control: must-revalidate');
        header('Pragma: public');
        header('Content-Length: ' . filesize($file));
    
        // читаем файл и отправляем его пользователю
        readfile($file);
        exit;
    
    } else exit("Неверный ключ авторизации");


    Более короткий вариант:
    <?php
    
    session_name('session');
    session_start();
    
    if (!isset($_GET[hash('sha1', session_id(), false)])) exit("Неверный ключ авторизации");
    
    if (ob_get_level()) ob_end_clean();
    
    if (!(!empty($file = $_GET['file']) && is_file($file))) exit("Файл не найден!");
    
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename=' . basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    
    exit (readfile($file));
    Ответ написан
    5 комментариев
  • Как создать условие в php для проверки странницы?

    soprun
    @soprun
    Software Architecture
    Наверное самый простой способ:
    switch($_SERVER['REQUEST_URI'])
    {
        case '/register/':
            echo '/register/';
            break;
        case '/page/':
            var_dump('/page/');
            break;
        case '/user/':
            print_r(array('/user/'));
            break;
        default:
            echo 'Хьюстон, у нас проблемы!';
            break;
    }
    Ответ написан
    Комментировать
  • Найти и удалить номер массива по значению?

    soprun
    @soprun
    Software Architecture
    Ну как пример:
    $array = [
            array(
                'ID' => 1,
                'DATA' => true
            ),
            array(
                'ID' => 2,
                'DATA' => true
            ),
            array(
                'ID' => 3,
                'DATA' => true
            ),
            array(
                'ID' => 4,
                'DATA' => true
            ),
        ];
    
        foreach( $array as $key => $value )
        {
            if( $value['ID'] == 2 ) {
                unset( $array[$key] );
            }
        }
    Ответ написан
    Комментировать
  • Как перенести данные с одной базы в другую?

    soprun
    @soprun
    Software Architecture
    Если сайт на тех поддержке рекомендую обратиться к специалистам за умеренную плату, если нет то самый простой способ это руками ( если не более 100 страниц на сайте ).
    Если у Вас много контента то нужно будет написать парсер который корректно перенест базу на новый сайт.
    Ответ написан
    Комментировать