为什么某些代码不会在标头之后运行(“内容处置:..“)行


Why some code will not be ran after the header("Content-disposition: ...") line?

我想知道是否有人知道为什么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.";    
    }

谢谢。:)

代码将正确执行,正如有人在注释中指出的那样,问题很可能出在unlink()函数上。我建议您进行快速调试,看看unlink()返回的内容。更具体地说,查看它是否返回 false(如果它无法取消链接文件,它将返回)。

这是我的意思的一个例子

我在"CBroe"的帮助下想通了,谢谢。

我还添加了一条connection_abort()行,我在这里找到了。

以下是更新的代码:

$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.";    
    }