Задать вопрос
  • Почему в php 7.0 работают модификаторы классов?

    DevMan
    @DevMan
    тащемта их завезли ещё в пхп5.
    в 7.1 прост расширили их действие на константы.
    Ответ написан
    Комментировать
  • Как синхронизировать с 1С самописную CMS?

    Kenigan
    @Kenigan
    Веб-программист
    Да, 1С является инициатором синхронизации. Она в заданные промежутки времени (можно раз в день, раз в минуту) посылает запрос на сайт для авторизации и начинает ему передавать данные и запрашивать заказы с сайта, если это необходимо. Можно еще делать единичную синхронизацию и потом вручную, когда необходимо, выполнять синхронизацию с сайтом. В любом из этих случаев порядок действий примерно такой должен быть:

    1. Создавайте папку в корне сайта, например, 1c, в ней должен лежать файл 1c_exchange.php (будет обрабатывать все запросы от 1С) и папка files (сюда будут приходить xml товаров из 1С)
    2. В 1С создать обмен с сайтом и указать путь к файлу, который будет обрабатывать все запросы с 1С. Например, mysite.ru/1c/1c_exchange.php.
    3. Там же вписать пользователя и пароля, который будет проверяться в файле 1c_exchange.php.

    В файле 1c_exchange.php будут выполняться примерно такие шаги:
    // Тут 1C передает всю информацию о товарах на сайт
    if($_GET["mode"] == "checkauth" && $_GET["type"] == "catalog") {
    	// Тут проверить, верный ли логин и пароль заполнен в настройках 1С обмена
    } elseif ($_GET["mode"]=="init" && $_GET["type"] == "catalog") {
    	// Тут передать информацию о сервере (используется ли архивация и какой максимальный размер файла)
    } elseif ($_GET["mode"] == "file" && $_GET["type"] == "catalog") {
    	// Тут принимаем файлы, приходящие из 1С, сохраняем у себя в папке files. 
    	// Файлы могут быть 5-ти типов (может и больше)
    	// информация о разделах каталога (catalog.xml),
    	// информация о товарах (goods.xml),
    	// информация о характеристиках (торговых предложениях) (offers.xml),
    	// информация о ценах (price.xml),
    	// информация об остатках (rests.xml).
    } elseif ($_GET["mode"] == "import" && $_GET["type"] == "catalog") {
    	// Тут отдать успех или неудачу передачи файлов
    } elseif ($_GET["mode"]=="complete" && $_GET["type"] == "catalog") {
    	// При завершении операции импорта парсим все данные и заносим информацию на сайт
    }
    	
    // Тут 1C запрпшивает заказы с сайта
    if($_GET["mode"] == "checkauth" && $_GET["type"] == "sale") {
    	// Тут проверить, верный ли логин и пароль заполнен в настройках 1С обмена
    } elseif ($_GET["mode"]=="init" && $_GET["type"] == "sale") {
    	// Тут передать информацию о сервере (используется ли архивация и какой максимальный размер файла)
    } elseif ($_GET["mode"]=="query" && $_GET["type"] == "sale") {
    	// Если имеются заказы на сайте, которые еще не отправлялись в 1С, отправляем их тут. Формат такой http://v8.1c.ru/edi/edi_stnd/131/from.xml
    } elseif ($_GET["mode"]=="success" && $_GET["type"] == "sale") {
    	// Сообщаем о результате выполнения операции отправки заказов с сайта
    }


    Мне в своё время очень помогла эта ссылка
    Ответ написан
    1 комментарий
  • Как получить муниципальные деления из ФИАС?

    NeiroNx
    @NeiroNx
    Программист
    Это значит что в новой версии адреса связанны по GUID - берем какойнибудь обьект с AOLEVEL=1 (Республики), берем его myid=AOGUID, находим его дочерние объекты PARENTGUID=myid - получим города(AOLEVEL=4) и районы (AOLEVEL=3), потом так же для районов можно получить населенные пункты в них.
    Смысл в том что кладр база не хранит историю адресов а в новой базе можно построить адрес который был в конкретную дату - до переименования. (поля STARTDATE и ENDDATE)
    В большинстве случаев нужен лишь актуальный адрес - поэтому пришлось писать конвертер(который берет лишь актуальные адреса) - иначе база слишком жирная, а если брать для всей страны то вообще жесть. А потом уже обновлять если есть изменения.

    Вообще в документации вроде все понятно расписано...

    P.S. Пишу синхронизацию с ФИАС в корпоративную базу(Электроэнергетика) - пришлось изучить всю стркутуру.
    Ответ написан
  • Есть ли смысл ставить Linux, если локального админа на Винде легко взломать?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    можно через LiveCD

    Если есть физический доступ - элементарно взламывается всё.
    Например, зачем взламывать вообще, если можно поставить свою систему и скопировать нужные данные. Диск зашифрован? Так если у вас нет пароля - то как вы с системой работали ранее?
    Ответ написан
    Комментировать
  • Как правильно настроить конфиг Nginx?

    @dodo512
    server {
        server_name          www.example.com;
        listen               *:80;
        listen               [::]:80 ipv6only=on;
    
        if ($uri !~* ^/downloads/(.+)$) {
            return 301 https://example.com/downloads/$1;
        }
    
    }

    Тут вместо if лучше использовать location.
    server {
        server_name  example.com  www.example.com;
        listen               *:80;
        listen               [::]:80 ipv6only=on;
    
        location / {
             return 301 https://example.com$request_uri;
        }
        
        location /downloads/ {
            root /var/www/html;
        }
    }
    Ответ написан
    3 комментария
  • Где размещать вспомогательные классы в mvc архитектуре?

    SerafimArts
    @SerafimArts
    Senior Notepad Reader
    Есть несколько вариантов решения это проблемы.

    1) Некоторые могут пропагандировать сервисный слой (design-pattern.ru/patterns/service-layer.html), как следствие: "App/Services/ServiceName" - набор классов, отвечающих за какое-то абстрактное действие. Например: "UserAvatarUploaderService", который отвечает за загрузку аватарки пользователя.

    2) В качестве альтернативы и способ, который предпочитаю я - это создание директории "src" с набором независимых компонентов, включая собственный composer.json. Тот же сервис загрузки аватарки будет выглядеть следующим образом:
    - src/
        - AvatarUploader/
            - README.md
            - composer.json
            - tests/ ...
            - src/
                - AvatarInterface.php
                - FileSystemInterface.php
                - FileSystemUploader.php
                - UploaderInterface.php


    Для подключения этой библиотеки достаточно будет прописать в корневом:
    {
        "repositories": [
            {
                "type": "path",
                "url": "./src/AvatarUploader"
            }
        ],
        "require": {
            "app/avatar-uploader": "*"
        }
    }


    А выглядеть внутренний (т.е. внутри "src/AvatarUploader") composer будет так:
    {
        "name": "app/avatar-uploader",
        "autoload": {
            "psr-4": {
                "AvatarUploader\\": "src/"
            }
        }
    }


    Таким образом мы запилим совершенно независимый компонент со своими тестами и зависимостями, а внутри основного приложения будем лишь к нему обращаться.
    Ответ написан
    1 комментарий
  • Как автоматизировать обновление данных?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    IMHO, правильный вариант - менеждер вносит запись на сайт, с сайта периодически выгружается xls, если он ещё нужен.
    Ответ написан
    4 комментария
  • Почему не перехватывается исключение PDO?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Версия PHP 5.13

    Не существует такой.

    mysql позволяет соединяться без указания имени базы данных. Имя базы данных можно выбрать позже.
    pdo_mysql не ругается на неизвестные параметры в DSN.
    У всех всё хорошо, а раз никто не кинул exception - то чего тут ловить try catch?

    А ошибку вы получаете где-то дальше.
    Ответ написан
    1 комментарий
  • Как экранировать строку в REGEXP (mysql) средствами PHP?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Я думаю, что preg_quote() должна подойти.
    Ответ написан
    1 комментарий
  • Можно ли заменять в SQL запросе ' на "?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Эти функции - какой-то ужас, летящий на крыльях ночи. mysql_real_escape_string - вообще за гранью добра и зла.

    Но главное, что я не могу понять - это какое отношение к mysql и mssql имеет функция xss_clean. Ну то есть я даже представить себе не могу, как можно функцию для защиты от xss применять для любых манипуляций c SQL. Это - я не знаю - как положить деньги в презерватив от грабителей. Он же служит для безопасности. Ну вот деньги и будут в безопасности.

    По теме: ради всего святого, используйте PDO с подготовленными выражениями. Это сделает ненужной всю эту мышиную возню с регулярками. PDO поддерживает как mysql, так и mssql, так что разница будет только в синтаксисе запросов, а сам код работы с запросами будет один и тот же

    $sql = "SELECT TOP 10 * FROM user where mssql.department_id=?";  
    $stmt = $conn->prepare($sql);  
    $stmt->execute([$_GET['department_id']]); 
    $users = $stmt->fetchAll();
    
    $sql = "SELECT * FROM user where mysql.department_id=? LIMIT 10";  
    $stmt = $conn->prepare($sql);  
    $stmt->execute([$_GET['department_id']]); 
    $users = $stmt->fetchAll();


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

    От XSS же надо защищаться совсем в другом месте, и также без всего этого ужаса
    Ответ написан
    1 комментарий
  • Можно ли школьнику лет 12 начинать самому изучать web-программирование?

    SagePtr
    @SagePtr
    Еда - это святое
    Можно и даже нужно (если душа к этому лежит). Это намного полезнее, чем заниматься всякой фигнёй и набивать ММР в Доту-2 (или чем нынешние школьники обычно увлекаются).
    Ответ написан
    Комментировать
  • Можно ли школьнику лет 12 начинать самому изучать web-программирование?

    SmthTo
    @SmthTo
    Все перепёлки мира будут оплакивать мою смерть.
    Да, можно, почему нет?

    Если теребонькать в этом возрасте уже вовсю можно, почему бы и программированием не заняться? Не вижу никаких проблем и потенциальных преград для занятий в этой интеллектуальной сфере и в данном возрасте.

    Вот я в этом возрасте только теребонькал, поэтому потерял много времени, а жаль (на самом деле — не жаль, LOL).
    Ответ написан
    Комментировать
  • Можно ли школьнику лет 12 начинать самому изучать web-программирование?

    greenfox07
    @greenfox07
    Можно, даю добро
    Ответ написан
    Комментировать
  • Может ли эта уязвимость навредить сайту?

    SagePtr
    @SagePtr
    Еда - это святое
    А ещё в пост вставить картинку с котиком, а через некоторое время (когда пост затеряется и шанс модератора наткнуться на него будет минимальным) - заменить картинку с котиком на изображение листа конопли и натравить на него Роскомнадзор.
    В итоге сайт улетает в блокировку, а владельцы некоторое время не понимают, почему кол-во посетителей из России вдруг упало, а найти картинку, к которой РКН придрался, будет весьма сложно, так как факт замены в логах нигде отражён не будет, ибо заменена она будет на стороне стороннего сервера.
    Ответ написан
    1 комментарий
  • Легаси-монстр. Как побеждаете?

    @ijoy14
    https://www.google.com/url?sa=t&source=web&rct=j&u...
    Презентация реальной истории
    Ответ написан
    Комментировать
  • Как избежать ошибку 504 Gateway Time-out?

    @Flying
    Судя по 504 Gateway Time-out у вас перед PHP стоит nginx. Если это так - добавьте в конфигурацию сайта настройку для ожидания времени ответа upstream. Если у вас используется FastCGI то:
    fastcgi_read_timeout 30m;
    если используется проксирование, то:
    proxy_read_timeout 30m;

    А вообще такие скрипты запускают не через веб-сервер, а из консоли, устанавливая при этом set_time_limit(0);
    Ответ написан
  • Как сделать сделать проверку если введён необязательный символ, то вторая часть обязательна?

    Stalker_RED
    @Stalker_RED
    Не делай этого.
    В твоей чудо-системе Жан-Ив не сможет зарегистрироваться, например. И Д'Артаньян не сможет. Ты злой.

    Заблуждения программистов об именах
    Ответ написан
    1 комментарий