Как загрузить файл в PHP при нажатии кнопки отправки ввода

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

Мой оператор if в основном просто проверяет, существует ли файл, и если да, то начинает загружать файл. Эта часть работает, однако я не могу заставить ее работать, чтобы она загружала файл ТОЛЬКО при нажатии кнопки.

На данный момент ничего не происходит при нажатии на кнопку.

Может быть, я не помещаю оператор if в правильное место?

      <form action='?module=clientsupport&call=landing-proco' method='post' enctype = "multipart/form-data">           
        <input type='submit' name='download' class = "button yellow" value = "Download"/>

        <?php
        if (file_exists("D:/wwwroot/Workspace/George/Goliath/modules/test/file.txt")) {
            header('Content-Description: File Transfer');
            header('Content-Type: application/octet-stream');
            header('Content-Disposition: attachment; filename = "' . basename("D:/wwwroot/Workspace/George/Goliath/modules/test/file.txt") . '"');
            header('Expires: 0');
            header('Cache-Control: must-revalidate');
            header('Pragma: public');
            header('Content-Length: ' . filesize("D:/wwwroot/Workspace/George/Goliath/modules/test/file.txt"));
            readfile("D:/wwwroot/Workspace/George/Goliath/modules/test/file.txt");
            sleep(2);
            unlink("D:/wwwroot/Workspace/George/Goliath/modules/test/file.txt");
            exit;
        }
        ?>

    </form>
Стоит ли изучать 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
0
1 352
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Посмотрите на вашу программу.

Линия 1:

     <form action='?module=clientsupport&call=landing-proco' method='post' enctype = "multipart/form-data">           

… начинает вывод HTML-документа.

Затем вы получаете:

 header('Content-Description: File Transfer');

где вы начинаете выводить что-то, что не является документом HTML, а это слишком поздно, потому что вы уже в середине HTML-документа.

Разработайте свою логику для вывода того или иного результата.

извините, я немного смущен этим. Вы говорите, что я не могу использовать функцию PHP header(), потому что я уже использовал HTML над ней?

ginomay89 01.03.2019 11:29

да. Вы должны вывести заголовки, прежде чем выводить что-либо еще. Они идут наверху. Вот почему они называются заголовками. HTML - это "все остальное".

Quentin 01.03.2019 11:39
Ответ принят как подходящий

Удалите php-код из html, создайте новый файл с вашим PHP-кодом и свяжите действие вашей формы с этим файлом. Это будет работать нормально

Я попробовал это и создал новый файл php, содержащий только мой оператор if, а затем в другом файле действие теперь является путем и именем этого нового файла php. Мой код теперь выглядит как <form action='D:/wwwroot/Workspace/George/Goliath/modules/clientsu‌​pport/landing-myproc‌​o-proco2.php' method='post' enctype = "multipart/form-data"> <p></p> <input type='submit' name='download' class = "button yellow" value = "Download"/> </form>, но при нажатии кнопки ничего не происходит. Может я еще что-то упускаю?

ginomay89 01.03.2019 12:21

Вы используете apache или что-то еще для запуска веб-сервера? По умолчанию PHP-код не выполняется, если вы откроете путь D:/wwwroot/Workspace/George/Goliath/modules/clientsupport/la‌​nding-myproco-proco2‌​.php, он просто загрузит ваш php-файл, поэтому маршрут должен быть чем-то вроде http://localhost/modules/clientsupport/landing-myproco-proco‌​2.php

Nevermind23 01.03.2019 12:26

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

ginomay89 01.03.2019 17:08

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