1С-Битрикс, PHP Fatal error: Allowed memory size, cron и конфигурационные опции PHP

Дата публикации: 29 мая 2017, Категория: 1С-Битрикс

Имеем 1С-Битрикс и PHP скрипт, который работает по cron без проблем, стал отваливаться с ошибкой: 

Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 28352 bytes) in /home/b/ваш_аккаунт_beget/ваш_домен/public_html/bitrix/modules/main/classes/general/file.php on line 2470

Первым делом я локализовал проблему и нашел, что скрипт отваливается после вызова метода битрикса, который устанавливает множественное свойство типа файл:

CIBlockElement::SetPropertyValuesEx($ID_IMG, 11, array('photos' => $arFile_img));

 Параметры передаваемые в CIBlockElement::SetPropertyValuesEx():

31417416 - размер памяти до вызова "CIBlockElement::SetPropertyValueCode($ID_IMG, ‘photos’, $arFile_img_del);"
string(5) “15129” - ID элемента($ID_IMG)
// ниже массив $arFile_img
Array
(
    [0] => Array
        (
            [VALUE] => Array
                (
                    [name] => TEST000000000003003601_0.jpg
                    [size] => 537825
                    [tmp_name] => /home/b/ваш_аккаунт_beget/ваш_домен/public_html/upload/tmp/img/TEST000000000003003601_0.jpg
                    [type] => image/jpeg
                )

        )

)

Дальше стал изучать кишки bitrix/modules/main/classes/general/file.php

Но это не дало результатов, вызвав функции используемые в этом файле

<?php 
require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php"); 
header('Content-Type: image/jpeg'); 

$img = CFile::ImageHandleOrientation(2, '/home/b/ваш_аккаунт_beget/ваш_домен/public_html/upload/tmp/img/000000000003003601_0.jpg'); 
imagejpeg($img); 
imagedestroy($img);

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

К вечеру дня, уже сидев в состоянии глубокого транса, я решил вызвать этот скрипт, просто в браузере... И О, боже! Все заработало.

Как выяснилось в бегете при запуске PHP скриптов из под cron конфигурационные опции PHP, эти:
конфигурационные опции PHP
Настроенные для вашего домена не используются! Эту ошибку я не замечал потому, что для маленьких фоток хватало стандартной памяти memory_limit

Теперь в планировщике заданий beget вместо вызова: 

/usr/bin/php -d mbstring.func_overload=2 ~/ваш_домен/public_html/bigbox_scripts/cron/import_tovars.php

я использую: 

/usr/bin/php -d memory_limit=1024M -d mbstring.func_overload=2 ~/ваш_домен/public_html/bigbox_scripts/cron/import_tovars.php

 Тоесть устанавливаю дополнительно memory_limit=1024M для PHP

Комментарии

Показаны записи 1-1 из 1.

Автор: angerro, Дата: 20 марта 2029 Ответить

не знал, что бегеты этим грешат. спасибо за инфу, Антон!

Добавить комментарий