Archive

‘程式開發’ 分類過的Archive

PHP使用fsockopen接收回傳網頁等待過久問題排除

2012年5月14日 尚無評論

手上有個案子~是使用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/
Categories: PHP, 程式開發 Tags: ,

JavaMail使用在weblogic上的注意事項

2012年4月20日 尚無評論

今天花了半天時間在找一個很詭異的問題
就是客戶反應程式安裝在他們的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上就出現怪問題
當然排除後是不是要繼續追查原因呢?…算了~寫下來留作紀念好了
如有網友知道衝突的原因,再麻煩告知一下~感恩喔!

JAVA如何用POST傳遞XML及接收?

2011年6月17日 尚無評論

最近在和其它系統介接時,對方提出用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文件啦!!

資料來源:

Categories: JAVA, 程式開發 Tags: ,

如何於MYSQL下SQL指令資料從另一個TABLE更新

2011年5月4日 尚無評論

如何下SQL指令從另一個TABLE取資料更新要更新的TABLE呢?
以下介紹三種指令都可以達到:

  1. 標準的ANSI-SQL 用INNER JOIN的作法
    UPDATE target_table INNER JOIN source_table SET title=source_table.title WHERE target_table. id=source_table.id;
  2. 採用舊版的JOIN 方式(這是不正統的~但小弟蠻常用的)
    UPDATE target_table, source_table SET title=source_table.title  WHERE target_table. id=source_table.id;
  3. 使用sub query 的方式,也是可以做到哦!
    UPDATE target_tableSET title = (  SELECT title  FROM source_table WHERE target_table. id=source_table.id );

雖然很簡單,不過還是寫出來分享給大家~^^

Categories: Database, 程式開發 Tags: ,

PHP 無法下載檔案

2011年3月8日 尚無評論

一個簡單的PHP匯出功能,有使用者反應有問題,在測試平台上看不出問題點

但在正式的平台執行時就會出現以下訊息(在IE9上看來是正常的,但如果用IE6就會有問題):

看來apahce 版本及IE版本都有相關,在無法改變apahce下~只能叫使用者更新至最新的IE版本,不過花了點時間調整程式即可以相容於舊IE

在網路上找了一下,提供的解答都是說舊版IE在判斷時間時出了一些問題,照著上頭改似乎都是一樣的,忽然想到好像以前自己就有過排除這個問題,去找了一下先前的排除方式,看來~~看來~~太久沒碰就什麼都忘了,這個排除方式很簡單,還是記下來方便以後找尋時可以快點排除

目前如果您的匯出程式是要下GET的URL帶入多參數,在IE舊版本就可能會出現這個問題,可以將您的匯出程式改成用POST的方式傳入參數,讓你的URL不會出現?aa=bb&cc=dd這樣的參數傳入值,這樣舊版的IE就可以下載正常了!!

Categories: PHP, 程式開發 Tags:
分頁: 上一頁 1 2 3 4 5 下一頁