国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

php通過變通方法檢測系統的文件夾路徑編碼

2020-03-22 19:34:20
字體:
來源:轉載
供稿:網友
  • 最近在通過php來寫一個類似ftp的的web-ftp平臺;
    需要兼容linux和window的路徑訪問;
    過程中發現window與linux使用的路徑編碼是不一樣的,比如linux好像是utf-8,window卻是gbk;
    php的編碼是utf-8,如果路徑中有中文,統一使用utf-8編碼來訪問路徑,就會出現像file_exists這類fs方法出現無法訪問情況;
    因為路徑不存在,原因就是utf-8按照gbk的格式來解析路徑編碼時,肯定是中文變成不的字符了;就出現路徑不存在而出錯;


    這時就需要自動的檢測當前系統的編碼,
    在google上找了一下,沒找到有效的php內置的檢測系統編碼的方法;
    想了一下,我使用以下方案來解決:目前在linux和window下測試是正確的;




    ```php



    //把utf8編碼轉成當前系統編碼
    protected html' target='_blank'>static function _toOsCode($str, $coding = null) {
    $enc = 'UTF-8';

    if (empty($coding)) {
    $coding = self::$osPathEncoding;
    }

    $str = mb_convert_encoding($str, $coding, $enc);
    return $str;
    }


    //檢測系統編碼
    //目前沒有找到合適的方法,只能是放一個中文文件,再循環使用不同的編碼檢測,能讀到文件就說明編碼是正確的
    protected static function _detectOsCode() {
    $codingFile = '/編碼-encoding-os-path.html';
    $detectPath = __DIR__ .$codingFile;
    $allCoding = mb_list_encodings();

    foreach ($allCoding as $coding) {
    if (false !== stripos('|byte2be|byte2le|byte4be|byte4le|UCS-4|UCS-4BE|UCS-4LE|UCS-2|UCS-2BE|UCS-2LE|UTF-32|UTF-32BE|UTF-32LE|UTF-16|UTF-16BE|UTF-16LE|', '|'.$coding.'|')) {//某些編碼會轉成非法路徑,所以,不需要檢測
    continue;
    }

    $maybe = self::_toOsCode($detectPath, $coding);


    if (@file_exists($maybe)) {
    self::$osPathEncoding = $coding;
    break;
    }
    }


    if (empty(self::$osPathEncoding)) {
    self::_httpCode('檢測系統路徑文件(夾)名稱的編碼失敗:可能原因之一是'.$codingFile.'文件被刪除或沒有讀取權限', 500);
    }
    }


    ```PHP編程

    鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 荣成市| 石泉县| 棋牌| 河北区| 湟源县| 确山县| 三门县| 神池县| 兴安盟| 元谋县| 泗水县| 星座| 克什克腾旗| 珠海市| 定陶县| 青海省| 山东| 宣武区| 克拉玛依市| 游戏| 吉木萨尔县| 宣汉县| 甘谷县| 分宜县| 英山县| 通许县| 瑞昌市| 繁峙县| 绿春县| 深水埗区| 嘉义市| 阳高县| 洛扎县| 禄丰县| 云浮市| 正阳县| 九寨沟县| 颍上县| 衡阳县| 武鸣县| 石台县|