2011-01-19 49 views
3

我正在使用Kohana框架(3.0.9),它會生成每日日誌。如果在CRON運行腳本前一天創建了一個日誌文件,我希望郵寄日誌文件,但經過幾天的嘗試,我無法弄清楚如何在PHP CLI模式中放棄safe_mode。PHP cli命令行safe_mode限制

當我在網上運行腳本時,沒有問題。但我要運行腳本作爲我的Plesk 9.5.2服務器上一個cron任務(或命令行作爲root用戶),我收到以下錯誤:

ErrorException [ 2 ]: dir(): SAFE MODE Restriction in effect. The script whose uid is 10001 is not allowed to access /var/www/vhosts/mydomain.com/subdomains/mysubdomain/httpdocs/application/logs/2011/01 owned by uid 48 ~ APPPATH/classes/controller/ajax.php [ 181 ]

我已經把媒體鏈接安全模式在我的Plesk控制面板中關閉,對於Web請求可以正常工作,但不能在命令行或作爲CRON任務。

我用下面的代碼來測試它的工作:

$d = dir(APPPATH.'logs/2011/01/'); 
echo "Handle: " . $d->handle . "\n"; 
echo "Path: " . $d->path . "\n"; 
while (false !== ($entry = $d->read())) { 
    echo $entry."\n"; 
} 
$d->close(); 

我可以讀取目錄APPPATH.'logs /」,也是APPPATH.'logs目錄/ 2011' ,但目錄代表每個月份的每日日誌文件總是給出錯誤。

回答

15

在現在,你可以安排從UI的PHP腳本執行這樣的:

plesk schedule cron url php script

在你仍然需要通過命令行注重執行腳本,Plesk的PHP二進制文件都放在案:

# 7.0 
/opt/plesk/php/7.0/bin/php 
# 5.6 
/opt/plesk/php/5.6/bin/php 
# 5.5 
/opt/plesk/php/5.5/bin/php 
# and so on 

原來的答覆:

我知道這是幾月但對於下一個在使用Plesk和cron和PHP時遇到問題的人來說,答案是這樣的。

儘管Plesk運行cron作爲ROOT,但它也會在安全模式ON的情況下默認運行PHP,這意味着當您在Plesk中設置需要PHP的cron時,它將會有一些限制,您不會從shell或來自網絡。

所以,你要做的就是使用CLI /etc/php.ini中選擇覆蓋,就像這樣:

/usr/bin/php -q -d safe_mode=Off /var/www/vhosts/path-to-your-php-file.php 
+0

我愛你!ck_你已經救了我的一天(我的頭髮也是!) – Arnaud 2012-03-15 10:15:02

1

您是否禁用了php.ini中的safe_mode?

通過運行以下命令php --ini可以找到該文件的位置。在該文件中搜索safe_mode,並將該行更改爲safe_mode = Off