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张从未出现过。
答案 0 :(得分:1)
经过6个月的审核,测试和我的代码挣扎,这不是我的代码。我的服务提供商在Linux的LVE-options 中留下了一个已弃用的选项。他们没有指明太多,但这是引起所有这些症状的问题。
感谢所有为此牺牲了你的想法的人,它终于应运而生了。 :)