Php call time pass by reference has been deprecated in

Php call time pass by reference has been deprecated in

Ошибка PHP Call-time pass-by-reference has been removed или ранее Call-time pass-by-reference has been deprecated вызывает большую боль в одном месте у многих пользователей и разработчиков, в том числе это не обошло и в частности меня, поэтому стоит про это написать, что бы более не возвращаться.

В общем всё дело в том, что в некоторых скриптах, внезапно, хотя чаще после смены версии PHP, может возникать ошибка Call-time pass-by-reference и всё бы ничего если бы в одной из версий PHP её из предупреждения не сделали фатальной ошибкой! В чём вообще дело?

Эта ошибка (ранее просто предупреждение) говорит о том, что передача аргументов по ссылке во время вызова функции была объявлена устаревшей а позже и вовсе недопустимой. Т.е. теперь при вызове функции и передаче ей параметра не надо ставить перед параметром знак амперсанд (&), его теперь надо ставить в декларации (объявлении) функции/метода перед этим аргументом. Наличие ссылки нужно указывать в определении функции а не в вызове.

Избавиться от этого предупреждения/ошибки можно разными способами. Рассмотрим их по порядку.

В более старых версиях PHP Call-time pass-by-reference было всего лишь предупреждением и избавиться от него можно было лишь просто отключив отображение Warning’ов. Для этого надо в конфигурации PHP (файл php.ini) заменить allow_call_time_pass_reference = off на allow_call_time_pass_reference = on

В новых версиях PHP Call-time pass-by-reference считается фатальной ошибкой, поэтому надо исправлять непосредственно сам скрипт, убрав в указанной строчке символ & (амперсанд) перед именем переменной, передаваемой в какую-либо функцию и добавить его в объявлении функции:

function f($a) //объявление f(&$a); //вызов

Собственно после изменения кода ошибка/предупреждение должна исчезнуть.

Читайте также:  Html div style padding margin

Источник

Fatal error: Call-time pass-by-reference has been removed in

Создал Bux: Fatal error: Call-time pass-by-reference has been removed in . cliker-bux.eu5.org/zsecurity.php
я создал букс но он неработает его показывает но когда начинаеш нажимать любо куда пишет Fatal.

Warning: Call-time pass-by-reference has been deprecated — argument passed by value
так вот! как можно сформировать экселевский фйлик из пхп скрипта? пытаюсь использовать скрипт.

Call-time pass-by-reference has been deprecated — argument passed by value, undefined index
Call-time pass-by-reference has been deprecated — argument passed by value. В конфигурации PHP.

Deprecated: Call-time pass-by-reference has been deprecated in E:\www\www\l2\index.php on line 20
Помогите решить проблему пожалуйста, поставил движок stress web 11 для сайта, сверху выдает такую.

Эксперт HTML/CSSЭксперт PHP

Лучший ответ

Сообщение было отмечено shahin как решение

Решение

Strict Standards: Non-static method Net_IDNA::getInstance() should not be called statically in D:\OpenServer\domains\seo\index.php on line 25
Strict Standards: Non-static method Net_IDNA::getInstance() should not be called statically in D:\OpenServer\domains\seo\includes\whois.php on line 864
Deprecated: Function split() is deprecated in D:\OpenServer\domains\seo\includes\func.php on line 55

Источник

Форум

Вы уверены что в базовом курсе администратора написано как произвести обновление системы с 9 до 12 версии при установленном на сервере PHP версии 5.4?

Если речь о отдаленности версий, то не давно обновлял очень большой сайт, после 3 разных разработчиков (т.е. с горой мануальщины) с 8 до 12 — не то чтобы проблем совсем не было, но нерешаемых не было.

Если речь о том как обновится когда само обновление не пашет из-за того что 5.4 то:
1 Понизьте временно версию.
2 Разверните сайт на другом хостинге с другой версией PHP обновите и перенесите.

Цитата
Crank пишет:
А есть какой-то вменяемый способ обновить систему не исправляя в ручную во всех модулях &$ на $?

