程式升級觸發阿里雲自身安全機制導致的莫名問題

無聲勝有聲發表於2015-07-20

  最近對放在阿里雲的程式作了升級,但在升級的時候卻出現了一個莫名其妙的問題,導致整個應用無法使用。這是一個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)        {            // 非特殊等級,根據等級積分計算使用者等級(注意:不包括特殊等級)    

  變成了一坨這樣的東西。一開始以為是自己的程式問題,備份後再次上傳,仍然如此。。。。。因此,懷疑是上傳的檔案觸發了阿里雲的安全機制。有些檔案時正常的,有些檔案會莫名地把換行符給幹掉。

  於是將檔案打包成一個壓縮包以後再上傳,這時完好如初。。。。。

 


相關文章