ѡ̳

 找回密码
 ע
搜索
查看: 65|回复: 2
打印 上一主题 下一主题

修改一个在PHP7.1和 7.2 环境下的报错

  [复制链接]

789

主题

1158

帖子

4197

积分

Ա

Rank: 9Rank: 9Rank: 9

积分
4197
跳转到指定楼层
¥
发表于 2019-4-29 10:58:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
原获取IP函数存在问题ip()   getenv()需要设置第二个参数为true时才不报错修改方式 将第二个设置为 true


或者 重写获取IP函数 使用thinkphp的写法
  1. /**
  2. * 获取客户端IP地址
  3. * @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字
  4. * @param boolean $adv 是否进行高级模式获取(有可能被伪装)
  5. * @return mixed
  6. */

  7. function ip($type = 0,$adv=false) {
  8.     $type       =  $type ? 1 : 0;
  9.     static $ip  =   NULL;
  10.     if ($ip !== NULL) return $ip[$type];
  11.     if($adv){
  12.         if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
  13.             $arr    =   explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
  14.             $pos    =   array_search('unknown',$arr);
  15.             if(false !== $pos) unset($arr[$pos]);
  16.             $ip     =   trim($arr[0]);
  17.         }elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
  18.             $ip     =   $_SERVER['HTTP_CLIENT_IP'];
  19.         }elseif (isset($_SERVER['REMOTE_ADDR'])) {
  20.             $ip     =   $_SERVER['REMOTE_ADDR'];
  21.         }
  22.     }elseif (isset($_SERVER['REMOTE_ADDR'])) {
  23.         $ip     =   $_SERVER['REMOTE_ADDR'];
  24.     }
  25.     // IP地址合法验证
  26.     $long = sprintf("%u",ip2long($ip));
  27.     $ip   = $long ? array($ip, $long) : array('0.0.0.0', 0);
  28.     return $ip[$type];
  29. }
复制代码



回复

使用道具 举报

789

主题

1158

帖子

4197

积分

Ա

Rank: 9Rank: 9Rank: 9

积分
4197
ɳ
 楼主| 发表于 2019-4-29 13:40:05 | 只看该作者

修改文件

