PHP與服務(wù)器文件系統(tǒng)的簡(jiǎn)單交互
1、php.ini中關(guān)于文件上傳的設(shè)置指令
2、文件上傳過(guò)程
(1)上傳文件提交表單html代碼:
<!--向服務(wù)器上傳文件的HTML表單(限制為文本文件)--> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Adminstration - upoload new files</title> </head> <body> <h1>Upload new files</h1> <form action="upload.php" method="post" enctyple="multipart/form-data" > <!--enctyple:規(guī)定在發(fā)送到服務(wù)器之前對(duì)表單數(shù)據(jù)進(jìn)行編碼的方式(在上傳控件時(shí)必須按照以上方式設(shè)置該屬性)--> <div> <input type="hidden" name="MAX_FILE_SIZE" value="1000000"> <!--規(guī)定傳輸文件的最大字節(jié)數(shù)--> <label for="userfile">Upload a file</label> <!--在<label>內(nèi)點(diǎn)擊文本,會(huì)觸發(fā)該控件,此時(shí)瀏覽器會(huì)自動(dòng)對(duì)焦到標(biāo)簽for屬性所指向的表單控件上面--> <input type="file" name="userfile" id="userfile"> <!--id屬性為<label>標(biāo)簽for所指向控件元素的id號(hào)--> <input type="submit" value="Send File"> </div> </form> </body> </html>
(2)php處理上傳文件代碼
①在php腳本中,需要處理的數(shù)據(jù)保存在超級(jí)變量數(shù)組$_FILES中,開(kāi)啟register_globals指令可以直接通過(guò)變量名訪問(wèn)這些信息;
②假如表單變量名為“username“則有:
$_FILES['userfile']['tmp_name']:儲(chǔ)存文件在Web服務(wù)器中的臨時(shí)保存位置;
$_FILES['userfile']['name']:儲(chǔ)存用戶(hù)系統(tǒng)中文件的名稱(chēng);
$_FILES['userfile']['size']:儲(chǔ)存文件的大??;
$_FILES['userfile']['type']:儲(chǔ)存文件的類(lèi)型;
$_FILES['userfile']['error]:儲(chǔ)存任何與文件上傳相關(guān)的錯(cuò)誤代碼;
錯(cuò)誤類(lèi)型說(shuō)明:
UPLOAD_ERR_INI_SIZE:1,上傳的文件超過(guò)了 php.ini 中 upload_max_filesize 選項(xiàng)限制的值。
UPLOAD_ERR_FORM_SIZE:2,上傳文件的大小超過(guò)了 HTML 表單中 MAX_FILE_SIZE 選項(xiàng)指定的值。
UPLOAD_ERR_PARTIAL:3,文件只有部分被上傳。
UPLOAD_ERR_NO_FILE:4,沒(méi)有文件被上傳。
UPLOAD_ERR_NO_TMP_DIR:6,找不到臨時(shí)文件夾。PHP 4.3.10 和 PHP 5.0.3 引進(jìn)。
UPLOAD_ERR_CANT_WRITE:7,文件寫(xiě)入失敗。PHP 5.1.0 引進(jìn)。
③php代碼
<?php //檢驗(yàn)文件傳輸異常 if($_FILES['userfile']['error']>0){ echo 'Problem'; switch($_FILES['userfile']['error']){ case 1: echo 'File exceeded upload_max_filesize';break; case 2: echo 'File exceeded max_file_size';break; case 3: echo 'File only partially upload';break; case 4: echo 'No file uploaded';break; case 6: echo 'Cannot upload file: No temp directory specified';break; case 7: echo 'Upload failed:Cannot write to disk';break; } exit; } //檢驗(yàn)傳輸?shù)奈募欠駷槲谋疚募? if($_FILES['userfile']['type'] != 'text/plain'){ echo 'Problem: file is not plain text'; exit; } //將上傳文件包含在服務(wù)器中/uploads/的目錄下(該目錄必須獨(dú)立于Web文檔樹(shù)) $upfile = '/uploads/'.$_FILES['userfile']['name']; //在指定目錄下以傳輸文件的文件名創(chuàng)建一個(gè)新文件 if(is_uploaded_file($_FILES['userfile']['tmp_name'])){ if(! move_uploaded_file($_FILES['userfile']['tmp_name'],$upfile)){ //將傳輸文件的臨時(shí)文件移動(dòng)到創(chuàng)建的新文件 echo 'Problem: Could not move file to destination directory'; exit; } } else{ echo 'Problem: Possible file upload attack.Filename:'; echo $_FILES['username']['name']; exit; } echo "File uploaded seuucessfully<br/><br/>"; //對(duì)傳輸文件清除html和php標(biāo)記 $contents = file_get_contents($upfile); //將文件內(nèi)容提取為一個(gè)字符串; $contents = strip_tags($contents); //對(duì)該字符串擦除html和tags標(biāo)記; file_put_contents($_FILES['userfile']['name'],$contents); //將該字符串重新寫(xiě)入文件中; //在瀏覽器上顯示傳輸?shù)奈谋疚募?nèi)容 echo "<p>Preview of uploaded file contents:<br/><hr>>"; echo nl2br($contents); echo "</br></hr>";
3、使用目錄函數(shù)
(1)從目錄中讀取文件名
①使用opendir(),readdir(),closedir()函數(shù);
<?php $current_dir = '/uploads/'; //創(chuàng)建目錄url對(duì)象 $dir = opendir($current_dir); //打開(kāi)目錄,結(jié)果返回一個(gè)目錄對(duì)象 echo "<p>Upload directory is $current_dir</p>"; echo "<p>Directory Listing:</p><ul>"; while(($file = readdir($dir)) !== false){ //讀取目錄對(duì)象 if($file != "." && $file != ".."){ //過(guò)濾當(dāng)前目錄和上一級(jí)目錄 echo "<li>$file</li>"; echo "<a href=\"filedetails.php?file=\'.$file.\'\">".$file."</a><br/>"; } } echo "</ul>"; closedir($dir); //關(guān)閉目錄; ?>
②使用php的dir類(lèi)
<?php $current_dir = '/uploads/'; //創(chuàng)建目錄url對(duì)象 $dir = dir($current_dir); //創(chuàng)建dir對(duì)象 echo "<p>Handle is $dir->handle</p>"; echo "<p>Upload directory is $current_dir</p>"; echo "<p>Directory Listing:</p><ul>"; while(($file = $dir->read()) !== false){ //通過(guò)dir對(duì)象讀取目錄下的文件名 if($file != "." && $file != ".."){ echo "<li>$file</li>"; } } echo "</ul>"; $dir->close(); //關(guān)閉目錄 ?>
(2)使用scandir()函數(shù)對(duì)文本名稱(chēng)進(jìn)行字母表的排序方式
<?php $current_dir = '/uploads/'; //創(chuàng)建目錄url對(duì)象 $files1 = scandir($current_dir); //將指定目錄下的文件名保存為一個(gè)數(shù)組,默認(rèn)以字母升序排序 $files2 = scandir($current_dir,1); //將指定目錄下的文件名保存為一個(gè)數(shù)組,以字母降序排序 echo "<p>Upload directory is $current_dir</p>"; echo "<p>Directory Listing in alphabetical order,ascending:</p><ul>"; foreach($files1 as $file1) { if($file1 != "." && $file1 != "..") echo "<li>$file1</li>"; } echo "</ul>"; ?>
(3)獲取當(dāng)前目錄的其他信息
dirname($path):返回路徑的目錄部分;
basename($path):返回路徑的名稱(chēng)部分;
disk_free_space($path):返回路徑所在磁盤(pán)可以保存上傳文件的容量;
(4)創(chuàng)建和刪除目錄
①mkdir():創(chuàng)建目錄;
代碼:
$oldumask = umask(0); //重置當(dāng)前權(quán)限碼 mkdir("/tmp/testing",0777); //創(chuàng)建目錄 umask($oldumask); //恢復(fù)當(dāng)前權(quán)限碼
②rmdir():刪除目錄;
代碼:
rmdir("/temp/testing"); 或rmdir("c:\\tmp\\testing');
※要?jiǎng)h除的目錄必須是空目錄;
4、與文件系統(tǒng)的交互
(1)獲取文件信息:
while(($file = readdir($dir)) !== false){ echo "<a href=\"filedetails.php?file=\'.$file.\'\">".$file."</a><br/>"; } <?php $current_dir = '/uploads/'; $file = basename($file); //獲取文件文件名 echo "<h1>Details of file</h1>"; echo "<h2>File data</h2>"; echo 'File last accessed: '.date('j F Y H:i',fileatime($file))."<br>"; //返回最近訪問(wèn)的時(shí)間戳 echo 'File last modifixed: '.date('j F Y H:i',filemtime($file))."<br>"; //返回最近修改的時(shí)間戳 $user = posix_getpwuid(fileowner($file)); //返回用戶(hù)標(biāo)識(shí)uid echo 'File owner: '.$user['name']."<br/>"; $group = posix_getgrgid(filegroup($file)); //返回組織標(biāo)識(shí)gid echo 'File group: '.$group['name']."<br/>"; echo 'File permissions: '.decoct(fileperms($file))."<br/>"; //返回8位的權(quán)限碼 echo 'File type'.filetype($file)."<br/>"; //返回文件類(lèi)型 echo 'File size'.filesize($file)."<br/>"; //返回文件字節(jié)數(shù) echo "<h2>File Tests</h2>"; echo 'is_dir?'.(is_dir($file) ? 'true':'false')."<br/>"; echo 'is_executable?'.(is_executable($file) ? 'true':'false')."<br/>"; //判斷文件是否可執(zhí)行; echo 'is_file?'.(is_file($file) ? 'true':'false')."<br/>"; echo 'is_link?'.(is_link($file) ? 'true':'false')."<br/>"; echo 'is_readable?'.(is_readable($file) ? 'true':'false')."<br/>"; echo 'is_writable?'.(is_writable($file) ? 'true':'false')."<br/>"; ?>
(2)更改文件屬性
chgrp(file,group):修改文件的分組;
chmod(file,permissions):修改文件的權(quán)限;
chown(file,user):修改文件的所有者;
(3)創(chuàng)建、刪除和移動(dòng)文件
bool touch($filename,[int time,[ int atime]]):創(chuàng)建一個(gè)文件(time指定創(chuàng)建時(shí)間戳,atime指定可選時(shí)間戳)
unlink($filename):刪除一個(gè)文件
copy($source_path,$destination_path):復(fù)制一個(gè)文件
rename($oldfile,$newfile):重命名一個(gè)文件;
(4)使用程序執(zhí)行函數(shù)
①String exec(String command[ ,array result [ ,int result_value]])
返回命名結(jié)果的最后一行,result變量可以返回字符組數(shù),這些字符串代表輸出的每一行,result_value獲取返回代碼;
②void passthru(String command[ ,int result_value])
結(jié)果直接輸出到瀏覽器;
③String system(string command[ ,int return_value])
輸出結(jié)果到瀏覽器,返回命令結(jié)果的最后一行或false;
※在用戶(hù)提交的數(shù)據(jù)包括執(zhí)行命令的一部分,應(yīng)該進(jìn)行以下包裝:
system(escapeshellcmd($command));
5、與環(huán)境變量交互
phpinfo()函數(shù):獲取php的所有變量列表;
getenv("$key_name"):
setenv("$key_name=$value");
以上所述是小編給大家介紹的PHP與服務(wù)器文件系統(tǒng)的簡(jiǎn)單交互,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- Ajax+php數(shù)據(jù)交互并且局部刷新頁(yè)面的實(shí)現(xiàn)詳解
- php 接口與前端數(shù)據(jù)交互實(shí)現(xiàn)示例代碼
- 利用php做服務(wù)器和web前端的界面進(jìn)行交互
- Ajax異步傳輸與PHP實(shí)現(xiàn)交互示例
- Android App端與PHP Web端的簡(jiǎn)單數(shù)據(jù)交互實(shí)現(xiàn)示例
- 微信小程序?qū)W習(xí)筆記之表單提交與PHP后臺(tái)數(shù)據(jù)交互處理圖文詳解
- php變量與JS變量實(shí)現(xiàn)不通過(guò)跳轉(zhuǎn)直接交互的方法
- Ajax+PHP簡(jiǎn)單數(shù)據(jù)交互
- PHP與MySQL交互使用詳解
- PHP與Web頁(yè)面交互操作實(shí)例分析
相關(guān)文章
Laravel框架DB facade數(shù)據(jù)庫(kù)操作詳解
這篇文章主要介紹了Laravel框架DB facade數(shù)據(jù)庫(kù)操作,結(jié)合實(shí)例形式詳細(xì)分析了laravel數(shù)據(jù)庫(kù)基本創(chuàng)建、連接、增刪改查等操作技巧,需要的朋友可以參考下2019-12-12Yii框架連接mongodb數(shù)據(jù)庫(kù)的代碼
這篇文章主要介紹了Yii框架連接mongodb數(shù)據(jù)庫(kù)的代碼的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-07-07PHP快速導(dǎo)出百萬(wàn)級(jí)數(shù)據(jù)到CSV或者EXCEL文件
這篇文章主要介紹了PHP快速導(dǎo)出百萬(wàn)級(jí)數(shù)據(jù)到CSV或者EXCEL文件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11Yii數(shù)據(jù)模型中rules類(lèi)驗(yàn)證器用法分析
這篇文章主要介紹了Yii數(shù)據(jù)模型中rules類(lèi)驗(yàn)證器用法,結(jié)合實(shí)例形式分析了rules類(lèi)驗(yàn)證器的簡(jiǎn)單使用方法,代碼注釋中包含了相關(guān)方法的使用說(shuō)明,需要的朋友可以參考下2016-07-07php根據(jù)isbn書(shū)號(hào)查詢(xún)amazon網(wǎng)站上的圖書(shū)信息的示例
這篇文章主要介紹了php根據(jù)isbn書(shū)號(hào)查詢(xún)amazon網(wǎng)站上的圖書(shū)信息的示例,需要的朋友可以參考下2014-02-02