Форма HTML/PHP внезапно перестала работать без изменения кода

У меня есть веб-сайт, на котором отображается каталог/папки, где я могу загрузить несколько файлов в указанный каталог/папку, чтобы легко получить доступ к важным документам/статьям. Он прекрасно работал около года и внезапно перестал работать в прошлом месяце. Я знаю, что я не изменил свой код случайно, потому что у меня есть несколько папок с одним и тем же копированием/вставкой файла php в каждую папку, и мне было бы невозможно изменить каждый файл php.

Что странно, так это то, что если я попытаюсь загрузить по одному файлу за раз, произойдет сбой и будет загружен документ размером 0 байт. Если я загружаю несколько файлов, первый файл завершается с ошибкой и загружается документ размером 0 байт, но все последующие файлы могут быть успешно загружены.

Я не знаю, изменилось ли что-то с моим хостинг-провайдером или что-то изменилось с типом ввода = использованием файла, но был бы рад помощи. Спасибо!!

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

HTML

<form action = "upload.php" method = "post" enctype = "multipart/form-data">
    <input type = "file" name = "fileToUpload[]" id = "fileToUpload" multiple = "multiple">
    <input type = "submit" value = "Upload" name = "submit">
</form>

PHP

<?php
$targetDir = __DIR__ . '/'; // Directory where uploaded files will be stored

if (isset($_POST["submit"])) {
// Loop through each uploaded file
for ($i = 0; $i < count($_FILES["fileToUpload"]["name"]); $i++) {
    $targetFile = $targetDir . basename($_FILES["fileToUpload"]["name"][$i]); // Get the filename of the uploaded file

    // Check if file already exists
    if (file_exists($targetFile)) {
        echo '<script>alert("Sorry, the file '. basename($_FILES["fileToUpload"]["name"][$i]). ' already exists.");</script>';
        continue; // Skip to the next iteration of the loop
    }

    // Check file size (optional)
    if ($_FILES["fileToUpload"]["size"][$i] > 100000000) { // Adjust the file size limit as per your requirements
         echo '<script>alert("Sorry, your file '. basename($_FILES["fileToUpload"]["name"][$i]). ' is too large.");</script>';
        continue; // Skip to the next iteration of the loop
    }

    // If the upload is successful, move the uploaded file to the target directory
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"][$i], $targetFile)) {
        echo '<script>alert("The file '. basename($_FILES["fileToUpload"]["name"][$i]). ' has been uploaded.");</script>';
    } else {
        echo '<script>alert("Sorry, there was an error uploading your file.");</script>';
    }
}

// Redirect back to the upload page
$redirectUrl = rtrim(dirname($_SERVER['PHP_SELF']), '/') . '/list.php';
echo '<script>window.location.href = "'.$redirectUrl.'";</script>';
}
?>

Я попробовал несколько разных компьютеров (личных и общедоступных) с Chrome, Safari, приложением Phone Brave, и ничего не помогло, поэтому подозреваю, что это связано с кодом или сервером.

Я пробовал менять разрешения (сейчас 0755), но безуспешно.

Я мало что знаю об изменении особенностей файлов/настроек на хост-сервере... Я пытался отключить htaccess и снова включить, но это ничего не дало.

Я протестировал код на своем локальном хосте и работает. Проблема может быть связана с вашим сервером. Как версия PHP или что-то в этом роде.

Akhilesh 15.04.2024 09:01

Большое спасибо за подтверждение!! Есть какие-нибудь советы о том, что следует проверить в настройках моего сервера? Я использую PHP версии 7.3, которая, по моему мнению, является моей версией по умолчанию.

user24337598 15.04.2024 15:45

Попробуйте на своем локальном хосте. И попробуйте реализовать ту же настройку на своем сервере. Пожалуйста, проверьте php.ini на наличие таких конфигураций, как upload_max_filesize