phpcms\libs\classes\template_cache.class.php
修改

  1. /**
  2.          * 解析模板
  3.          *
  4.          * @param $str        模板内容
  5.          * @return ture
  6.          */
  7.         public function template_parse($str) {
  8.                 $str = preg_replace ( "/\{template\s+(.+)\}/", "<?php include template(\\1); ?>", $str );
  9.                 $str = preg_replace ( "/\{include\s+(.+)\}/", "<?php include \\1; ?>", $str );
  10.                 $str = preg_replace ( "/\{php\s+(.+)\}/", "<?php \\1?>", $str );
  11.                 $str = preg_replace ( "/\{if\s+(.+?)\}/", "<?php if(\\1) { ?>", $str );
  12.                 $str = preg_replace ( "/\{else\}/", "<?php } else { ?>", $str );
  13.                 $str = preg_replace ( "/\{elseif\s+(.+?)\}/", "<?php } elseif (\\1) { ?>", $str );
  14.                 $str = preg_replace ( "/\{\/if\}/", "<?php } ?>", $str );
  15.                 //for 循环
  16.                 $str = preg_replace("/\{for\s+(.+?)\}/","<?php for(\\1) { ?>",$str);
  17.                 $str = preg_replace("/\{\/for\}/","<?php } ?>",$str);
  18.                 //++ --
  19.                 $str = preg_replace("/\{\+\+(.+?)\}/","<?php ++\\1; ?>",$str);
  20.                 $str = preg_replace("/\{\-\-(.+?)\}/","<?php ++\\1; ?>",$str);
  21.                 $str = preg_replace("/\{(.+?)\+\+\}/","<?php \\1++; ?>",$str);
  22.                 $str = preg_replace("/\{(.+?)\-\-\}/","<?php \\1--; ?>",$str);
  23.                 $str = preg_replace ( "/\{loop\s+(\S+)\s+(\S+)\}/", "<?php \$n=1;if(is_array(\\1)) foreach(\\1 AS \\2) { ?>", $str );
  24.                 $str = preg_replace ( "/\{loop\s+(\S+)\s+(\S+)\s+(\S+)\}/", "<?php \$n=1; if(is_array(\\1)) foreach(\\1 AS \\2 => \\3) { ?>", $str );
  25.                 $str = preg_replace ( "/\{\/loop\}/", "<?php \$n++;}unset(\$n); ?>", $str );
  26.                 $str = preg_replace ( "/\{([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff:]*\(([^{}]*)\))\}/", "<?php echo \\1;?>", $str );
  27.                 $str = preg_replace ( "/\{\\$([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff:]*\(([^{}]*)\))\}/", "<?php echo \\1;?>", $str );
  28.                 $str = preg_replace ( "/\{(\\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\}/", "<?php echo \\1;?>", $str );
  29.                 $str = preg_replace_callback("/\{(\\$[a-zA-Z0-9_\[\]\'"\$\x7f-\xff]+)\}/s",  array($this, 'addquote'),$str);
  30.                 $str = preg_replace ( "/\{([A-Z_\x7f-\xff][A-Z0-9_\x7f-\xff]*)\}/s", "<?php echo \\1;?>", $str );
  31.                 $str = preg_replace_callback("/\{pc:(\w+)\s+([^}]+)\}/i", array($this, 'pc_tag_callback'), $str);
  32.                 $str = preg_replace_callback("/\{\/pc\}/i", array($this, 'end_pc_tag'), $str);
  33.                 $str = "<?php defined('IN_PHPCMS') or exit('No permission resources.'); ?>" . $str;
  34.                 return $str;
  35.         }

  36.         /**
  37.          * 转义 // 为 /
  38.          *
  39.          * @param $var        转义的字符
  40.          * @return 转义后的字符
  41.          */
  42.         public function addquote($matches) {
  43.                 $var = '<?php echo '.$matches[1].';?>';
  44.                 return str_replace ( "\\"", """, preg_replace ( "/\[([a-zA-Z0-9_\-\.\x7f-\xff]+)\]/s", "['\\1']", $var ) );
  45.         }
  46.         public static function pc_tag_callback($matches) {
  47.                 return self::pc_tag($matches[1],$matches[2], $matches[0]);;
  48.         }

复制代码


回复

使用道具 举报

789

主题

1158

帖子

4197

积分

Ա

Rank: 9Rank: 9Rank: 9

积分
4197
 楼主| 发表于 2019-4-29 13:40:39 | 只看该作者
admin 发表于 2019-4-29 13:40
phpcms\libs\classes\template_cache.class.php
修改
  1. public static function pc_tag($op, $data, $html) {
  2.                 preg_match_all("/([a-z]+)\=["]?([^"]+)["]?/i", stripslashes($data), $matches, PREG_SET_ORDER);
  3.                 $arr = array('action','num','cache','page', 'pagesize', 'urlrule', 'return', 'start');
  4.                 $tools = array('json', 'xml', 'block', 'get');
  5.                 $datas = array();
  6.                 $tag_id = md5(stripslashes($html));
  7.                 //可视化条件
  8.                 $str_datas = 'op='.$op.'&tag_md5='.$tag_id;
  9.                 foreach ($matches as $v) {
  10.                         $str_datas .= $str_datas ? "&$v[1]=".($op == 'block' && strpos($v[2], ') === 0 ? $v[2] : urlencode($v[2])) : "$v[1]=".(strpos($v[2], ') === 0 ? $v[2] : urlencode($v[2]));
  11.                         if(in_array($v[1], $arr)) {
  12.                 ${$v[1]} = $v[2]; //php7下的可变变量得用大括号
  13.                                 continue;
  14.                         }
  15.                         $datas[$v[1]] = $v[2];
  16.                 }
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | ע

本版积分规则

QQ|Archiver|ֻ|С|ѡ̳

GMT+8, 2026-5-2 07:18 , Processed in 0.076278 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表
0.0894s