今天,同事突然告訴我,我寫的一個做計劃任務的php腳本執行總是不成功。
腳本本身很簡單,里面只有包含了幾個庫文件并執行了一個函數,函數應該沒有錯誤,這個函數在別處也調用過,沒有問題。我在本地用瀏覽器訪問頁面,執行成功,看來沒有問題,我有點懷疑是同事的計劃任務的問題。我又打開命令行,用php直接執行腳本,這回報錯了,是require 包含文件錯誤,看來是路徑不對。
不明白是什么原因引起的,只是從報錯來看是路徑不對,我猜測是跟相對路徑有關,于是把相對路徑的全部改成絕對路徑,再執行,問題解決。
在百度上搜索之后,知道是用php執行腳本時,執行腳本的位置是當前執行php命令的路徑,所以相對路徑就不對了。解決問題的辦法有兩個:
一、改用絕對路徑,這個比較麻煩,所有包含的文件包括直接包含的文件里包含的文件路徑,有一個不對就有可能出錯,所以只有當執行文件比較簡單的時候可用。
二、使用chdir函數,改變當前執行目錄,把目錄改為文件所在目錄,chdir(dirname(__FILE__));
最后,簡單介紹下PHP的cli命令行模式吧
首先,進入PHP的CLI(Command line interface) mode
cyguin-> $ ./php --ini(顯示配置文件信息)
將顯示:
configuration file(php.ini) path: c:/Windows
Loaded configuration file: c:/wamp/bin/php/php5.3.0/php.ini
scan for additional .ini files in: (none)
additional .ini files parsed: (none)
$./php --help (會顯示PHP具體信息)
$./php --rf (顯示函數的信息)
$./php --fc (顯示類的信息)
$./php --re (顯示擴展的信息)
$./php --ri (顯示擴展的配置)
$./php -l : 檢查語法
如:$./php -l c:/wamp/www/1.php
運行結果: No Syntax errors detected in xxx
$./php -v :顯示版本信息和運行模式cgi/cli
運行結果:
PHP 5.3.0 (cli) (built: Jun 29 2009 21:25:23)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies
$./php -f :解析并執行文件
如:$./php -f c:/wamp/www/1.php
$./php -h :顯示幫助文件
$./php -r : 運行PHP代碼,不需要使用標簽
如:$./php -r 'print("hello!");' 或 $./php -r 'echo "hello!";'
運行結果: hello!
$./php -a :進入交互模式
在linux下會出現:
php>
在windows下:
需要輸入:
php
echo "hello world!";
?>
然后ctl+c,以獲得輸出。
在PHP5.3.0中,不能直接這樣用,因為不能直接得到結果。
php
echo "hello world!";
?>
先輸入ctl+z,然后再輸入ctl+c,就會得到結果。
$./php -c : 指定查找php.ini的位置,或者指定一個特定的ini文件。
$./php -n : 不使用php.ini
$./php -d foo [=bar] : 定義INI文件中foo entry的值是bar
$./php -m : 顯示所有的模塊,php modules和zend modules
$./php -e : Generate extended information for debugger/profiler
$./php -B : 處理標準輸入簽執行的代碼。PHP5新加。
如:
$./php -B 'echo "hello world";'
輸出結果:hello world
$./php -R : 為每一行執行的php代碼。PHP5新加。
$./php -F :
$./php -H : 處理完輸入后執行的代碼
$./php -s : 顯示HTML語法高亮的代碼
$./php -w : 得到去掉空格和注釋后的代碼
如:
$./php -w c:/www/1.php
$./php -z : 加載Zend擴展文件
$pwd :顯示當前路徑
--enable-cli, --enable-cgi
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答