2011-06-20 61 views
0

我有一個PHP腳本,需要在太平洋時間凌晨3:05每天執行一次。我目前在我的網站的根目錄中獲得了該腳本(如http://example.com/script.php),因此,任何在瀏覽器中導航的人都可以執行此腳本。我的服務器佈局是這樣的:用Cron執行PHP文件只有

/home/[user]/example.com/

example.com文件夾是域的根。我讀了其他線程一下:

PHP & cron: security issues

,其中有人說我應該移動的腳本公共目錄之外,所以在我的情況下,我將它移動到[用戶]文件夾。目前我的cron作業命令如下:

在/ usr /本地/ PHP5 /斌/ PHP /home/[user]/example.com/script.php

(我使用的是假當然的名字)我會簡單地將文件移動和更改命令:

在/ usr /本地/ PHP5 /斌/ PHP /home/[user]/script.php

,它會正常運行,但公衆不可用?由於腳本已經運行通過Cron,它已經使用絕對路徑(而不是相對路徑)來設置它需要包含的文件,所以這應該是一個簡單的移動和編輯,對吧?

+3

試試看看?它應該是 –

+2

試試看看?除非共享主機並且不能將文件移動到公用目錄之外,否則不應該有任何問題。 –

+0

我有共享主機,但我可以將文件移動到公共目錄之外。我可以訪問公共目錄樹之外的/ home/[user],所以我可以將它移動到那裏。只是嘗試它的唯一問題是我不知道明天上午3:05是否有效。 – HaLo2FrEeEk

回答

-1

我最終做的只是把它從公共目錄移出到我的home文件夾。 CRON仍然能夠從那裏訪問並執行它。謝謝你們的幫助。

+0

爲什麼這是低調的? – yoeriboven

7

您有幾種選擇:

  • 舉動,你的web目錄的
  • 增加一些檢查,如:

    <?php 
    
    if(! isset($argv)) 
        die("cannot run!"); 
    
  • 檢查什麼模式的腳本運行:

    $isCLI = (php_sapi_name() == 'cli'); 
    if(!$isCLI) 
        die("cannot run!"); 
    
+2

您只需檢查$ argv是否已設置即可。它不會在常規的Web請求中設置。 – datasage

+0

啊,是的,你是對的。 – ariefbayu

+0

根據配置'$ argv'通過'register_globals'設置。我不會依賴它;)尋找使用的sapi('PHP_SAPI ==='cli'')感覺更安全。 – KingCrunch

0

你能告訴我們關於這個腳本的目的,如果它做簡單的東西,例如MySQL的修剪:

5 3 * * * * root mysql -u username -e "UPDATE users SET days = days-1;" 

可能會更好,同樣:

5 3 * * * * root /usr/local/php5/bin/php -r "$normal = 'php';code();$here" 

可以做的伎倆?

+0

這並不複雜,但它不僅僅是簡單的mysql操作。它從外部API獲取信息,讀取信息,格式化信息,檢查重複條目,然後將其插入數據庫(如果不存在重複)。這是我需要用PHP做的事情,以防萬一發生什麼事情而Cron不執行,所以我必須強制更新(發生在今天早上) – HaLo2FrEeEk