在PHP中完成进程后重定向页面
Redirect page after process complete in PHP
我在页面中有一些进程。正在下载文件。
<?php
// getting file with CURL
$ch = curl_init ('http://adress.com/file.csv');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT,7500);
$rawdata=curl_exec($ch);
curl_close ($ch);
// End Curl Process
// SAVE FILE
$name = Rand(100000,1000000);
$fp = fopen('files/'.$name.'.csv','w');
fwrite($fp, $rawdata);
fclose($fp);
// END SAVE PROCESS
// REDIRECT OTHER PAGE
**header('Location: x.php');**
// END OF PAGE
?>
没关系。但是有一个问题。它重定向没有完整的过程。我想在所有进程完成后重定向。当我使用该方法重定向时,文件为空。
我必须做什么?我如何在所有进程完成后重定向页面?PHP或javascript/jquery
我认为在头部完成时设置回调是最好的解决方案。
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.php.net/');
// here is the hack - Set callback function for headers
curl_setopt($ch, CURLOPT_HEADERFUNCTION, 'read_header');
curl_exec($ch);
curl_close($ch);
//Callback function for header
function read_header($ch, $string)
{
if (trim($string) == 'HTTP/1.1 200 OK')
header("location: http://www.php.net");
}
你的代码应该没问题,应该在重定向之前完成这个过程。
PHP在一个线程中运行,所以下一个语句在前一个语句完成之前不会执行。这意味着在fwrite()
完成写入文件之前,header()
行不会执行。
事实上,设置Location
头甚至不意味着PHP脚本停止。您可以通过创建一个虚拟文件并在发出Location
头后在其上运行unlink()
来测试这一点。该文件仍将被删除。Location
所做的就是向浏览器发送一个新位置。然后,浏览器在旧页面运行之前检索新页面。
您可以设置睡眠时间(秒),并检查是否足够完成整个过程。
也可以加上一个简单的勾号:
$start_size = 0;
while (1) {
$new_file_size = filesize($filename);
if ($start_size != $new_file_size) {
$start_size = $new_file_size;
sleep(30)
} else {
break;
}
}
如果您不将文件返回给客户端,您可以执行以下操作:
ignore_user_abort();
header("Content-Length: 0", true, HTTP_RESPONSE_204_NO_CONTENT);
header("Connection: close", true);
flush();
这将把控制权返回给客户端并关闭浏览器连接,但服务器端进程将继续工作。
然而,我同意@ agentriddrum的观点,即header()行在其他进程完成之前不会被执行。
相关文章:
- 通过javascript重定向html传递php变量
- JavaScript下拉菜单-点击按钮并根据所选值重定向到url
- 使用angular重定向到html页面
- 如何在chrome扩展中重定向到html页面
- 无法从jquery Mobile导航栏重定向到另一个页面
- ng视图外的链接重定向到ng视图内的页面
- 在phonegap应用程序内部重定向不起作用
- CORS-重定向到第二个GET正在接收的页面
- AJAX不会在文件上传后重定向到网页-POST方法
- 重定向时角度刷新浏览器
- 通过链接重定向不;我不在jstree中工作
- 根据select选项元素将表单重定向到不同的URL
- 通过JQuery重定向到另一个页面
- 重定向到“父窗口”
- 重定向iFrame中的父URL
- PHP-如何重定向到同一页面并更改DOM's
- chrome.tabs.update() 重定向到 'chrome-extension://invalid/'
- 我们如何在不更改url的情况下使用锚点点击从一个页面重定向到另一个页面
- 在PHP中完成进程后重定向页面
- 在koajs中重定向之前,等待异步进程完成