无法分配内存,无法创建子进程:我是否需要对PHP映像请求进行排队?

时间:2017-06-26 11:39:53

标签: javascript php ajax linux apache

2017年3月更新

我尝试过一个简单的测试。我制作了一个包含以下内容的PHP文件:

<?php
echo "<img src='http://www.hependos.fi/testgetimage.php?file=2016-11-02_1478082625_zKW3xUPF.jpg'>";
echo "<img src='SIMILARLINKWITHANOTHERFILENAME'>";
echo "<img src='SIMILARLINKWITHANOTHERFILENAME'>";
echo "<img src='SIMILARLINKWITHANOTHERFILENAME'>";
echo "<img src='SIMILARLINKWITHANOTHERFILENAME'>";
echo "<img src='SIMILARLINKWITHANOTHERFILENAME'>";
echo "<br><br>";
echo "<img src='http://www.hependos.fi/Ikonit/test/2016-11-    02_1478082625_zKW3xUPF.jpg'>";
echo "<img src='SIMILARLINKWITHANOTHERFILENAME'>";
echo "<img src='SIMILARLINKWITHANOTHERFILENAME'>";
echo "<img src='SIMILARLINKWITHANOTHERFILENAME'>";
echo "<img src='SIMILARLINKWITHANOTHERFILENAME'>";
echo "<img src='SIMILARLINKWITHANOTHERFILENAME'>";
?>

和testgetimage.php文件包含以下内容:

<?php

$KuvaReferenssi = basename(urldecode($_GET["file"]));

$fileDir = "Ikonit/test/";

$file = $fileDir . $KuvaReferenssi;
$type = 'image/jpeg';
header('Content-Type:'.$type);
header('Content-Length: ' . filesize($file));
readfile($file);

?>

每次都会正确显示具有固定源的图像,但是再次使用php-file-as-source文件无法正确显示,平均2/5图像正确显示。

图像是我在服务器上找到的最小的图像,单个文件的大小为4.4kb。

PHP错误说:

  


  致命错误的:允许存储器的耗尽2097152个字节大小(试图分配2312704个字节)中的 /home/hependos/public_html/testgetimage.php 线的 57

Cpanel的错误日志与下面提到的相同。

我在这里做错了什么?

提前致谢!

<小时/> 原帖

我在网页上显示图片时遇到问题。这些图像是通过php脚本获取的。

页面上的图像具有.php文件的来源,该文件基于文件引用来获取图像。 website.c om / getImage.php?file = filename

然后实际将图像发送到浏览器的php文件部分的内容为:

if (file_exists($fileDir . $file)){
$contents = file_get_contents($fileDir . $file);
echo $contents;}

当然,文件名和目录是从数据库中获取的,并在那里用作变量$ file。

实际问题是服务器虚拟内存非常容易上限(获取6张图像,每张图像大小约为200kb),从而产生HTTP500。

Cpanels错误日志状态(对于每个HTTP500):

[Sun Jun 25 15:31:00.131534 2017] [:error] [pid 398316:tid 140190395291392](12)无法分配内存:[client 85.76.42.74:50544]无法创建子女进程:/ usr / sbin / suphp for /home/username/public_html/getImage.php,referer:http://www.website.com/index.php

这确实是一个问题,因为有些图片根本没有加载(没有特定的顺序,他们决定出现或不出现)。

我已经尝试联系我的服务提供商,但他们一直在说#14; Myes,服务器的容量已经达到最高。&#34;。

事实并非如此,因为除了我自己和我服务器上的其他人之外几乎没有任何流量。我发送的请求非常小(基于文本的文章,然后是这些图片)。

但问题是,我在图像抓取中遗漏了什么吗?我是否应该在每次获取后清理一些变量或释放内存?

我没有使用任何图书馆或任何东西,我自己也写过。

我很乐意回答任何进一步的问题,以便让这件事情继续下去,这真的令人沮丧。 :(

编辑28.06 15:06 我替换了那3行并尝试了readfile() - 这样的函数:

echo readfile($fileDir . $row['KuvaNimi']);

但没有区别。在6张图片中,有5张从未出现过。

1 个答案:

答案 0 :(得分:1)

经过6个月的审核,测试和我的代码挣扎,这不是我的代码。我的服务提供商在Linux的LVE-options 中留下了一个已弃用的选项。他们没有指明太多,但这是引起所有这些症状的问题。

感谢所有为此牺牲了你的想法的人,它终于应运而生了。 :)