Поэтому я хочу, чтобы пользователь мог загружать документы или документы 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 и отображает сообщение. Есть ли способ вернуться на главную страницу и отобразить текст, который был успешным?
Обычно лучше показывать сообщение об успешности на перенаправленной странице, но вы можете решить эти два способа:
header("Location: old_page.php");
Также это не лучший способ получить расширение файла:
$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"]
или переименуйте свое имя входа в "файл".
Попробуйте использовать массив $ _FILES ["img"] для доступа к загруженным свойствам файла (ваш вход «Выбрать файл» под названием «img»).
Вы можете использовать http-заголовок «Location» для перенаправления на исходную страницу.
изменение
$extension!=".doc" || $extension!=".doc"
в
$extension!=".doc" || $extension!=".docx"
и используйте $_FILES['img']
вместо $_FILES['file']
потому что ваш тип файла имеет свойство имени img
.