吴伟贤のBlog

Feed Rss

phpexcel保存excel到服务器指定目录

09.06.2016, phpexcel保存excel到服务器指定目录已关闭评论, php, by .

//引入phpexcel类库
require_once “PHPExcel.php”;

//实例phpexcel
$objPHPExcel = new PHPExcel();
//设置第一个为活动报表
$objPHPExcel->setActiveSheetIndex(0);

//设置数据到表内
$objPHPExcel->getActiveSheet()->setCellValue(‘A2’, “设置A列第2行”)
->setCellValue(‘A3’, “设置A列第3行”)
->setCellValue(‘B3’, “设置B列第3行”)
;

$objPHPExcel->getActiveSheet()->setCellValue(‘A1’, “设置A列第1行”);
$objPHPExcel->getActiveSheet()->setCellValue(‘C3’, “设置C列第3行”);

//循环处理二维数组
$data=array(
‘0’=>array(‘name’=>’张三’,’age’=>’20’),
‘1’=>array(‘name’=>’李四’,’age’=>’30’),
);

//设置抬头
$objPHPExcel->getActiveSheet()->setCellValue(‘A5’, “姓名”)
->setCellValue(‘B5’, “年龄”)
;

$i=6;
foreach($data as $key=>$val){
$objPHPExcel->getActiveSheet()->setCellValue(‘A’.$i,$val[‘name’])
->setCellValue(‘B’.$i, $val[‘age’])
;
$i++;
}

//实例化保存类
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, ‘Excel5’);
//保存路径,默认当前目录,注意目录权限
$objWriter->save(‘1.xls’);

//$objWriter->save(‘data/1.xls’);
//保存绝对地址
//$objWriter->save(‘D://1.xls’);

FreeSWITCH 添加中文语音包

10.15.2014, FreeSWITCH 添加中文语音包已关闭评论, freeswitch, by .

http://download.csdn.net/detail/vivn1997/4764490

