У меня есть форма с кнопкой отправки ввода, и я хочу, чтобы при нажатии кнопки загружался файл.
Мой оператор 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>






Посмотрите на вашу программу.
Линия 1:
<form action='?module=clientsupport&call=landing-proco' method='post' enctype = "multipart/form-data">
… начинает вывод HTML-документа.
Затем вы получаете:
header('Content-Description: File Transfer');
где вы начинаете выводить что-то, что не является документом HTML, а это слишком поздно, потому что вы уже в середине HTML-документа.
Разработайте свою логику для вывода того или иного результата.
да. Вы должны вывести заголовки, прежде чем выводить что-либо еще. Они идут наверху. Вот почему они называются заголовками. HTML - это "все остальное".
Удалите php-код из html, создайте новый файл с вашим PHP-кодом и свяжите действие вашей формы с этим файлом. Это будет работать нормально
Я попробовал это и создал новый файл php, содержащий только мой оператор if, а затем в другом файле действие теперь является путем и именем этого нового файла php. Мой код теперь выглядит как <form action='D:/wwwroot/Workspace/George/Goliath/modules/clientsupport/landing-myproco-proco2.php' method='post' enctype = "multipart/form-data"> <p></p> <input type='submit' name='download' class = "button yellow" value = "Download"/> </form>, но при нажатии кнопки ничего не происходит. Может я еще что-то упускаю?
Вы используете apache или что-то еще для запуска веб-сервера? По умолчанию PHP-код не выполняется, если вы откроете путь D:/wwwroot/Workspace/George/Goliath/modules/clientsupport/landing-myproco-proco2.php, он просто загрузит ваш php-файл, поэтому маршрут должен быть чем-то вроде http://localhost/modules/clientsupport/landing-myproco-proco2.php
это указало мне правильное направление в отношении создания отдельного файла php для оператора if. с некоторыми настройками мне удалось заставить это работать, так что спасибо
извините, я немного смущен этим. Вы говорите, что я не могу использовать функцию PHP header(), потому что я уже использовал HTML над ней?