“解決fatal error: require(): Failed opening required ‘data/tdk.php’ (include_path=’.;C:phppear’)的方法”
最近,一些PHP開(kāi)發(fā)人員在開(kāi)發(fā)過(guò)程中遇到了一個(gè)麻煩的問(wèn)題:當(dāng)他們?cè)赑HP代碼中使用require()函數(shù)去加載一個(gè)所需文件時(shí),會(huì)出現(xiàn)如下錯(cuò)誤:
fatal error: require(): Failed opening required 'data/tdk.php' (include_path='.;C:phppear')
登錄后復(fù)制
這個(gè)錯(cuò)誤通常是由include_path的值引起的。include_path的作用是指定PHP程序在哪些路徑下尋找所需文件。
解決這個(gè)問(wèn)題的方法有以下幾種:
- 指定完整路徑
最簡(jiǎn)單的解決方法是使用完整路徑來(lái)加載所需文件。比如上述錯(cuò)誤中的data/tdk.php,如果我們知道它在服務(wù)器的哪個(gè)目錄下,可以使用完整路徑來(lái)替代它。例如:
require('/var/www/html/project/data/tdk.php');
登錄后復(fù)制
這樣,PHP程序就可以直接找到所需文件,并正確加載它。
但這種方法有一個(gè)缺點(diǎn),就是當(dāng)我們需要在不同的服務(wù)器上測(cè)試或運(yùn)行程序時(shí),因?yàn)槁窂降牟煌托枰獣r(shí)刻修改路徑,非常麻煩。
- 修改include_path的值
另一種方法是修改PHP配置文件php.ini中include_path的值。打開(kāi)php.ini文件,在其中找到include_path這一項(xiàng),用分號(hào)分隔多個(gè)路徑,例如:
include_path = ".:/usr/lib/php:/usr/local/lib/php:/path/to/your/files"
登錄后復(fù)制
這樣,PHP程序就會(huì)依次在這些路徑下尋找所需文件。如果我們?cè)?data目錄下,可以將它加入到include_path中:
include_path = ".:/usr/lib/php:/usr/local/lib/php:/path/to/your/files:/data"
登錄后復(fù)制
修改完php.ini文件后,重啟PHP服務(wù),就可以正常加載所需文件了。
- 使用__DIR__常量
PHP提供了__DIR__這一常量,它表示當(dāng)前腳本所在的目錄。(在 PHP5.3.0 版本之前使用 dirname(__FILE__))我們可以利用它來(lái)解決以上問(wèn)題,即在代碼中使用相對(duì)路徑。例如:
require(__DIR__ . '/data/tdk.php');
登錄后復(fù)制
這樣,無(wú)論我們將整個(gè)程序拷貝到哪個(gè)路徑下,PHP程序都可以正確使用所需文件了。
總結(jié):
以上三種方法,可以根據(jù)實(shí)際情況選擇一種來(lái)解決這個(gè)問(wèn)題。如果是個(gè)人開(kāi)發(fā)項(xiàng)目,可以使用第三種方法。如果是多人協(xié)作開(kāi)發(fā),或者在不同的服務(wù)器上運(yùn)行程序,推薦使用第二種方法。如果不想修改PHP配置文件,但也不想每次都使用完整路徑來(lái)加載文件,可以采用第一種方法。
無(wú)論采用哪種方法,都應(yīng)該注意文件路徑的大小寫(xiě)、文件名的正確性等問(wèn)題。這些都有可能引起該報(bào)錯(cuò)。通過(guò)選擇正確的方法,就可以正確加載所需文件,讓程序正常運(yùn)行。