2017-08-15 183 views
0
php /home/test9/public_html/degerlendir/test-4567.php "var1=18&var2=22" 

我需要使用cron作業在後臺運行一個頁面。我在上面用命令測試了我的代碼。但是,我得到這個錯誤:require_once在命令行中不起作用

PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/extensions/no-debug-non-zts-20100525/imagick.so' - /usr/lib64/extensions/no-debug-non-zts-20100525/imagick.so: cannot open shared object file: No such file or directory in Unknown on line 0 
PHP Warning: require_once(../config.php): failed to open stream: No such file or directory in /home/test9/public_html/degerlendir/test-4567.php on line 2 
PHP Fatal error: require_once(): Failed opening required '../config.php' (include_path='.:/usr/lib64/php') in /home/test9/public_html/degerlendir/test-4567.php on line 2 

問題是頁面不包括的config.php在父目錄。通常在瀏覽器中工作的頁面。我嘗試使用不同的require_once變體,如require_once($ _SERVER ['DOCUMENT_ROOT']。「/ config.php」)。我無法讓它工作。

回答

1

Cron作業始終從您的根目錄中獲取包含文件的完整路徑。

/home/test/.../your-file

1

在你的cron作業,你需要cd到正確的工作目錄,讓你的PHP文件,找到它的包含。我這樣做是通過創建小的shell腳本,並從cron運行shell腳本:

#!/bin/bash 
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 
cd ${DIR} 
php test-4567.php 

exit 0 

這也給你做一些有用的東西像檢查,看看是否該腳本已在運行,以確保您不要的能力如果這是你想要避免的事情,那麼你不會啓動多個線程。

#!/bin/bash 
FIND_PROC=`ps -ef |grep "php test-4567.php" | awk '{if ($8 !~ /grep/) print $2}'` 
# if FIND_PROC is empty, the process has died; restart it 

if [ -z "${FIND_PROC}" ]; then 
     DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 
     cd ${DIR} 
     php test-4567.php 
fi 

exit 0 
1

從命令行沒有$_SERVER['DOCUMENT_ROOT']。那個只能從http-server(Apache)獲得。

工作目錄不會自動設置。如果您提示當前位於/ some/path /,腳本將嘗試在/some/config.php中查找config.php。

嘗試光盤到當前路徑通過在腳本的開始使用__DIR__

<?php chdir(__DIR__); ?>