- Saved searches
- Use saved searches to filter your results more quickly
- Fatal error: Uncaught Error: Call to undefined function each() #4629
- Fatal error: Uncaught Error: Call to undefined function each() #4629
- Comments
- Summary
- Ошибка Each после обновления PHP до 8.1
- Форум
- Как поменять функцию each, удаленную в PHP 8?
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fatal error: Uncaught Error: Call to undefined function each() #4629
Fatal error: Uncaught Error: Call to undefined function each() #4629
Comments
Summary
Upon executing phpunit which should show me test results, I get error instead stating
Fatal error: Uncaught Error: Call to undefined function each() in C:\xampp\php\pear\PHPUnit\Util\Getopt.php:80
I have mentioned phpunit version from composer.lock file. When I try to run phpunit —version to get phpunit version I get the same error.
I found this command composer exec phpunit which worked for me and tested my function.
I have installed orchestra through composer using composer require —dev «orchestra/testbench command then I configure my phpunit.xml as follows
./tests/Unit ./tests/Feature ./src
But phpunit is not working
The text was updated successfully, but these errors were encountered:
Ошибка Each после обновления PHP до 8.1
В начале месяца обновили версию PHP на нашем портале до 8.1.16 (ранее была 7), после чего появилось множество ошибок на портале. Большинство ошибок в итоге удалось решить самостоятельно, но не все.
В частности: теперь при завершении задачи выдает ошибку:
При этом после обновления страницы — задача оказывается в корректном статусе.
При выводе подробного описания выдает следующее:
Call to undefined function each()
Цитата |
---|
[Error] Call to undefined function each() (0) /home/bitrix/www/bitrix/modules/mcart.bpfromtask/include.php:71 #0: CMcartRunBPFromTask::OnAfterTaskFinish(integer, array, array) /home/bitrix/www/bitrix/modules/main/classes/general/module.php:480 #1: ExecuteModuleEventEx(array, array) /home/bitrix/www/bitrix/modules/tasks/lib/control/task.php:831 #2: Bitrix\Tasks\Control\Task->onUpdate(array) /home/bitrix/www/bitrix/modules/tasks/lib/control/task.php:286 #3: Bitrix\Tasks\Control\Task->update(integer, array) /home/bitrix/www/bitrix/modules/tasks/classes/general/task.php:297 #4: CTasks->Update(integer, array, array) /home/bitrix/www/bitrix/modules/tasks/classes/general/taskit em.php:2584 #5: CTaskItem->proceedAction(string, array) /home/bitrix/www/bitrix/modules/tasks/classes/general/taskit em.php:1653 #6: CTaskItem->complete() /home/bitrix/www/bitrix/components/bitrix/tasks.task/class.php:1510 #7: TasksTaskComponent->completeAction(integer, array) #8: ReflectionMethod->invokeArgs(object, array) /home/bitrix/www/bitrix/modules/main/lib/engine/autowire/bin der.php:207 #9: Bitrix\Main\Engine\AutoWire\Binder->invoke() /home/bitrix/www/bitrix/modules/main/lib/engine/action.php:117 #10: Bitrix\Main\Engine\Action->runWithSourceParametersList() /home/bitrix/www/bitrix/modules/main/lib/engine/component/in lineaction.php:60 #11: Bitrix\Main\Engine\Component\InlineAction->runWithSourceParametersList() /home/bitrix/www/bitrix/modules/main/lib/engine/controller.php:427 #12: Bitrix\Main\Engine\Controller->run(string, array) /home/bitrix/www/bitrix/modules/main/lib/httpapplication.php:141 #13: Bitrix\Main\HttpApplication->runController(object, string) /home/bitrix/www/bitrix/modules/main/lib/httpapplication.php:108 #14: Bitrix\Main\HttpApplication->run() /home/bitrix/www/bitrix/modules/main/services/ajax.php:29 #15: require(string) /home/bitrix/www/bitrix/services/main/ajax.php:1 ———- |
У нас есть предположение, что есть несовместимость функций в версии 7 и 8.1, но хотелось бы понять что на что и где необходимо поменять
Добрый день. PHP-функция each, согласно документации , удалена из PHP8, поэтому её использование теперь приводит к ошибке. Лучше всего обратиться к разработчику модуля mcart.bpfromtask. Если такой возможности нет — придётся самостоятельно. Нужно открыть файл /bitrix/modules/mcart.bpfromtask/include.php на строке 71, понять для чего используется each, и потом сделать то же самое, но без each.
Форум
В начале месяца обновили версию PHP на нашем портале до 8.1.16 (ранее была 7), после чего появилось множество ошибок на портале. Большинство ошибок в итоге удалось решить самостоятельно, но не все.
В частности: теперь при завершении задачи выдает ошибку:
При этом после обновления страницы — задача оказывается в корректном статусе.
При выводе подробного описания выдает следующее:
Call to undefined function each()
Цитата |
---|
[Error] Call to undefined function each() (0) /home/bitrix/www/bitrix/modules/mcart.bpfromtask/include.php:71 #0: CMcartRunBPFromTask::OnAfterTaskFinish(integer, array, array) /home/bitrix/www/bitrix/modules/main/classes/general/module.php:480 #1: ExecuteModuleEventEx(array, array) /home/bitrix/www/bitrix/modules/tasks/lib/control/task.php:831 #2: Bitrix\Tasks\Control\Task->onUpdate(array) /home/bitrix/www/bitrix/modules/tasks/lib/control/task.php:286 #3: Bitrix\Tasks\Control\Task->update(integer, array) /home/bitrix/www/bitrix/modules/tasks/classes/general/task.php:297 #4: CTasks->Update(integer, array, array) /home/bitrix/www/bitrix/modules/tasks/classes/general/taskit em.php:2584 #5: CTaskItem->proceedAction(string, array) /home/bitrix/www/bitrix/modules/tasks/classes/general/taskit em.php:1653 #6: CTaskItem->complete() /home/bitrix/www/bitrix/components/bitrix/tasks.task/class.php:1510 #7: TasksTaskComponent->completeAction(integer, array) #8: ReflectionMethod->invokeArgs(object, array) /home/bitrix/www/bitrix/modules/main/lib/engine/autowire/bin der.php:207 #9: Bitrix\Main\Engine\AutoWire\Binder->invoke() /home/bitrix/www/bitrix/modules/main/lib/engine/action.php:117 #10: Bitrix\Main\Engine\Action->runWithSourceParametersList() /home/bitrix/www/bitrix/modules/main/lib/engine/component/in lineaction.php:60 #11: Bitrix\Main\Engine\Component\InlineAction->runWithSourceParametersList() /home/bitrix/www/bitrix/modules/main/lib/engine/controller.php:427 #12: Bitrix\Main\Engine\Controller->run(string, array) /home/bitrix/www/bitrix/modules/main/lib/httpapplication.php:141 #13: Bitrix\Main\HttpApplication->runController(object, string) /home/bitrix/www/bitrix/modules/main/lib/httpapplication.php:108 #14: Bitrix\Main\HttpApplication->run() /home/bitrix/www/bitrix/modules/main/services/ajax.php:29 #15: require(string) /home/bitrix/www/bitrix/services/main/ajax.php:1 ———- |
У нас есть предположение, что есть несовместимость функций в версии 7 и 8.1, но хотелось бы понять что на что и где необходимо поменять
Как поменять функцию each, удаленную в PHP 8?
AlbinaA , откуда ты взял этот код
видно что это javascript а $ в нем используется как сокращенное название стартового объекта JQuery
each в jquery никуда не исчезал, но могу предположить что пор какой то причине вместо правильной версии библиотеки jquery подключена какая то модифицированная, в которой есть $ но она несет другую функцию
Спасибо большое всем, кто ответил. Понимаю, что раздражаю своей некомпетентностью, но думала, что мне здесь помогут. В техподдержке битрикса сказали, что проблема в том, что используется устаревшая функция each, не поддерживаемая php выше 8. И используется она в этом файле. Это еднственное each в чистом виде, что я увидела в этом файле)
Ссылка удалена модератором.
Поэтому так и сформулировала вопрос. Если направите, буду очень благодарна.
Код изначально был прописан так для сайта.
AlbinaA, такая функция есть (была) в php https://www.php.net/manual/ru/function.each.php
Но вы показали кусок javascript кода.
Использовалась для обхода массивов.
Вместо этой функции можно использовать array_map или простой цикл foreach.
Но просто заменить не получится, нужно будет немного переписать код.
В этом файле данная функция не используется. Кто-то напутал – техподдержка или вы.
Ошибка PHP, но код JS. Это не та функция each что вам нужна, в описании ошибки от пыхи должен быть указан файл и строка где она произошла. И как исправить это зависит от кода, может там нужен перебор массива, может только первый элемент.
Спасибо! При попытке отправить завку — три замечания.
2 в файле /include/libmail.php:
while (list( $hdr, $value ) = each($new_mass_head))
и в файле request/index.php
$m->Send();
$new_mass_head = [ 'key1' => 'val1', 'key2' => 'val2' ]; // Вместо этого . while (list( $hdr, $value ) = each($new_mass_head)) < echo '';var_dump($hdr, $value);echo ''; > // . используем это foreach ($new_mass_head as $hdr => $value) < echo '';var_dump($hdr, $value);echo ''; >
toxa82, в моем коде нет второй части
// Вместо этого .
while (list( $hdr, $value ) = each($new_mass_head)) echo »;var_dump($hdr, $value);echo »;
>
У меня так
while (list( $hdr, $value ) = each($new_mass_head))
if ($hdr == «From» and strlen($this->names_email[‘from’]))
$this->ready_headers[$resource] .= $hdr.»: =?».$this->charset.»?Q?».str_replace(«+», «_», str_replace(«%», «=», urlencode(strtr($this->names_email[‘from’], «\r\n», » «)))).»?= \r\n»;
elseif ($hdr == «Reply-To» and strlen($this->names_email[‘Reply-To’]))
$this->ready_headers[$resource] .= $hdr.»: =?».$this->charset.»?Q?».str_replace(«+», «_», str_replace(«%», «=», urlencode(strtr($this->names_email[‘Reply-To’], «\r\n», » «)))).»?= \r\n»;
elseif ($hdr != «BCC»)
$this->ready_headers[$resource] .= $hdr.»: «.$value.»\r\n»; // пропускаем заголовок для отправки скрытой копии
>
Возможно, это кусок кода для примера, чтоб посмотреть проблемную строку, и имеется ввиду, что мне надо поменять
while (list( $hdr, $value ) = each($new_mass_head))
на
foreach ($new_mass_head as $hdr => $value)
?