2010-07-25 215 views
1

我已經通過我的控制面板設置了一個cron作業。我已經通過我的FTP上傳了該腳本,並將其權限設置爲777(這樣做是否安全?)&給出了此腳本在作業中的路徑。現在該腳本使用依賴腳本來運行作業。混亂?這裏是什麼樣子:PHP:嘗試通過Cron作業運行腳本時出錯

cron.php

<?php require("some_file1.php"); 
require("file1.php"); 
require("folder1/file1.php"); 
require("folder1/file2.php"); 
require("folder2/file1.php"); 

//This value is actually received from one of the require files above after come calculations 
$get_content = 'This is some value received after calculations.'; 

mail('Hi', '[email protected]', $get_content, 'Error'); 
?> 

我已選擇接收cron任務的確認我的電子郵件&下面是我收到的錯誤:

mydomain.com/cron.php: line 1: syntax error near unexpected token `(' 
mydomain.com/cron.php: line 1: `<?php require("some_file1.php"); 
' 

我嘗試與支持交談,但他們不知道這個技術細節&目前技術人員不可用。如果有人能幫助我,這將是一件好事。

期待您的回覆。

謝謝。

+0

'777'權限幾乎*從不*安全。 – 2010-07-25 20:13:11

+0

您是否需要更改文件權限? – MrWhite 2010-07-25 20:32:21

+0

那我該如何設置它? 644授權拒絕錯誤。運行cron作業最安全的權限是什麼? – Devner 2010-07-25 22:16:50

回答

0

我能夠在網站技術支持的幫助下解決這個問題。這是解決方案,以防萬一有人想知道。需要通過網站的控制面板(GUI)添加以下「運行命令」&。

/usr/local/php5/bin/php 

/home/username/mydomain.com/cron.php 

cron.php文件保持不變。

我想我將不得不接受我自己的答案,因爲這是最相關的答案,它帶有完美的解決方案。我仍然非常感謝你們的幫助&感謝所有的迴應。

+0

你在那裏看到的路徑非常依賴於你的系統安裝php的具體方式。一種方法使它更通用,所以你不需要去尋找變量,就是使用下面的,沒有引號: 「#!/ usr/bin/env php」 在路徑中找到可執行文件,無論它在哪裏(如果它在路徑中)。 如果你想弄清楚你可以在shell中運行哪些東西,可以從shell中運行, 哪個php#=>/usr/local/php5/bin/php – 2010-07-26 00:02:21

+0

很高興你解決了它並感謝你報告返回。所以,大概你最初試圖直接使用CRON調用你的'cron.php'腳本而不調用PHP解釋器?最終它知道PHP解釋器的正確路徑?您是否需要最終更改文件權限? – MrWhite 2010-07-26 00:09:27

+0

是的,你是對的路徑是的,是的,我試圖運行而不需要翻譯。這是主要問題。是的,我確實將路徑權限更改爲777以使其運行。希望能幫助你。 – Devner 2010-07-26 00:37:34

7

我想,他們有不同的mod_php和命令行php的配置文件。 另一件事來檢查 - 嘗試解釋字符串添加到PHP文件的頂部:

例如:

#!/usr/local/sbin/php 
+4

+1我認爲缺少'#!/ usr/local/sbin/php'是個問題。請注意,您也可以通過將您的cron命令調用php並將該文件作爲參數來解決此問題。最後,請注意,php二進制文件可能位於不同的位置,如'/ usr/bin/php'。 – grossvogel 2010-07-25 20:09:38

+1

感謝您的回覆。下面是我添加的行時所得到的結果: 'sh:mydomain.com/cron.php:/ usr/local/sbin/php^M:錯誤的解釋器:沒有這樣的文件或目錄。我們可以做些什麼來解決它? – Devner 2010-07-25 22:04:22

+0

第一:^ M看起來像一個不好的行尾字符(win \ r \ n而不是unix \ n)。將你的文本編輯器設置爲使用unix行結束符,或使用'dos2unix'命令。如果這不能解決問題,那可能是因爲你的php二進制文件存在於服務器的其他地方。如果您有shell訪問權限,請使用'which php'來查找它。 – grossvogel 2010-07-25 22:26:06

1

嘗試curl http://youdomain.com/path/script.php

儘管通常不推薦使用cURLWget來生成http請求,但可能會更容易。這樣你就可以避免捕獲php CLI二進制文件幷包含路徑。

0

如果您使用CRON(或至少正確的相對路徑*),則需要在腳本中使用絕對路徑。當您的腳本從命令行(即CRON)運行時,CWD是不同的。儘管如果你不提供任何路徑,那麼它應該使用include_path設置的任何值。

*您可以使用chdir()更改CWD。

此外,請嘗試刪除括號,即。

require "some_file1.php"; // brackets are not reqd - it's a language construct 
+0

我認爲你仍然需要圍繞你的代碼的PHP標籤'<?php'和'?>',如果這就是你的意思是「_removed頂部和底部的現有標籤」? – MrWhite 2010-07-25 22:29:07

+0

你是對的標籤..對不起,我誤解你說的。我終於解決了它。我在下面發佈解決方案作爲評論。 – Devner 2010-07-25 23:44:19

0

你可以使用包括腳本:

$path = dirname(__FILE__); 
require($path."/"."file1.php"); 
... 

這應該可以解決相對路徑問題。