iT邦幫忙

0

linux 的 crontab 與 php + function 問題?

執行的檔案路徑是
/crontab/go.php

/ 是我的網站根目錄

我在 go.php 中有透過 require_once dirname(__FILE__) . 引入其他文件
假設我在其中引入了 /function/a.php
最後有引入一個 /function/core.php
我的 core.php 中有些 function 是要依賴 a.php 的
所以我在一開頭就引入(路徑確定是正確的,a 跟 b 來自不同路徑)
我設定每一分鐘執行腳本一次
於是我打算交給伺服器跑

我的 a.php 中有三個 function
但我 go.php 會用到的只有兩個
我還是一樣引入它
但我發現就因此無法運行了?
我初步判定(應該是說幾乎確定)是因為「那一個」我沒有用 function 也把它引進來導致無法執行⋯
是真的有這樣的事情嗎?
這三個 function 都是正常無錯誤的
我把兩個 function 提出來後就可以正常執行
但是引入了 a.php (有三個 function)就不行⋯⋯

(為了確保我用網址打過,運行是正常的)

看更多先前的討論...收起先前的討論...
rewrite iT邦新手 4 級 ‧ 2019-01-09 02:55:48 檢舉
沒有看到code或是error msg,不太知道你問題在那

可能原因
*執行的路徑有異 (網頁執行位置跟你下的執行點有出入
*有重複名稱的function
*傳入的值造成異常,連帶影響到特定function
weiclin iT邦高手 4 級 ‧ 2019-01-09 04:27:37 檢舉
無法運行第一個看它到底有沒有運行, 有的話看錯誤訊息, 再來是手動 cli 執行看看能不能跑
程式狗 iT邦新手 4 級 ‧ 2019-01-09 08:54:27 檢舉
認為有重複名稱的function可能性較高
harrytsai iT邦新手 5 級 ‧ 2019-01-09 14:59:11 檢舉
登入的帳號權限有差別,今天不是root登入在cron上,有些系統php function會有權限不夠的問題

1 個回答

3
浩瀚星空
iT邦大師 1 級 ‧ 2019-01-09 09:18:13
最佳解答

使用cron幾個重點要注意

1.正常來說,如果你是直接命令式的,因該在用cron運行的命令是要為主機路徑才對。不該用web路徑。所以我推測。你因該不是直接命令式的cron運行方式。可能是透過某些主機後台軟體運行的。

2.測試cron的命令是否正常,不能用瀏覽器直接來試。那並不是很準確的。正常因該要在其主機端運行一次命令試看看有無錯誤。

3.使用cron的php程式碼如果有引用的話,要非常注意要使用完整路徑。因為在運行時的路徑,並非一定是在你的web路徑上。所以有很大的可能性是引用錯誤。這是用瀏覽器去運行沒辦法發現到的問題之一。

其實一般如果有必要跑cron的程式碼。大多數而言,都會在其一開頭就事先宣告好web作業路徑。
會利用如 $dir = dirname(FILE); 這樣的語法。來取得實際的主機路徑後。
再去做引入的動作。最好是不要引入時再去用dirname(FILE)來取。
畢竟會因為程式不同路徑而無法正確的取得你要的路徑。
正常如果可以的話,會在其web根目錄下的程式碼來取得web根路錄的實體路徑。並將其寫入常數內

因為運行的方式不同,會有不同的路徑意思。

我要發表回答

立即登入回答