Задайте имя файла, используя введенную пользователем переменную в PHP


Мне просто интересно, как я могу использовать имя переменной для задания имени файла в PHP? Когда я запускаю следующий код:

<?php
if ($_POST) {
    $filename = $_POST['firstName'];

    header("Content-Type: application/txt");        
    header('Content-Disposition: attachment; filename="$filename.txt"');

    echo "Welcome, ";
    echo $_POST['firstName']. " " . $_POST['lastName'];

    exit;
} else {

?>

<form action="" method="post">
    First Name: <input type="text" name="firstName" /><br />
    Last Name: <input type="text" name="lastName" /><br />
    <input type="submit" name="submit" value="Submit me!" />
</form>

<?php } ?>

Имя файла всегда имеет значение "$filename.txt", Но я бы хотел, чтобы оно было Adam.txt или Brian.txt и т. Д. В Зависимости от ввода пользователя.

Author: Max, 2011-09-20

5 answers

Замените "на"", чтобы подстановка переменных работала

header("Content-Disposition: attachment; filename=\"$filename.txt\"");

Или, если вы хотите использовать "

header('Content-Disposition: attachment; filename="'.$filename.'.txt"');
 6
Author: Bluewind, 2011-09-20 12:00:55

Только двойные кавычки позволяют интерполировать переменные:

$a = "some text"
$b = "another part of $a" //works, results in *another part of some text*
$b = 'another part of $a' //will not work, result *in another part of $a*

См. http://php.net/manual/en/language.types.string.php#language.types.string.parsing для получения дополнительной информации

 0
Author: hoppa, 2011-09-20 12:01:30

Это связано с тем, что вы используете одинарные кавычки для своих строк, а строки в одинарных кавычках не анализируются - см. документацию.

Чтобы исправить это, вы можете сделать следующее:

header('Content-Disposition: attachment; filename="'.$filename.'.txt"');
 0
Author: Repox, 2011-09-20 12:01:41

Используйте это:

header('Content-Disposition: attachment; filename="'.$filename.'.txt"');
 0
Author: Fabian, 2011-09-20 12:05:56
  <?php  
   if ($_POST) { 
   $filename = isset($_POST['firstName'])? $_POST['firstName'] :'general';
   header("Content-Type: application/txt"); 
   header('Content-Disposition: attachment;  filename='.$filename.'.txt'); 
   echo "Welcome, "; 
   echo
   $_POST['firstName']. " " . $_POST['lastName'];   exit;
  } else
   {

   ?>

   <form action="" method="post"> 
 First Name: <input type="text"
   name="firstName" /><br /> 
 Last Name: <input type="text"
   name="lastName" /><br /> <input type="submit" name="submit"
   value="Submit me!" /> </form>

   <?php } ?>
 0
Author: Saikrishna, 2011-09-20 12:10:06