是ini_set(“memory_limit”,“512M”);太多了?

时间:2012-08-06 03:37:29

标签: php

我使用2个php库来提供文件 - unzipdUnzip2

zip zip.lib
http://www.zend.com/codex.php?id=470&single=1

它们在10MB以下的文件上工作正常,但是文件超过10MB时,我必须将mem限制设置为256.如果文件超过25MB,我将其设置为512.它似乎有点高......是吗? / p>

我在专用服务器上 - 4个CPU和16GB内存 - 但我们也有很多流量和下载,所以我有点想知道这里。

2 个答案:

答案 0 :(得分:1)

也许您正在使用php将整个文件加载到内存中,然后再将其提供给用户?我使用了http://www.php.net/manual/en/function.readfile.php(注释部分)中的一个函数,该函数部分地为文件提供服务,保持低内存。从该帖子复制(因为我的版本已更改):

<?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; 
    } 
?>

答案 1 :(得分:0)

  

我的脚本所做的是在用户下载之前许可文件

通常,您应该避免使用占用大量内存或CPU时间的任何Web脚本。理想情况下,您可以通过分离过程将任务转换为运行。设置一个上限本身并不坏,但它使得检测编写不良的脚本变得更加困难,并且更容易对复杂页面的高要求甚至在简单的页面上损害性能。

例如,使用gearman,您可以轻松设置一些在CLI上运行的许可工作者脚本,并通过gearman API与它们进行通信。

通过这种方式,您的Web服务器可以自由执行低CPU和内存任务,并且您可以轻松保证您不会同时运行超过X个许可任务(其中X基于您允许运行的工作脚本数量) )。

您的前端脚本可能只是一个AJAX小部件,用于轮询服务器,检查任务是否已完成。