Я создал форму поиска, в которой пользователь вводит код изображения, и при поиске он позволит пользователю загрузить файл. Ниже мой код
<html>
<head>
<title>Search Contacts</title>
</head>
<body>
<h3>Search Client File</h3>
<form method="post" action="#" id="searchform">
Type the File Code:<br><br>
<input type="text" name="fcode">
<br>
<input type="submit" name="submit" value="Search">
</form>
<?php
$filecode=$_POST["fcode"];
if (!empty($filecode))
{
$file="/var/www/website/$filecode.pdf";
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
readfile($file);
}
else
{
echo "No Results";
}
?>
</body>
</html>
Проблема в том, что загруженный файл не может быть просмотрен или невозможен, что, по-видимому, является проблемой с моим кодом?
Ваш код никогда не будет работать. Вы выводите свою HTML-форму в начале каждого исполнения кода. Если загрузка была запрошена, загрузка будет добавлена к этой странице HTML. И вызовы header()
также не будут выполнены с "уже отправленными заголовками".
Если вы отправляете свою форму на ту же страницу, у вас должен быть код загрузки FIRST:
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
... download stuff here
exit(); // critical - don't let the html get output
}
... html form here ...
Я сделал это для работы, ниже приведен код для справки.
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
ob_end_flush();
readfile($file);
Попробуйте изменить этот заголовок:
header('Content-Type: application/pdf');