public static PhpValue pathinfo(string path, PathInfoOptions options = PathInfoOptions.All)
{
// collect strings
string dirname = null, basename = null, extension = null, filename = null;
if ((options & PathInfoOptions.BaseName) != 0 ||
(options & PathInfoOptions.Extension) != 0 ||
(options & PathInfoOptions.FileName) != 0)
basename = PhpPath.basename(path);
if ((options & PathInfoOptions.DirName) != 0)
dirname = PhpPath.dirname(path);
if ((options & PathInfoOptions.Extension) != 0)
{
int last_dot = basename.LastIndexOf('.');
if (last_dot >= 0)
extension = basename.Substring(last_dot + 1);
}
if ((options & PathInfoOptions.FileName) != 0)
{
int last_dot = basename.LastIndexOf('.');
if (last_dot >= 0)
filename = basename.Substring(0, last_dot);
else
filename = basename;
}
// return requested value or all of them in an associative array
if (options == PathInfoOptions.All)
{
PhpArray result = new PhpArray(0, 4);
result.Add("dirname", dirname);
result.Add("basename", basename);
result.Add("extension", extension);
result.Add("filename", filename);
return PhpValue.Create(result);
}
if ((options & PathInfoOptions.DirName) != 0)
return PhpValue.Create(dirname);
if ((options & PathInfoOptions.BaseName) != 0)
return PhpValue.Create(basename);
if ((options & PathInfoOptions.Extension) != 0)
return PhpValue.Create(extension);
if ((options & PathInfoOptions.FileName) != 0)
return PhpValue.Create(filename);
return PhpValue.Null;
}