note 55936 deleted from function.ftp-rawlist by crell
| From: | crell@php.net | Date: | Thu, 31 Mar 2022 19:14:20 +0000 |
| Subject: | note 55936 deleted from function.ftp-rawlist by crell | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-217894@lists.php.net to get a copy of this message | ||
Note Submitter: tig3r at poczta dot onet dot pl
----
Previous example (by davidknoll at o2 dot co dot uk) works well if ftp_systype() returned
"UNIX", but sometimes I am experiencing "Windows_NT". Here is some improvement:
<?php
function parsed_listing($path)
{
$conn = ftp_connect(FTP_HOST);
ftp_login($conn, FTP_USER, FTP_PASS);
$systype = ftp_systype($conn_id);
$list = ftp_rawlist($conn, "-a ".FTP_BASE.$path);
ftp_close($conn);
$i = 0;
foreach ($list as $current) {
switch ($systype) {
case "Windows_NT":
ereg("([0-9]{2})-([0-9]{2})-([0-9]{2}) +([0-9]{2}):([0-9]{2})(AM|PM)
+([0-9]+|<DIR>) +(.+)",$current,$split);
if (is_array($split)) {
if ($split[3]<70) { $split[3]+=2000; } else { $split[3]+=1900; } // 4digit year fix
$parsed[$i]['isdir'] = ($split[7]=="<DIR>");
$parsed[$i]['size'] = $split[7];
$parsed[$i]['month'] = $split[1];
$parsed[$i]['day'] = $split[2];
$parsed[$i]['time/year'] = $split[3];
$parsed[$i]['name'] = $split[8];
$i++;
}
break;
case "UNIX":
default:
// etc.
break;
}
}
return $parsed;
}
?>