php
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;}
$mark ^= 1;
$mark ^= 2;
$mark ^= 4;
$mark ^= 8;
等等這幾個操作的作用是什嗎? 為什麼要這麼做?
而且裡面的判斷都用 !== (非全等),這麼做的作用是什嗎?
為什麼不用普通的不等於 != ?