很有趣的一件事,每當許久沒去寫程式,往往在撰寫的過程中,就會出現一些奇怪的問題
這次遇到這個問題 The script tried to execute a method or access a property
在PHP使用session 及物件上遇到的,看了網路上一堆文章說
這是因為程式某些操作產生Incomplete Object(__PHP_Incomplete_Class),並且呼叫了此物件的函式。產生Incomplete Object的原因是序列化的資料轉回原始物件時,該物件的類別並未被定義
原以為物件放入session要先序列化,但印象中以前沒有做過呀~,後來瞭解後,其實問題很簡單
就是你從session取出時,你要操作這物件,但你並未先宣告這個物件過,意思就是~忘了include 這物件宣告
就是這麼容易,但這問題也花了不少時間去懷疑自己的邏輯….^^||
參考連結:http://emn178.pixnet.net/blog/post/87731583-%E8%A7%A3%E6%B1%BAthe-script-tried-to-execute-a-method-or-access-a-prope
很怪的問題又發生了,明明先前安裝系統時設定都很正常
但這次就是遇到了
Warning: session_start() [function.session-start]: Cannot send session cache limiter – headers already sent
去查了一下說要在使用session前要先session_start(),印象中系統裡使用session時都有先寫session_start
不管如何,有一個快速的解決方案,就是改php.ini就OK啦
找到session.auto_start 參數
預設應該為0 只要改成1 即可排除這問題
PHP有提供ini_set() 函式 可以在程式之中動態調整相關系統參數,有時一些虛擬平台不能讓你去設定參數時
或是你可以設定程式是否要動態啟用debug display時 就可以用這個方法去調整
不過要注意,並不是所有的參數設定都適用
目前只有 Changeable 欄位為 PHP_INI_USER 或 PHP_INI_ALL 才可以接受 ini_set() 設定。
http://tw.php.net/manual/en/ini.list.php
手上有個案子~是使用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/
一個簡單的PHP匯出功能,有使用者反應有問題,在測試平台上看不出問題點
但在正式的平台執行時就會出現以下訊息(在IE9上看來是正常的,但如果用IE6就會有問題):
看來apahce 版本及IE版本都有相關,在無法改變apahce下~只能叫使用者更新至最新的IE版本,不過花了點時間調整程式即可以相容於舊IE
在網路上找了一下,提供的解答都是說舊版IE在判斷時間時出了一些問題,照著上頭改似乎都是一樣的,忽然想到好像以前自己就有過排除這個問題,去找了一下先前的排除方式,看來~~看來~~太久沒碰就什麼都忘了,這個排除方式很簡單,還是記下來方便以後找尋時可以快點排除
目前如果您的匯出程式是要下GET的URL帶入多參數,在IE舊版本就可能會出現這個問題,可以將您的匯出程式改成用POST的方式傳入參數,讓你的URL不會出現?aa=bb&cc=dd這樣的參數傳入值,這樣舊版的IE就可以下載正常了!!
近期留言