2009年6月29日 星期一

fsockopen穿越proxy-以台灣簡訊為例

fsocjopen 可以跟伺服器主機連線,只要知道IP、port 就好,但容易遇到的問題是,萬一讀取網頁時是靠proxy來達成的時候,那該怎麼做呢?

其實,一樣可以用fsockopen,但我們連線到proxy,在直接下指令給proxy即可
下面範例是在作專題時,使用台灣簡訊來發送客製化簡訊,欲到的proxy是中原大學的proxy.cycu.edu.tw port:3128

<?
$username = "xx"; // 帳號
$password = "xx"; // 密碼
$type = "now"; // 發送型態
$mobile = "0988xxxxxx"; // 電話
$message = "簡訊測試喔"; // 簡訊內容
$encoding = "big5"; // 簡訊內容編碼
$popup = ""; // 使用 POPUP 顯示
$mo = ""; // 使用雙向簡訊
$vldtime = "86400"; // 簡訊有效期限
$dlvtime = ""; // 預約時間
$MSGData = "";
$msg =
"username=".$username."&password=".$password."&type=".$type."&encoding=".$encoding."&popup=".$popup."&m
o=".$mo."&mobile=".$mobile."&message=".urlencode($message)."&vldtime=".$vldtime."&dlvtime=".$dlvtime;


$num = strlen($msg);
// 打開 API 閘道
$fp = fsockopen ("proxy.cycu.edu.tw", 3128);
// print_r($fp);
if ($fp) {
$MSGData = $MSGData."POST http://211.78.23.230/send_sms.php HTTP/1.1\r\n";
$MSGData = $MSGData."Host: api.twsms.com\r\n";
$MSGData = $MSGData."Content-Length: ".$num."\r\n";
$MSGData = $MSGData."Content-Type: application/x-www-form-urlencoded\r\n";
$MSGData = $MSGData."Connection: Close\r\n\r\n";
$MSGData = $MSGData.$msg."\r\n";
fputs ($fp, $MSGData);

// 取出回傳值
while (!feof($fp)) $Tmp[]=fgets ($fp,128);

// 關閉閘道
fclose ($fp);

// 顯示回傳值
$Respone = split(":",$Tmp[9]);
// print_r($Tmp);
$Res["Number"] = $Respone[0]; // 傳回碼
$Res["OrderID"] = $Respone[1]; // 如果傳回碼是 00 成功, 才會有 OrderID 產生
// echo '<BR>$Res["Number"] ='.$Res["Number"];
// echo '<BR>$Res["OrderID"] = '.$Res["OrderID"];
}
?>



上面程式碼其中的211.78.23.230 是台灣簡訊的server,要注意的是
這邊要放 http://211.... 也就是絕對路徑!!

此範例由台灣簡訊API提供的範例程式作修改。

2009年6月19日 星期五

PHP Excel PHPPowerPoint

兩個PHP class
PHPExcelPHPPowerPoint
分別可以很簡單地透過 PHP 讀取及寫入 Excel 2007 及 PowerPoint 2007 的檔案

用 PHP 讀寫 Excel 檔案
裡頭有讀取Excel的範例

2009年6月15日 星期一

http://msdn.microsoft.com/en-us/library/bb202077.aspx

http://msdn.microsoft.com/zh-tw/library/bb278115.aspx

http://msdn.microsoft.com/en-us/library/bb202066.aspx

http://msdn.microsoft.com/en-us/library/bb202041.aspx

http://msdn.microsoft.com/en-us/library/bb202016.aspx

2009年6月10日 星期三

在IE與FF的一些設計限制

PRB: 錯誤設定 table.innerHTML 在 Internet Explorer 中
table 的限制,在不同瀏覽器中的問題較大,需要另外處理~

IE中Table、 thead、tbody的innerHTML屬性是唯讀的!!
若用
document.getElementById("tablename").innerHTML = "XXXXX" ;
IE就會跳出「執行階段錯誤」.... ~~

另外要注意的是 table與 tr標籤元素,不能用innerHTML方式賦值,但.. td標籤是可以的喔!

在IE與FF的一些設計限制(設定css屬性、註冊事件、checkbox)

在FF與其他瀏覽器(不含IE)

1.若要設定元素的class屬性,可以用 setAttribute方法來設定,如下
var inputElmt = document.createElement('input');
inputElmt.setAttribute('class', 'column');

但IE不吃這套,而吃 className 屬性名稱,如下
inputElmt.setAttribute('className', 'column');

所以 ~完整解決方法
var inputElmt = document.createElement('input');
inputElmt.setAttribute('className', 'column'); 
inputElmt.setAttribute('class', 'column');

寫上兩個~不需要另外辨別瀏覽器!


2.若要為其加入事件
if(document.all) //for IE
{
inputElmt.onclick = function(){ pantosetedArea(this.value) ; };
}
else inputElmt.setAttribute('onClick', "pantosetedArea(this.value)");

其中pantosetedArea(參數)是自訂函式

3.另外,若要產生預設勾選的checkbox

function createInputcheck(elmtName,elmtValue) {

elmtName = elmtName ? elmtName : '';
elmtValue = elmtValue ? elmtValue : 'yes';
var ischecked = (elmtValue=='0')? "false" : "true" ;

var inputElmt = document.createElement('input');
inputElmt.setAttribute('type', 'checkbox');
inputElmt.setAttribute('name', elmtName);
inputElmt.setAttribute('value', elmtValue);
if(elmtValue=="yes") inputElmt.setAttribute('checked', ischecked);
inputElmt.setAttribute('onClick', "checkSMS(this)")
inputElmt.setAttribute('class', 'column');
return inputElmt;
}
var sendSMSInput = createInputcheck('sSMS');
var contentTdM = document.createElement('td');
contentTdM.appendChild(sendSMSInput);

var contentTr = document.createElement('tr');
contentTr.appendChild( contentTdM );

sendSMSInput.setAttribute('checked', true);

在FF中,函式中的此行 if(elmtValue=="yes") inputElmt.setAttribute('checked', ischecked);會馬上成立,但在IE中,要為checkbox 賦值,必須等到 appendchild後才可以操作checkbox 賦值

2009年6月6日 星期六

javascript 陷阱

當form裡頭有 sunmit按鈕時 如下


從外部函式觸發送出~ document.gegister.submit()

會發生 document.form.submit() is not a function 的錯誤~
解決方法就是把form裡頭的 submit弄掉就行了