php – Web App:可以监控HTTP文件下载的任何方式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – Web App:可以监控HTTP文件下载的任何方式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3022字,纯文字阅读大概需要5分钟。
内容图文
![php – Web App:可以监控HTTP文件下载的任何方式](/upload/InfoBanner/zyjiaocheng/733/b86d77e8c3b94d12a759cc52a0da1c29.jpg)
我正在开发一个Web应用程序.它将允许用户通过HTTP协议从服务器下载文件.这些文件最大可达4 GB.
这些是我的要求和限制:
> HTTP文件下载进度%
> HTTP文件下载完成后注册
>注册,如果HTTP文件下载崩溃
>注册,如果用户取消了下载
>恢复未完成的文件下载
>能够下载高达4GB的文件
>应该只在客户端实现JavaScript / HTML5,在服务器上实现PHP.
>可能无法在客户端使用Java或Flash实现.
我的发展环境:
> Apache
> PHP
> MySQL
> Windows 7
我的问题是,尽管我已经编写了可以下载大文件的PHP脚本,但我无法有效监控中止下载(浏览器关闭,取消下载,中止互联网连接). PHP函数connection_aborted()捕获了所有中止下载量的50%.
因此,我的问题是,如果有任何方法可以真正有效和精确地监控下载进度和中止下载?那么使用NGINX或LIGHTTPD Web服务器呢?为Apache编写自己的LUA或Perl模块怎么样,我会在哪里监视PHP输出缓冲区?
我当前的下载脚本:
while(!feof($fileObject))
{
usleep(100000);
//print(@fread($fileObject, $chunkSize));
echo(@fread($fileObject, $chunkSize));
// gradually output buffer to avoid memory problems by downloading large files
ob_flush();
flush();
// check if the client was disconnected
// important for cancelled or interrupted downloads
if (Connection_Aborted())
{
// sent to the database that the connection has been aborted
$result = mysqli_query($dbc, "UPDATE current_downloads SET connection_aborted=TRUE WHERE user_id=1;");
// close the database connection
mysqli_close($dbc);
// close the open file
@fclose($fileObject);
exit(json_encode(array("result" => false, "error" => "Connection with the client was aborted.")));
}
$nLoopCounter++;
$transferred += $chunkSize;
$downloadPercentage = (($nLoopCounter * $chunkSize) / $fileSize) * 100;
$result = mysqli_query($dbc, "UPDATE current_downloads SET progress_percent=$downloadPercentage, transferred=$transferred, connection_aborted=$strConnectionAborted, iteration=$nLoopCounter WHERE user_id=1;");
if($result == false)
{
// close the database connection
mysqli_close($dbc);
// close the file
fclose($handle);
// prepare output message
$outputArray = array("result" => 0, "message" => "Error Processing Database Query");
// output the message
echo json_encode($outputArray);
exit;
}
}
谢谢.
解决方法:
我对PHP连接相关问题的最终解决方案是使用Boost.Asio和一个鲜为人知的threadsafe SAPI released by Facebook创建一个Web服务器.下载链接已损坏,但可以在github here上找到.
我在使用Apache和其他Web服务器进行操作时遇到的主要问题是现有SAPI(Fast-CGI,PHP-FPM,mod_apache等)与PHP中连接的相关函数之间的不一致.在我尝试过的任何情况下,它们都不可靠,尽管许多其他人声称已经使用了特定配置(操作系统版本,Web服务器版本,SAPI版本,PHP版本等).
主要问题(正如您所观察到的)是PHP与Apache和其他Web服务器明显隔离.通过使用嵌入式PHP sapi,您可以在PHP和实际套接字连接以及其他网络相关功能之间实现更高级别的协作.这是我能够让PHP与Web服务器携手合作的唯一方式,这正是您所需要的.
然而,在第二个注释中,有许多严重的纯PHP服务现在浮出水面,因为PHP主要修复了它的垃圾收集问题.使用非阻塞套接字或PHP流可以轻松地创建一个简单的文件服务器,考虑到它将使用异步模式为静态内容提供服务,可能很快.
如果您认为这是您的解决方案需要移动的方向,我不介意发布一些Boost.Asio花絮或简单的PHP文件服务.但是,这绝对是可能的.成千上万的服务已经遇到了这个问题.
内容总结
以上是互联网集市为您收集整理的php – Web App:可以监控HTTP文件下载的任何方式全部内容,希望文章能够帮你解决php – Web App:可以监控HTTP文件下载的任何方式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。