我正在为我的公司开发一个文件上传服务。我们的用户经常向我们发送非常大的 .zip 文件,其中包含非常大的 illustrator 文件。通常文件不会大于 1.5GB,但我需要计划处理最大 4GB 的文件。
显然,这引起了很多关于我如何配置我的 Apache 以允许如此大的文件传输而不会使我的服务器过载或打开安全漏洞的问题。
问题 1:内存限制
我的系统的一个特点是用户应该能够在上传文件后将其下载回来。由于安全问题,我避免使用标准下载(仅链接到文件)——我不能让其他用户下载彼此的文件。我的解决方案是将上传的文件保存在 www-root 之外的 protected 目录中,并通过 PHP 脚本加载它们。该 PHP 脚本看起来有点像这样:
$fo = fopen($uploadDir.$file_name, "r");
while(!feof($fo)) {
$strang = fread($fo, 102400);
echo $strang;
ob_flush();
}
fclose($fo);
我将 fread 放入一个循环中,并将其锁定为一次只加载文件的一小部分。我这样做是因为我的服务器只有 4GB 的 RAM,并且需要能够处理多人同时下载(可能最多 20 人)。我的第一个问题是我应该一次阅读多大的 block 。由于该 block 大小,现在下载 1.5GB 的文件非常慢。
问题 2:最大执行时间
上传/下载如此大的文件的另一个问题是最大执行时间。虽然在我的内部网络上一切都非常快,但我应该为连接速度慢的用户做好准备。我将我的低端上传速率设置为 1Mbps,上传大约需要 35 分钟。让我们大方地说,他们可以以两倍的速度下载,所以 15 分钟左右的下载时间。
将我的 max_excution_time 设置为 30 分钟是否存在安全风险?它会杀死我服务器上的任何东西吗?我没有任何理由认为这是一个坏主意,但我的直觉只是在尖叫,让脚本运行那么长时间是愚蠢的。有没有更好的方法来完成我想做的事情?
我看过其他几个类似的问题,其中大多数建议使用 java 或 silverlight 之类的东西。如果有任何明智的方法,我想避免 java.lang.我目前正在使用 swfupload 和随附的 jQuery 插件。
最佳答案
问题 1:内存限制
readfile 流,因此它会即时转换为 HTTP 响应,并且不会加载到内存中完成。
然而,对于上传,脚本必须有足够的内存,因为在上传和使用 PHP 时,如果我没记错的话,整个文件都会进入内存。
问题 2:最大执行时间
如果您担心安全问题,请通过 HTTPD 服务器处理身份验证和访问权限。那么当请求无效时,您的脚本将不会被执行。
关于php - 为大型上传配置 Apache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6777624/
我有一个在Linux服务器上运行的ruby脚本。它不使用rails或任何东西。它基本上是一个命令行ruby脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg
我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
我有带有Logo图像的公司模型has_attached_file:logo我用他们的Logo创建了许多公司。现在,我需要添加新样式has_attached_file:logo,:styles=>{:small=>"30x15>",:medium=>"155x85>"}我是否应该重新上传所有旧数据以重新生成新样式?我不这么认为……或者有什么rake任务可以重新生成样式吗? 最佳答案 参见Thumbnail-Generation.如果rake任务不适合你,你应该能够在控制台中使用一个片段来调用重新处理!关于相关公司
我在Rails应用程序中使用CarrierWave/Fog将视频上传到AmazonS3。有没有办法判断上传的进度,让我可以显示上传进度如何? 最佳答案 CarrierWave和Fog本身没有这种功能;你需要一个前端uploader来显示进度。当我不得不解决这个问题时,我使用了jQueryfileupload因为我的堆栈中已经有jQuery。甚至还有apostonCarrierWaveintegration因此您只需按照那里的说明操作即可获得适用于您的应用的进度条。 关于ruby-on-r
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵
之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m
文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,
注意:本文主要掌握DCN自研无线产品的基本配置方法和注意事项,能够进行一般的项目实施、调试与运维AP基本配置命令AP登录用户名和密码均为:adminAP默认IP地址为:192.168.1.10AP默认情况下DHCP开启AP静态地址配置:setmanagementstatic-ip192.168.10.1AP开启/关闭DHCP功能:setmanagementdhcp-statusup/downAP设置默认网关:setstatic-ip-routegeteway192.168.10.254查看AP基本信息:getsystemgetmanagementgetmanaged-apgetrouteAP配
1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模