Получение значения текстового поля и использование его в качестве имени файла в PHP
Я пытаюсь получить значение текстового поля и использовать его в качестве имени файла для файла, который будет загружен. Но я не знаю, как это сделать.
Пока мой код загружается, но я не могу использовать значение текстового поля в качестве имени файла. Итак, вот мой код, и что я должен добавить, чтобы иметь возможность получить значение из текстового поля и использовать его в качестве имени файла загруженного файла?
Вот сторона HTML:
//HTML Code:
<form method="post" action = "/downloads.php">
<table width="100%" border="0">
<tr>
<td width="49%" height="47"> <span class="new"> Reference Number: </span> </td>
<td width="51%" height="47"> <span class="nbox"> <input type="text" name="refOff" id="refOff"/></td>
</tr>
<tr>
<td height="47" colspan="2"> <input type="submit" value="Download" style="width:80px; height:30px"></td>
</tr>
</table>
</form>
А вот и PHP
//PHP Code:
//note: "C:\wamp\www\dl" contains the PDF file
<?php
$refOff = $_POST['refOff'];
$file = $refOff . '.pdf';
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
readfile($file);
exit;
}
?>
Загружаемый файл - "Form2.pdf".
Например, ссылочный номер abcd123, как его можно загрузить как "abcd123.pdf"? Спасибо за то, что вы хороший ^_^
3 ответа
Вам нужно получить имя файла, заданное в форме, а затем установить его.
Просто обновите свой php-код так:
$file = 'C:\wamp\www\dl\Form2.pdf';
$filename = (isset($_POST['refOff'])) ? $_POST['refOff'].'.pdf' : 'form2.pdf'; //Get filename set in form
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.$filename); //Set the filename
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
readfile($file);
exit;
}
?>
Вы можете получить доступ к переменным формы по их соответствующим супервариантам ($_GET и $_POST). Итак, сначала вы должны определить метод в вашей форме
<form method="GET">
Затем вы можете получить доступ к переменной этой формы следующим образом:
$_GET['name']
Замените name на имя атрибута нужного вам ввода; в твоем случае
$_GET['refOff']
То же самое верно для метода POST.
Кроме того, путь, указанный другим пользователем, не является неправильным. Но избегайте определения метода формы. И избегайте полагаться на $_REQUEST
, это может привести ко многим проблемам безопасности, если используется без опыта.
Замещать
header('Content-Disposition: attachment; filename='.basename($file));
от
header('Content-Disposition: attachment; filename='.basename($_REQUEST['refOff']));