不確定如何正確設置 cronjob 以執行 php 函式
我不確定我應該如何設置一個 cronjob 來為我的網站執行一個 php 函式,並通過使用 URL 來實現。
我不想要任何輸出等,我只想讓 cronjob 執行 php 函式購買訪問 URL。或者獲取輸出不會影響我的伺服器性能?
那麼,下面的程式碼是執行我的 cronjob 的好方法嗎?為了執行我的php函式。
例如,每天早上 5 點執行它。
* 5 * * * wget http://www.mysite.com/set/cleancreon.php?id=9876
並在 cleancreon.php 作為 id 檢查:
if (isset($_GET['id'])) { $id = $_GET['id']; if (is_numeric($id)) { $id = (int)$id; if ($id == 9876) { runfunction(); } else { die(); } } else { die(); } } else { die(); }
這行得通嗎?
提前致謝
你的配置看起來不錯。不過,我擔心此頁面的安全性。
如果你把它留在公共場所,你可能很難阻止人們執行它。由於 wget 沒有使用 cookie 或 HTTP 安全性,因此您不能使用它登錄,這意味著您可能沒有得到很好的保護。
我至少會開始檢查請求 IP,但即使這樣也很蹩腳,因為它是欺騙性的。
可以保存您的 cookie 並讓 wget 使用它們。如果您想這樣做,請閱讀
man wget
. Chrome 的此擴展程序也可能對您有用:https ://chrome.google.com/webstore/detail/cookietxt-export/lopabhfecdfhgogdbojmaicoicjekelh?hl=en 。您也可以使用舊式 HTTP 安全性來處理這個問題。手冊頁和 Apache 網站將幫助您輕鬆完成我想像的問題。
通常更好的解決方案是直接執行腳本,這樣
* 5 * * * php /path/to/cleancreon.php 9876
會更好一些,因為(如果您將其移動到私人文件夾)您根本不需要擔心公眾訪問它。要完成這項工作,您還需要更改讀取參數的方式(不要忘記清理\驗證輸入),如下所示:
$id=isset($argv[1])?$argv[1]:(isset($_GET['id']?$_GET['id']:null);
無論您採用哪種方式,我都建議您重新考慮記錄此操作。如果您不記錄結果,則無法知道它是否有效,除非 php 程式碼以某種方式記錄該狀態(似乎沒有,但也許 runfunction() 正在做一些我們看不到的事情)。
最後一點,您發布的程式碼(以及我建議的修復)可以簡化為:
if((isset($argv[1])?$argv[1]:(isset($_GET['id'])?$_GET['id']:null))!=9876) die(); runfunction();
關於你的 IDK,但我討厭閱讀所有額外的程式碼。