Центр поддержки

Продукты

Управление сайтом

Битрикс24

Интернет-магазин + CRM

Решения

Для интернет-магазинов

Каталог готовых решений

Внедрение

Выбрать партнера

Проверить партнера

Стать партнером

1С-Битрикс http://www.1c-bitrix.ru Общие вопросы info@1c-bitrix.ru Приобретение и лицензирование продуктов : sales@1c-bitrix.ru Маркетинг/мероприятия/PR marketing@1c-bitrix.ru Партнерская программа partners@1c-bitrix.ru Мы работаем с 10:00 до 19:00 по московскому времени. Офис в Москве 127287 Россия Московская область Москва 2-я Хуторская улица дом 38А строение 9 Офис в Калининграде +7 (4012) 51-05-64 Офис в Калининграде 236001 Россия Калининградская область Калининград Московский проспект 261 Офис в Киеве ukraine@1c-bitrix.ru Телефон в Киеве +3 (8044)221-55-33 Офис в Киеве 01033 Украина Калининградская область Киев улица Шота Руставели 39/41 офис 1507

Читайте также:  cursor

Контент для лиц от 16 лет и старше

© 2001-2023 «Битрикс», «1С-Битрикс». Работает на 1С-Битрикс: Управление сайтом. Политика конфиденциальности

Источник

Php call time pass by reference has been deprecated in

Deprecated: Function is deprecated in

Ваш сайт стал тормозить и посмотрев error.log либо просто зайдя на свой сайт вы увидели одну из ошибок

Код: Выделить всё Развернуть Deprecated: Function ereg() is deprecated in .
Deprecated: Function eregi() is deprecated in .
Deprecated: Function ereg_replace() is deprecated in .
Deprecated: Function split() is deprecated in .
Deprecated: Function set_magic_quotes_runtime() is deprecated in .
Deprecated: Assigning the return value of new by reference is deprecated in .
Deprecated: Call-time pass-by-reference has been deprecated in .
Deprecated: mysql_escape_string(): This function is deprecated; use mysql_real_escape_string() instead. in .

Это означает, что хостер обновил версию php до 5.3 (или выше) и в движке или установленных модулях/плагинах на сайте используются и до сих пор не исправлены устаревшие функции php (версии php 5.3 и выше).

Есть несколько способов исправления ошибок Deprecated: Function is deprecated in:

1-й способов исправления ошибок Deprecated: Function is deprecated in — простой

Если есть возможность, в панели хостинга сменить версию php на 5.2 или ниже, либо попросить хостера понизить установленную на сервере версию, либо просто переехать на хостинг с php 5.2 или ниже

2-й способов исправления ошибок Deprecated: Function is deprecated in — плохой

в php.ini изменить error_reporting = E_ALL на

Код: Выделить всё Развернуть E_ALL | E_DEPRECATED

или в .htaccess добавить в начало

Код: Выделить всё Развернуть php_value display_errors 22527

или в конфигурационный файл движка добавьте в начало после открывающего

Этот способ лишь отключит вывод ошибок об устаревших функциях, но сами функции работать не будет.

3-й способов исправления ошибок Deprecated: Function is deprecated in - временный

В php 5.3 не убрали устаревшие функции и лишь предупреждают о том что они устарели, в php 5.4 и выше они удалены.
Поэтому если на сервере php 5.3, то работоспособность функций можно включить.

Идем в php.ini и ищем блок

Код: Выделить всё Развернуть ; overload(replace) single byte functions by mbstring functions.
; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(),
; etc. Possible values are 0,1,2,4 or combination of them.
; For example, 7 for overload everything.
; 0: No overload
; 1: Overload mail() function
; 2: Overload str*() functions
; 4: Overload ereg*() functions
; //php.net/mbstring.func-overload
; mbstring.func_overload = 0

либо создаем свой php.ini, если хостер позволяет таким способом управлять настройками php.

  • 0 - Оставить все без изменений.
  • 1-4 Включить одну из функций.
  • 7 - Включить сразу все функции.
