我正在使用 2 个 php 库来提供文件 -unzip
和dUnzip2
zip zip.lib
http://www.zend.com/codex.php?id=470&single=1
它们在 10MB 以下的文件上工作正常,但对于超过 10MB 的文件,我必须将内存限制设置为 256。对于超过 25MB 的文件,我将其设置为 512。看起来有点高......是吗?
我在一个专用服务器上——4 个 CPU 和 16GB RAM——但我们也有很多流量和下载,所以我有点想知道。
我正在使用 2 个 php 库来提供文件 -unzip
和dUnzip2
zip zip.lib
http://www.zend.com/codex.php?id=470&single=1
它们在 10MB 以下的文件上工作正常,但对于超过 10MB 的文件,我必须将内存限制设置为 256。对于超过 25MB 的文件,我将其设置为 512。看起来有点高......是吗?
我在一个专用服务器上——4 个 CPU 和 16GB RAM——但我们也有很多流量和下载,所以我有点想知道。
也许您正在使用 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;
}
?>
我的脚本所做的是在用户下载之前许可文件
通常,您应该避免使用任何消耗大量内存或 CPU 时间的 Web 脚本。理想情况下,您会通过分离的进程将任务转换为运行。设置上限本身并不坏,但它使检测编写不佳的脚本变得更加困难,并且更容易对复杂页面的高需求损害即使是简单页面的性能。
例如,使用gearman ,您可以轻松设置一些在 CLI 上运行的许可证工作脚本,并通过 gearman API 与它们通信。
这样,您的 Web 服务器可以保持空闲来执行低 CPU 和内存的任务,并且您可以轻松地保证您永远不会同时运行超过 X 个许可任务(其中 X 取决于您允许运行的工作脚本的数量)。
您的前端脚本可能只是一个轮询服务器的 AJAX 小部件,检查任务是否已完成。