目前我有個抽獎程式
使用者希望 他設定抽獎時間(type:datetime)之後
只要到那個時間點
就自動抽獎
主機目前不能使用排程功能(不給用)
所以要自己寫一隻
這個問題我爬了不少文章
我有看到ignore_user_abort()這個方法
我的想法是
開啟ignore_user_abort()後
裡面的迴圈去判斷目前時間是否跟資料庫中的開獎時間一樣
一樣就執行開獎
每分鐘執行一次
直到開完獎
這隻程式並不會被外部連到
想問一下這樣的寫法 各位大大 這會不會有什麼風險
像是耗費太多內存 或是會讓主機變慢甚至當機
若會我應該怎麼調整呢?
只要你先做好一個機制。
不會有重覆運行的可能性就比較沒問題。
你可以加個運行時間來判斷。
不過你要知道這樣子做其實還是有風險的。
雖然他也算是一種變相使用crontab。
這我早期有用過類似的,且我是寫文件檔非使用資料庫。
我想應先了解ignore_user_abort()函數的作業模式。參考如下網址(感覺好像是長駐在WEB Server的一支程式)。如果同述說明,就很難建議樓主這樣做,畢竟它是一個無窮迴圈的慨念(除了機制可以關掉它)。
排程性的作業還是交給crontab,一行就搞定。
@WQ 可能沒注意到樓主貼的文章。
一開始就有說沒辦法用crontab了。
所以只能找這個下下策。
用 ignore_user_abort 其實的確有風險的。不得已的情況下才使用。
如果有對外開放連線(虛擬主機),一定要是該主機才能設嗎?
可不可以設在B主機,然後去呼叫A主機呢?
以上給樓主去TRY....
以樓主的使用情境,如果使用到ignore_user_abort然後又用url來觸發(就是說這支程式在web server跑),那很簡單就可以做DOS攻擊...
這我早期有用過類似的,且我是寫文件檔非使用資料庫。
想請問寫成文件會比較不消耗內存嗎?
在不改變時間間隔執行的情況下
用 ignore_user_abort 其實的確有風險的。不得已的情況下才使用。
是的 真的是蠻不得已的
不過我也有想到下面那個方法
如果有對外開放連線(虛擬主機),一定要是該主機才能設嗎?
可不可以設在B主機,然後去呼叫A主機呢?
我昨天睡覺的時候也有想到這個方法
感覺實際上很可行
我可能會採用這個做法
以樓主的使用情境,如果使用到ignore_user_abort然後又用url來觸發(就是說這支程式在web server跑),那很簡單就可以做DOS攻擊...
可是只有我自己知道這程式的網址 而且我沒有把他的路徑寫在任何程式中(這樣應該也只有我能執行它)
這樣也會被DOS嗎?
感謝三位大大的回答
其實我在一開始就有說到。不要去想會不會被其它任何東西執行到,要怎麼防止....等等這些都不需要去想。
只要往確保只會同段時間內只會有一支程序運行就好。
只要你的先決條件有做到,自然就不需要去擔心有沒有人會去跑到的問題了。反正跑到也不會運行。
如果有對外開放連線(虛擬主機),一定要是該主機才能設嗎?
可不可以設在B主機,然後去呼叫A主機呢?
我昨天睡覺的時候也有想到這個方法
感覺實際上很可行
我可能會採用這個做法
其實我都是這樣做的,不過我都在域內,所以沒有DOS的考量.
我以前的做法是用公司自已的主機跑排程。用curl或wget的方式跑。
如果是windows srever的話就是計劃任務去跑curl
現在我用WQ大提議的做法去做
可是我的程式(a.php)有時會回報Can't connect to MySQL server on 'XXX.com.tw'的錯誤
問系統人員
他們說我另外一隻程式(b.php)被擋住了
可是奇怪 我明明就沒有開啟b.php 他卻被擋住
而且最大的問題 是時好時壞 有時可以連 有時不能連
不知道哪裡出了問題
※a.php 放在 A主機 b.php 放在B主機
※要用A主機的a.php去撈B主機中資料庫的資料
為何還要用a主機的一支php去叫啊@@"
不直接curl去呼叫遠端的php不就行了。
還是你以為我說的是php的curl??
為何還要用a主機的一支php去叫啊@@"
不直接curl去呼叫遠端的php不就行了。
還是你以為我說的是php的curl??
大大歹勢 我是先嘗試WQ大的做法
我還沒嘗試您的做法
不過大大您的意思是
用可以操作corntab的主機A
運用curl或wget
去觸發主機B上面的程式
是這個意思嗎@@?
還是我又誤會大大您的意思
用可以操作corntab的主機A
運用curl或wget
去觸發主機B上面的程式
是這樣沒錯。
在a主機的crontab內下類似如下的命令。
* * * * * curl http://URL/cron.php
這樣就可借由a主機去觸發b主機的程式了。
我猜你用的是一般的虛擬主機,建議你直接升等vps才會有比較高的主控權,不然你用ignore_user_abort 長行程的佔用資源,有在做管控的一定會砍掉。
用比較正統的方式去處理會比較好,才不會走歪路。