Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP标题混乱_Php_Header_Fclose - Fatal编程技术网

PHP标题混乱

PHP标题混乱,php,header,fclose,Php,Header,Fclose,我整天都在用我的头撞这个。是时候寻求帮助了 所以,我有一个PHP脚本,它是一个下载页面。用户可以根据订购的内容下载文件 它是这样的(显然不是真正的代码,好的,一些位是-希望你能得到要点) 希望这是有道理的。如果这更有用的话,我可以把所有的代码都放进去,但这是一个很长的旧脚本,我认为这可能更方便 因此,如果用户正在查看页面,脚本将获取用户可能拥有的任何订单的订单信息。在订单被标记为完成且不再可用之前,用户只能尝试下载X次 它显示每个可用订单的div,每个div中都有一个小表单。如果他们点击表单,它

我整天都在用我的头撞这个。是时候寻求帮助了

所以,我有一个PHP脚本,它是一个下载页面。用户可以根据订购的内容下载文件

它是这样的(显然不是真正的代码,好的,一些位是-希望你能得到要点)

希望这是有道理的。如果这更有用的话,我可以把所有的代码都放进去,但这是一个很长的旧脚本,我认为这可能更方便

因此,如果用户正在查看页面,脚本将获取用户可能拥有的任何订单的订单信息。在订单被标记为完成且不再可用之前,用户只能尝试下载X次

它显示每个可用订单的div,每个div中都有一个小表单。如果他们点击表单,它会将订单号发回同一个脚本,我希望在这个脚本上,它只提供文件,然后继续显示页面的其余部分。唉,没有,显然是强制下载抓取控件上的头,fclose之后什么也没有发生

所以我想搞错了,在“if(post…)”中添加了一个变量,沿着$sendfile=1的行,并在页面底部添加了一个变量

如果($sendfile==1){do headers stuff}

…希望在发送文件之前页面能正确加载,大家都很高兴。同样,唉,不是。它首先提供文件,而不重新加载页面

再一次,希望我的废话有点道理

我已经读过php脚本会先“做”标题,所以不管你把它们放在哪里。我不知道这是不是真的,但根据我所看到的,这是真的

我还尝试在fclose之后使用标题重定向到同一页面,并使用简单的GET使脚本显示成功消息。但是,如果我这样做,重新加载工作,但下载提示不会显示。即使我把睡眠(10)前重定向到自我。它只是等待,然后重新加载,但没有文件下载

页面重新加载非常重要,因为当页面的其余部分重新获取订单数据并显示它时,下载尝试次数应增加1


有什么方法可以实现我想做的事情吗?我正在剪切的代码越来越粗糙,因此任何帮助或建议都将不胜感激

在下载登录页上,尝试添加
,而不是使用标题。这将使浏览器加载页面,然后在1秒后重定向到文件下载


此外,如果您提供的不是小文件,我建议您签出。

我不太明白您想要什么,或者手头的问题是什么,但您的代码总体上看起来可疑。您尝试生成下载,并在下载数据中生成与下载一起出现的成功消息。如果您希望获得成功消息和下载,则需要通过单独的请求生成它们,例如,首先生成带有“下载已开始”消息的页面,然后页面自动重定向到可保存的下载,或者通过iframe或其他方式提供下载。Hi Achimedix,是的,我开始明白你的意思了。我已经有过各种各样的“将页面本身附加到下载文件的开头或结尾”——您可以发送页面还是发送文件,但不能同时发送两者?这是我的理解问题,我只是不明白为什么你不能先加载页面,然后再执行脚本的“发送文件”部分…嗨,Znarkus谢谢你的输入-文件大小将从40mb到300mb不等-这是否保证X-Sendfile?我查看了XSendfile页面,它看起来也是在标题中完成的,所以我不会再遇到同样的问题了吗?嗨,Znarkus,我想我看到了你(和Archimedix)的意思-我猜根据其他网站的做法,如果我将用户重定向到“你的文件正在下载”页面,并从该页面提供文件,怎么样?这应该可以解决我遇到的问题,不是吗?这就是我的建议:)我的“下载登录页”就是你所说的“你的文件正在下载”页面。我认为X-Sendfile在服务器上更容易,因此可能值得一试。不是为了解决这个问题,而是为了“证明未来”。请确保从源代码处编译最新版本。嗨,Znarkus-谢谢,当我们得到新服务器时,我会考虑将XSendfile放入。感谢关于刷新的指针,我最终确实是这样做的,但是如果我没有这一点信息,我会被卡住的,所以谢谢你的帮助。
PAGE START
if(post[getorder]){

check order exists, get order filename etc from mysql;
update download attempts in db;

$ctype="application/force-download";
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers 
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
$handle = fopen($filename, "r");
while ( $contents = fread( $handle, 1024 ) )
{
print (  $contents );
flush();
}
fclose($handle);    
$successmessage = "Your download has begun";                  
}

if($successmessage){
 echo $successmessage;
}

get users order details from db;
display div
 display form with post to post order number to script; 
 end form
end div
END PAGE