Akhilesh 16.04.2024 06:36
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
3
54
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Без доступа к серверу вам сложно помочь, но я попробую дать вам несколько советов.

  1. Проблема может быть связана с поврежденным PDF-файлом. Загрузка может завершиться неудачей, даже если вы можете открыть файл с помощью программы чтения PDF-файлов. Итак, первое, что нужно сделать, это протестировать другие файлы PDF.

  2. Проверьте логи php и мощность сервера. Возможно, файл слишком велик для обработки сервером. Вы можете увеличить максимальный размер загружаемых файлов, изменив конфигурацию PHP (upload_max_filesize, post_max_size и т. д.).

  3. Возможно, проблема связана с изменением конфигурации брандмауэра, хотя это маловероятно, поскольку некоторые загрузки проходят, а другие нет.

  4. Напишите тестовый файл, максимально простой и проверьте выложенные данные var_dump($_POST) и т. д.

Надеясь, что это может помочь.

Спасибо за предложения! Я не понимаю, это зависит от файла. Например, если я загружаю 2 файла одновременно, первый файл всегда выходит из строя, а второй всегда работает, то есть оба файла будут загружены, если я просто поменяю порядок. То же самое происходит с несколькими форматами файлов, такими как jpg и txt, аналогично только со вторым файлом и за его пределами (я попробовал 10 загрузок одновременно, и все, кроме первого, работали). Также не думайте, что это зависит от кода, поскольку я ничего не менял. Что касается № 2, где я могу найти журналы PHP. Я согласен, что это, вероятно, связано с сервером, но не знаю, с чего начать по этой теме. Я использую хостинг A2

user24337598 15.04.2024 07:58

Если вы хотите отправить мне доступ к своему серверу (FTP + менеджер сервера), я могу посмотреть, вы можете связаться со мной здесь: miglisoft.com/#contact

migli 15.04.2024 08:01

Спасибо, как мне отправить эту информацию? Мне удалось найти журналы ошибок. Что-то происходит с Apache FileScan.

user24337598 15.04.2024 16:28

[Вс, 14 апреля, 23:51:2024] [security2:error] [pid 6233:tid ] [клиент ***:58756] [клиент ***] ModSecurity: Внимание. Требуется соответствие «rx ^$» и «FILES_TMPNAMES:fileToUpload[]». [файл "/etc/apache2/conf.d/modsec_vendor_configs/imunify360-full-a‌​pache/014_i360_files‌​can.conf"] [строка "43"] [id "77317957"] [msg "IM360 WAF: отслеживать загрузку файла ||MV:/tmp/***||Размер:266622||Пользователь:***||SC:/home/***/upl‌​oad.php||WPU:||T:APA‌​CHE| |"] [серьёзность "NOTICE"] [тег "service_im360"] [тег "noshow"] [имя хоста ".com"] [uri "/***/upload.php"] [уникальный_id "***"], реферер: https://***/list.php

user24337598 15.04.2024 16:30

ModSecurity обнаружил потенциальную проблему во время загрузки файла. Он ищет непустое имя временного файла, связанное с загруженным файлом, но оно может быть пустым или не соответствовать ожидаемому формату. Это может быть вызвано различными причинами, такими как: Ошибка в скрипте загрузки (upload.php). Неправильная настройка правил ModSecurity. Временный сбой в процессе загрузки. Вам следует сообщить об этом в службу хостинга и попросить их о помощи.

migli 15.04.2024 17:18

Омг исправлено! Хостинг-сервер так и не ответил, но в итоге я добавил небольшую задержку, что решило проблему. спать(0,5);

user24337598 17.04.2024 06:02

Я рад, что ты это исправил

migli 17.04.2024 06:11
Ответ принят как подходящий

Решено! В итоге вставил задержку в начале кода upload.php для учета задержки сервера, что решило проблему.... Все еще не уверен, что изменилось на сервере, поскольку код работал нормально более года...

<?php $targetDir = __DIR__ . '/'; 
// Directory where uploaded files will be stored
 
if (isset($_POST["submit"])) {

    ***sleep(0.5);***

// Loop through each uploaded file 
for ($i = 0; $i < count($_FILES["file 
...

Другие вопросы по теме