在 PHP 腳本得到通過 Web 服務器運行時,會視為一個不同的服務器用戶,然后 PHP 和 web 服務器都能夠讀取上傳的文件,但是 PHP 無法修改這些文件
Web 瀏覽器可以訪問 Web 根目錄及其子目錄的所有文件,但是不能訪問 Web 根目錄外面的目錄,所以,在創(chuàng)建可寫和目錄的時候,放在 Web 根目錄之外更安全
PHP5 中的函數(shù):
file_put_contents($file, $data, FILE_APPEND)
//打開文件并寫入數(shù)據(jù),向文件追加數(shù)據(jù)
file_put_contents($file, $_POST['quote'] . PHP_EOL,FILE_APPEND);
//PHP_EOL是表示當前操作系統(tǒng)的換行符
如果不是 PHP5,則需要使用舊的方法:
$fp = fopen($file, mode);
fwrite($fp, $data . PHP_EOL);
fclose($fp);
在向文件或者目錄寫入數(shù)據(jù)的時候,需要調用 is_writable 來避免權限錯誤
if( is_writable($file))
//返回布爾值 表示指定文件是否可以被寫入
當多個 PHP 腳本試圖同一時刻寫入一個文件時,就會出現(xiàn)問題
在 PHP5.1 以上版本可以這樣:
file_put_contents($file, $data, FILE_APPEND | LOCK_EX)
//LOCK_EX 是表示暫時鎖定該文件
在早期的 PHP 版本中,需要使用:
flock($fp,locktype)
//LOCK_SH 讀取共享鎖
LOCK_EX 寫入獨享鎖
LOCK_UN 釋放一個鎖
LOCL_NB 非阻塞鎖
在 fclose 的時候,文件會自動解鎖,最好在寫入完成的時候加上解鎖的語句
fgets 和 C 語法一樣:
$fp = fopen($file, 'rb');
while (!feof($fp))
{
$string = fgets($fp, 1024); //返回1023字節(jié)數(shù)據(jù)
}
fclose ($fp);
處理文件上傳必須:
enctype="multipart/form-data"
,表單必須使用 POST 在 PHP 中,$_FILES 變量包含 5 個元素:
從安全角度,最好重命名上傳的文件,要完成這一任務,需要設計一個系統(tǒng),能夠生成一個新的唯一的文件名,并在一個文本文件或數(shù)據(jù)庫中同時保存原始文件名和新文件名。