手上有個案子~是使用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上就出現怪問題
當然排除後是不是要繼續追查原因呢?…算了~寫下來留作紀念好了
如有網友知道衝突的原因,再麻煩告知一下~感恩喔!
第一次寫android的相關文章,就是要來寫如何取得android版本…=.=||
在AndroidManifest.xml文件中定義的android:versionCode和android:versionName
在我們上傳至Google Play(原market) 時,如要更版,則應要調整這兩個數字才有其作用
,在 AndroidManifest.xml 中的 android:versionCode 必須大於前一版本,否則會顯示更新程式失敗的警告。
還有在google play(market)上顯示的android:versionName,所以建議須一併修改android:versionName。
所以,在APP裡如也想顯示目前版本為何該怎麼做呢?
蠻容易的,只要參考以下程式碼即可取得
try {
PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
int myVerCode = packageInfo.versionCode;
String myVerName = packageInfo.versionName;
} catch (NameNotFoundException e) {
e.printStackTrace();
}
呵~這個算是書上沒教的事…
最近幫朋友建立一個討論區
採用了discuzX2 ,功能很強大
不過朋友提出他在討論區裡建立投票但在未登錄的狀況之下無法看投票的結果
要我幫個忙~
看了一下幫他排除了,順便記下來看有需要的人也可以調整一下
請到 template/default/forum/ 找viewthread_poll.htm
然後找到下面的程式片斷:
<!--{if !$visiblepoll}-->
<tr>
<!--{if $_G['group']['allowvote']}-->
<td> </td>
<!--{/if}-->
<td>
<div class="pbg">
<div class="pbr" style="width: $option[width]; background-color:#$option[color]"></div>
</div>
</td>
<td>$option[percent]% <em style="color:#$option[color]">($option[votes])</em></td>
</tr>
<!--{/if}-->
然後拿掉 最外層的 <!–{if !$visiblepoll}–> 及 <!–{/if}–> 即可
看來並不會造成其它影響,但如果有~就認了…@@
原本想反饋回去他的官網,不過看來有點麻煩~要填很多資料~~所以還是算了
最近在和其它系統介接時,對方提出用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文件啦!!
資料來源:
近期留言