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

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

    делаешь просто открываешь соеденение вебсокет , в этой сессии ты создаешь массив и при каждом отправлении ты вначале полученое слово:
    1. приводишь к общему регистру
    пример:
    $wordsArray = [города]
    $wordToSearch = "город";
    $lowercaseWordToSearch = strtolower($wordToSearch);
    
    $minSimilarity = 80; // Процент сходства, который считается достаточным так как человек же мог ошибиться в названии города, и ещё бы я составил бы массив сокращенных названий городов. слово питер, санкт-петербург, ёбург и т д  
    foreach ($wordsArray as $word) {
        similar_text($word, $wordToSearch, $similarity);
    
        if ($similarity >= $minSimilarity) {
            echo "Город такой уже назвали: $word\n";
            break;
        }
    }
    Потом уже ты запускаешь проверку
    $firstLetter = substr($wordToSearch, 0, 1);
    или ещё короче
    $firstLetter = $wordToSearch[0];
    получаешь последнее слово(город) в массиве
    $lastElement = end($wordsArray);
    $lastLetter = $lastElement[strlen($lastElement) - 1];
    ну и сравниваешь
    Ответ написан
    Комментировать
  • Как ускорить процесс загрузки файлов в PHP?

    @DooX
    Очень интересно. Кто то бы написал что-то плохое. Но я помню себя так лет 5 назад так что!

    по физике php и судя по тому что я вижу html ты отправляешь сразу несколько файлов. а может быть у тебя ещё репитер стоит и ты шлешь больше двух. Но ты делаешь один канал связи и шлешь в порядки очереди эти файлы пока они загрузятся все форма висит. ТАк как php не асинхронный.
    1. это не как не решить, просто визуально js показывай что файлы грузятся.
    2. Используй ajax и отправляешь при клике в цикле каждый файл отдельно но не ожидая загрузки первого а сразу открываешь несколько соиденений с сервером и грузишь (сокращая время загрузки на 30-60%) просто они идут параллельно. так делают и на майле и яндексе ит д и т п.
    2.1. А можно вообще намутить так:
    создаешь на сервере ендпоинт допустим pre_upload.php
    Повесить евент на input file как только он изменился ты делаешь сразу загрузку асинхронно на сервер вызывая pre_upload.php , pre_upload.php вернет тебе то что ты там настроишь, допустим загрузку во временную папку и возврат эксклюзивное имя файла.
    Пока идет загрузка файла ты на фронте делаешь анимацию загрузки и как промис вернул положительным ты в input hidden записываешь имя файла.

    тем самым юзер видит что что то происходит и может в форме сразу же выбрать несколько файлов. в момент нажатия загрузить ты по факту ничего не грузишь а тупо отправляешь на file-upload.php массив из имен файлов
    там скрипт проверяет папку временной загрузки находит эти файлы и перемещает на постоянное место.

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

    если Юзер передумал грузить какой то либо файл он нажал удалить файл и ты опять удаляешь из временой папки файл.
    3. На сервере настрой keep-alive.
    4. upload_max_filesize и post_max_size для пыхи
    5. gzip

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

    @DooX
    // Сброс указателя результатов запроса перед новой итерацией
        $result->data_seek(0);


    Привет. При каждой итерации цикла foreach он сбрасывает указатель результатов запроса $result->data_seek(0), что приводит к повторной обработке всех строк результата запроса. Это приводит к удалению всех файлов, так как они поочередно не находятся в базе данных на каждой итерации.

    Попробуй по другому.

    // Параметры подключения к базе данных
    $servername = "localhost";
    $username = "username";
    $password = "password";
    $dbname = "username";
    $conn = new mysqli($servername, $username, $password, $dbname);
    
    // Проверка подключения к базе данных
    if ($conn->connect_error) {
        die("Ошибка подключения к базе данных: " . $conn->connect_error);
    }
    
    // Выполнение запроса к базе данных для получения списка всех файлов
    $sql = "SELECT img_images FROM img_ads";
    $result = $conn->query($sql);
    
    // Получение списка файлов из базы данных
    $filesInDatabase = array();
    if ($result->num_rows > 0) {
        while ($row = $result->fetch_assoc()) {
            $filesInDatabase[] = $row['img_images'];
        }
    }
    
    // Получение списка файлов в папке
    $imagesFolder = "media/images/";
    $files = glob($imagesFolder . "*.webp");
    
    // Проход по каждому файлу в папке
    foreach ($files as $file) {
        // Проверка, существует ли файл в базе данных
        $filename = basename($file);
    
        if (!in_array($filename, $filesInDatabase)) {
            if (unlink($file)) {
                echo "Файл удален: " . $file . "<br>";
                // Запись результатов в файл log.txt
                file_put_contents("log/log.txt", "Удален файл: " . $file . PHP_EOL, FILE_APPEND);
            } else {
                echo "Не удалось удалить файл: " . $file . "<br>";
                // Запись результатов в файл log.txt
                file_put_contents("log/log.txt", "Не удалось удалить файл: " . $file . PHP_EOL, FILE_APPEND);
            }
        }
    }
    
    // Закрытие подключения к базе данных
    $conn->close();
    Ответ написан
  • Срабатывание запроса в Mysql при клике на кнопку, ajax?

    @DooX
    1. В вашем коде не вижу ajax.
    2. Видно что вы юзаете jq старый добрый.
    3. Все что в php отрабатывает только на стороне сервера по. Генерации страницы и отдачи ее клиенту.
    Не буду умничать, дам просто совет.
    При клике на кнопку, делайте релоад страницы)))) тогда уж точно все будет работать.

    А если серьезно. Вы на сервере должны создать ендпоинт при при вызове которого будет запускаться нужный вам алгоритм и возвращать вам что то нужное.
    А вы уже получая через ajax используете эти данные по своему усмотрению.
    Ответ написан
    Комментировать