手上有個案子~是使用PHP的fsockopen去呼叫別人的service,但很怪的是測試程式很快可以完成
但真正加到作業程式去跑時,總是卡住而出現PHP執行過久,顯示Time Out訊息.
如用ini_set(‘max_execution_time’,’0′); 不限執行時間,但就會一直停在那裡
去查了一下,發現網路上也有人有遇到等待過久的問題
有人提及要在請求上結尾加上Connection: close能排除這問題
但程式也有加上呀~但很怪的事發生了 Connection: close後面的\r\n似乎別人都是加二個
但程式之中只加了一個,就試著再多加一組,神奇的事發生了~程式過了
不再卡卡了,這怪問題總算有解~@@
為啥需要\r\n呢?
fgets會獲取文件描述符$fp的當前的n個bytes,如果還沒有到n個bytes遇到換行符號了,則只返回換行符及換行符之前的內容。
(記下來留記念一下~^^||)
參考連結:
- http://yubosun.akcms.com/tech/php-fsockopen-slow.htm
- http://www.phpman.com.cn/archives/208
- http://www.vicenteforever.com/2012/05/php-fsockopen/
今天花了半天時間在找一個很詭異的問題
就是客戶反應程式安裝在他們的weblogic上之後,就無法送信了
而他們的mail server是不用認證的
前去瞭解,並且開了debug mode 看了一下~發現系統似乎一直卡在這裡
DEBUG: setDebug: JavaMail version 1.4.1
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth false
但自己另外寫一個簡單的寄信程式,就都可以成功到下一個動作
DEBUG SMTP: trying to connect to host “aaa.xxxxx.com.tw”, port 25, isSSL false
最後發現問題在於原先使用的元件取得屬性物件要放入javamail所需要的資料是採用以下方式
Properties properties = System.getProperties();
但如果重新new 一個來使用就能正常運作
Properties properties = System.getProperties();
這個元件好幾年都沒事發生使用在weblogic上就出現怪問題
當然排除後是不是要繼續追查原因呢?…算了~寫下來留作紀念好了
如有網友知道衝突的原因,再麻煩告知一下~感恩喔!
最近在和其它系統介接時,對方提出用HTTP協定POST的方式傳遞XML
以往,在傳遞時都是採用parameter的方式傳遞資料,但這次是要直接使用request content body
呵~會JAVA這麼多年了,第一次採用,原本還想說可行嗎?去查了一下真的可以,所以特別寫下來
以下的程式碼都是採用Apache HttpClient 的方式進行
呼叫端
1. 採用Stream的方式,進行傳遞
File input = new File(strXMLFilename);
PostMethod post = new PostMethod(“http://server/api”);
post.setRequestEntity(new InputStreamRequestEntity(new FileInputStream(input), input.length()));
post.setRequestHeader(“Content-type”, “text/xml; charset=UTF-8”);
2.也可以直接用String的方式進行傳遞data 字串
HttpClient httpclient = new HttpClient();
PostMethod post = new PostMethod(“http://server/api”);
RequestEntity entity = new StringRequestEntity(data, “text/xml”, “UTF-8”);
post.setRequestEntity(entity);
httpclient.executeMethod(post);
至於Server接收端要如何接收呢? 此時就不能採用先前在用的request.getParameter了,我們要改用串流方式
StringBuilder stringBuilder = new StringBuilder();
BufferedReader bufferedReader = null;
try {
InputStream inputStream = request.getInputStream();
if (inputStream != null) {
bufferedReader = new BufferedReader(new InputStreamReader(
inputStream));
char[] charBuffer = new char[128];
int bytesRead = -1;
while ((bytesRead = bufferedReader.read(charBuffer)) > 0) {
stringBuilder.append(charBuffer, 0, bytesRead);
}
} else {
stringBuilder.append(“”);
}
} catch (IOException ex) {
throw ex;
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (IOException ex) {
throw ex;
}
}
}
String body = stringBuilder.toString();
這個body 變數就是我們要的xml文件啦!!
資料來源:
如何下SQL指令從另一個TABLE取資料更新要更新的TABLE呢?
以下介紹三種指令都可以達到:
- 標準的ANSI-SQL 用INNER JOIN的作法
UPDATE target_table INNER JOIN source_table SET title=source_table.title WHERE target_table. id=source_table.id;
- 採用舊版的JOIN 方式(這是不正統的~但小弟蠻常用的)
UPDATE target_table, source_table SET title=source_table.title WHERE target_table. id=source_table.id;
- 使用sub query 的方式,也是可以做到哦!
UPDATE target_tableSET title = ( SELECT title FROM source_table WHERE target_table. id=source_table.id );
雖然很簡單,不過還是寫出來分享給大家~^^
一個簡單的PHP匯出功能,有使用者反應有問題,在測試平台上看不出問題點
但在正式的平台執行時就會出現以下訊息(在IE9上看來是正常的,但如果用IE6就會有問題):
看來apahce 版本及IE版本都有相關,在無法改變apahce下~只能叫使用者更新至最新的IE版本,不過花了點時間調整程式即可以相容於舊IE
在網路上找了一下,提供的解答都是說舊版IE在判斷時間時出了一些問題,照著上頭改似乎都是一樣的,忽然想到好像以前自己就有過排除這個問題,去找了一下先前的排除方式,看來~~看來~~太久沒碰就什麼都忘了,這個排除方式很簡單,還是記下來方便以後找尋時可以快點排除
目前如果您的匯出程式是要下GET的URL帶入多參數,在IE舊版本就可能會出現這個問題,可以將您的匯出程式改成用POST的方式傳入參數,讓你的URL不會出現?aa=bb&cc=dd這樣的參數傳入值,這樣舊版的IE就可以下載正常了!!
近期留言