За последние 24 часа нас посетили 17626 программистов и 1666 роботов. Сейчас ищут 1566 программистов ...

Подскажите пожалуйста как исправить ошибку с кодом 18

Тема в разделе "Сделайте за меня", создана пользователем abatfarea, 30 мар 2015.

  1. abatfarea

    abatfarea Новичок

    С нами с:
    30 мар 2015
    Сообщения:
    16
    Симпатии:
    0
    Всем доброго времени суток. Подскажите пожалуйста как исправить ошибку с кодом 18. Залил скрипт букса Супер WM люкс, на платный хостинг хороший, Webhost1.ru, но не в хосте дело не рекламмирую а для точного представления прописал тут хостинг. Так вот сам сайт букса вроде открывается в браузере опера, но при регистрации выдает ошибку под кодом 18 а именно вот такую Fatal error: Call-time pass-by-reference has been removed in /home/user9031/virtualbriz2.ru/zsecurity.php on line 18 тут вроде понятно, что не правельно написана строка 18, а как должно быть написанно в провельной форме в конечном итоге , чтобы ошибки не было вот тут я не догоняю. Для наглядности привожу саму строку 18 из скрипта ошибки вот она self::$instance = new $_class(&$A); и для большего понимания привожу строки с 10 по 25 вот они

    Код (PHP):
    1. ){
    2. $_class = ($Aclass === null) ? __CLASS__ : (string)$Aclass;
    3. $_unique = ((bool)$Aunique === false) ? false : true;
    4. if(!class_exists($_class)):
    5. $_return = false;
    6. elseif(is_object(self::$instance)):
    7. $_return = &self::$instance;
    8. elseif((self::$instance === null) && $_unique):
    9. self::$instance = new $_class(&$A);
    10. $_return = &self::$instance;
    11. else:
    12. self::$instance = false;
    13. $_return = new $_class(&$A);
    14. endif;
    15. return $_return;
    16. }
    Подскажите пожалуйста кто знает.
    Адля болшей точности и понимания всегофайла может нужно будет, привожу весь фойл zsecurity.php вот он:
    Код (PHP):
    1. <?
    2. class ZSecurity{
    3.     const SELF = 'ZSecurity';
    4.     private static $instance = null;
    5.  
    6.     public static function &init(
    7.         $A = null,
    8.         $Aclass = null,
    9.         $Aunique = true
    10.     ){
    11.         $_class = ($Aclass === null) ? __CLASS__ : (string)$Aclass;
    12.         $_unique = ((bool)$Aunique === false) ? false : true;
    13.         if(!class_exists($_class)):
    14.             $_return = false;
    15.         elseif(is_object(self::$instance)):
    16.             $_return = &self::$instance;
    17.         elseif((self::$instance === null) && $_unique):
    18.             self::$instance = new $_class(&$A);
    19.             $_return = &self::$instance;
    20.         else:
    21.             self::$instance = false;
    22.             $_return = new $_class(&$A);
    23.         endif;
    24.         return $_return;
    25.     }
    26.  
    27.     protected function __construct(
    28.         $A
    29.     ){
    30.         global $_POST;
    31.         $_POST = $this->tagCLEAN(&$_POST);
    32.         $_POST = $this->htmlspecialchars(&$_POST);
    33.     }
    34.  
    35.     public function __destruct(){
    36.     }
    37.  
    38.     final public function htmlspecialchars(
    39.         $A
    40.     ){
    41.         if(is_string($A)):
    42.             $_pattern = array('&', "'", '"', '<', '>', '\\');
    43.             $_replacement = array('&', '&#039;', '"', '<', '>', '\\\\');
    44.             $_return = str_replace($_pattern, $_replacement, $A);
    45.         elseif(is_array($A)):
    46.             $_function = __FUNCTION__;
    47.             foreach($A as &$_value):
    48.                 $_value = $this->$_function(&$_value);
    49.             endforeach;
    50.             $_return = &$A;
    51.         else:
    52.             $_return = null;
    53.         endif;
    54.         return $_return;
    55.     }
    56.  
    57.     final public function unhtmlspecialchars(
    58.         $A
    59.     ){
    60.         if(is_string($A)):
    61.             $_pattern = array('&', '&#039;', '"', '<', '>', '\\\\');
    62.             $_replacement = array('&', "'", '"', '<', '>', '\\');
    63.             $_return = str_replace($_pattern, $_replacement, $A);
    64.         elseif(is_array($A)):
    65.             $_function = __FUNCTION__;
    66.             foreach($A as &$_value):
    67.                 $_value = $this->$_function(&$_value);
    68.             endforeach;
    69.             $_return = &$A;
    70.         else:
    71.             $_return = null;
    72.         endif;
    73.         return $_return;
    74.     }
    75.  
    76.     public function tagCLEAN(
    77.         $A,
    78.         $Atag_alloweded = null
    79.     ){
    80.         if($Atag_alloweded === null):
    81.             $_tag_alloweded = null;
    82.         elseif(is_scalar($Atag_alloweded)):
    83.             $_tag_alloweded = (string)$Atag_alloweded;
    84.         elseif(is_array($Atag_alloweded)):
    85.             $_tag_alloweded = join(' ', (string)$Atag_alloweded);
    86.         else:
    87.             $_tag_alloweded = null;
    88.         endif;
    89.         //
    90.         if(is_scalar($A)):
    91.             $_return = strip_tags($A, $_tag_alloweded);
    92.         elseif(is_array($A)):
    93.             foreach($A as &$_value)
    94.                 $_value = $this->tagCLEAN(&$_value, &$_tag_alloweded);
    95.             $_return = &$A;
    96.         else:
    97.             $_return = null;
    98.         endif;
    99.         return $_return;
    100.     }
    101. }
    102. $ZSECURITY = &ZSecurity::init();
    103. ?>
    *Пожалуйста, оформляйте код не выделением цветом впредь, а через специальные теги [code=php][/code].
     
  2. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Проблема вот в чем как я понимаю, ты вызываешь функцию и пытаешься ей передать ссылку (знак & перед переменной), вот например:
    Код (PHP):
    1. self::$instance = new $_class(&$A); 
    причем в коде такого полно, по этому поправить это не так просто, ну в смысле много чего надо переписывать.
    До какой то версии РНР такое работало, но начиная с какой то версии это отменили (на сколько я знаю с версии 5.4), отсюда и косяки.
     
  3. abatfarea

    abatfarea Новичок

    С нами с:
    30 мар 2015
    Сообщения:
    16
    Симпатии:
    0
    Всё понятно. Спасибо бальшое за разьяснение. Ато тут на одном форуме мне голову марочить начали. Когда можно же просто обьснить я так думаю. Спасибо ещё раз.
     
  4. abatfarea

    abatfarea Новичок

    С нами с:
    30 мар 2015
    Сообщения:
    16
    Симпатии:
    0
    Спасибо ещё раз огромное. За подсказку в ошибке кода. Всего лишь удалил знаки & со всего файла и всё скрипт заработал.
     
  5. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    надо не со всего файла а только с декларации аргументов функций
     
  6. abatfarea

    abatfarea Новичок

    С нами с:
    30 мар 2015
    Сообщения:
    16
    Симпатии:
    0
    Я так и зделал, удалил только где выводило ишибку с укозанием строки.

    Првда типерь другая проблемма. Не могу войти в админ панель. Пишет вот такую фигню, типо файл не найден:
    404 File not found.
    Вот только все файлы на хост залиты, в чём причина, подскажите может кто сталкивался стаким, или опытные знают.
     
  7. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    пакажы как ты понял фразу дикларация аргументов функции. ибо логику пиридачи по ссылке надо в прилажении сахранить но убрать то на што ругается новая версия интерпритатора. впалне вазможна 404 ты видиш изза таво что слишком много паудалаял

    зы. надеюсь, мой русский не смущает твой русский.
     
  8. abatfarea

    abatfarea Новичок

    С нами с:
    30 мар 2015
    Сообщения:
    16
    Симпатии:
    0
    Вот из этого файла:
    Код (Text):
    1. <?
    2. class ZSecurity{
    3.     const SELF = 'ZSecurity';
    4.     private static $instance = null;
    5.  
    6.     public static function &init(
    7.         $A = null,
    8.         $Aclass = null,
    9.         $Aunique = true
    10.     ){
    11.         $_class = ($Aclass === null) ? __CLASS__ : (string)$Aclass;
    12.         $_unique = ((bool)$Aunique === false) ? false : true;
    13.         if(!class_exists($_class)):
    14.             $_return = false;
    15.         elseif(is_object(self::$instance)):
    16.             $_return = &self::$instance;
    17.         elseif((self::$instance === null) && $_unique):
    18.             self::$instance = new $_class(&$A);
    19.             $_return = &self::$instance;
    20.         else:
    21.             self::$instance = false;
    22.             $_return = new $_class(&$A);
    23.         endif;
    24.         return $_return;
    25.     }
    26.  
    27.     protected function __construct(
    28.         $A
    29.     ){
    30.         global $_POST;
    31.         $_POST = $this->tagCLEAN(&$_POST);
    32.         $_POST = $this->htmlspecialchars(&$_POST);
    33.     }
    34.  
    35.     public function __destruct(){
    36.     }
    37.  
    38.     final public function htmlspecialchars(
    39.         $A
    40.     ){
    41.         if(is_string($A)):
    42.             $_pattern = array('&', "'", '"', '<', '>', '\\');
    43.             $_replacement = array('&amp;', '&#039;', '&quot;', '&lt;', '&gt;', '\\\\');
    44.             $_return = str_replace($_pattern, $_replacement, $A);
    45.         elseif(is_array($A)):
    46.             $_function = __FUNCTION__;
    47.             foreach($A as &$_value):
    48.                 $_value = $this->$_function(&$_value);
    49.             endforeach;
    50.             $_return = &$A;
    51.         else:
    52.             $_return = null;
    53.         endif;
    54.         return $_return;
    55.     }
    56.  
    57.     final public function unhtmlspecialchars(
    58.         $A
    59.     ){
    60.         if(is_string($A)):
    61.             $_pattern = array('&amp;', '&#039;', '&quot;', '&lt;', '&gt;', '\\\\');
    62.             $_replacement = array('&', "'", '"', '<', '>', '\\');
    63.             $_return = str_replace($_pattern, $_replacement, $A);
    64.         elseif(is_array($A)):
    65.             $_function = __FUNCTION__;
    66.             foreach($A as &$_value):
    67.                 $_value = $this->$_function(&$_value);
    68.             endforeach;
    69.             $_return = &$A;
    70.         else:
    71.             $_return = null;
    72.         endif;
    73.         return $_return;
    74.     }
    75.  
    76.     public function tagCLEAN(
    77.         $A,
    78.         $Atag_alloweded = null
    79.     ){
    80.         if($Atag_alloweded === null):
    81.             $_tag_alloweded = null;
    82.         elseif(is_scalar($Atag_alloweded)):
    83.             $_tag_alloweded = (string)$Atag_alloweded;
    84.         elseif(is_array($Atag_alloweded)):
    85.             $_tag_alloweded = join(' ', (string)$Atag_alloweded);
    86.         else:
    87.             $_tag_alloweded = null;
    88.         endif;
    89.         //
    90.         if(is_scalar($A)):
    91.             $_return = strip_tags($A, $_tag_alloweded);
    92.         elseif(is_array($A)):
    93.             foreach($A as &$_value)
    94.                 $_value = $this->tagCLEAN(&$_value, &$_tag_alloweded);
    95.             $_return = &$A;
    96.         else:
    97.             $_return = null;
    98.         endif;
    99.         return $_return;
    100.     }
    101. }
    102. $ZSECURITY = &ZSecurity::init();
    103. ?>
    я убрал только знак & ито только со строчек:18,22,48,67,94, потомучто выдовало ошибки в этих строках, и страница регистрации заработала, до этого не работала. И вот что получилось в итоге, помоему лишнего ни чего не убил.
    Код (Text):
    1. <?
    2. class ZSecurity{
    3.     const SELF = 'ZSecurity';
    4.     private static $instance = null;
    5.  
    6.     public static function &init(
    7.         $A = null,
    8.         $Aclass = null,
    9.         $Aunique = true
    10.     ){
    11.         $_class = ($Aclass === null) ? __CLASS__ : (string)$Aclass;
    12.         $_unique = ((bool)$Aunique === false) ? false : true;
    13.         if(!class_exists($_class)):
    14.             $_return = false;
    15.         elseif(is_object(self::$instance)):
    16.             $_return = &self::$instance;
    17.         elseif((self::$instance === null) && $_unique):
    18.             self::$instance = new $_class($A);
    19.             $_return = &self::$instance;
    20.         else:
    21.             self::$instance = false;
    22.             $_return = new $_class($A);
    23.         endif;
    24.         return $_return;
    25.     }
    26.  
    27.     protected function __construct(
    28.         $A
    29.     ){
    30.         global $_POST;
    31.         $_POST = $this->tagCLEAN($_POST);
    32.         $_POST = $this->htmlspecialchars($_POST);
    33.     }
    34.  
    35.     public function __destruct(){
    36.     }
    37.  
    38.     final public function htmlspecialchars(
    39.         $A
    40.     ){
    41.         if(is_string($A)):
    42.             $_pattern = array('&', "'", '"', '<', '>', '\\');
    43.             $_replacement = array('&amp;', '&#039;', '&quot;', '&lt;', '&gt;', '\\\\');
    44.             $_return = str_replace($_pattern, $_replacement, $A);
    45.         elseif(is_array($A)):
    46.             $_function = __FUNCTION__;
    47.             foreach($A as &$_value):
    48.                 $_value = $this->$_function($_value);
    49.             endforeach;
    50.             $_return = &$A;
    51.         else:
    52.             $_return = null;
    53.         endif;
    54.         return $_return;
    55.     }
    56.  
    57.     final public function unhtmlspecialchars(
    58.         $A
    59.     ){
    60.         if(is_string($A)):
    61.             $_pattern = array('&amp;', '&#039;', '&quot;', '&lt;', '&gt;', '\\\\');
    62.             $_replacement = array('&', "'", '"', '<', '>', '\\');
    63.             $_return = str_replace($_pattern, $_replacement, $A);
    64.         elseif(is_array($A)):
    65.             $_function = __FUNCTION__;
    66.             foreach($A as &$_value):
    67.                 $_value = $this->$_function($_value);
    68.             endforeach;
    69.             $_return = &$A;
    70.         else:
    71.             $_return = null;
    72.         endif;
    73.         return $_return;
    74.     }
    75.  
    76.     public function tagCLEAN(
    77.         $A,
    78.         $Atag_alloweded = null
    79.     ){
    80.         if($Atag_alloweded === null):
    81.             $_tag_alloweded = null;
    82.         elseif(is_scalar($Atag_alloweded)):
    83.             $_tag_alloweded = (string)$Atag_alloweded;
    84.         elseif(is_array($Atag_alloweded)):
    85.             $_tag_alloweded = join(' ', (string)$Atag_alloweded);
    86.         else:
    87.             $_tag_alloweded = null;
    88.         endif;
    89.         //
    90.         if(is_scalar($A)):
    91.             $_return = strip_tags($A, $_tag_alloweded);
    92.         elseif(is_array($A)):
    93.             foreach($A as &$_value)
    94.                 $_value = $this->tagCLEAN($_value, $_tag_alloweded);
    95.             $_return = &$A;
    96.         else:
    97.             $_return = null;
    98.         endif;
    99.         return $_return;
    100.     }
    101. }
    102. $ZSECURITY = &ZSecurity::init();
    103. ?>
     
  9. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    понятно...
    function fname(&$argname) - устаревший вариант декларации функции с передачей значения аргумента по ссылке. на него и ругается. надо оставить просто function fname($argname)

    fname(&$A) - вызов функции с передачей аргумента по ссылке. и его надо было оставить.
    а замена на fname($A) приводит к тому что значение аргумента по ссылке не передается а клонируется. поэтому вся модификация которая внутри функции происходит - там и забывается. а не должна.

    в общем полученный алгоритм в корне не равен исходному и вполне разумно не работает.
     
  10. abatfarea

    abatfarea Новичок

    С нами с:
    30 мар 2015
    Сообщения:
    16
    Симпатии:
    0
    В этом прилогаемом файле нет такого, или он гдето в другом файле находится? или я туплю
    В прилогаемом мной файле такого нет как ты написал, или это гдето в другом файле прописывается, или я ткплю? Поясни пожалуйста.
     
  11. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    тупишь

    а выше не пояснение было???
     
  12. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Ganzal, т.е. вот так НЕ правильно:
    Код (PHP):
    1. function one(&$val)
    2. {
    3.     $val = 'one';
    4. }
    5. $zzz = 'zzz';
    6. one($zzz);
    7. echo $zzz; 
    А вот так правильно:
    Код (PHP):
    1. function two($val)
    2. {
    3.     $val = 'two';
    4. }
    5. $zzz = 'zzz';
    6. two(&$zzz);
    ???


    abatfarea, данный значок, а точнее передача аргумента по ссылке несет важное значение, если его убрать, функции (методы) могут работать не совсем так как надо, исходя из того как они написаны, по этому таким удалением лучше не заниматься.
     
  13. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    У меня щас слезы течь начнут. Автор, ну почитай ты уже про передачу переменных по ссылке. Осиль. Там нет ничего сверхъестественного. Это ж не просто так "лишняя закорючка, которую нужно удалить, потому что она сделана только для того, чтобы все перестало работать".

    И да, по возможности, избегайте передачи по ссылке, если не уверены, что однажды не выстрелите себе в ногу. Исключение - ооочень большие объемы данных, когда передача по значению не вариант ни разу.

    Вместо modify(&$var) юзайте $var = modify($var). Будет вам счастье и код, над которым вы не потеряете однажды контроль.
     
  14. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    )))
     
  15. abatfarea

    abatfarea Новичок

    С нами с:
    30 мар 2015
    Сообщения:
    16
    Симпатии:
    0
    Понятно всем спасибо, за трату времени на меня, буду учится потихоньку.
     
  16. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    не сработало название раздела)))
     
  17. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Автор, интереса ради, у тебя русский язык родной?

    Добавлено спустя 47 секунд:
    И хорошо. Человек учиться начнет - это же здорово.