Intereting Posts
Подключение PHP к API MediaWiki и извлечение данных PHP Реальный путь всегда возвращает false Создание таблицы со значениями подзапроса в PHP Как использовать cURL для извлечения определенных данных с веб-сайта, а затем сохранить его в моей базе данных, используя php PHP: эхо-массив возвращает массив слов вместо его содержимого Сортировка по группам Regex в PHP codeigniter игнорирует пользовательскую функцию проверки Как STDIN и STDOUT с PHP и Python использовать html2text и получить отформатированный текст? Статическая :: staticFunctionName () Шаблон WordPress – «Ловкая фатальная ошибка: объект класса __PHP_Incomplete_Class не может быть преобразован в строку» Вызов API REST в PHP Присвоение информации о публикации WordPress массиву PHP и присвоение значения массива php массиву javascript ДЛЯ ЭТОГО ПРИЧИНА Удалить все, кроме китайских символов с регулярным выражением? Псевдослучайные числа в php Невозможно сбросить запрос, чтобы показать сообщение ramdom после первого цикла WordPress

Загрузка файла HTML / PHP

Поэтому я хочу, чтобы пользователь мог загружать документы или документы docx. Итак, сначала вот мой html:

<form action="upload_file.php" method="post" enctype="multipart/form-data"> Select a file: <input type="file" name="img"> <input type="submit"> </form> 

И вот мой php:

 $allowedExts = array("doc", "docx"); $extension = end(explode(".", $_FILES["file"]["name"])); if ($extension!=".doc" || $extension!=".doc" && ($_FILES["file"]["size"] < 200000) && in_array($extension, $allowedExts)) { if ($_FILES["file"]["error"] > 0) { echo "Return Code: " . $_FILES["file"]["error"] . "<br />"; } else { echo "Upload: " . $_FILES["file"]["name"] . "<br />"; echo "Type: " . $_FILES["file"]["type"] . "<br />"; echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />"; echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />"; if (file_exists("Proposals/" . $_FILES["file"]["name"])) { echo $_FILES["file"]["name"] . " already exists. "; } else { move_uploaded_file($_FILES["file"]["tmp_name"], "Proposals/" . $_FILES["file"]["name"]); echo "Stored in: " . "Proposals/" . $_FILES["file"]["name"]; } } } else { echo "Invalid file"; } 

Каждый раз, когда я пытаюсь загрузить файл, будь то документ или png, он выводит это:

 Upload: Type: Size: 0 Kb Temp file: already exists. 

И ничто не заканчивается загрузкой в ​​папку «Предложения». Итак, у меня есть 2 вопроса:
1) в чем проблема с моим кодом?
2) он перенаправляет на upload_file.php и отображает сообщение. Есть ли способ вернуться на главную страницу и отобразить текст, который был успешным?

На первый вопрос уже был дан ответ, поэтому я больше не буду отвечать на него.

2) он перенаправляет на upload_file.php и отображает сообщение. Есть ли способ вернуться на главную страницу и отобразить текст, который был успешным?

Обычно лучше показывать сообщение об успешности на перенаправленной странице, но вы можете решить эти два способа:

  • Храните предыдущий URL-адрес (или узнайте его) и перенаправляйте его с header("Location: old_page.php");
  • Сделайте цель формы iframe. Это означает, что сама главная страница не будет перенаправляться, и вы можете просто отбросить ответ от upload_file.php (который будет загружаться в iframe), что позволит без проблем загружать ваше приложение.

Также это не лучший способ получить расширение файла:

 $extension = end(explode(".", $_FILES["file"]["name"])); 

Вместо этого попробуйте использовать pathinfo: http://php.net/manual/en/function.pathinfo.php

 $extension = pathinfo( $_FILES["file"]["name"], PATHINFO_EXTENSION); 

И ваше утверждение if :

 if ($extension!=".doc" || $extension!=".doc" && ($_FILES["file"]["size"] < 200000) && in_array($extension, $allowedExts)) { 

Несмотря на то, что это крошечное использование in_array я бы порекомендовал взять это и использовать более практичный метод поиска массивов: http://php.net/manual/en/function.array-search.php

Таким образом, ваш if станет чем-то вроде:

 if (($_FILES["file"]["size"] < 200000) && array_search($extension, $allowedExts)!==false) { 

Имя вашего файла – img и вы использовали $_FILES["file"] , но он должен быть $_FILES["img"] .

Также вам нужно изменить условие if

 if (($_FILES["file"]["size"] < 200000) && in_array($extension, $allowedExts)) { 

Нет необходимости в

$ extension! = ". doc" || $ extension! = ". doc" &&

Вам нужно будет использовать $_FILES["img"] вместо $_FILES["file"] или переименуйте свое имя входа в "файл".

  1. Попробуйте использовать массив $ _FILES ["img"] для доступа к загруженным свойствам файла (ваш вход «Выбрать файл» под названием «img»).

  2. Вы можете использовать http-заголовок «Location» для перенаправления на исходную страницу.

изменение

 $extension!=".doc" || $extension!=".doc" 

в

 $extension!=".doc" || $extension!=".docx" 

и используйте $_FILES['img'] вместо $_FILES['file'] потому что ваш тип файла имеет свойство имени img .