Задать вопрос
  • Как самописно защитить строку sql без знания кодировки БД?

    @Vitsliputsli
    В любом случае за строчку на str_replace я ещё как то могу разделить ответственность перед заказчиком, а вот подгрузка сторонних библиотек по лицензии "прими как есть"...

    А серверы у вас крутятся на самописной ОС? А процессоры к серверам тоже сами собираете? В современной разработке решение задач - это в первую очередь использование готовых решений, написание всего с нуля это бесполезная трата времени. Если развлекатесь для себя - другой вопрос, но заказчику явно не нужно, чтобы вы переписали весь софт в мире, т.к. ни кому не доверяете, и только вы можете все сделать идеально.
  • Как самописно защитить строку sql без знания кодировки БД?

    @Vitsliputsli
    cheremsha11, вместо всего этого бесполезного переживания по поводу PDO::quote, прочитайте ещё раз описание. А там сказано: "Если вы используете эту функцию для построения SQL запросов, настоятельно рекомендуется пользоваться методом PDO::prepare() для подготовки запроса с псевдопеременными вместо использования PDO::quote() для вставки данных введенных пользователем в SQL запрос. ". Такие настоятельные рекомендации пишутся специально для тех, кто выискивает проблемы там, где их нет. Используйте рекомендованные инструменты. Нет ничего идеального, и PDO действительно имеет проблемы, но не те, что вы обозначили.
    Вы вообще видели эти заморочки с выносом плейсхолдеров в pdo, а in ( ... )? Пропадает всякая читаемость.

    Нет никаких заморочек, а читаемость выше, чем у специализированных драйверов. Но после PDO::quote не удивлюсь, что и здесь вы сделали по-своему, отсюда и проблемы.
    PDO в некоторых случаях прям спамит prepare запросами создавая некоторый оверхед

    Расскажите, пожалуйста, поподробнее.
  • Как в php запустить математические операции из строки?

    @Vitsliputsli
    17aPaBo3uK,
    $formula = '{var1} / {var2}'; // можно сложить, умножить, делить и т.д.
    $var1 = 100; // тип может быть float
    $var2 = 2; // тип может быть float
    $var3 = '/';
    switch ($var3) {
        case '/':
            $result = $var1 / $var2;
            break;
        ...
    }
  • Как самописно защитить строку sql без знания кодировки БД?

    @Vitsliputsli
    ORM и PDO не нужно, слишком проект простой и должен быть быстрым

    А почему вы решили что ORM и PDO, это медленно? Вернее, почему вы решили, что написанная вами обертка для работы с БД будет работать быстрее? Я уже не говорю о безопасности.
    Ну да бог с ними, с ORM и PDO, будем работать с специализированным драйвером, но почему нельзя воспользоваться встроенной системой байндинга? Забудем о безопасности, но ведь при байндинге, запрос подготавливается и на стороне СУБД кешируется план, что опять же влияет на скорость.
    В общем, для простых проектов есть простые и быстрые решения.
  • Как правильно хранить данные в бд?

    @Vitsliputsli
    Зависит от того, как будете использовать эти данные, если забираете все скопом, и только так, то можно и в одну ячейку засунуть. Но в таком случае весь смысл использования реляционной СУБД теряется, и логичнее применить что-то вроде Redis.
  • Как изменить изменения в бд для всех значений?

    @Vitsliputsli
    Нужно заполнять значениями форму. Ну или как-то так напишите $user->email = $_POST['new_email'] ?? $user->email
  • Как настроить кеширование сайта?

    @Vitsliputsli
    Браузер и так будет кешировать статику, для этого ничего не нужно делать.
  • Как оптимально импортировать часто изменяемые записи из файла в бд?

    @Vitsliputsli
    Тогда вряд ли будут проблемы, если будете обновлять последовательными транзакциями
  • Как оптимально импортировать часто изменяемые записи из файла в бд?

    @Vitsliputsli
    Тогда обновляйте последовательно. Транзакция на truncate и добавление 50к не должна создать проблем для хорошего сервера СУБД. Таблица не перегружена индексами?
  • Как оптимально импортировать часто изменяемые записи из файла в бд?

    @Vitsliputsli
    Все данные взаимозависимы? Т.е. все должно обновляться единовременно?
  • Как подключиться по ssh имея ключ?

    @Vitsliputsli
    Если поменялся идентификатор по сравнению с known hosts, то ssh так прямо и напишит, поэтому, как-то странновато.
  • Можно ли перенапривить ввод/вывод запущенного процесса в linux socket в реальном времени?

    @Vitsliputsli
    Андрей Евдокимов,
    Задача в теме была описана. Запустить интерактивный (не завершающийся сразу, требующий ввода от пользователя) процесс, и управлять вводом-выводом через сокет.

    В смысле? Что-то не получается? Или что?
  • Как деплоить файлы которые игнорируются гитом?

    @Vitsliputsli
    "чтоб корреткно отображался сайт" - значит в git. А огромная это сколько в байтах?
  • Можно ли перенапривить ввод/вывод запущенного процесса в linux socket в реальном времени?

    @Vitsliputsli
    Наберитие "man unix", там в конце пример клиент-серверного приложения общающихся по unix-сокету. Весь man нельзя выложить, но вот пример:
    spoiler

    EXAMPLE
    The following code demonstrates the use of sequenced-packet sockets for local interpro‐
    cess communication. It consists of two programs. The server program waits for a connec‐
    tion from the client program. The client sends each of its command-line arguments in
    separate messages. The server treats the incoming messages as integers and adds them up.
    The client sends the command string "END". The server sends back a message containing
    the sum of the client's integers. The client prints the sum and exits. The server waits
    for the next client to connect. To stop the server, the client is called with the com‐
    mand-line argument "DOWN".

    The following output was recorded while running the server in the background and repeat‐
    edly executing the client. Execution of the server program ends when it receives the
    "DOWN" command.

    Example output
    $ ./server &
    [1] 25887
    $ ./client 3 4
    Result = 7
    $ ./client 11 -5
    Result = 6
    $ ./client DOWN
    Result = 0
    [1]+ Done ./server
    $

    Program source

    /*
    * File connection.h
    */

    #define SOCKET_NAME "/tmp/9Lq7BNBnBycd6nxy.socket"
    #define BUFFER_SIZE 12

    /*
    * File server.c
    */

    #include
    #include
    #include
    #include
    #include
    #include
    #include "connection.h"

    int
    main(int argc, char *argv[])
    {
    struct sockaddr_un name;
    int down_flag = 0;
    int ret;
    int connection_socket;
    int data_socket;
    int result;
    char buffer[BUFFER_SIZE];

    /*
    * In case the program exited inadvertently on the last run,
    * remove the socket.
    */

    unlink(SOCKET_NAME);

    /* Create local socket. */

    connection_socket = socket(AF_UNIX, SOCK_SEQPACKET, 0);
    if (connection_socket == -1) {
    perror("socket");
    exit(EXIT_FAILURE);
    }

    /*
    * For portability clear the whole structure, since some
    * implementations have additional (nonstandard) fields in
    * the structure.
    */

    memset(&name, 0, sizeof(struct sockaddr_un));

    /* Bind socket to socket name. */

    name.sun_family = AF_UNIX;
    strncpy(name.sun_path, SOCKET_NAME, sizeof(name.sun_path) - 1);

    ret = bind(connection_socket, (const struct sockaddr *) &name,
    sizeof(struct sockaddr_un));
    if (ret == -1) {
    perror("bind");
    exit(EXIT_FAILURE);
    }

    /*
    * Prepare for accepting connections. The backlog size is set
    * to 20. So while one request is being processed other requests
    * can be waiting.
    */

    ret = listen(connection_socket, 20);
    if (ret == -1) {
    perror("listen");
    exit(EXIT_FAILURE);
    }

    /* This is the main loop for handling connections. */

    for (;;) {

    /* Wait for incoming connection. */

    data_socket = accept(connection_socket, NULL, NULL);
    if (data_socket == -1) {
    perror("accept");
    exit(EXIT_FAILURE);
    }

    result = 0;
    for (;;) {

    /* Wait for next data packet. */

    ret = read(data_socket, buffer, BUFFER_SIZE);
    if (ret == -1) {
    perror("read");
    exit(EXIT_FAILURE);
    }

    /* Ensure buffer is 0-terminated. */

    buffer[BUFFER_SIZE - 1] = 0;

    /* Handle commands. */

    if (!strncmp(buffer, "DOWN", BUFFER_SIZE)) {
    down_flag = 1;
    break;
    }

    if (!strncmp(buffer, "END", BUFFER_SIZE)) {
    break;
    }

    /* Add received summand. */

    result += atoi(buffer);
    }

    /* Send result. */

    sprintf(buffer, "%d", result);
    ret = write(data_socket, buffer, BUFFER_SIZE);
    if (ret == -1) {
    perror("write");
    exit(EXIT_FAILURE);
    }

    /* Close socket. */

    close(data_socket);

    /* Quit on DOWN command. */

    if (down_flag) {
    break;
    }
    }

    close(connection_socket);

    /* Unlink the socket. */

    unlink(SOCKET_NAME);

    exit(EXIT_SUCCESS);
    }

    /*
    * File client.c
    */

    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include "connection.h"

    int
    main(int argc, char *argv[])
    {
    struct sockaddr_un addr;
    int i;
    int ret;
    int data_socket;
    char buffer[BUFFER_SIZE];

    /* Create local socket. */

    data_socket = socket(AF_UNIX, SOCK_SEQPACKET, 0);
    if (data_socket == -1) {
    perror("socket");
    exit(EXIT_FAILURE);
    }

    /*
    * For portability clear the whole structure, since some
    * implementations have additional (nonstandard) fields in
    * the structure.
    */

    memset(&addr, 0, sizeof(struct sockaddr_un));

    /* Connect socket to socket address */

    addr.sun_family = AF_UNIX;
    strncpy(addr.sun_path, SOCKET_NAME, sizeof(addr.sun_path) - 1);

    ret = connect (data_socket, (const struct sockaddr *) &addr,
    sizeof(struct sockaddr_un));
    if (ret == -1) {
    fprintf(stderr, "The server is down.\n");
    exit(EXIT_FAILURE);
    }

    /* Send arguments. */

    for (i = 1; i < argc; ++i) {
    ret = write(data_socket, argv[i], strlen(argv[i]) + 1);
    if (ret == -1) {
    perror("write");
    break;
    }
    }

    /* Request result. */

    strcpy (buffer, "END");
    ret = write(data_socket, buffer, strlen(buffer) + 1);
    if (ret == -1) {
    perror("write");
    exit(EXIT_FAILURE);
    }

    /* Receive result. */

    ret = read(data_socket, buffer, BUFFER_SIZE);
    if (ret == -1) {
    perror("read");
    exit(EXIT_FAILURE);
    }

    /* Ensure buffer is 0-terminated. */

    buffer[BUFFER_SIZE - 1] = 0;

    printf("Result = %s\n", buffer);

    /* Close socket. */

    close(data_socket);

    exit(EXIT_SUCCESS);
    }

    For an example of the use of SCM_RIGHTS see cmsg(3).

    SEE ALSO
    recvmsg(2), sendmsg(2), socket(2), socketpair(2), cmsg(3), capabilities(7), creden‐
    tials(7), socket(7), udp(7)

    COLOPHON
    This page is part of release 5.00 of the Linux man-pages project. A description of the
    project, information about reporting bugs, and the latest version of this page, can be
    found at https://www.kernel.org/doc/man-pages/.

    Linux 2018-04-30 UNIX(7)
  • Как исправить зависание и отключение мыши в Linux?

    @Vitsliputsli
    Illidan Stormrage, скорее всего устройства не поддерживают высокоскоростной интерфейс, попробуйте выгрузить модуль ehci, чтобы остался только ohci. Возможно стоит даже попробовать uhci. Я с таким не сталкивался, но, думаю, копать нужно в эту сторону.
  • Как исправить зависание и отключение мыши в Linux?

    @Vitsliputsli
    Проверьте какие у вас загружены модули для USB:
    lsmod | grep hci_hcd

    Попробуйте (если нет) загрузить ohci_hcd, да и ohci_pci.
  • Можно ли посмотреть как отрабатывается sql запрос?

    @Vitsliputsli
    Антон Шелестов, еще можете посмотреть скорость работы через "show profile", убедиться что exists отвратительная по производительности конструкция, т.к. выполняется для каждой строки и заменить ее join.
  • Как правильно импортировать столбец?

    @Vitsliputsli
    В Excel можно, смотрите функции