php通过变通方法检测系统的文件夹路径编码

最近在通过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 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);

}

}

```

时间: 2024-08-01 12:52:01

php通过变通方法检测系统的文件夹路径编码的相关文章

获取系统特殊文件夹路径信息

//获取系统特殊文件夹路径信息 try {   this.textBox1.Text=Environment.GetFolderPath(System.Environment.SpecialFolder.System);   this.textBox2.Text=Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFiles);   this.textBox3.Text=Environment.GetFolderPa

获取系统特殊文件夹路径

实现效果: 知识运用: Environment类的GetFolderPath方法 //获取指向由枚举标识的系统特殊文件夹的路径 public static string GetFolderPath (Environment.SpecialFolder   folder) 实现代码: private void Form1_Load(object sender, EventArgs e) { foreach (Environment.SpecialFolder item in System.Enum

C# - 获取windows系统特殊文件夹路径

一.路径分类 1.绝对路径 完整路径,从磁盘符号开始,如:C:\Windows 2.相对路径 以当前路径为起点,不包含磁盘符号,通常使用"..\"符号来访问上级目录中的文件或文件夹. ../Windows/System32 二.Windows系统常见的特殊路径 1.当前路径 2.我的文档 3.收藏夹 4.桌面 5.最近使用的文档 6.程序当前路径 三.路径获取示例 1 private void btnGetCurPath_Click(object sender, EventArgs e

SHGetFolderPath 获取系统各文件夹路径

// SHGetFolderPath string cFilePath; SHGetFolderPath(NULL ,CSIDL_PERSONAL ,0 ,0 ,cFilePath); 以下为函数原型: HRESULT SHGetFolderPath(          HWND hwndOwner,    int nFolder,    HANDLE hToken,    DWORD dwFlags,    LPTSTR pszPath); 其中nFolder指定要获取的目录(具体参考MSDN

【.Net】C#获取Windows系统特殊文件夹的路径

系统特殊文件夹是包含公共信息的文件夹,如"Program Files"."Programs"."System"或"Startup".特殊文件夹在默认情况下由系统设置,或者由用户在安装 Windows 的某个版本时显式进行设置. Environment.GetFolderPath 方法 获取指向由指定枚举标识的系统特殊文件夹的路径. 命名空间:Systempublic static string GetFolderPath (

[VB.NET]调用系统的文件夹选择对话框

以下示例代码展示如何调用系统的文件夹选择对话框: 1 Private Function SelectFolder(ByVal Describe As String, Optional ByVal ShowNewFolder As Boolean = True) As String 2 Using nOpen As New System.Windows.Forms.FolderBrowserDialog() 3 nOpen.Description = Describe 4 nOpen.ShowNe

Win10系统Logs文件夹有什么作用?Logs文件夹可以删除吗?

Windows系统中一般都会有一个Logs文件夹,它能够记载系统运行的一些记录,我们可以使用记事本将它打开.最近,有Win10系统的用户,在查看电脑的时候发现有一个Logs文件夹,不知道Logs文件夹有什么用,能不能删除.那Logs文件夹到底能不能删除呢?今天,小编就和大家说一下Win10系统Logs文件夹有什么作用,Logs文件夹可以删除吗. 步骤如下: 一.Logs文件夹有什么用? Logs文件夹是系统日志文件夹,该文件夹是用来记录系统中硬件.澳门金沙和系统问题的信息,同时还监视系统中发生的

VC 获取指定文件夹路径的方法小结

VC获取指定文件夹路径 flyfish  2010-3-5 一 使用Shell函数 1 获取应用程序的安装路径 TCHAR buf[_MAX_PATH];SHGetSpecialFolderPath(NULL,buf,CSIDL_PROGRAM_FILES,NULL);AfxMessageBox(buf); 2 获取应用程序数据路径的文件夹 TCHAR bufApplicateData[_MAX_PATH];SHGetSpecialFolderPath(NULL,bufApplicateData

python 获取当前文件夹路径及父级目录的几种方法

获取当前文件夹路径及父级目录: import os current_dir = os.path.abspath(os.path.dirname(__file__)) print(current_dir) #F:\project\pritice current_dir1 = os.path.dirname(__file__) print(current_dir1) #F:/project/pritice parent_path = os.path.dirname(current_dir1) pri