Как очистить память на каждое исполнение? - PullRequest
0 голосов
/ 07 января 2020

У меня есть что-то вроде этого:

<?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 или меньше!
Как очистить память для каждого поколения фотографий?

1 Ответ

2 голосов
/ 07 января 2020

Загрузить одну строку из файла и обработать ее. Тогда загрузи следующий! Не загружайте ВСЕ в БОЛЬШУЮ СТРОКУ, а затем создайте ее массив, а затем обработайте каждое вхождение массива.

После того, как вы это сделаете, вам, возможно, не потребуется увеличивать лимит памяти или время выполнения.

<?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);
...