Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
PHP Синтаксис рекурсивной внутри класса функции
|
|||
|---|---|---|---|
|
#18+
Здравствуйте уважаемые Гуру! Написал для личных нужд класс для проверки входящих данныx (объекты, многомерные массивы строки) В нем используется функция array_walk_recursive() Если эта функция не в класса , то все работает Если в классе , то вылетает ошибка при вызове этой функции Warning: array_walk_recursive() expects parameter 2 to be a valid callback, function '_recursion' not found or invalid function name in Y:\home\localhost\www\soft\system\libraries\CSafety.php on line 50 Класс подключен - require_once "./system/libraries/CSafety.php"; Как в данном случае правильно синтаксически указать второй параметр в этой функции? Если через $this , то нужно делать сам вызов пользовательской функции. А в мануале указывается именно имя функции Где зарыта собака? array_walk_recursive($val, '_recursion', &$hacklog) Заранее всем благодарен за участие Код class CSafety { function hack($val) { //Массив результатов проверки $hacklog =array(); //Если объект - переводим в ассоциативный массив if(is_object($val)) $val = get_object_vars($val); //Если массив if(is_array($val)){ array_walk_recursive($val, '_recursion', &$hacklog) ;} // Здесь вылетает ошибка //Если не число. Переменная $z - как заглушка, если $val не массив else{if(!is_numeric($val)){$this->_recursion($val, $z, $hacklog);}} return $hacklog; } //======================================================= function _recursion(&$val, $key, &$hacklog) { if(!is_numeric($val)) { $item = trim($val); $tamplate = "/script|eval|preg_replace|require_once|include_once|include|require|create_function|readfile|dir|fopen|etc|<|>|<|>|WHERE|FROM|LIKE|BETWEEN|SELECT|INSERT|DELETE|UPDATE|CREATE|UNION|ALTER TABLE|exe|exec|tmp/i"; if(preg_match($tamplate,$item)) { //Заполняем масив результатами $hacklog['hack_date'] = date("y.m.d H:m:s"); $hacklog['ip'] = $_SERVER['REMOTE_ADDR']; $hacklog['hack_data'] = $val; $val = ''; } } } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 00:46 |
|
||
|
PHP Синтаксис рекурсивной внутри класса функции
|
|||
|---|---|---|---|
|
#18+
Может документацию почитать? http://php.net/manual/ru/language.types.callable.php ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 08:32 |
|
||
|
PHP Синтаксис рекурсивной внутри класса функции
|
|||
|---|---|---|---|
|
#18+
BarloneМожет документацию почитать? http://php.net/manual/ru/language.types.callable.php Спасибо за ссылку. Почитал, изменил синтаксис вызова Было - array_walk_recursive($val, '_recursion', &$hacklog); Стало - array_walk_recursive($val, array('CSafety', '_recursion'), &$hacklog); здесь пользовательскую функцию вызываю как метод класса CSafety private static function _recursion(&$val, $key, &$hacklog) {} Теперь на локальном сервере под денвером ( PHP Version 5.3.29 ) - все работает нормально, а на реальном хостинге ( PHP Version 5.4 ) - дает ошибку: Fatal error: Call-time pass-by-reference has been removed in /home/xxx/x.com/soft/system/libraries/CSafety.php on line 50 Хотя функция по описанию должна работать и на php7 В какую сторону думать, читать? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 14:35 |
|
||
|
PHP Синтаксис рекурсивной внутри класса функции
|
|||
|---|---|---|---|
|
#18+
Arbit, Проблема то не в функции, а в передаче параметров. "По ссылке" должно быть указано в определении самой функции, а не в вызове. Раньше можно было этот амперсанд ляпать в вызове, потом это выпилили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 14:44 |
|
||
|
PHP Синтаксис рекурсивной внутри класса функции
|
|||
|---|---|---|---|
|
#18+
vkleArbit, Проблема то не в функции, а в передаче параметров. "По ссылке" должно быть указано в определении самой функции, а не в вызове. Раньше можно было этот амперсанд ляпать в вызове, потом это выпилили. Спасибо большое, добрый человек! Что-то я притупил :) Все работает. Вопрос закрыт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 15:12 |
|
||
|
|

start [/forum/topic.php?fid=23&fpage=42&tid=1461001]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
31ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 345ms |

| 0 / 0 |
