最近遇到一個批量發(fā)送短信的需求,短信接口是第三方提供的。剛開始想到,獲取到手機(jī)號之后,循環(huán)調(diào)用接口發(fā)送不就可以了嗎?
成都創(chuàng)新互聯(lián)專注于企業(yè)成都營銷網(wǎng)站建設(shè)、網(wǎng)站重做改版、貴德網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5網(wǎng)站設(shè)計、商城開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為貴德等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
但很快發(fā)現(xiàn)問題:當(dāng)短信數(shù)量很大時,不僅耗時,而且成功率很低。
于是想到,用PHP和MySQL實現(xiàn)一個消息隊列,一條一條的發(fā)送短信。下面介紹具體的實現(xiàn)方法:
首先,建立一個數(shù)據(jù)表sms,包含以下字段:
id,
phone, //手機(jī)號
content //短信內(nèi)容
將需要發(fā)送的短信和手機(jī)號存入sms表中。
接下來,需要用PHP實現(xiàn)一個定時器,定時讀取一條記錄,并發(fā)送短信:
?php
$db = new Db();
$sms = new Sms();
while(true){
$item = $db-getFirstRecord(); //獲取數(shù)據(jù)表第一條記錄
if(!$item){
//如果隊列中沒有數(shù)據(jù),則結(jié)束定時器
break;
}
$res = $sms-send($item['phone'],$item['content']); //發(fā)送短信
if($res){
$db-deleteFristRecord(); //刪除發(fā)送成功的記錄
echo $item['phone'].'發(fā)送成功';
}else{
echo $item['phone'].'發(fā)送失敗,稍后繼續(xù)嘗試';
}
sleep(10); //每隔十秒循環(huán)一次
}
echo '發(fā)送完畢!';
?
將代碼保存為timer_sms.php,打開命令行,執(zhí)行定時器:
php timer_sms.php
好了,php定時器將會根據(jù)設(shè)定的時間間隔(這里設(shè)的是10秒),自動完成發(fā)送短信的任務(wù)。任務(wù)完成后將自動退出定時器,不再占用服務(wù)器資源。
根據(jù)我的測試,PHP定時器占用資源并不多,不會對服務(wù)器造成壓力。而且是異步訪問數(shù)據(jù)庫,也不會影響數(shù)據(jù)庫的運行。
這種方式的優(yōu)點是:
1、后臺運行,前臺無需等待
2、成功率高,失敗的記錄會自動重發(fā),直到成功
現(xiàn)在網(wǎng)站在建設(shè)網(wǎng)站時為了保證用戶信息的真實性,往往會選擇發(fā)短信給用戶手機(jī)發(fā)驗證碼信息,只有通過驗證的用戶才可以注冊,這樣保證了用戶的聯(lián)系信息資料的100%的準(zhǔn)確性?。
第一、實現(xiàn)php手機(jī)短信驗證功能的基本思路
1、要找到短信服務(wù)提供商,接入短信服務(wù)
2、在網(wǎng)站信息提交頁面請求發(fā)送信息
3、服務(wù)器向短信服務(wù)提供商通信,提交發(fā)送請求
4、短信服務(wù)提供商通過運營商將信息發(fā)送到用戶的手機(jī)中
二、手機(jī)號碼短信驗證前臺頁面效果實現(xiàn)
!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
html xmlns
head
title/title
script src="js/jquery-1.4a2.min.js" type="text/javascript"/script
script type="text/javascript"
/*-------------------------------------------*/
var InterValObj; //timer變量,控制時間
var count = 60; //間隔函數(shù),1秒執(zhí)行
var curCount;//當(dāng)前剩余秒數(shù)
var code = ""; //驗證碼
var codeLength = 6;//驗證碼長度
function sendMessage() {
curCount = count;
var dealType; //驗證方式
tel = $(’#tel’).val();
if(tel!=’’){
//驗證手機(jī)有效性
var myreg = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/;
if(!myreg.test($(’#tel’).val()))
{
alert(’請輸入有效的手機(jī)號碼!’);
return false;
}
tel = $(’#tel’).val();
//產(chǎn)生驗證碼
for (var i = 0; i codeLength; i++) {
code += parseInt(Math.random() * 9).toString();
}
//設(shè)置button效果,開始計時
$("#btnSendCode").attr("disabled", "true");
$("#btnSendCode").val("請在" + curCount + "秒內(nèi)輸入驗證碼");
InterValObj = window.setInterval(SetRemainTime, 1000); //啟動計時器,1秒執(zhí)行一次
//向后臺發(fā)送處理數(shù)據(jù)
$.ajax({
type: "POST", //用POST方式傳輸
dataType: "text", //數(shù)據(jù)格式:JSON
url: ’yanzhengma.php’, //目標(biāo)地址(根據(jù)實際地址)
data: "tel=" + tel + "code=" + code,
error: function (XMLHttpRequest, textStatus, errorThrown) { },
success: function (msg){ }
});
}else{
alert(’請?zhí)顚懯謾C(jī)號碼’);
}
}
//timer處理函數(shù)
function SetRemainTime() {
if (curCount == 0) {
window.clearInterval(InterValObj);//停止計時器
$("#btnSendCode").removeAttr("disabled");//啟用按鈕
$("#btnSendCode").val("重新發(fā)送驗證碼");
code = ""; //清除驗證碼。如果不清除,過時間后,輸入收到的驗證碼依然有效
}
else {
curCount--;
$("#btnSendCode").val("請在" + curCount + "秒內(nèi)輸入驗證碼");
}
}
/script
/head
body
input name="tel" id=tel type="text" /
input id="btnSendCode" type="button" value="發(fā)送驗證碼" onclick="sendMessage()" //p
/body
/html
第三、調(diào)用短信服務(wù)器短信接口
整理的頁面是yanzhengma.php(具體根據(jù)服務(wù)商提供信息)
?php //提交短信
$post_data = array();
$post_data[’userid’] =?短信服務(wù)商提供ID;
$post_data[’account’] = ’短信服務(wù)商提供用戶名’;
$post_data[’password’] = ’短信服務(wù)商提供密碼’;
// Session保存路徑
$sessSavePath = dirname(__FILE__)."/../data/sessions/";
if(is_writeable($sessSavePath) is_readable($sessSavePath)){
session_save_path($sessSavePath);
}
session_register(’mobliecode’);
$_SESSION[’mobilecode’] = $_POST["code"];
$content=’短信驗證碼:’.$_POST["code"].’【短信驗證】’;
$post_data[’content’] = mb_convert_encoding($content,’utf-8’, ’gb2312’); //短信內(nèi)容需要用urlencode編碼下
$post_data[’mobile’] = $_POST["tel"];
$post_data[’sendtime’] = ’’; //不定時發(fā)送,值為0,定時發(fā)送,輸入格式Y(jié)YYYMMDDHHmmss的日期值
$url=’’;
$o=’’;
foreach ($post_data as $k=$v)
{
$o.="$k=".$v.’’;
}
$post_data=substr($o,0,-1);
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
//curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //如果需要將結(jié)果直接返回到變量里,那加上這句。
$result = curl_exec($ch);
?
第四:提交表單信息時對短信驗證碼驗證
//手機(jī)驗證碼開始
session_start();
$svalitel = $_SESSION[’mobilecode’];
$vdcodetel = empty($vdcodetel) ? ’’ : strtolower(trim($vdcodetel));
if(strtolower($vdcodetel)!=$svalitel || $svalitel==’’)
{
ResetVdValue();
//echo "Pageviews=".$vdcodetel;
ShowMsg("手機(jī)驗證碼錯誤!", ’-1’);
exit();
}
WINDOWS編程常用API函數(shù)
1. API之網(wǎng)絡(luò)函數(shù)
WNetAddConnection 創(chuàng)建同一個網(wǎng)絡(luò)資源的永久性連接
WNetAddConnection2 創(chuàng)建同一個網(wǎng)絡(luò)資源的連接
WNetAddConnection3 創(chuàng)建同一個網(wǎng)絡(luò)資源的連接
WNetCancelConnection 結(jié)束一個網(wǎng)絡(luò)連接
WNetCancelConnection2 結(jié)束一個網(wǎng)絡(luò)連接
WNetCloseEnum 結(jié)束一次枚舉操作
WNetConnectionDialog 啟動一個標(biāo)準(zhǔn)對話框,以便建立同網(wǎng)絡(luò)資源的連接
WNetDisconnectDialog 啟動一個標(biāo)準(zhǔn)對話框,以便斷開同網(wǎng)絡(luò)資源的連接
WNetEnumResource 枚舉網(wǎng)絡(luò)資源
WNetGetConnection 獲取本地或已連接的一個資源的網(wǎng)絡(luò)名稱
WNetGetLastError 獲取網(wǎng)絡(luò)錯誤的擴(kuò)展錯誤信息
WNetGetUniversalName 獲取網(wǎng)絡(luò)中一個文件的遠(yuǎn)程名稱以及/或者UNC(統(tǒng)一命名規(guī)范)名稱
WNetGetUser 獲取一個網(wǎng)絡(luò)資源用以連接的名字
WNetOpenEnum 啟動對網(wǎng)絡(luò)資源進(jìn)行枚舉的過程
2. API之消息函數(shù)
BroadcastSystemMessage 將一條系統(tǒng)消息廣播給系統(tǒng)中所有的頂級窗口
GetMessagePos 取得消息隊列中上一條消息處理完畢時的鼠標(biāo)指針屏幕位置
GetMessageTime 取得消息隊列中上一條消息處理完畢時的時間
PostMessage 將一條消息投遞到指定窗口的消息隊列
PostThreadMessage 將一條消息投遞給應(yīng)用程序
RegisterWindowMessage 獲取分配給一個字串標(biāo)識符的消息編號
ReplyMessage 答復(fù)一個消息
SendMessage 調(diào)用一個窗口的窗口函數(shù),將一條消息發(fā)給那個窗口
SendMessageCallback 將一條消息發(fā)給窗口
SendMessageTimeout 向窗口發(fā)送一條消息
SendNotifyMessage 向窗口發(fā)送一條消息
3. API之文件處理函數(shù)
CloseHandle 關(guān)閉一個內(nèi)核對象。其中包括文件、文件映射、進(jìn)程、線程、安全和同步對象等
CompareFileTime 對比兩個文件的時間
CopyFile 復(fù)制文件
CreateDirectory 創(chuàng)建一個新目錄
CreateFile 打開和創(chuàng)建文件、管道、郵槽、通信服務(wù)、設(shè)備以及控制臺
CreateFileMapping 創(chuàng)建一個新的文件映射對象
DeleteFile 刪除指定文件
DeviceIoControl 對設(shè)備執(zhí)行指定的操作
DosDateTimeToFileTime 將DOS日期和時間值轉(zhuǎn)換成一個 win32 FILETIME 值
FileTimeToDosDateTime 將一個 win32 FILETIME 值轉(zhuǎn)換成DOS日期和時間值
FileTimeToLocalFileTime 將一個FILETIME結(jié)構(gòu)轉(zhuǎn)換成本地時間
FileTimeToSystemTime 根據(jù)一個FILETIME結(jié)構(gòu)的內(nèi)容,裝載一個SYSTEMTIME結(jié)構(gòu)
FindClose 關(guān)閉由FindFirstFile函數(shù)創(chuàng)建的一個搜索句柄
FindFirstFile 根據(jù)文件名查找文件
FindNextFile 根據(jù)調(diào)用FindFirstFile函數(shù)時指定的一個文件名查找下一個文件
FlushFileBuffers 針對指定的文件句柄,刷新內(nèi)部文件緩沖區(qū)
FlushViewOfFile 將寫入文件映射緩沖區(qū)的所有數(shù)據(jù)都刷新到磁盤
GetBinaryType 判斷文件是否可以執(zhí)行
GetCompressedFileSize 判斷一個壓縮文件在磁盤上實際占據(jù)的字節(jié)數(shù)
GetCurrentDirectory 在一個緩沖區(qū)中裝載當(dāng)前目錄
GetDiskFreeSpace 獲取與一個磁盤的組織有關(guān)的信息,以及了解剩余空間的容量
GetDiskFreeSpaceEx 獲取與一個磁盤的組織以及剩余空間容量有關(guān)的信息
GetDriveType 判斷一個磁盤驅(qū)動器的類型
GetExpandedName 取得一個壓縮文件的全名
GetFileAttributes 判斷指定文件的屬性
GetFileInformationByHandle 這個函數(shù)提供了獲取文件信息的一種機(jī)制
GetFileSize 判斷文件長度
GetFileTime 取得指定文件的時間信息
GetFileType 在給出文件句柄的前提下,判斷文件類型
GetFileVersionInfo 從支持版本標(biāo)記的一個模塊里獲取文件版本信息
GetFileVersionInfoSize 針對包含了版本資源的一個文件,判斷容納文件版本信息需要一個多大的緩沖區(qū)
GetFullPathName 獲取指定文件的完整路徑名
GetLogicalDrives 判斷系統(tǒng)中存在哪些邏輯驅(qū)動器字母
GetLogicalDriveStrings 獲取一個字串,其中包含了當(dāng)前所有邏輯驅(qū)動器的根驅(qū)動器路徑
GetOverlappedResult 判斷一個重疊操作當(dāng)前的狀態(tài)
GetPrivateProfileInt 為初始化文件(.ini文件)中指定的條目獲取一個整數(shù)值
GetPrivateProfileSection 獲取指定小節(jié)(在.ini文件中)所有項名和值的一個列表
GetPrivateProfileString 為初始化文件中指定的條目取得字串
GetProfileInt 取得win.ini初始化文件中指定條目的一個整數(shù)值
GetProfileSection 獲取指定小節(jié)(在win.ini文件中)所有項名和值的一個列表
GetProfileString 為win.ini初始化文件中指定的條目取得字串
GetShortPathName 獲取指定文件的短路徑名
GetSystemDirectory 取得Windows系統(tǒng)目錄(即System目錄)的完整路徑名
GetTempFileName 這個函數(shù)包含了一個臨時文件的名字,它可由應(yīng)用程序使用
GetTempPath 獲取為臨時文件指定的路徑
GetVolumeInformation 獲取與一個磁盤卷有關(guān)的信息
GetWindowsDirectory 獲取Windows目錄的完整路徑名
hread 參考lread
hwrite 參考lwrite函數(shù)
lclose 關(guān)閉指定的文件
lcreat 創(chuàng)建一個文件
llseek 設(shè)置文件中進(jìn)行讀寫的當(dāng)前位置
LockFile 鎖定文件的某一部分,使其不與其他應(yīng)用程序共享
LockFileEx 與LockFile相似,只是它提供了更多的功能
lopen 以二進(jìn)制模式打開指定的文件
lread 將文件中的數(shù)據(jù)讀入內(nèi)存緩沖區(qū)
lwrite 將數(shù)據(jù)從內(nèi)存緩沖區(qū)寫入一個文件
LZClose 關(guān)閉由LZOpenFile 或 LZInit函數(shù)打開的一個文件
LZCopy 復(fù)制一個文件
LZInit 這個函數(shù)用于初始化內(nèi)部緩沖區(qū)
LZOpenFile 該函數(shù)能執(zhí)行大量不同的文件處理,而且兼容于壓縮文件
LZRead 將數(shù)據(jù)從文件讀入內(nèi)存緩沖區(qū)
LZSeek 設(shè)置一個文件中進(jìn)行讀寫的當(dāng)前位置
MapViewOfFile 將一個文件映射對象映射到當(dāng)前應(yīng)用程序的地址空間
MoveFile 移動文件
OpenFile 這個函數(shù)能執(zhí)行大量不同的文件操作
OpenFileMapping 打開一個現(xiàn)成的文件映射對象
QueryDosDevice 在Windows NT中,DOS設(shè)備名會映射成NT系統(tǒng)設(shè)備名。該函數(shù)可判斷當(dāng)前的設(shè)備映射情況
ReadFile 從文件中讀出數(shù)據(jù)
ReadFileEx 與ReadFile相似,只是它只能用于異步讀操作,并包含了一個完整的回調(diào)
RegCloseKey 關(guān)閉系統(tǒng)注冊表中的一個項(或鍵)
RegConnectRegistry 訪問遠(yuǎn)程系統(tǒng)的部分注冊表
RegCreateKey 在指定的項下創(chuàng)建或打開一個項
RegCreateKeyEx 在指定項下創(chuàng)建新項的更復(fù)雜的方式。在Win32環(huán)境中建議使用這個函數(shù)
RegDeleteKey 刪除現(xiàn)有項下方一個指定的子項
RegDeleteValue 刪除指定項下方的一個值
RegEnumKey 枚舉指定項的子項。在Win32環(huán)境中應(yīng)使用RegEnumKeyEx
RegEnumKeyEx 枚舉指定項下方的子項
RegEnumValue 枚舉指定項的值
RegFlushKey 將對項和它的子項作出的改動實際寫入磁盤
RegGetKeySecurity 獲取與一個注冊表項有關(guān)的安全信息
RegLoadKey 從以前用RegSaveKey函數(shù)創(chuàng)建的一個文件里裝載注冊表信息
RegNotifyChangeKeyValue 注冊表項或它的任何一個子項發(fā)生變化時,用這個函數(shù)提供一種通知機(jī)制
RegOpenKey 打開一個現(xiàn)有的注冊表項
RegOpenKeyEx 打開一個現(xiàn)有的項。在win32下推薦使用這個函數(shù)
RegQueryInfoKey 獲取與一個項有關(guān)的信息
RegQueryValue 取得指定項或子項的默認(rèn)(未命名)值
RegQueryValueEx 獲取一個項的設(shè)置值
RegReplaceKey 用一個磁盤文件保存的信息替換注冊表信息;并創(chuàng)建一個備份,在其中包含當(dāng)前注冊表信息
RegRestoreKey 從一個磁盤文件恢復(fù)注冊表信息
RegSaveKey 將一個項以及它的所有子項都保存到一個磁盤文件
RegSetKeySecurity 設(shè)置指定項的安全特性
RegSetValue 設(shè)置指定項或子項的默認(rèn)值
RegSetValueEx 設(shè)置指定項的值
RegUnLoadKey 卸載指定的項以及它的所有子項
RemoveDirectory 刪除指定目錄
SearchPath 查找指定文件
SetCurrentDirectory 設(shè)置當(dāng)前目錄
SetEndOfFile 針對一個打開的文件,將當(dāng)前文件位置設(shè)為文件末尾
SetFileAttributes 設(shè)置文件屬性
SetFilePointer 在一個文件中設(shè)置當(dāng)前的讀寫位置
SetFileTime 設(shè)置文件的創(chuàng)建、訪問及上次修改時間
SetHandleCount 這個函數(shù)不必在win32下使用;即使使用,也不會有任何效果
SetVolumeLabel 設(shè)置一個磁盤的卷標(biāo)(Label)
SystemTimeToFileTime 根據(jù)一個FILETIME結(jié)構(gòu)的內(nèi)容,載入一個SYSTEMTIME結(jié)構(gòu)
UnlockFile 解除對一個文件的鎖定
UnlockFileEx 解除對一個文件的鎖定
UnmapViewOfFile 在當(dāng)前應(yīng)用程序的內(nèi)存地址空間解除對一個文件映射對象的映射
VerFindFile 用這個函數(shù)決定一個文件應(yīng)安裝到哪里
VerInstallFile 用這個函數(shù)安裝一個文件
VerLanguageName 這個函數(shù)能根據(jù)16位語言代碼獲取一種語言的名稱
VerQueryValue 這個函數(shù)用于從版本資源中獲取信息
WriteFile 將數(shù)據(jù)寫入一個文件
WriteFileEx 與WriteFile類似,只是它只能用于異步寫操作,并包括了一個完整的回調(diào)
WritePrivateProfileSection 為一個初始化文件(.ini)中指定的小節(jié)設(shè)置所有項名和值
WritePrivateProfileString 在初始化文件指定小節(jié)內(nèi)設(shè)置一個字串
WriteProfileSection 為Win.ini初始化文件中一個指定的小節(jié)設(shè)置所有項名和值
WriteProfileString 在Win.ini初始化文件指定小節(jié)內(nèi)設(shè)置一個字串
4. API之打印函數(shù)
AbortDoc 取消一份文檔的打印
AbortPrinter 刪除與一臺打印機(jī)關(guān)聯(lián)在一起的緩沖文件
AddForm 為打印機(jī)的表單列表添加一個新表單
AddJob 用于獲取一個有效的路徑名,以便用它為作業(yè)創(chuàng)建一個后臺打印文件。它也會為作業(yè)分配一個作業(yè)編號
AddMonitor 為系統(tǒng)添加一個打印機(jī)監(jiān)視器
AddPort 啟動“添加端口”對話框,允許用戶在系統(tǒng)可用端口列表中加入一個新端口
AddPrinter 在系統(tǒng)中添加一臺新打印機(jī)
AddPrinterConnection 連接指定的打印機(jī)
AddPrinterDriver 為指定的系統(tǒng)添加一個打印驅(qū)動程序
AddPrintProcessor 為指定的系統(tǒng)添加一個打印處理器
AddPrintProvidor 為系統(tǒng)添加一個打印供應(yīng)商
AdvancedDocumentProperties 啟動打印機(jī)文檔設(shè)置對話框
ClosePrinter 關(guān)閉一個打開的打印機(jī)對象
ConfigurePort 針對指定的端口,啟動一個端口配置對話框
ConnectToPrinterDlg 啟動連接打印機(jī)對話框,用它同訪問網(wǎng)絡(luò)的打印機(jī)連接
DeleteForm 從打印機(jī)可用表單列表中刪除一個表單
DeleteMonitor 刪除指定的打印監(jiān)視器
DeletePort 啟動“刪除端口”對話框,允許用戶從當(dāng)前系統(tǒng)刪除一個端口
DeletePrinter 將指定的打印機(jī)標(biāo)志為從系統(tǒng)中刪除
DeletePrinterConnection 刪除與指定打印機(jī)的連接
DeletePrinterDriver 從系統(tǒng)刪除一個打印機(jī)驅(qū)動程序
DeletePrintProcessor 從指定系統(tǒng)刪除一個打印處理器
DeletePrintProvidor 從系統(tǒng)中刪除一個打印供應(yīng)商
DeviceCapabilities 利用這個函數(shù)可獲得與一個設(shè)備的能力有關(guān)的信息
DocumentProperties 打印機(jī)配置控制函數(shù)
EndDocAPI 結(jié)束一個成功的打印作業(yè)
EndDocPrinter 在后臺打印程序的級別指定一個文檔的結(jié)束
EndPage 用這個函數(shù)完成一個頁面的打印,并準(zhǔn)備設(shè)備場景,以便打印下一個頁
EndPagePrinter 指定一個頁在打印作業(yè)中的結(jié)尾
EnumForms 枚舉一臺打印機(jī)可用的表單
EnumJobs 枚舉打印隊列中的作業(yè)
EnumMonitors 枚舉可用的打印監(jiān)視器
EnumPorts 枚舉一個系統(tǒng)可用的端口
EnumPrinterDrivers 枚舉指定系統(tǒng)中已安裝的打印機(jī)驅(qū)動程序
EnumPrinters 枚舉系統(tǒng)中安裝的打印機(jī)
EnumPrintProcessorDatatypes 枚舉由一個打印處理器支持的數(shù)據(jù)類型
EnumPrintProcessors 枚舉系統(tǒng)中可用的打印處理器
Escape 設(shè)備控制函數(shù)
FindClosePrinterChangeNotification 關(guān)閉用FindFirstPrinterChangeNotification函數(shù)獲取的一個打印機(jī)通告對象
FindFirstPrinterChangeNotification 創(chuàng)建一個新的改變通告對象,以便我們注意打印機(jī)狀態(tài)的各種變化
FindNextPrinterChangeNotification 用這個函數(shù)判斷觸發(fā)一次打印機(jī)改變通告信號的原因
FreePrinterNotifyInfo 釋放由FindNextPrinterChangeNotification函數(shù)分配的一個緩沖區(qū)
GetForm 取得與指定表單有關(guān)的信息
GetJob 獲取與指定作業(yè)有關(guān)的信息
GetPrinter 取得與指定打印機(jī)有關(guān)的信息
GetPrinterData 為打印機(jī)設(shè)置注冊表配置信息
GetPrinterDriver 針對指定的打印機(jī),獲取與打印機(jī)驅(qū)動程序有關(guān)的信息
GetPrinterDriverDirectory 判斷指定系統(tǒng)中包含了打印機(jī)驅(qū)動程序的目錄是什么
GetPrintProcessorDirectory 判斷指定系統(tǒng)中包含了打印機(jī)處理器驅(qū)動程序及文件的目錄
OpenPrinter 打開指定的打印機(jī),并獲取打印機(jī)的句柄
PrinterMessageBox 在擁有指定打印作業(yè)的系統(tǒng)上顯示一個打印機(jī)出錯消息框
PrinterProperties 啟動打印機(jī)屬性對話框,以便對打印機(jī)進(jìn)行配置
ReadPrinter 從打印機(jī)讀入數(shù)據(jù)
ResetDC 重設(shè)一個設(shè)備場景
ResetPrinter 改變指定打印機(jī)的默認(rèn)數(shù)據(jù)類型及文檔設(shè)置
ScheduleJob 提交一個要打印的作業(yè)
SetAbortProc 為Windows指定取消函數(shù)的地址
SetForm 為指定的表單設(shè)置信息
SetJob 對一個打印作業(yè)的狀態(tài)進(jìn)行控制
SetPrinter 對一臺打印機(jī)的狀態(tài)進(jìn)行控制
SetPrinterData 設(shè)置打印機(jī)的注冊表配置信息
StartDoc 開始一個打印作業(yè)
StartDocPrinter 在后臺打印的級別啟動一個新文檔
StartPage 打印一個新頁前要先調(diào)用這個函數(shù)
StartPagePrinter 在打印作業(yè)中指定一個新頁的開始
WritePrinter 將發(fā)送目錄中的數(shù)據(jù)寫入打印機(jī)
這個很簡單啊 注冊之后 看要哪個API 點擊申請數(shù)據(jù) 申請通過之后就可以得到APPkey了。。
我已經(jīng)申請成為移動SP。 移動給我以下資料: 企業(yè)代碼: 服務(wù)代碼: 短信網(wǎng)關(guān)IP地址: 登陸用戶名: 密碼: 下行端口: 上行端口: 協(xié)議:見附件 請問我怎么用PHP寫往手機(jī)發(fā)短信的代碼?
有p標(biāo)簽的數(shù)據(jù)那里使用正則匹配吧p標(biāo)簽替換掉,然后在拼接到輸出的字符串中。
分享文章:聚合數(shù)據(jù)短信php,聚合短信平臺
當(dāng)前鏈接:http://chinadenli.net/article36/dsicesg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、電子商務(wù)、做網(wǎng)站、定制網(wǎng)站、企業(yè)建站、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)