Читайте также:  Php убрать часть строки

Слово «включить» тут не совсем корректно. Речь идет об включении поддерживания старых функций, при этом новые будут отключены.
Убираем ; строку и присваиваем включить старые функции

Код: Выделить всё Развернуть mbstring.func_overload = 7

4-й способов исправления ошибок Deprecated: Function is deprecated in - исправление «автоматически»

Большинство движков и модулей/плагинов можно обновить с официальных сайтов до более новых версий , в которых уже исправлены устаревшие функции (либо обратиться в техподдержку с просьбой выпуска исправленных версий)

5-й способов исправления ошибок Deprecated: Function is deprecated in - исправление «вручную»

Однако есть движки/модули/плагины, которые больше не поддерживаются и не разрабатываются.
Это не проблема - функции можно поправить вручную.

Вот небольшая шпаргалка(использование - функции заменить, параметры экранировать слешем / либо иногда ~ ):

call_user_method() использовать call_user_func()
call_user_method_array() использовать call_user_func_array()
define_syslog_variables()
dl()
ereg() использовать preg_match()
ereg_replace() использовать preg_replace()
eregi() использовать preg_match() с модификатором "i"
eregi_replace() использовать preg_replace() с модификатором "i"
set_magic_quotes_runtime() использовать magic_quotes_runtime()
session_register() использовать $_SESSION
session_unregister() использовать $_SESSION
session_is_registered() использовать $_SESSION
set_socket_blocking() использовать stream_set_blocking()
split() использовать preg_split() или explode()
spliti() использовать preg_split() с модификатором "i"
sql_regcase()
mysql_db_query() использовать mysql_select_db() и mysql_query()
mysql_escape_string() использовать mysql_real_escape_string()

Примеры замены:

Код: Выделить всё Развернуть if (ereg('^'.preg_quote($nice_docroot).'(.*)$', $nice_cachefile, $matches))

Код: Выделить всё Развернуть if (preg_match('/^/'.preg_quote($nice_docroot).'(.*)$', $nice_cachefile, $matches))

Код: Выделить всё Развернуть return ereg_replace('2037' . '$', $year, date(DATE_FORMAT, mktime($hour, $minute, $second, $month, $day, 2037)));

Код: Выделить всё Развернуть return preg_replace('/2037$/', $year, date(DATE_FORMAT, mktime($hour, $minute, $second, $month, $day, 2037)));

Код: Выделить всё Развернуть $temp_array = split($needle, $string);

Код: Выделить всё Развернуть $temp_array = preg_split('/' . $needle . '/', $string);

Код: Выделить всё Развернуть ini_set("magic_quotes_runtime", 0);

Код: Выделить всё Развернуть ..
//$mqr=get_magic_quotes_runtime();
ini_set("magic_quotes_runtime", 0);
..
//set_magic_quotes_runtime($mqr);

Почти всегда используется слеш / в качестве экрана. Но иногда он не срабатывает и появляется ошибка

Код: Выделить всё Развернуть Warning:preg_match() [function.preg-match]: Unknown modifier 'тут_любая_буква_или_знак' in home/../файл.php

В таких случаях используйте в качестве экрана ~..~ (или ~..~i) , вместо /../ (или /../i)

Такие предупреждения

PHP Deprecated: Assigning the return value of new by reference is deprecated in..
PHP Deprecated: Call-time pass-by-reference has been deprecated in..

говорят, что в функциях используется амперстанд &, его надо удалить:

Код: Выделить всё Развернуть $contentElement = new ContentElement( $xmlDoc );

Код: Выделить всё Развернуть preg_match_all( $pattern, $text, $links, PREG_SET_ORDER );
//set_magic_quotes_runtime($mqr);

Если после замены mysql_escape_string() на mysql_real_escape_string() получаете

Warning: mysql_real_escape_string(): A link to the server could not be established in..

проверяйте код, т.к. обязательно перед этой функцией должна идти фукнция открытия соединения с базой.

Источник

Оцените статью