為了安全,我們通常會(huì)在虛擬主機(jī)設(shè)置中,加入這一行
php_admin_value open_basedir "/usr/local/apache/htdocs/www"
但這會(huì)導(dǎo)致move_uploaded_file不能讀取臨時(shí)目錄中的上傳文件,導(dǎo)致上傳文件失失敗。
一般會(huì)提示以下錯(cuò)誤:
Warning: move_uploaded_file() [function.move-uploaded-file]: open_basedir restriction in effect. File(/tmp/phpqwg5rO) is not within the allowed path(s): (/usr/local/apache/htdocs/www) in /usr/local/apache/htdocs/www/includes/lib_common.php on line 3130
解決方法:
將上傳文件的臨時(shí)目錄加入到php_admin_value open_basedir后面,最后看起來是這樣的:
<VirtualHost *:80>
php_admin_value open_basedir "/usr/local/apache/htdocs/www:/tmp"
</VirtualHost>
注意:兩個(gè)目錄之間是冒號隔開。
把PHP腳本操作限制在web目錄可以避免程序員使用copy函數(shù)把系統(tǒng)文件拷貝到web目錄。move_uploaded_file不受open_basedir的限制,所以不必修改php.ini里upload_tmp_dir的值。