程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP基礎知識 >> PHP文件或目錄權限檢查函數

PHP文件或目錄權限檢查函數

編輯:PHP基礎知識
 

php代碼: /**

* 文件或目錄權限檢查函數

*

* @access public

* @param string $file_path 文件路徑

* @param bool $rename_prv 是否在檢查修改權限時檢查執行rename()函數的權限

*

* @return int 返回值的取值范圍為{0 <= x <= 15},每個值表示的含義可由四位二進制數組合推出。

* 返回值在二進制計數法中,四位由高到低分別代表

* 可執行rename()函數權限、可對文件追加內容權限、可寫入文件權限、可讀取文件權限。

*/

function file_mode_info($file_path)

{

/* 如果不存在,則不可讀、不可寫、不可改 */

if (!file_exists($file_path))

{

return false;

}

$mark = 0;

if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN')

{

/* 測試文件 */

$test_file = $file_path . '/cf_test.txt';

/* 如果是目錄 */

if (is_dir($file_path))

{

/* 檢查目錄是否可讀 */

$dir = @opendir($file_path);

if ($dir === false)

{

return $mark; //如果目錄打開失敗,直接返回目錄不可修改、不可寫、不可讀

}

if (@readdir($dir) !== false)

{

$mark ^= 1; //目錄可讀 001,目錄不可讀 000

}

@closedir($dir);

/* 檢查目錄是否可寫 */

$fp = @fopen($test_file, 'wb');

if ($fp === false)

{

return $mark; //如果目錄中的文件創建失敗,返回不可寫。

}

if (@fwrite($fp, 'directory access testing.') !== false)

{

$mark ^= 2; //目錄可寫可讀011,目錄可寫不可讀 010

}

@fclose($fp);

@unlink($test_file);

/* 檢查目錄是否可修改 */

$fp = @fopen($test_file, 'ab+');

if ($fp === false)

{

return $mark;

}

if (@fwrite($fp, "modify test.\r\n") !== false)

{

$mark ^= 4;

}

@fclose($fp);

/* 檢查目錄下是否有執行rename()函數的權限 */

if (@rename($test_file, $test_file) !== false)

{

$mark ^= 8;

}

@unlink($test_file);

}

/* 如果是文件 */

elseif (is_file($file_path))

{

/* 以讀方式打開 */

$fp = @fopen($file_path, 'rb');

if ($fp)

{

$mark ^= 1; //可讀 001

}

@fclose($fp);

/* 試著修改文件 */

$fp = @fopen($file_path, 'ab+');

if ($fp && @fwrite($fp, '') !== false)

{

$mark ^= 6; //可修改可寫可讀 111,不可修改可寫可讀011...

}

@fclose($fp);

/* 檢查目錄下是否有執行rename()函數的權限 */

if (@rename($test_file, $test_file) !== false)

{

$mark ^= 8;

}

}

}

else

{

if (@is_readable($file_path))

{

$mark ^= 1;

}

if (@is_writable($file_path))

{

$mark ^= 14;

}

}

return $mark;

}
 

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved