Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: PHP7 - пара вопросов
Форумы портала PHP.SU » » Вопросы новичков » PHP7 - пара вопросов

Страниц (1): [1]
 

1. Lolya - 08 Ноября, 2020 - 12:10:05 - перейти к сообщению
в свете переписания скрипта под PHP7, вылезла проблемка. Это было в старом скрипте, как его поменять на новый вариант?
PHP:
скопировать код в буфер обмена
  1. if(!isset($HTTP_POST_VARS) && isset($_POST)){$HTTP_POST_VARS = $_POST;$HTTP_GET_VARS = $_GET;
  2. $HTTP_SERVER_VARS = $_SERVER;$HTTP_COOKIE_VARS = $_COOKIE;$HTTP_ENV_VARS = $_ENV;$HTTP_POST_FILES = $_FILES;}
  3. // STRIP MAGIC QUOTES FROM REQUEST
  4. if(get_magic_quotes_gpc()){if(!empty($_GET)){$_GET = strip_magic_quotes($_GET);}
  5. if(!empty($_POST)){$_POST = strip_magic_quotes($_POST);}if(!empty($_COOKIE)){$_COOKIE = strip_magic_quotes($_COOKIE);}}
  6. // DO SOME EXTRA STUFF
  7. if(!get_magic_quotes_gpc()){if(is_array($HTTP_GET_VARS)){while (list($k, $v) = each($HTTP_GET_VARS)){
  8. if(is_array($HTTP_GET_VARS[$k])){while (list($k2, $v2) = each($HTTP_GET_VARS[$k])){$HTTP_GET_VARS[$k][$k2] = addslashes($v2);}
  9. @reset($HTTP_GET_VARS[$k]);}else{$HTTP_GET_VARS[$k] = addslashes($v);}}@reset($HTTP_GET_VARS);}
  10. ///////////////////
  11. if(is_array($HTTP_POST_VARS)){while (list($k, $v) = each($HTTP_POST_VARS)){
  12. if(is_array($HTTP_POST_VARS[$k])){while (list($k2, $v2) = each($HTTP_POST_VARS[$k])){$HTTP_POST_VARS[$k][$k2] = addslashes($v2);}
  13. @reset($HTTP_POST_VARS[$k]);}else{$HTTP_POST_VARS[$k] = addslashes($v);}}@reset($HTTP_POST_VARS);}
  14. ////////////////////
  15. if(is_array($HTTP_COOKIE_VARS)){while (list($k, $v) = each($HTTP_COOKIE_VARS)){
  16. if(is_array($HTTP_COOKIE_VARS[$k])){while (list($k2, $v2) = each($HTTP_COOKIE_VARS[$k])){$HTTP_COOKIE_VARS[$k][$k2] = addslashes($v2);}
  17. @reset($HTTP_COOKIE_VARS[$k]);}else{$HTTP_COOKIE_VARS[$k] = addslashes($v);}}@reset($HTTP_COOKIE_VARS);}}


я так думаю что сменив все переменные, или не права? Вот так примерно оставить:

PHP:
скопировать код в буфер обмена
  1. if(!isset($_POST) && isset($_POST)){$_POST = htmlspecialchars_uni($_POST);$_GET = isset($_GET);
  2. $_SERVER = isset($_SERVER);$_COOKIE = isset($_COOKIE);$_ENV = isset($_ENV);$_FILES = isset($_FILES);}
2. Vladimir Kheifets - 10 Ноября, 2020 - 20:27:45 - перейти к сообщению
Lolya пишет:
в свете переписания скрипта под PHP7, вылезла проблемка. Это было в старом скрипте, как его поменять на новый вариант?
Спойлер (Отобразить)
я так думаю что сменив все переменные, или не права? Вот так примерно оставить:

PHP:
скопировать код в буфер обмена
  1. if(!isset($_POST) && isset($_POST)){$_POST = htmlspecialchars_uni($_POST);$_GET = isset($_GET);
  2. $_SERVER = isset($_SERVER);$_COOKIE = isset($_COOKIE);$_ENV = isset($_ENV);$_FILES = isset($_FILES);}

Добрый день!
Вот так примерно оставлять не желательно.
1. Во всех случаях результат !isset($_POST) && isset($_POST) = true.
2. Не существует функции htmlspecialchars_uni, а есть htmlspecialchars и она работaет с переменными типа string, а не с массивами, как у Вас $_POST.
3. Функции isset возвращает bool (true/false).
В результате выполнения команды $_SERVER = isset($_SERVER), содержимоемое массива будет потеряно, a eсли затем посмотрите var_dump($_SERVER),
то увидете bool (true). Итак сотрёте всё - $_GET, $_POST, и.т.п.
3. Lolya - 11 Ноября, 2020 - 18:59:30 - перейти к сообщению
Vladimir Kheifets
А как верно исправить? Закатив глазки

Vladimir Kheifets пишет:
Не существует функции htmlspecialchars_uni, а есть htmlspecialchars

PHP:
скопировать код в буфер обмена
  1. if(!function_exists("htmlspecialchars_uni")){function htmlspecialchars_uni($message){
  2. $message = preg_replace("#&(?!\#[0-9]+;)#si", "&", $message); // Fix & but allow unicode
  3. $message = str_replace("<","<",$message);$message = str_replace(">",">",$message);
  4. $message = str_replace("\"",""",$message);$message = str_replace("  ", "&nbsp;&nbsp;", $message);return $message;}
  5. ////////////////////////////////
  6. function html_uni($str){return htmlspecialchars_uni($str);}}
4. Vladimir Kheifets - 12 Ноября, 2020 - 08:50:03 - перейти к сообщению
Lolya пишет:
Vladimir Kheifets
А как верно исправить? Закатив глазки

Vladimir Kheifets пишет:
Не существует функции htmlspecialchars_uni, а есть htmlspecialchars

PHP:
скопировать код в буфер обмена
  1. if(!function_exists("htmlspecialchars_uni")){function htmlspecialchars_uni($message){
  2. $message = preg_replace("#&(?!\#[0-9]+;)#si", "&", $message); // Fix & but allow unicode
  3. $message = str_replace("<","<",$message);$message = str_replace(">",">",$message);
  4. $message = str_replace("\"",""",$message);$message = str_replace("  ", "&nbsp;&nbsp;", $message);return $message;}
  5. ////////////////////////////////
  6. function html_uni($str){return htmlspecialchars_uni($str);}}

Добрый день!
Лучше заменять в коде всё, что не актуально в PHP7, например, $HTTP_GET_VARS, $HTTP_POST_VARS,... на $_GET, $_POST,...
Если Вы хотите применить Вашу функцию htmlspecialchars_uni или другую ко всем элементам массива $_POST,
то вместо $_POST = htmlspecialchars_uni($_POST)
Можно написать
PHP:
скопировать код в буфер обмена
  1. foreach($_POST as $name=>$value) $_POST[$name]=htmlspecialchars_uni($value);

или только к некоторым элементам
PHP:
скопировать код в буфер обмена
  1. foreach(["text1","text2","text3"] as $name) $_POST[$name]=htmlspecialchars_uni($_POST[$name]);

Удачи!
5. Lolya - 12 Ноября, 2020 - 09:29:03 - перейти к сообщению
Vladimir Kheifets пишет:
Добрый день!
Лучше заменять в коде всё, что не актуально в PHP7, например, $HTTP_GET_VARS, $HTTP_POST_VARS,... на $_GET, $_POST,

если брать изначальный код, то get_magic_quotes_gpc более не существует и надо все упоминания о нем удалить, это я прочла на форумах программирования. То-есть, от кода останется только:

PHP:
скопировать код в буфер обмена
  1. if(!isset($HTTP_POST_VARS) && isset($_POST)){$HTTP_POST_VARS = $_POST;$HTTP_GET_VARS = $_GET;
  2. $HTTP_SERVER_VARS = $_SERVER;$HTTP_COOKIE_VARS = $_COOKIE;$HTTP_ENV_VARS = $_ENV;$HTTP_POST_FILES = $_FILES;}


вы предлагаете сделать так ? :

PHP:
скопировать код в буфер обмена
  1. if(!isset($_POST) && isset($_POST)){
  2. $_POST= $_POST;
  3. $_GET= $_GET;
  4. $_SERVER= $_SERVER;
  5. $_COOKIE= $_COOKIE;
  6. $_ENV= $_ENV;
  7. $_FILES= $_FILES;}


а зашита от инъекции? Банально зашита ж должна быть? Или я чего-то не понимаю?
6. Vladimir Kheifets - 12 Ноября, 2020 - 11:09:56 - перейти к сообщению
Lolya пишет:
Vladimir Kheifets пишет:
Добрый день!
Лучше заменять в коде всё, что не актуально в PHP7, например, $HTTP_GET_VARS, $HTTP_POST_VARS,... на $_GET, $_POST,

если брать изначальный код, то get_magic_quotes_gpc более не существует и надо все упоминания о нем удалить, это я прочла на форумах программирования. То-есть, от кода останется только:

PHP:
скопировать код в буфер обмена
  1. if(!isset($HTTP_POST_VARS) && isset($_POST)){$HTTP_POST_VARS = $_POST;$HTTP_GET_VARS = $_GET;
  2. $HTTP_SERVER_VARS = $_SERVER;$HTTP_COOKIE_VARS = $_COOKIE;$HTTP_ENV_VARS = $_ENV;$HTTP_POST_FILES = $_FILES;}


вы предлагаете сделать так ? :

PHP:
скопировать код в буфер обмена
  1. if(!isset($_POST) && isset($_POST)){
  2. $_POST= $_POST;
  3. $_GET= $_GET;
  4. $_SERVER= $_SERVER;
  5. $_COOKIE= $_COOKIE;
  6. $_ENV= $_ENV;
  7. $_FILES= $_FILES;}


а зашита от инъекции? Банально зашита ж должна быть? Или я чего-то не понимаю?

я не предлагал, писать $_POST= $_POST;...
То что, Вы нашли на форумах, предлагается для того , чтобы не заменять переменные
$HTTP_POST_VARS, $HTTP_GET_VARS, и.т.п., которые используются в скриптах.
Советую этого не делать, а использовать в кодах суперглобальные переменные
https://www.php.net/manual/ru/la...superglobals.php
Смотрите сообщения об ошибках и ищите чем предлается заменить в PHP7.
см.https://www.php.net/manual/en/migration70.php
Удачи!

 

Powered by ExBB FM 1.0 RC1