canteen php,PHP脚本任务优化思路或改进方案?

脚本部分:

date_default_timezone_set('PRC');

require_once('canteen/MySQL.php');

$mysql = MySQL::getInstance('localhost', 'root', '123456', 'canteens', 'UTF-8');

$user_balance = $mysql->all("SELECT id,balance FROM `user`;");

$json_data['bl'] = json_encode($user_balance);

require_once("E:\WWW\canteens\application\libraries\DESedeCoder.php");

require_once("E:\WWW\canteens\application\libraries\Curl.php");

// 上传终端数据库的最新用户金额至主数据库

$json_data['token'] = DESedeCoder::encrypt(date('YmdH'), "*****");

$result = Curl::send("http://canteen.com/module/resful/main/bat_balance", $json_data, 'post');

$result = json_decode($result, TRUE);

if((int)$result['status'] === 200) {

$mysql->logs('定时更新金额ok!', 'cron.log');

}else if((int)$result['status'] === 666){

$mysql->logs('金额更新'.$result['msg'], 'cron.log');

}else if($result['status']){

$mysql->logs($result['status'].' '.$result['msg'], 'cron.log');

}else {

$mysql->logs('master服务器宕机', 'cron.log');

}

// 上传终端数据库未上传至主数据库的消费记录

$send_data['token'] = DESedeCoder::encrypt(date('YmdH'), "*****");

$upt_consume = $mysql->all("SELECT id,user_id,monetary,consume_time,consume_type,card_reader_ip FROM `consum_record` WHERE upload_state=0");

$send_data['upt'] = json_encode($upt_consume);

$result = Curl::send("http://canteen.com/module/resful/main/upt_consume", $send_data, 'post');

$res_arr = json_decode($result,TRUE);

if($res_arr['status'] == 200 || $res_arr['status'] == 204) {

$ok_id = json_decode($res_arr['ok_id'], TRUE);

foreach ($ok_id as $val) {

$mysql->upDate('consum_record', array('upload_state' => 1), array('id='=>$val));

}

if($res_arr['status'] == 200) {

$mysql->logs('定时上传消费记录ok!', 'cron.log');

}else {

$mysql->logs('定时上传消费记录部分ok!', 'cron.log');

}

}else if($res_arr['status'] == 666) {

$mysql->logs('消费记录上传'.$result['msg'], 'cron.log');

}else if($res_arr['status']){

$mysql->logs($result['status'].' '.$result['msg'], 'cron.log');

}else {

$mysql->logs('master服务器宕机', 'cron.log');

}

Curl部分

private static function doRequest($is_post = 0) {

$ch = curl_init();//初始化curl

curl_setopt($ch, CURLOPT_URL, self::$url);//抓取指定网页

curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);

// 来源一定要设置成来自本站

curl_setopt($ch, CURLOPT_REFERER, self::$oriUrl);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上

if($is_post == 1) curl_setopt($ch, CURLOPT_POST, $is_post);//post提交方式

if (!empty(self::$data)) {

self::$data = self::dealPostData(self::$data);

curl_setopt($ch, CURLOPT_POSTFIELDS, self::$data);

}

$data = curl_exec($ch);//运行curl

curl_close($ch);

return $data;

}

以上是我执行脚本的代码,具体操作流程有以下几点:

生成token

获取数据库所有用户ID和金额集合

token和用户ID、金额数据json化通过curl发送给接口api,接口更新用户最新金额数据

根据返回状态码 记录log

用户消费记录重复上面4步,不同的是,获取本机未上传的消费记录数据;

消费记录接口,接收到消费数据的时候,插入到接口所在的数据库;而且多了一步的是,消费记录上传成功后,会返回上传成功的本机消费记录ID,根据这些消费记录ID,更新本机数据库消费记录上传状态,没上传的为0,上传成功的为1

用curl发送的消费记录数据量挺大的差不多在10W+字节

用户量在200+,300条以下;消费记录500+,1000条以下;

遇到的问题,当我执行这段脚本的时候,会出现脚本执行超时的提示,大于30s

bVIWp7?w=1030&h=177

看上面的提示内容可以得知,两次curl请求都到位了,只是在我更新本地消费记录上传状态的时候,时间不够了,当然我这个只是出现诸多问题的某一种,以后还可能会出现api接口压力过大,导致发送数据都不成功,当然这都是后话了。

只加密两个token和取出两段数据的时间可以忽略不计,大约在300~400ms之间;

求解决思路或者优化思路;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值