Временно исправить каждую функцию () в php 8 (решено)
Я меняю сервер, перехожу с centos на ubuntu 20.04 с php 8.
Многие из моих сайтов на сервере используют этот старый класс: https://github.com/xmyl/Snoopy-2.0/blob/master/Snoopy.class.php
Сайты существуют уже давно, и я использую этот класс для доступа к различным защищенным именем пользователя и паролем областям моих партнерских программ, чтения файлов xml / rss / csv и их автоматической обработки.
Проблема в том, что этот класс часто использует функцию each(), которая ранее считалась устаревшей и теперь исключена в php 8.
Мне нужно сейчас сменить сервер (этого не ожидалось) и заставить этот класс как-то работать. После этого я могу спокойно просматривать все сценарии, обновлять их, изменять и т. Д., Но теперь мне нужно быстрое и простое решение, чтобы заставить его работать.
Я попытался изменить each() на current(), а затем добавить это:
/**
* Adds the depreciated each() function back into 7.2
*/
if (!function_exists('each')) {
function each($arr) {
$key = key($arr);
$result = ($key === null) ? false : [$key, current($arr), 'key' => $key, 'value' => current($arr)];
next($arr);
return $result;
}
}
Это не сработало, сценарий заканчивается на: Неустранимая ошибка: допустимый размер памяти ....
Есть быстрый и простой способ заставить его работать? (временно) Или быстрая альтернатива, которая работает так же хорошо, как и любопытный?
Просто закрыть ... решено за 5 секунд ... решение ...
if (!function_exists('each')) {
function each(array &$array) {
$value = current($array);
$key = key($array);
if (is_null($key)) {
return false;
}
// Move pointer.
next($array);
return array(1 => $value, 'value' => $value, 0 => $key, 'key' => $key);
}
}
https://gist.github.com/k-gun/30dd2bf8b22329a2dbc11a045aed3859
1 ответ
Вам нужно передать массив в свой
each()
функция по ссылке. В том виде, в каком он сейчас записан, массив копируется в функцию, и в этой копии внутренний указатель увеличивается, не затрагивая оригинал.
function each(&$arr) {
/*...*/
}