Задать вопрос
@kiberchainik
начинающий найкрутейшЫй програмЁр

Как очистить память php?

Делаю api доступ но выдается ошибка Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 12288 bytes) in

код запроса
$request = '{
        					"name":"generateToken",
        					"param":{
        						"email": "user_email",
        						"pass": "user_pass"
        					}
        				}';
                        
            $curl = curl_init();
        	curl_setopt($curl, CURLOPT_URL, 'https://api.site/');
        	curl_setopt($curl, CURLOPT_HTTPHEADER, ['Content-type: application/json']);
        	curl_setopt($curl, CURLOPT_POST, true);
        	curl_setopt($curl, CURLOPT_POSTFIELDS, $request);
        	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($curl, CURLOPT_FRESH_CONNECT, TRUE);
            
        	$result = curl_exec($curl);
        	
            if ($errno = curl_errno($curl)) {
            	$message = curl_strerror($errno);
            	$c_info = "cURL error ({$errno}):\n {$message}";
            } else {
        		$response = json_decode($result, true);
        		$token = $response['resonse']['result']['token'];
                
            } 
            
            curl_close($curl);


код на сервере где выходит ошибка
$handler = fopen('php://input', 'r');
			$this->request = stream_get_contents($handler); // ошибка тут
			fclose($handler);

я понимаю что дело в памяти, на хосте в настройках память стоит на максимум. ошибка осталась, искал как можно очистить память, функция clearstatcache(); так же результата не дала. как исправить ситуацию? обратился и тех поддержку хоста, жду ответа
  • Вопрос задан
  • 482 просмотра
Подписаться 1 Сложный Комментировать
Пригласить эксперта
Ответы на вопрос 2
IgorPI
@IgorPI
Достаточно выполнить одну строчку кода ini_set("memory_limit", "-1");
Но имейте в виду, в этом случае вы в рамках одного запроса установили неограниченное количество памяти, что не совсем хорошо.

Фактически будет снято ограничение на количество выделенной памяти.
Ответ написан
@rPman
у тебя твой скрипт съел 256мб оперативной памяти, ищи куда она делась, расставляй по всему своему скрипту на сервере вывод в лог значение memory_get_usage(true) с пометкой где это произошло, например:
error_log(json_encode([__FILE__,__LINE__,memory_get_usage(true)]));

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

а по уму нужно использовать полноценные профилировщики типа такого
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы