首页 > 解决方案 > 如何在每次执行时清除内存?

问题描述

我有这样的事情:

<?php

ini_set('max_execution_time', 0);
ini_set('memory_limit', '1024M');

//require_once '../../tabkadeh/error_reporting.php';
function setName($name,$photoName, $new_file)
{
    var_dump($new_file);
    require_once 'files/lib/WideImage.php';
    require_once 'FarsiGD.php';

    $left = '+50';
    $top  = '+400';

    $bg = WideImage::load($photoName);
    //$final= $bg ->resize(400, 400);
    $final= $bg;
    $canvas = $final ->getCanvas();
    //$canvas->useFont('./Yekan.ttf', 200, $final->allocateColor(000, 000, 000));
    $new_name=(new FarsiGD)->persianText($name,'fa', 'normal');
    $canvas->useFont('./Ray-ExtraBlack.ttf', 40, $final->allocateColor(34, 84, 109));
    $canvas->writeText("left $left", "top $top",$new_name);
    $final->saveToFile($new_file);
}

$file = fopen("Main.txt", "r");
$i = 0;
$line_of_text = '';
while (!feof($file)) {
    $line_of_text .= fgets($file);
}
$myText = explode("\n", $line_of_text);
fclose($file);


$arrayCount = count($myText);
var_dump($myText);

for ($x = 0; $x < $arrayCount; $x++) {
    setName($myText[$x], './bgbg.jpg', './export/flower_stamp-'.$x.'.jpg');
}

此文件:Main.txt包含大量数据(2000 行产品名称)。

我增加了内存限制;但是当我运行脚本时,这只适用于第 1 行到第 250 行或更少!
如何清理每一代照片的内存?

标签: phpmemorymemory-limit

解决方案


从文件中加载一行并处理它。然后加载下一个!不要将所有内容加载到大字符串中,然后将其制作成一个数组,然后处理数组的每次出现。

一旦你这样做了,你可能不需要增加内存限制或执行时间。

<?php

ini_set('max_execution_time', 0);
ini_set('memory_limit', '1024M');

//require_once '../../tabkadeh/error_reporting.php';
function setName($name,$photoName, $new_file)
{
    //var_dump($new_file);
    require_once 'files/lib/WideImage.php';
    require_once 'FarsiGD.php';

    $left = '+50';
    $top  = '+400';

    $bg = WideImage::load($photoName);
    //$final= $bg ->resize(400, 400);
    $final= $bg;
    $canvas = $final->getCanvas();
    //$canvas->useFont('./Yekan.ttf', 200, $final->allocateColor(000, 000, 000));
    $new_name = (new FarsiGD)->persianText($name,'fa', 'normal');
    $canvas->useFont('./Ray-ExtraBlack.ttf', 40, $final->allocateColor(34, 84, 109));
    $canvas->writeText("left $left", "top $top",$new_name);
    $final->saveToFile($new_file);
}

$file = fopen("Main.txt", "r");
$i = 0;
$line_of_text = '';
while ($line = fgets($file, 4096) !== false) {
    setName(trim($line), './bgbg.jpg', './export/flower_stamp-'.$i.'.jpg');
    $i++;
}

fclose($file);

推荐阅读