我正在製作一個php站點,並且我希望有一個腳本(當您單擊按鈕時)向我的mysql數據庫添加一些信息(我可以做到這一點一部分是我自己),並在5分鐘後執行腳本。也許這並不難,但很難谷歌這樣的事情,事先感謝。PHP:在第一個腳本運行5分鐘後執行腳本
回答
您是否正在尋找?
睡眠是一個非常糟糕的主意。客戶端瀏覽器將不得不等待5分鐘才能完成請求!
在我看來,不可能像你想的那樣做。
您應該創建另一個腳本來查詢數據庫並檢查是否有新數據(並且在成功獲取該作業時)。這個腳本應該每隔N分鐘由cron運行一次。
您可以在數據庫中實現一個隊列,在其中添加要執行的「命令」,並在執行此命令時存儲。然後有一個每分鐘運行一次的cron作業,並檢查所述隊列以查看是否應該執行某個命令。
恕我直言,最好的辦法是:在按鈕上單擊將作業保存在數據庫中運行的時間。寫一個小守護進程,每10/5/2秒獲取一個應該執行的新作業並執行它們。
編輯:順便說一句,使用cron檢查新作業執行,更好,但只有當你有一個小網站,你不需要做負載平衡的工作。
我會這樣做的方式是在兩個腳本之間運行一個cron作業。
- 第一個腳本在數據庫表中設置一個值。
- cron作業執行第二個腳本。每一分鐘或什麼不是。
- 第二個腳本檢查由腳本1設置的數據庫值以決定是否完全運行。
你可以在執行第二個腳本之前分叉進程並在子分叉中執行5分鐘的睡眠。我已經測試過這一點,看起來子進程仍然會在父進程結束後執行。類似於
//initial code
$pid = pcntl_fork(); //fork the process
if ($pid==0) // if in the child
{
exec("sleep 300; php second_process.php"); //sleep for 5 minutes and execute second script
return; // or exit
}
// rest of initial script...
「return;」是非常重要的,因爲腳本的其餘部分將會執行第二次(即在小孩中),除非它在那裏。
我會建議在Javascript中做計時器而不是PHP。
在用戶的$ _SESSION中放入一個時間戳,以指示它們何時開始事件,然後在5分鐘後讓Javascript回調瀏覽器。
PHP仍然需要知道開始時間(以防止用戶通過調整Javascript超時來攻擊遊戲),但它不需要實際執行任何倒計時或睡眠或類似的事情這本身。
如果你在UNIX系統中:
exec("echo 'php script.php' | at now +5 minutes");
這將安排php script.php
命令5分鐘後才能運行。
儘管如此,這對於很多用戶來說卻相當笨拙。 – ceejayoz
我正在製作基於瀏覽器的遊戲,如果有人想要建造需要*分鐘然後完成的建築物,我希望它。
考慮到這是您的實際目標,我建議您只保存原始建築物的時間戳。
我知道你用PHP標記了你的問題,但我不想包含在PHP中處理mysql查詢的所有開銷,特別是因爲我不知道你更喜歡執行查詢或者什麼框架,重新起訴,所以這裏的一些僞代碼來處理這個 「建設大廈」 任務:
build.php
building_type_id = sanitize(POST['id'])
user_id = current_user['id']
query('INSERT INTO buildings (user_id, building_type_id, created_at)
VALUES (' + user_id + ', ' + building_type_id + ', CURRENT_TIME)');
my_buildings.php
user_id = current_user['id']
completed_buildings = query('SELECT * FROM buildings b
LEFT OUTER JOIN building_types t ON b.building_type_id = t.id
WHERE DATE_ADD(b.created_at, INTERVAL t.construction_time SECOND) < NOW();')
under_construction = query('SELECT * FROM buildings b
LEFT OUTER JOIN building_types t ON b.building_type_id = t.id
WHERE DATE_ADD(b.created_at, INTERVAL t.construction_time SECOND) > NOW();')
希望這有助於!
這是一段很棒的代碼,正是我想要達到的!下一次我會在第一篇文章中添加我想實現的內容。謝謝! – Nyohosud
如果您喜歡,請隨時投票並/或點擊答案左側的複選標記,以便將來的其他人可以更輕鬆地找到答案! –
- 1. 5分鐘運行腳本一次(Linux)
- 2. 每分鐘運行一次PHP腳本
- 3. bash腳本運行5分鐘
- 4. 每分鐘運行腳本
- 5. 如何每5秒鐘運行一次shell腳本2分鐘?
- 6. 在後臺運行一個php腳本
- 7. 根據命令每5分鐘運行PHP腳本2小時
- 8. Shell腳本檢查一個腳本輸出,然後運行第二個腳本
- 9. 在後臺執行多個PHP腳本
- 10. Cronjob每分鐘運行多次同一個php腳本
- 11. 如何讓Python腳本在執行後運行powershell腳本
- 12. 運行一個PHP腳本,運行一個運行bash腳本的Python腳本,掛在bash上
- 13. 在shell腳本中執行php腳本?
- 14. 在後臺每分鐘運行一次powershell腳本
- 15. 每5分鐘從php腳本創建一個文本文件
- 16. PHP腳本運行下到Windows時鐘
- 17. 執行php腳本
- 18. 執行PHP腳本
- 19. 每20分鐘運行腳本
- 20. 每x分鐘運行phantomjs腳本
- 21. 腳本只執行第一個命令
- 22. IIS - 運行Codeigniter不執行PHP腳本
- 23. Shell參數運行/執行php腳本
- 24. 運行腳本並執行PHP輸出
- 25. 運行CLI php腳本執行位
- 26. 在一個javascript函數執行成功後運行腳本
- 27. 從另一個PHP腳本執行PHP腳本
- 28. 腳本運行另一個腳本
- 29. 每5分鐘運行一次PHP腳本並避免競爭條件
- 30. 在serializeFileUpload後執行腳本
這段時間流離失所行爲的目的是什麼?添加哪些信息需要這種位移? – Gumbo
我正在製作基於瀏覽器的遊戲,如果有人想要建造需要*分鐘然後完成的建築物,我希望這樣做。 – Nyohosud
該評論對我們瞭解您要實現的目標以及如何幫助您有所幫助。我建議很多已經給出的答案都試圖實現完全不同的東西。 – Spudley