Apache-2.2

不確定如何正確設置 cronjob 以執行 php 函式

  • September 27, 2013

我不確定我應該如何設置一個 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,但我討厭閱讀所有額外的程式碼。

引用自:https://serverfault.com/questions/542219