directory_separator(directoryseparator)
什么是psr-0,psr-1,psr-2标准
转自:
FIG组织在制定跟PHP相关规范,简称PSR,PSR旨在通过讨论我们代码项目的共同点以找出一个协作编程的方法。
什么是psr0强调自动加载的方式
下文描述了若要使用一个通用的自动加载器(autoloader),你所需要遵守的规范:
规范
一个完全标准的命名空间(namespace)和类(class)的结构是这样的:\*
每个命名空间(namespace)都必须有一个顶级的空间名(namespace)("组织名(Vendor Name)")。
每个命名空间(namespace)中可以根据需要使用任意数量的子命名空间(sub-namespace)。
从文件系统中加载源文件时,空间名(namespace)中的分隔符将被转换为 DIRECTORY_SEPARATOR。
类名(class name)中的每个下划线_都将被转换为一个DIRECTORY_SEPARATOR。下划线_在空间名(namespace)中没有什么特殊的意义。
完全标准的命名空间(namespace)和类(class)从文件系统加载源文件时将会加上.php后缀。
组织名(vendor name),空间名(namespace),类名(class name)都由大小写字母组合而成。
示例
\Doctrine\Common\IsolatedClassLoader = /path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php
\Symfony\Core\Request = /path/to/project/lib/vendor/Symfony/Core/Request.php
\Zend\Acl = /path/to/project/lib/vendor/Zend/Acl.php
\Zend\Mail\Message = /path/to/project/lib/vendor/Zend/Mail/Message.php
空间名(namespace)和类名(class name)中的下划线
\namespace\package\Class_Name = /path/to/project/lib/vendor/namespace/package/Class/Name.php
\namespace\package_name\Class_Name = /path/to/project/lib/vendor/namespace/package_name/Class/Name.php
以上是我们为实现通用的自动加载而制定的最低标准。你可以利用能够自动加载PHP 5.3类的SplClassLoader来测试你的代码是否符合这些标准。
实例
下面是一个怎样利用上述标准来实现自动加载的示例函数。
?php
function autoload($className)
{
$className = ltrim($className, '\\');
$fileName = '';
$namespace = '';
if ($lastNsPos = strrpos($className, '\\')) {
$namespace = substr($className, 0, $lastNsPos);
$className = substr($className, $lastNsPos + 1);
$fileName = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
}
$fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';
require $fileName;
}
SplClassLoader实现
下面的gist是一个按照上面建议的标准来自动加载类的SplClassLoader实例。这是依据这些标准来加载PHP 5.3类的推荐方案。
什么是psr1,定义基本代码规范
本节我们将会讨论一些基本的代码规范问题,以此作为将来讨论更高级别的代码分享和技术互用的基础。
RFC 2119中的必须(MUST),不可(MUST NOT),建议(SHOULD),不建议(SHOULD NOT),可以/可能(MAY)等关键词将在本节用来做一些解释性的描述。
1. 概述
源文件必须只使用 和 这两种标签。
源文件中php代码的编码格式必须只使用不带字节顺序标记(BOM)的UTF-8。
一个源文件建议只用来做声明(类(class),函数(function),常量(constant)等)或者只用来做一些引起副作用的操作(例如:输出信息,修改.ini配置等),但不建议同时做这两件事。
命名空间(namespace)和类(class) 必须遵守PSR-0标准。
类名(class name) 必须使用骆驼式(StudlyCaps)写法 (译者注:驼峰式(cameCase)的一种变种,后文将直接用StudlyCaps表示)。
类(class)中的常量必须只由大写字母和下划线(_)组成。
方法名(method name) 必须使用驼峰式(cameCase)写法(译者注:后文将直接用camelCase表示)。
2. 文件
2.1. PHP标签
PHP代码必须只使用长标签()或者短输出式标签(?= ?);而不可使用其他标签。
2.2. 字符编码
PHP代码的编码格式必须只使用不带字节顺序标记(BOM)的UTF-8。
2.3. 副作用
一个源文件建议只用来做声明(类(class),函数(function),常量(constant)等)或者只用来做一些引起副作用的操作(例如:输出信息,修改.ini配置等),但不建议同时做这两件事。
短语副作用(side effects)的意思是 在包含文件时 所执行的逻辑与所声明的类(class),函数(function),常量(constant)等没有直接的关系。
副作用(side effects)包含但不局限于:产生输出,显式地使用require或include,连接外部服务,修改ini配置,触发错误或异常,修改全局或者静态变量,读取或修改文件等等
下面是一个既包含声明又有副作用的示例文件;即应避免的例子:
?php
// 副作用:修改了ini配置
ini_set('error_reporting', E_ALL);
// 副作用:载入了文件
include "file.php";
// 副作用:产生了输出
echo "html\n";
// 声明
function foo()
{
// 函数体
}
下面是一个仅包含声明的示例文件;即应提倡的例子:
?php
// 声明
function foo()
{
// 函数体
}
// 条件式声明不算做是副作用
if (! function_exists('bar')) {
function bar()
{
// 函数体
}
}
3. 空间名(namespace)和类名(class name)
命名空间(namespace)和类(class)必须遵守 PSR-0.
这意味着一个源文件中只能有一个类(class),并且每个类(class)至少要有一级空间名(namespace):即一个顶级的组织名(vendor name)。
类名(class name) 必须使用StudlyCaps写法。
PHP5.3之后的代码必须使用正式的命名空间(namespace) 例子:
?php
// PHP 5.3 及之后:
namespace Vendor\Model;
class Foo
{
}
PHP5.2.x之前的代码建议用伪命名空间Vendor_作为类名(class name)的前缀
?php
// PHP 5.2.x 及之前:
class Vendor_Model_Foo
{
}
4. 类的常量、属性和方法
术语类(class)指所有的类(class),接口(interface)和特性(trait)
4.1. 常量
类常量必须只由大写字母和下划线(_)组成。 例子:
?php
namespace Vendor\Model;
class Foo
{
const VERSION = '1.0';
const DATE_APPROVED = '2012-06-01';
}
4.2. 属性
本指南中故意不对$StulyCaps,$camelCase或者$unser_score中的某一种风格作特别推荐,完全由读者依据个人喜好决定属性名的命名风格。
但是不管你如何定义属性名,建议在一个合理的范围内保持一致。这个范围可能是组织(vendor)级别的,包(package)级别的,类(class)级别的,或者方法(method)级别的。
4.3. 方法
方法名则必须使用camelCase()风格来声明。
什么是PSR2定义代码风格
代码风格指南
本手册是基础代码规范(PSR-1)的继承和扩展。
为了尽可能的提升阅读其他人代码时的效率,下面例举了一系列的通用规则,特别是有关于PHP代码风格的。
各个成员项目间的共性组成了这组代码规范。当开发者们在多个项目中合作时,本指南将会成为所有这些项目中共用的一组代码规范。 因此,本指南的益处不在于这些规则本身,而在于在所有项目中共用这些规则。
RFC 2119中的必须(MUST),不可(MUST NOT),建议(SHOULD),不建议(SHOULD NOT),可以/可能(MAY)等关键词将在本节用来做一些解释性的描述。
Shell获取某目录下所有文件夹的名称
Shell获取某目录下所有文件夹的名称, 已知目录D:/temp,获取temp下所有文件夹的名称并输出,Shell怎么写?
方法有三,如下:
#!/bin/bash
#方法一
dir=$(ls?-l?D:/temp/?|awk?'/^d/?{print?$NF}')
for?i?in?$dir
do
echo?$i
done
#######
#方法二
for?dir?in?$(ls?D:/tmep/)
do
[?-d?$dir?]??echo?$dir
done
##方法三
ls?-l?D:/temp/?|awk?'/^d/?{print?$NF}'
##?其实同方法一,直接就可以显示不用for循环
php 获取目录下的所有文件夹名称
大致思路:
?php
function traverseDir($dir){
if($dir_handle = @opendir($dir)){
while($filename = readdir($dir_handle)){
if($filename != "." $filename != ".."){
$subFile = $dir.DIRECTORY_SEPARATOR.$filename; 要将源目录及子文件相连
if(is_dir($subFile)){ 若子文件是个目录
echo $filename.'br'; 输出该目录名称
traverseDir($subFile); 递归找出下级目录名称
}
}
}
closedir($dir_handle);
}
}
$dirNames = traverseDir("d:/dos"); 测试某目录
?
VBS获取当前目录下所有文件夹名字
呵呵,原来是团友啊我写了一个!Set ws=WScript.CreateObject("wscript.shell")
w=ws.CurrentDirectory
Set fso=WScript.CreateObject("scripting.filesystemobject")
Set fs=fso.GetFolder(w)
Set f=fs.SubFolders
For Each uu In f
t=t uu.Path vbcrlf
Next
MsgBox t
使用VB获得目录下所有文件夹名称的问题
用FSO对象模型不是很好么,这种代码看的好痛苦哇!
C# 获取Ftp某个目录下的所有文件(不要文件夹)
我在之前做过一个FTP的客户端工具。
drw 文件夹
-rw 文件(有扩展名或无扩展名)
我是根据服务端返回的报文进行分析获取的列表。
给你一些代码片段:
/ summary
/ 获取指定目录下的文件和文件夹。
/ /summary
/ param name=path要获取的目录/param
/ param name=WRMethods要发送到FTP服务器的密令。/param
/ returns/returns
public string[] GetFileList(string path, string WRMethods)从ftp服务器上获得文件列表
{
WebResponse response;
string[] downloadFiles;
int conut = 4;
StringBuilder result = new StringBuilder();
Connect(path);
if (FTPVariable.IsUseProxy_ftp)
{
req = FtpProxy.GetFtpSelectProxy(FTPVariable.FtpCommand_transferProxyName);
}
req = 12000;
如果不应销毁到服务器的连接,则为 true;否则为 false。默认值为 true。
req = WRMethods;
try
{
response = (FtpWebResponse)req;
goto Ftp_lbl_03;
}
catch (WebException webex)
{
GetReply(webex.Message);
if (ReplyCode == 530) 未登录。
{
goto Ftp_lbl_04;
}
else if (ReplyCode == 550)
{
goto Ftp_lbl_04;
}
else
{
FtpManage.SetLog("获取列表超时,等候1秒后重试!");
goto Ftp_lbl_01;
}
}
Ftp_lbl_01:
try
{
FtpManage.SetLog("正在连接服务器 " + FtpRemoteHost);
response = GetRequest(path, WRMethods);
}
catch (WebException)
{
FtpManage.SetLog("获取列表超时,等候1秒后重试!");
downloadFiles = null;
System.Threading.Thread.Sleep(1000);
if (conut == 0)
{
goto Ftp_lbl_02;
}
conut--;
goto Ftp_lbl_01;
}
catch (Exception ex)
{
MSG.Show(ex.Message, Global.GetRS["msgTilteError"], MessageBoxButton.OK, MsgIco.Error);
FtpManage.SetLog("命令执行失败,原因:" + ex.Message);
downloadFiles = null;
return downloadFiles;
}
Ftp_lbl_03:
StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.Default);中文文件名
string line = reader.ReadLine();
while (line != null)
{
result.Append(line);
result.Append("\n");
line = reader.ReadLine();
}
if (result.Length == 0)
{
return null;
}
to remove the trailing '\n'
result.Remove(result.ToString().LastIndexOf('\n'), 1);
reader.Close();
response.Close();
FtpManage.SetLog("命令已成功执行");
return result.ToString().Split('\n');
Ftp_lbl_04:
FtpManage.SetLog(ReplyInfo);
return null;
Ftp_lbl_02:
FtpManage.SetLog("550 获取列表失败,无法连接远程服务器!");
FtpManage.ftpmanage.IsRefurbish = true;
return null;
}
/ summary
/ 获取指定目录下的文件和文件夹。
/ /summary
/ param name=path要获取的目录/param
/ returns/returns
public string[] GetFileList(string path)从ftp服务器上获得文件列表
{
return GetFileList(FTPVariable.FtpURLhead + FtpRemoteHost + "/" + path, WebRequestMethods.);
}
/ summary
/ 获取指定目录下的文件和文件夹。
/ /summary
/ returns/returns
public string[] GetFileList()从ftp服务器上获得文件列表
{
return GetFileList(FTPVariable.FtpURLhead + FtpRemoteHost + "/", WebRequestMethods.);
}
/ summary
/ 获取目录和文件名,返回目录表。
/ /summary
/ param name=path要获取的目录/param
/ returns/returns
public string[] GetCatalog_FileList(string path)
{
string[] fountainhead = GetFileList(FTPVariable.FtpURLhead + FtpRemoteHost + "/" + path, WebRequestMethods.);
string[] Catalog = null;
if (fountainhead == null)
{
return null;
}
Catalog = new string[fountainhead.Length];
for (int i = 3; i fountainhead.Length; i++)
{
Catalog[i - 3] += fountainhead[i].Substring(55, fountainhead[i].Length - 55) + "";FileName
Catalog[i - 3] += fountainhead[i].Substring(30, 12) + "";FileSize
Catalog[i - 3] += fountainhead[i].Substring(42, 13) + "";AmendDate
Catalog[i - 3] += fountainhead[i].Substring(0, 3) + "";
}
return Catalog;
}
请问ASP中如何获取某个目录中所有文件夹的名称?
fso.GetFolder(path)
shell编程如何获取指定目录下所有文件的名称,例:目录:/root/dira/下的 001.DAT…009.DAT 9个文件名称?
你刚才不是问过了么?
vb 如何读取某目录下所有文件及子文件夹
查找某目录下所有 文件 及 子文件夹
试一试不用 FileSystemObject 对象,只用基本控件的代码。
'例子需控件:Command1,List1,List2,File1,Dir1,都采用默认属性。
'例如,查找 C:\ ,带 '** 的语可修改
Dim ctFind As Boolean
Private Sub Form_Load()
Me.Caption = "查找所有文件及文件夹"
Command1.Caption = "查找"
List2.Visible = False: File1.Visible = False: Dir1.Visible = False
Label1.Caption = "就绪"
End Sub
Private Sub Form_Unload(Cancel As Integer)
End
End Sub
Private Sub Form_Resize()
Dim W As Long
On Error Resume Next
W = 720
List1.Move 0, 0, Me.ScaleWidth - W - 120, Me.ScaleHeight - 300
Command1.Move Me.ScaleWidth - W - 60, 300, W
Label1.Move 90, Me.ScaleHeight - 255, Screen.Width, 255
End Sub
Private Sub Command1_Click()
ctFind = Not ctFind
If ctFind Then
Command1.Caption = "取消"
Call FindDirFile("C:") '**查找 C:\ 下的所有文件和目录,或 C:\Windows 等
Command1.Caption = "查找"
Else
Command1.Caption = "查找"
End If
End Sub
Private Sub FindDirFile(ByVal nPath As String)
Dim I As Long, nDir As String, Ci As Long
ctFind = True
List1.Clear: List2.Clear
If Right(nPath, 1) "\" Then nPath = nPath "\"
List1.AddItem "查找 " nPath: List2.AddItem nPath
File1.Pattern = "*"
File1.System = True: File1.Hidden = True: File1.ReadOnly = True
On Error GoTo Cuo
Dir1.Path = nPath
On Error GoTo 0
Do
If List2.ListCount = 0 Then Exit Do
nPath = List2.List(0)
List2.RemoveItem 0
Dir1.Path = nPath
For I = 0 To Dir1.ListCount - 1
GoSub ShowGe
nDir = Dir1.List(I)
If Right(nDir, 1) "\" Then nDir = nDir "\"
List1.AddItem "■" nDir
List2.AddItem nDir
Next
File1.Path = nPath
For I = 0 To File1.ListCount - 1
GoSub ShowGe
List1.AddItem " " nPath File1.List(I)
Next
Loop
Label1.Caption = "查找完毕,共找到 " List1.ListCount " 个条目"
ctFind = False
Exit Sub
Cuo:
List1.AddItem "起始目录不存在:" nPath
ctFind = False
Exit Sub
ShowGe:
Ci = Ci + 1
If Ci 99 Then Return
Ci = 0
Label1.Caption = "已找到 " List1.ListCount " 个:" nPath
DoEvents
If ctFind Then Return
End Sub
linux shell脚本怎么获取目录下所有txt文件名称
执行如下三条命令即可:
(1)、$script myresultfile
(2)、$ls -al *.txt
(3)、$exit
此时,该目录下的所有 txt 文件名称就会以长格式保存在 myresultfile 文件中了。
然后你再使用 SHELL 编程的功能把那些无用的列去掉即可。
在c#中,什么是分隔符?
目录分隔符
Path.DirectorySeparatorChar 字段
public static readonly char DirectorySeparatorChar
提供平台特定的字符,该字符用于在反映分层文件系统组织的路径字符串中分隔目录级别。
在该字段中存储的字符不能位于 InvalidPathChars 中。AltDirectorySeparatorChar 和 DirectorySeparatorChar 都适用于在路径字符串中分隔目录级别。
该字段的值在 Unix 上为斜杠(“/”),在 Windows 和 Macintosh 操作系统上为反斜杠(“\”)。
替换分隔符
Path.AltDirectorySeparatorChar
public static readonly char AltDirectorySeparatorChar
提供平台特定的替换字符,该替换字符用于在反映分层文件系统组织的路径字符串中分隔目录级别。
在此字段中存储的字符不能位于 InvalidPathChars 中。该字段可被设置为与 DirectorySeparatorChar 相同的值。AltDirectorySeparatorChar 和 DirectorySeparatorChar 都适用于在路径字符串中分隔目录级别。
该字段的值在 Unix 上为反斜杠(“\”),在 Windows 和 Macintosh 操作系统上为斜杠(“/”)。
环境变量中路径分隔符
Path.PathSeparator
public static readonly char PathSeparator
用于在环境变量中分隔路径字符串的平台特定的分隔符。在基于 Windows 的桌面平台上,默认情况下该字段的值是分号 (;),但在其他平台上可能会有所不同。
卷分隔符
Path.AltDirectorySeparatorChar
public static readonly char VolumeSeparatorChar
提供平台特定的卷分隔符。该字段的值在 Windows 和 Macintosh 上为冒号(“:”),在 Unix 操作系统上为斜杠(“/”)。这对于分析像“c:\windows”或“MacVolume:System Folder”这样的路径最为有用。
php 如何获得一个网站下面所有网页的路径
function listfile($dir)
{
$fileArray = array();
$cFileNameArray = array();
if($handle = opendir($dir))
{
while(($file = readdir($handle)) !== false)
{
if($file !="." $file !="..")
{
if(is_dir($dir . DIRECTORY_SEPARATOR . $file))
{
$cFileNameArray = listfile($dir . DIRECTORY_SEPARATOR . $file);
$fileArray = array_merge($fileArray,$cFileNameArray);
}
else
{
$fileArray[] = $dir . DIRECTORY_SEPARATOR . $file;
}
}
}
fclose($handle);
}
return $fileArray;
}
//这个函数是输入物理路径,得到物理路径下所有的文件路径
$dir=dirname(realpath('1.php'));
//这个是假设文件名为1.php时,取得当前物理路径的。
$file_list=listfile($dir);
echo 'pre';
print_r($file_list);
echo '/pre';
//函数调用以及显示
取得所有文件的路径之后根据你的网页文件特点写个正则表达式判断就行了,不过这获得所有路径的做法非常占资源的,最好还是少用,最适合的还是设计网站时把所有网页文件都放到同一个文件夹下就好了