在/usr/local/freeswitch/sounds/下建立目录zh/cn/sue(因为不知道声音主人的名字,就先用sue代替了,抱歉抱歉)
mkdir -p /usr/local/freeswitch/sounds/zh/cn/sue
将声音文件移动到目标目录
mv output/* /usr/local/freeswitch/sounds/zh/cn/sue/
– 增加中文定义
cd /usr/local/freeswitch/conf/lang
cp -a en zh
cd zh
mv en.xml cn.xml
编辑cn.xml,将第2行换成
<language name=”zh” say-module=”zh” sound-prefix=”$${sounds_dir}/zh/cn/sue” tts-engine=”cepstral” tts-voice=”callie”>
– 增加对中文的加载
编辑/usr/local/freeswitch/conf/freeswitch.xml,找到<section name=”languages” description=”Language Management”>段,加入
<X-PRE-PROCESS cmd=”include” data=”lang/zh/*.xml”/>
– 增加中文say模块的加载
编辑/usr/local/freeswitch/conf/autoload_configs/modules.conf.xml
去除<load module=”mod_say_zh”/>的注释
– 设置中文为默认语言
编辑/usr/local/freeswitch/conf/vars.xml,加入以下几行
<X-PRE-PROCESS cmd=”set” data=”default_language=zh”/>
<X-PRE-PROCESS cmd=”set” data=”default_dialect=cn”/>
<X-PRE-PROCESS cmd=”set” data=”default_voice=sue”/>
– 重新加载xml,在fs_cli,执行:
reloadxml
中文语音就装好啦。凡是有录音的,都会播放中文内容,没有录音的,还是会播放英文内容。

freeswitch originate 回拨

10.01.2014, freeswitch originate 回拨已关闭评论, freeswitch, by .

来源http://www.8000hz.com/archives/freeswitch-originate.html

需求

回拨, 外呼

命令行

呼通主叫后, 转到拨号方案

originate user/1000 2000 XML default

呼通主叫后, 播放XML IVR

originate {origination_caller_id_number=137XXXX4955,origination_caller_id_name=137XXXX4955}sofia/external/180XXXX9957@10.0.1.2:5060 &ivr(demo_ivr)

呼通主叫后, 执行脚本, 不带参数

originate {origination_caller_id_number=137XXXX4955,origination_caller_id_name=137XXXX4955}sofia/external/180XXXX9957@10.0.1.202:9080 &lua(demo_ivr.lua)

呼通主叫后, 执行脚本, 带参数

originate {origination_caller_id_number=137XXXX4955,origination_caller_id_name=137XXXX4955}sofia/external/180XXXX9957@10.0.1.202:9080 '&lua(dy_ivr.lua tier)'

更进一步
默认originate是阻塞的, 使用 bgapi 实现非阻塞回拨.

例如

bgapi originate {origination_caller_id_number=13771114955,origination_caller_id_name=13771114955}sofia/external/18051799957@10.0.1.2:5060 &ivr(demo_ivr)

应用
可以使用shell&fs_cli, esl, xml_rpc 外部控制FreeSWITCH进行外呼或回拨, 以实现批量外呼.

Linux流量测试工具Iperf

03.03.2014, Linux流量测试工具Iperf已关闭评论, linux, by .

由于要测试另一个IDC给的带宽是否给足了,所以要从一个机房打10G的流量到测试IDC。之初 采用多线程下载工具,多进程方法下载,可是不理想,跑量达不到要求。
Iperf是一个网络性能测试工具。可以测试TCP和UDP带宽质量,可以测量最大TCP带宽,具有多种参数和UDP特性,可以报告 带宽,延迟抖动和数据包丢失.
费话不多说。先介绍下安装吧
如果是centos 的话。添加第三方的源(rpmforge)就可以直接yum
yum -y install iperf
当然也可以用源码包编 译安装 。官方站:http://sourceforge.net/projects/iperf/
tar xvf iperf-xxx.tar
cd iperf
./configure
make
make install

下面介绍一个简单用法:
iperf 是一个server 和client 的 组成的工作方式

如,我要测试 B地,测试 A地出的流量 ,刚配置方法如下
A地要配置成client
B地配置为server

server:
iperf -s -p 8080 -d

client:
iperf -c serverIP -p 8080 -P 30 -t 300

对上面几个参数做简单说明
-s 表示是server -p 8080 监听8080 -d 表示以daemon方式运行

-c 以client 方式运行 -P 表示开启的线程数 -t 表示持续的时间(单位为s)

 

Iperf使用方法与参数说明

PS:这个说明是转载。
参数说明:
-s 以server模式启动。#iperf -s
-c host以client模式启动。host是server端地址。#iperf -c serverip
通用参数:
-f [kmKM] 分别表示以Kbits, Mbits, KBytes, MBytes显示报告,默认以Mbits为单位,#iperf -c 222.35.11.23 -f K
-i sec 以秒为单位显示报告间隔,#iperf -c 222.35.11.23 -i 2
-l 缓冲区大小,默认是8KB,#iperf -c 222.35.11.23 -l 16
-m 显示tcp最大mtu值
-o 将报告和错误信息输出到文件#iperf -c 222.35.11.23 -o ciperflog.txt
-p 指定服务器端使用的端口或客户端所连接的端口#iperf -s -p 9999;iperf -c 222.35.11.23 -p 9999
-u 使用udp协议
-w 指定TCP窗口大小,默认是8KB
-B 绑定一个主机地址或接口(当主机有多个地址或接口时使用该参数)
-C 兼容旧版本(当server端和client端版本不一样时使用)
-M 设定TCP数据包的最大mtu值
-N 设定TCP不延时
-V 传输ipv6数据包
server专用参数:
-D 以服务方式运行。#iperf -s -D
-R 停止iperf服务。针对-D,#iperf -s -R
client端专用参数:
-d 同时进行双向传输测试
-n 指定传输的字节数,#iperf -c 222.35.11.23 -n 100000
-r 单独进行双向传输测试
-t 测试时间,默认20秒,#iperf -c 222.35.11.23 -t 5
-F 指定需要传输的文件
-T 指定ttl值
步骤:

1.下载、scp进两个linux(一个做server一个做client)。
2.源码安装。没有特别的东西,装好了就有iperf这个命令了。
3.做server的机器上运行#iperf -s,启动iperf。
4.做client的机器上运行#iperf -c serverip -t 30 -i 2,每2秒测试一次到serverip的网络性能,测试时间30秒。
jperf使用:
jperf是图形界面的,安装jre(java runtime)后运行jperf.bat就可以运行。

网上充值api比较 欧飞、久久、天天付

12.05.2013, 网上充值api比较 欧飞、久久、天天付已关闭评论, 杂七杂八, by .

  目前在做一个欧飞B2C商城的项目,商城中要求实现手机话费充值,游戏点卡充值,彩票充值的功能。我在网上搜罗了一下,目前提供这种充值API接口的公司有欧飞、久久、天天付等;下面是我比较这三个API总结,希望能给做这块业务的程序员们一些帮助。
这几款充值接口的api都是免费的(共同点)

欧飞:http://api.ofpay.com/
   预存款:自己定
API:手机充值,游戏充值
  优势:
   A:共享欧飞知名品牌,迅速打开销售市场。
   E:多种支付方式,交易更加灵活方便。
   B:全数字化商品,无物流,大大降低运营成本。
   F:实时查看商品销售及帐户资金情况。
   C:无须担心库存积压,商品不全,欧飞平台拥有海量库存商品且种类丰富。
   G:7×24小时在线客服,为您遇到的一切问题排忧解难。
   D:可根据自己的喜好和销售需要,方便的调整商店的上架商品。
   H:优先参加欧飞组织的各种市场促销活动。
  备注:注册时选择互联网 才能审核
  集成网站:淘宝,拍拍,百度,银联,1号店,搜狗,京东,当当,360
久久:esales.99huafei.com
预存款:最低限制100元
API:目前只有手机充值,QQ充值,游戏充值目前还没实现(2013年五月会上)
集成久久API接口的网站:本来生活网,京东(供货)<并未实现久久接口,京东集成的是欧飞API
国采支付 天天付:http://www.tiantianfu.com/
预存款:根据自己需要
API:手机充值,游戏充值
优势:
天米付科技向无线支付服务运营和移动电子商务服务运营进行拓展,目前与包括淘宝,腾讯等领先服务商建立了
长期广泛的合作伙伴关系,致力于为广大的移动用户提供专业安全便捷的无线支付服务和提供创新的移动电子商务
体验。同时,为了向合作伙伴提供强大的虚拟销售平台,天米付科技实现了与电信,银行运营商以及上游合作商的互通互联。
集成网站:网易,新浪
安银:http://www.anyinpay.com
充值卡回收平台系统

 

windows 2003远程单用户登陆 服务端

11.26.2013, windows 2003远程单用户登陆 服务端已关闭评论, windows, by .

进入控制面板,点击“管理工具——终端服务配置“或者输入tscc.msc,在弹出界面中点击”服务器设置”,然后在右侧的选项中设置”限制每个用户使用一个会话“选项为”是“,这样就可以了。

   在设置完成后,当A用户远程电脑后,此时如果B用户再次远程,那么A用户就会提示连接中断,这样设置还有一个好处,就是保证不同的远程用户使用的是一个会话,也就是说A用户做了什么操作,在B用户远程登录后在桌面仍然可以看到A用户操作的内容。

freeswitch lua 回拨 主叫被叫号码

10.08.2013, freeswitch lua 回拨 主叫被叫号码已关闭评论, freeswitch, by .

freeswitch lua 回拨 主叫被叫号码

功能实现

1:主叫呼叫接入号,挂断主叫回busy给主叫

2:回拨 接通主叫号码及被叫号码

dialplan代码:

<extension name=”testlua”>
<condition field=”destination_number” expression=”^11111$”>
<action application=”lua” data=”test.lua ${destination_number}”/>
</condition>
</extension>

test.lua代码:

freeswitch.consoleLog("notice","test.lua debug\n")
local caller=session:getVariable("caller_id_number");
local callee=argv[1];
freeswitch.consoleLog("notice","get caller "..caller.."\n")
freeswitch.consoleLog("notice","get callee "..callee.."\n")
session:hangup("USER_BUSY");
api = freeswitch.API();
local callstring = "bgapi originate {ignore_early_media=true,origination_caller_id_number="..callee..",origination_caller_id_name="..callee.."}user/"..caller.." \'&bridge(sofia/gateway/szcmcc/"..callee..")\'";
freeswitch.consoleLog("notice", callstring.."\n");
api:executeString(callstring);
freeswitch.consoleLog("notice", "Leave callback Scripts\n");

缺点

还不知道怎么实现等待几秒后再回拨。
呼叫接入号后会马上进行回拨操作。

php获取多次跳转后的url

09.27.2013, php获取多次跳转后的url已关闭评论, php, by .

获取url的时候,我尝试过file_get_content、fsockopen两上方法来获取,要么是获了不完全,要么就是获取的地址经过多次跳转后无法获取了

在最后,测试出了curl是可以获取到跳转多次的地址;

要使用curl需要使用php的curl库,在编译的时候需我加上–with-curl 来开启curl库,Windows 打开php.ini,将extension=php_curl.dll前的;号去掉。

CURL有很多参数和选项的,En比较好的同学可以直接看官方的手册,英文件烂的同学可以尝试搜一下百度,也能找到一些说明的

// create a new curl resource

创建一个新的会话

$ch = curl_init();

设置一个url和一些参数

CURLOPT_URL:这个是 url协议,也就是指定是http还是https

// set URL and other appropriate options

curl_setopt($ch, CURLOPT_URL, “http://www.google.com/”);

// 设置浏览器的特定header

curl_setopt($ch, CURLOPT_HTTPHEADER, array(

"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 (.NET CLR 3.5.30729)",

"Accept-Language: en-us,en;q=0.5"

));

// 页面内容我们并不需要

curl_setopt($ch, CURLOPT_NOBODY, 1);

// 只需返回HTTP header

curl_setopt($ch, CURLOPT_HEADER, 1);

// 返回结果,而不是输出它

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$output = curl_exec($ch);

curl_close($ch);

// 有重定向的HTTP头信息吗?通过正则取出来

if (preg_match("!Location: (.*)!", $output, $matches)) {

echo $matches[1];

}

完整的方法如下:

function getUrl($url) {

    $ch = curl_init();
    // 设置 url
    curl_setopt($ch, CURLOPT_URL, $url);
    // 设置浏览器的特定header
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(“User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 (.NET CLR 3.5.30729)”, “Accept-Language: en-us,en;q=0.5”));
    // 页面内容我们并不需要
    curl_setopt($ch, CURLOPT_NOBODY, 1);
    // 只需返回HTTP header
    curl_setopt($ch, CURLOPT_HEADER, 1);
    // 返回结果,而不是输出它
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($ch);
    curl_close($ch);
    // 有重定向的HTTP头信息吗?
    if (preg_match(“!Location: (.*)!”, $output, $matches)) {
        return $matches[1];
    } else {
        return false;
    }
}

freeswitch modules 模块

09.16.2013, freeswitch modules 模块已关闭评论, freeswitch, by .

使用GG翻译,仅自己学习用

来自:https://wiki.freeswitch.org/wiki/FreeSwitch_Modules

Applications应用

  • mod_abstraction – 提供了一个抽象的API调用(未来有更多功能)Provides an abstraction to API call (and more in the future).
  • mod_avmd – 使用一个通用的方法检测语音信箱响铃Detects voicemail beeps using a generalized approach.
  • mod_blacklist – 黑名单模块 Blacklist module.
  • mod_callcenter – 排队叫号的应用程序,可用于呼叫中心的需求 Call queuing application that can be used for call center needs.
  • mod_cidlookup – 使用电话号码从数据,url等中查询来电显示名称 Provides a means (database, url) to lookup the callerid name from a number.
  • mod_cluechoo – 一个简单的框架,演示模块 A simple framework demo module.
  • mod_commands – API接口命令集 A mass plethora of API interface commands.
  • mod_conference – 会议模块 Conference room module.
  • mod_curl – 允许脚本发出HTTP请求,接收响应为纯文本或JSON  Allows scripts to make HTTP requests as receive responses as plain text or JSON.
  • mod_db – 数据库键/值存储功能,组拨号,以及限制后端。 Database key/value store functionality, group dialing, and limit backend.
  • mod_directory – 用户名称目录 Dial by Name directory.
  • mod_distributor – 简单的轮循式分发 Simple round-robin style distributions.
  • mod_dptools – Dialplan Tools: provides a number of apps and utilities for the dialplan.
  • mod_easyroute – A simple DID routing engine that uses a database lookup to determine how to route an incoming call.
  • mod_enum – Route PSTN numbers over internet according to ENUM servers, such as e164.org
  • mod_esf – Holds the multi cast paging application for SIP.
  • mod_esl – 允许生成远程ESL命令 Allows to generate remote ESL commands.
  • mod_expr – Brian Allen Vanderburg’s expression evaluation library.
  • mod_fifo – FIFO module.
  • mod_fsk – FSK (Frequency-Shift Keying) data transfer
  • mod_fsv – FreeSWITCH Video application (Recording and playback)
  • mod_hash – Hashtable key/value store functionality and limit backend
  • mod_httapi – HT-TAPI Hypertext Telephony API (Twilio FreeSWITCH style)
  • mod_http_cache – HTTP GET缓存 HTTP GET with caching.
  • mod_ladspa – use Auto-tune on your call.
  • mod_lcr – Implements LCR (Least Cost Routing)
  • mod_limit – pulled into core. See: Limit.
  • mod_memcache – API that integrates with memcached (a distributed key/value object store)
  • mod_mongo – http://www.mongodb.org/
    • describtion needed!
  • mod_mp4 – MP4 File Format support for video apps.
  • mod_nibblebill – Billing module (“nibbles” at credit/cash amounts during calls)
  • mod_oreka – Module for Media Recording with Oreka
  • mod_osp – Open Settlement Protocol (OSP) Module.
  • mod_rad_auth – use RADIUS for authentication
  • mod_redis – supplies a limit back-end that uses Redis.
  • mod_rss – Reads RSS feeds via a TTS engine.
  • mod_skel – Dummy module.
  • mod_sms – Apps for chat messages
  • mod_snapshot – Records a sliding window of audio and can take snapshots to disk.
  • mod_snipe_hunt – A simple framework demo module.
  • mod_snmp – SNMP module.
  • mod_snom – Controlling softkeys on Snom phones (button function, led state, label etc.)
  • mod_soundtouch – Modify the pitch of the audio and other sound effects.
  • mod_spandsp – Spandsp tone and DTMF detectors. A combination of mod_fax and mod_voipcodecs and mod_t38gateway.
  • mod_spy – User spy module.
  • mod_stress – Module for detecting voice stress.
  • mod_tone_detect – Tone detection module.
  • mod_valet_parking – Allows calls to be parked and picked up easily.
  • mod_vmd – Voicemail beep detection module.
  • mod_voicemail – Full-featured voicemail module.
  • mod_voicemail_ivr – VoiceMail IVR Interface.
  • mod_xml_odbc – Allows user directory to be accessed from a database in realtime.

Speech Recognition / Text-to-Speech

Codecs

Codec Negotiation explained

Dialplan

Directories

  • mod_ldap – LDAP module made to obtain dialplans, user accounts, etc.

Endpoints

  • mod_dingaling – Jabber/Google Talk Talk integration module.
  • mod_h323 – Endpoint module based on the h323plus library.
  • mod_html5 – HTML5 Endpoint Module
  • mod_khomp – All Khomp Cards module.
  • mod_loopback – Loopback endpoint module – A loopback channel driver to make an outbound call as an inbound call.
  • mod_opal – Multi-protocol (H.323/IAX2) endpoint module based on the Opal library.
  • mod_openzap – Interface to Zaptel hardware.
  • mod_freetdm – Interface to Zaptel hardware. Replaces mod_openzap
  • mod_portaudio – Voice through a local soundcard.
  • mod_skinny – SCCP module
  • mod_skypopen – Skype compatible module.
  • mod_gsmopen – FreeSWITCH GSM interface module
  • mod_sofia – SIP module.
  • mod_rtmp – “Real time media protocol” endpoint for FreeSWITCH.
  • mod_wanpipe – T1/E1 Sangoma Card module.
  • mod_woomera – H.323/Woomera module.

Event Handlers

See cdr

Unsupported

  • mod_cdr – Call detail record handler

File Formats

Languages

Languages for Call Control explained.

Languages (unsupported / out of tree)

Loggers

Timers

  • softtimer – Timer for FreeSWITCH. No hardware needed, now in-core (but still optional)
  • mod_posix_timer – POSIX timers. Runs on older kernels like the ones in Centos 5.
  • mod_timerfd – a new kernel that supports this option kernel >= 2.6.25 and libc >= 2.8

External API’s

  • mod_xml_curl – XML Gateway Code. Configure FreeSWITCH™ from a web server on boot and on the fly.
  • mod_xml_ldap – LDAP XML Gateway.
  • mod_xml_rpc – XML Remote Procedure Calls. Issue commands from your web application.
  • mod_xml_scgi – Simple Common Gateway Interface

External modules

freeswitch lua 回拨实例

09.16.2013, freeswitch lua 回拨实例已关闭评论, freeswitch, by .

转自:http://www.8000hz.com/archives/freeswitch-callback-example.html

 

实现:
回拨实例。
使用lua实现,主要用于熟悉originate命令。

调用示例:

lua callback.lua 1377XXX4955 180XXXX9957 2345677 360 /tmp/test.wav

callback.lua

--
-- CALLBACK
--
-- Author: foxgoing@gmail.com / 8000hz.com
-- 
-- 功能描述:先拨打主叫,主叫接通后向主叫播放指定声音文件,然后拨打被叫,同时设置最大通话时长。
--           设置供其他应用使用的客户号。主被叫都为外线号码。

local caller_number = argv[1];     --主叫号码
local callee_number = argv[2];     --被叫号码
local customer_number = argv[3];   --主叫的平台账号
local maxtimes = argv[4];          --最大通话时长(秒)
local sounds = argv[5];            --声音文件路径

api = freeswitch.API();

local callstring = "bgapi originate {ringback="..sounds..",ignore_early_media=true}sofia/gateway/szcmcc/"..caller_number.." \'&lua(call.lua "..maxtimes.." "..callee_number.." "..customer_number..")\'";
freeswitch.consoleLog("notice", callstring.."\n");
api:executeString(callstring);
freeswitch.consoleLog("notice", "Leave callback Scripts\n");

call.lua

--
-- CALL , a part of callback
--
-- Author: foxgoing@gmail.com / 8000hz.com

local maxtimes = argv[1];          --最大通话时常秒
local callee_number = argv[2];     --被叫号码
local customer_number = argv[3];   --主叫的平台账号

session:execute("sched_hangup", "+"..maxtimes.." allotted_timeout");
session:execute("set", "customer_number="..customer_number);

session:execute("bridge", "sofia/gateway/szcmcc/"..callee_number);

freeswitch.consoleLog("notice", "Leave call.lua Scripts\n");

小贴士:
originate命令执行时,如果收到了183或200就会立即执行 ‘&’ 后面的语句,换句话说就是只要来了媒体就执行后面。

但人们的需求不一嘛,有些人需要只有接通主叫后才能执行’&’后面的语句。那么如果你就可以设置:

 {ignore_early_media=true}

如果要实现主被叫同时呼叫,但你的运营商只返回180,但你还是想要主被叫同时呼叫。那么你可以这样设置:

 {return_ring_ready=true}