为什么有些代码不会在标题(“Content-disposition:...”)行之后运行?

时间:2013-11-10 12:08:10

标签: php

我想知道是否有人知道为什么header(Content-disposition: ...)之后的代码无法运行?它会写入并下载文件,但不会运行unlink()行...

此代码最初只是在其他一些if语句中。

以下是代码:

$form1Array = array($_POST["namn"], $_POST["stad"]);
$form1String = serialize($form1Array);
$form1Fil = $_POST["namn"].".txt";
$midMappe = "midlertidig\\";
$fo_form1Fil = fopen($midMappe.$form1Fil, "w");
//
if (fwrite($fo_form1Fil, $form1String)) {
    ignore_user_abort(true);
    //
    header("Content-type: text/plain");
    header("Content-disposition: attachment; filename=".$form1Fil);
    //
    unlink($midMappe.$form1Fil);
    } else {
       echo "Could not save the file for download.";    
    }

谢谢。 :)

2 个答案:

答案 0 :(得分:1)

代码将被正确执行,正如有人在评论中指出的那样,问题很可能出现在unlink()函数中。我建议你做一个快速调试,看看unlink()返回什么。更特别的是,看看它是否返回false(如果它无法取消链接文件,它将会出现)。

Here an example of what i mean

答案 1 :(得分:0)

我在'CBroe'的帮助下想出来了,谢谢。

我还添加了connection_abort()行,我发现了here

以下是更新后的代码:

$form1Array = array($_POST["namn"], $_POST["stad"]);
$form1String = serialize($form1Array);
$form1Fil = $_POST["namn"].".txt";
$midMappe = "midlertidig\\";
$fo_form1Fil = fopen($midMappe.$form1Fil, "w");
//
if (fwrite($fo_form1Fil, $form1String)) {
    fclose($fo_form1Fil); // ** Here is the updated/added line 1 **
    //
    ignore_user_abort(true);
    //
    header("Content-type: text/plain");
    header("Content-disposition: attachment; filename=".$form1Fil);
    //
    if (connection_abort()) { // ** Here is the updated/added line 2 **
        unlink($midMappe.$form1Fil);
    } else {
        unlink($midMappe.$form1Fil);
    }
    } else {
       echo "Could not save the file for download.";    
    }