在使用PHP時(shí),我們常常需要運(yùn)行一些命令行程序或腳本。其中,使用PHP命令行模式下的-p參數(shù)可以直接運(yùn)行一段PHP代碼,而使用-f參數(shù)則可以執(zhí)行一個(gè)指定文件中的PHP代碼。然而,有時(shí)候我們會(huì)遇到外部不能打開(kāi)PHP文件的問(wèn)題,本文將詳細(xì)解釋該問(wèn)題的原因以及解決方法。
外部無(wú)法打開(kāi)PHP文件的主要原因是文件權(quán)限被設(shè)置為不可讀或不可執(zhí)行。在Linux系統(tǒng)中,可以使用ls -l命令查看文件權(quán)限,例如:
$ ls -l test.php -rw-r--r-- 1 user user 1234 Aug 1 10:00 test.php
其中,第一個(gè)字符代表文件類型,后面三組三個(gè)字符分別是文件所有者、文件所屬組、其他用戶的權(quán)限。其中,r代表可讀,w代表可寫(xiě),x代表可執(zhí)行,-代表無(wú)對(duì)應(yīng)權(quán)限。上述例子中,文件權(quán)限為rw-r--r--,表示文件所有者可讀可寫(xiě)、文件所屬組和其他用戶只可讀不可寫(xiě)不可執(zhí)行。
如果文件權(quán)限中不包含x,即該文件不可執(zhí)行,那么使用php -f test.php命令時(shí)就會(huì)報(bào)錯(cuò):
$ php -f test.php PHP Warning: require(test.php): failed to open stream: Permission denied in /usr/local/php/cli/php on line 27 PHP Fatal error: require(): Failed opening required 'test.php' (include_path='.:/usr/share/pear') in /usr/local/php/cli/php on line 27
上述錯(cuò)誤提示中,表明PHP在執(zhí)行test.php文件時(shí)出現(xiàn)了權(quán)限問(wèn)題,導(dǎo)致無(wú)法打開(kāi)文件。此時(shí),我們可以通過(guò)chmod命令修改文件權(quán)限為可執(zhí)行,例如:
$ chmod +x test.php
此時(shí)再次運(yùn)行php -f test.php命令就可以正常執(zhí)行了。
另外,如果文件權(quán)限中包含x,但是該文件所在的目錄權(quán)限不包含x,那么同樣會(huì)出現(xiàn)無(wú)法打開(kāi)文件的問(wèn)題。例如:
$ ls -ald testdir drwxr--r-- 1 user user 4096 Aug 1 10:00 testdir $ ls -l testdir/test.php -rw-r--r-- 1 user user 1234 Aug 1 10:00 testdir/test.php
上述例子中,test.php文件權(quán)限為rw-r--r--,包含x,但是所在目錄testdir權(quán)限為drwxr--r--,不包含x。此時(shí),使用php -f testdir/test.php命令同樣會(huì)報(bào)錯(cuò):
$ php -f testdir/test.php PHP Warning: require(testdir/test.php): failed to open stream: Permission denied in /usr/local/php/cli/php on line 27 PHP Fatal error: require(): Failed opening required 'testdir/test.php' (include_path='.:/usr/share/pear') in /usr/local/php/cli/php on line 27
解決該問(wèn)題的方法同樣是使用chmod命令修改目錄權(quán)限為可執(zhí)行,例如:
$ chmod +x testdir
總之,當(dāng)我們使用php -f命令無(wú)法打開(kāi)指定PHP文件時(shí),需要檢查文件及其所在目錄的權(quán)限設(shè)置,并根據(jù)情況修改為可執(zhí)行。