Php 是ini设置(“内存限制”、“512M”);太多
我使用2个php库来提供文件-Php 是ini设置(“内存限制”、“512M”);太多,php,Php,我使用2个php库来提供文件-解压,以及 zip-zip.lib 它们可以在10MB以下的文件上正常工作,但是对于10MB以上的文件,我必须将mem限制设置为256。对于超过25MB的文件,我将其设置为512。看起来有点高。。。是吗 我在一个专用的服务器上-4个CPU和16GB RAM-但是我们也有很多流量和下载,所以我想知道这里 我的脚本所做的是在用户下载之前授权文件 通常,您应该避免使用任何消耗大量内存或CPU时间的web脚本。理想情况下,您应该通过分离的进程将任务转换为运行。设置一个高限
解压
,以及
zip-zip.lib它们可以在10MB以下的文件上正常工作,但是对于10MB以上的文件,我必须将mem限制设置为256。对于超过25MB的文件,我将其设置为512。看起来有点高。。。是吗 我在一个专用的服务器上-4个CPU和16GB RAM-但是我们也有很多流量和下载,所以我想知道这里 我的脚本所做的是在用户下载之前授权文件 通常,您应该避免使用任何消耗大量内存或CPU时间的web脚本。理想情况下,您应该通过分离的进程将任务转换为运行。设置一个高限制本身并不坏,但它使检测写得不好的脚本变得更加困难,而且对复杂页面的高要求更容易损害即使是简单页面的性能 例如,使用可以轻松设置一些在CLI上运行的许可证工作程序脚本,并通过gearman API与它们通信 通过这种方式,您的web服务器可以自由地执行低CPU和内存任务,并且您可以轻松地保证一次不会运行超过X个授权任务(其中X基于您允许运行的工作脚本数量)
您的前端脚本可能只是一个AJAX小部件,用于轮询服务器,检查任务是否已完成。也许您正在使用php将整个文件加载到内存中,然后再将其提供给用户?我使用了(注释部分)中的一个函数,该函数将文件分成多个部分,以保持较低的内存。从该帖子复制(因为我的版本已更改):
那么,要上传一个11MB
文件,你到底要做什么呢?不上传,下载,我们提供超过1K的文件,范围从1MB到30MB。设置一个上限并不意味着php每次都会占用那么多ram,只是意味着如果它开始使用额外内存,它不会超过这个上限。谢谢你,马克,现在我还应该设置ini_集(“max_execution_time”,“600”);较高的?我的脚本所做的是在用户下载之前授权文件。我认为,如果您将实际的zip文件存储在服务器中的某个位置,这意味着您不需要动态添加zip/unzip文件,那么您就可以在不消耗太多内存的情况下提供页面。在我的服务器上运行PECL:(@Benn,这只是我熟悉的一个建议。你可以通过数据库中的队列表轻松地自己做。这并不是说设置一个高限制是不好的(特别是如果你只为该页面做的话),但就个人而言,我更喜欢一个更健壮的解决方案。是的,我同意,它只是增加了(需要文件)一旦用户点击“下载”按钮,我就不得不把它设置得很高。在过去的4年中,我们没有遇到过问题,但是准备新的网站版本并想要清理代码。但是,队列表也不是一个坏主意,但是,我比我应该做的更努力了。我可以雇用你来做这份工作吗?
<?php
function readfile_chunked ($filename,$type='array') {
$chunk_array=array();
$chunksize = 1*(1024*1024); // how many bytes per chunk
$buffer = '';
$handle = fopen($filename, 'rb');
if ($handle === false) {
return false;
}
while (!feof($handle)) {
switch($type)
{
case'array':
// Returns Lines Array like file()
$lines[] = fgets($handle, $chunksize);
break;
case'string':
// Returns Lines String like file_get_contents()
$lines = fread($handle, $chunksize);
break;
}
}
fclose($handle);
return $lines;
}
?>