手上有個案子~是使用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/
最近幫朋友建立一個討論區
採用了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}–> 即可
看來並不會造成其它影響,但如果有~就認了…@@
原本想反饋回去他的官網,不過看來有點麻煩~要填很多資料~~所以還是算了
一個簡單的PHP匯出功能,有使用者反應有問題,在測試平台上看不出問題點
但在正式的平台執行時就會出現以下訊息(在IE9上看來是正常的,但如果用IE6就會有問題):
看來apahce 版本及IE版本都有相關,在無法改變apahce下~只能叫使用者更新至最新的IE版本,不過花了點時間調整程式即可以相容於舊IE
在網路上找了一下,提供的解答都是說舊版IE在判斷時間時出了一些問題,照著上頭改似乎都是一樣的,忽然想到好像以前自己就有過排除這個問題,去找了一下先前的排除方式,看來~~看來~~太久沒碰就什麼都忘了,這個排除方式很簡單,還是記下來方便以後找尋時可以快點排除
目前如果您的匯出程式是要下GET的URL帶入多參數,在IE舊版本就可能會出現這個問題,可以將您的匯出程式改成用POST的方式傳入參數,讓你的URL不會出現?aa=bb&cc=dd這樣的參數傳入值,這樣舊版的IE就可以下載正常了!!
在最近升級PHP至5.3後,發現都會有一個警告
Warning: Directive register_globals is deprecated in PHP 5.3 and greater in Unknown on line 0
去查了一下才知,原來PHP 中最具爭議的變化就是從 PHP 4.2.0 版開始配置檔中 register_globals 的預設值從 on 改為 off 了,而在5.3版本後就會顯示警告,但還是能開啟使用,但在PHP 6 之後就會全面停用。
哈~因為有register_globals,所以小弟覺得各家程式語言之中,PHP最強大,因為程式隨便寫都能執行~^^||
也可以設定成不用接參數,到了下一頁自動會轉成變數,這對開發者來說是省了不少功夫,不過也是因為如此,所以程式就不夠嚴謹,而且還會有安全性的問題,所以還是乖乖使用比較正統的方式寫CODE 吧 ~><~
註:如果想知道為何會不安全,請看以下連結說明:
除了 register_globals之外,當然也還有幾個參數也準備廢除,如下:
register_long_arrays
magic_quotes_gpc
magic_quotes_gpc這參數也頂棒的~可以不用去管是不是要加反斜線~唉~這也是安全性的考量要拿掉嗎? 怪的~去查了一下,拿掉主要因素不一樣啦~~是因為會影響程式造成可移移植性低、效能問題及容易造成困惑,詳細請看以下的文章:
不過這些參數,舊程式蠻都有介由他們進行自動轉換,沒了程式不就要大改了..呵~~好在還有偷吃步的方式,在 register_globals=Off的情況下,還是可以用以下程式碼達到同等效果。
<?php
if (!ini_get('register_globals'))
{
extract($_POST);
extract($_GET);
extract($_SERVER);
extract($_FILES);
extract($_ENV);
extract($_COOKIE);
if ( isset($_SESSION) )
{
extract($_SESSION);
}
}
?>
這樣只要加到會include的共用頁這樣就升級程式支援該參數被關掉了~^^
而magic_quotes_gpc被關掉也有解法,有興趣的人可以看剛剛上面那個連結,只是沒這個好改了!!
最近在PHP4,PHP5上發現有些程式不相容的問題,在PHP4程式可以運行的程式,到了PHP5環境反而出現了
Cannot modify header information – headers already send by…..的錯誤訊息
以前遇到這種問題,就是在使用Header之前已經有output到瀏覽器,在找問題時,一般是include file或在<?PHP ?>前後有空白字元
但PHP4可以執行正常,怎麼到了PHP5會出問題呢?
去追查了一下,發現這似乎是UTF8檔案格式的問題,現行UTF-8格式的檔案,在檔頭會有一個BOM(Binary Order Mark)的字元,印象中在以前的經驗上,往往在處理UTF-8格式的XML,有時也會被這個BOM弄煩了
看來這次也是一樣,因為目前PHP似乎在針對UTF-8的php程式碼,沒有把這BOM碼處理的很好,導致如果有使用Header() 或是include file 時就會發生一些問題
小弟在此整理出一些解法:
1.如果你可以動到php的參數設定檔,那就簡單多了,請在php.ini之中調整output_buffering參數,這參數預設是沒有啟用的,要將此參數打開,就是把 分號(;)拿掉即可,如下:
output_buffering = 4096
這個參數是開了個buffer給output時用的,看php.ini上的註解提到這個是要讓程式允許可以在傳送header及cookies時可暫存的buffer,當使用時就不會直接傳到Client啦;不過這會有一些些影響整個PHP的執行效能,但影響不大啦,這算是最快可以排除的方式,所以列在第一點給大家參考!!
2.如果你有使用UltraEdit(至少是版本14以上才有這功能),可以於存檔時選擇檔案格式UTF-8並且無BOM版本的檔案,這樣就可以避掉BOM會帶來的問題了 (沒有BOM也不會造成UTF-8檔案格式的判斷錯誤)
或是可以下載NotePad++,這套 free的文字編輯器,可到此連結下載http://notepad-plus.sourceforge.net/tw/site.htm 台灣人寫的哦~要愛用國貨外!!
在開啟檔案時,上方選單編碼選項中的「轉換至UTF-8碼(檔首無BOM碼)即可(原文章相關錯誤已修正,感謝那位叫白目捷的友人提供指證),如下圖:
不過目前要一個一個檔案去做,小弟找了一下,似乎沒有找到可以批次去除BOM的,所以暫時加減用囉~!! 如果有大大知道有程式可以做到,請再告知小弟! 感恩喔!!
上述就是小弟整理的解法,不過要注意在不同的PHP版本上執行時,還要注意例如session_start()這個函式一定要在最前面執行,不然也有可能會於PHP5上顯示錯誤訊息
參考資料:
http://bbs.ecstart.com/thread-30347-1-4.html
近期留言