Архив

< Март 2024 >
П В С Ч П С В
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

Вход на сайт

Тэги

Блог Alex Delphine

Здесь я оставляю разные свои мысли.

 

На одном из подведомственных мне сайто установлена CMS Bitrix. Установлена достаточно давно, но только на днях решил исправить ошибку, которая постоянно появляется.

PHP Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of [runtime function name](). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. in /bitrix/modules/main/tools.php on line 2146

Вот такая вот длинаая ошибка :)

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

Избавиться от этого можно следующими способами:

  1. Изменить уровень вывода ошибок можно в файле php.ini (конфигурационный файл PHP). Для этого необходимо найти в файле php.ini параметр error_reporting и установить значение E_ERROR. Допустим так:
    error_reporting = E_ERROR
    или в файле .htaccess прописать
    php_value error_reporting 1
  2. В конфигурации PHP (файл php.ini) заменить
    allow_call_time_pass_reference = off
    на
     allow_call_time_pass_reference = on
    или в файле .htaccess прописать
    php_value allow_call_time_pass_reference On
  3. Исправить непосредственно сам скрипт, убрав в указанной строчке символ '&' перед именем переменной, передаваемой в какую-либо функцию. Для ошибки, которая появлялась у меня в файле /bitrix/modules/main/tools.php в строке:
    ExecuteModuleEvent($arEvent, &$url, $skip_security_check);
    убрал этот символ и получилось
    ExecuteModuleEvent($arEvent, $url, $skip_security_check);


Комментарии  

 
0 #1 Евген 11.12.2009 12:04
Спасибо, дорогой товарищ!!!
 
 
0 #2 Alex Delphine 11.12.2009 12:07
Цитирую Евген:
Спасибо, дорогой товарищ!!!

Пожалуйста!
Какой метод использовал?
 
 
0 #3 Киря 07.02.2010 10:19
Спасиииибо!!! Использовал сперва в .htaccess: php_value allow_call_time _pass_reference On, помогло, но все же потом выбрал способ, убрав в указанной строчке символ '&' перед именем переменной.
 
 
0 #4 bummer 04.05.2010 23:15
Огромное спасибо! С вашей помощью справился почти со всеми ошибками. Попробовал первый способ - не помогло,а вот за третий способ еще раз огромное спасибо!
 
 
+3 #5 Иван 07.06.2010 13:07
Проблема в том, господа, что если в данной функции происходит изменение передаваемой переменной $url, то по третьему методу не происходит изменений в передаваемой переменной, поэтому ExecuteModuleEv ent($arEvent, &$url, $skip_security_ check); не тоже самое что ExecuteModuleEv ent($arEvent, $url, $skip_security_ check);!!! Будьте внимательны...
 
 
0 #6 Evgeny Morev 26.03.2011 17:43
Цитирую Иван:
Проблема в том, господа, что если в данной функции происходит изменение передаваемой переменной $url, то по третьему методу не происходит изменений в передаваемой переменной, поэтому ExecuteModuleEv ent($arEvent, &$url, $skip_security_ check); не тоже самое что ExecuteModuleEv ent($arEvent, $url, $skip_security_ check);!!! Будьте внимательны...
Вот вот - согласен. по этому нужно менять настройки сервера а не скрипт
 
 
0 #7 ярослав 18.07.2011 14:16
у кого при добавлении строки php_flag allow_call_time _pass_reference в htaccess сайт перестает работать с ошибкой "Internal Server Error
The server encountered an internal error or misconfiguratio n and was unable to complete your request."
1) Удалить "php_flag allow_call_time _pass_reference on" в .htaccess
2) В панели управления хостингом в настройках PHP установить галочку allow_call_time _pass_reference
 
 
0 #8 АндрейT 24.12.2012 17:39
Спасибо!

Сэкономил кучу времени - данная ошибка вылезла после обновления php с 5.3 до версии 5.4

так как у меня VPS - 1 способ помог!!
 
 
0 #9 Dima 04.10.2013 14:16
:lol: :lol: :lol: :lol:
Большое спасибо помог третий способ!!!!!!!!! !!!!
 

У Вас не достаточно прав, для того что бы оставлять комментарии.