程序升级触发阿里云自身安全机制导致的莫名问题

  最近对放在阿里云的程序作了升级,但在升级的时候却出现了一个莫名其妙的问题,导致整个应用无法使用。这是一个ecshop的程序,程序升级完以后出现莫名其妙的语法错误。然而程序本地测试并无问题。

  报错异常

Parse error: syntax error, unexpected T_IF in /www/web/includes/lib_main.php on line 1

  用securecrt登陆进去,set number居然报错。没辙,将文件栽下来,查看了下lib_main.php

<?php/** * ECSHOP 前台公用函数库 * ============================================================================ * 版权所有 2005-2010 上海商派网络科技有限公司,并保留所有权利。 * 网站地址: http://www.ecshop.com; * ---------------------------------------------------------------------------- * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和 * 使用;不允许对程序代码以任何形式任何目的的再发布。 * ============================================================================ * $Author: liuhui $ * $Id: lib_main.php 17063 2010-03-25 06:35:46Z liuhui $*/if (!defined('IN_ECS')){    die('Hacking attempt');}/** *  * 给用户分配业务员 * @access public * @param int user_id 用户id * @return void *  */function assgin_user($user_id = 0){    if (0 == intval($user_id))    {        return false;    }        $sql = "SELECT seller FROM ".$GLOBALS['ecs']->table('users'). " AS u WHERE u.user_id = '$user_id'";    $seller_id = $GLOBALS['db']->getOne($sql);        if(0 !== intval($seller_id)){        return false;//用户已分配    }        $sql_admin = "SELECT user_id, cur_assign FROM "                 .$GLOBALS['ecs']->table('admin_user').                 " WHERE if_assign = 1 ORDER BY user_id ASC";    $all_seller = $GLOBALS['db']->getAll($sql_admin);        $cur_seller = 0;//当前分配业务员id    $last_seller = 0;//上次分配业务员id    $cnt_seller = count($all_seller);    for($i = 0; $i < $cnt_seller; $i++){        if(1 == $all_seller[$i]['cur_assign']){            $last_seller = $all_seller[$i]['user_id'];            $assign_key = ($i == $cnt_seller - 1) ? 0 : $i + 1;//获取下一个未分配的客户id            $cur_seller = $all_seller[$assign_key]['user_id'];            break;        }    }        //未分配成功时从第一个开始分配    if(0 == $cur_seller && $cnt_seller > 0){        $cur_seller = $all_seller[0]['user_id'];    }        //更新用户隶属于的业务员    $sql = "UPDATE " . $GLOBALS['ecs']->table('users') . " SET seller='$cur_seller' WHERE user_id='$user_id'";    $GLOBALS['db']->query($sql);        //更新当前分配的业务员    $sql = "UPDATE " . $GLOBALS['ecs']->table('admin_user') . " SET cur_assign=1 WHERE user_id='$cur_seller'";    $GLOBALS['db']->query($sql);        //更新上次分配的业务员    $sql = "UPDATE " . $GLOBALS['ecs']->table('admin_user') . " SET cur_assign=0 WHERE user_id='$last_seller'";    $GLOBALS['db']->query($sql);        return true;}/** * 更新用户SESSION,COOKIE及登录时间、登录次数。 * * @access  public * @return  void */function update_user_info(){    if (!$_SESSION['user_id'])    {        return false;    }    /* 查询会员信息 */    $time = date('Y-m-d');    $sql = 'SELECT u.user_money, u.pay_points, u.user_rank, u.rank_points, '.            ' IFNULL(b.type_money, 0) AS user_bonus, u.last_login, u.last_ip'.            ' FROM ' .$GLOBALS['ecs']->table('users'). ' AS u ' .            ' LEFT JOIN ' .$GLOBALS['ecs']->table('user_bonus'). ' AS ub'.            ' ON ub.user_id = u.user_id AND ub.used_time = 0 ' .            ' LEFT JOIN ' .$GLOBALS['ecs']->table('bonus_type'). ' AS b'.            " ON b.type_id = ub.bonus_type_id AND b.use_start_date <= '$time' AND b.use_end_date >= '$time' ".            " WHERE u.user_id = '$_SESSION[user_id]'";    if ($row = $GLOBALS['db']->getRow($sql))    {        /* 更新SESSION */        $_SESSION['last_time']   = $row['last_login'];        $_SESSION['last_ip']     = $row['last_ip'];        $_SESSION['login_fail']  = 0;        /* 取得用户等级和折扣 */        if ($row['user_rank'] == 0)        {            // 非特殊等级,根据等级积分计算用户等级(注意:不包括特殊等级)    

  变成了一坨这样的东西。一开始以为是自己的程序问题,备份后再次上传,仍然如此。。。。。因此,怀疑是上传的文件触发了阿里云的安全机制。有些文件时正常的,有些文件会莫名地把换行符给干掉。

  于是将文件打包成一个压缩包以后再上传,这时完好如初。。。。。

原文地址:https://www.cnblogs.com/rwxwsblog/p/4660832.html