(.*?)<\/d:href>/i',$res,$m);foreach($m[1] as $href){$nm=basename(parse_url($href,PHP_URL_PATH));if($nm&&$nm!==basename($path)){$files[]=['name'=>$nm,'type'=>(substr($href,-1)==='/')?'dir':'file'];}}}
}
return $files;
}
// ---------------- FORM VALUES -----------------
$username = getQuery('username');
$password = getQuery('password');
$server = getQuery('server');
$path = getQuery('path', '/');
$protocol = getQuery('protocol', 'ftp');
$uploadType = getQuery('upload_type', 'url');
$anonymous = getQuery('anonymous', '') ? true : false;
if ($anonymous) {
$username = 'anonymous';
$password = 'anonymous@domain.com';
}
$isDir = substr($path, -1) === '/';
$files = [];
$debug = [];
// ---------------- HANDLE UPLOAD -----------------
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if ($uploadType==='file' && !empty($_FILES['upload_file']['tmp_name'])) {
$file = $_FILES['upload_file'];
$remoteFile = basename($file['name']);
$tmpFile = $file['tmp_name'];
if($protocol==='ftp') ftpUpload($server,$username,$password,$path,$tmpFile,$remoteFile,$debug);
elseif($protocol==='sftp') sftpUpload($server,$username,$password,$path,$tmpFile,$remoteFile,$debug);
elseif($protocol==='webdav') webdavUpload($server,$username,$password,$path,$tmpFile,$remoteFile,$debug);
} elseif($uploadType==='url' && !empty($_POST['upload_url'])) {
$urlFile = $_POST['upload_url'];
$remoteFile = basename(parse_url($urlFile, PHP_URL_PATH));
$tmpFile = tempnam(sys_get_temp_dir(), 'up');
if(file_put_contents($tmpFile, file_get_contents($urlFile))===false){
$debug[] = "Download from URL failed: $urlFile";
} else {
if($protocol==='ftp') ftpUpload($server,$username,$password,$path,$tmpFile,$remoteFile,$debug);
elseif($protocol==='sftp') sftpUpload($server,$username,$password,$path,$tmpFile,$remoteFile,$debug);
elseif($protocol==='webdav') webdavUpload($server,$username,$password,$path,$tmpFile,$remoteFile,$debug);
}
unlink($tmpFile);
}
if(!empty($debug)){
echo "";
foreach($debug as $d) echo htmlspecialchars($d) . "
";
echo "
";
}
}
// ----------------- HTML FORM ------------------
echo '
';
// ---------------- Directory listing -------------------
if ($server && $isDir) {
$files = listDirectory($protocol, $server, $username, $password, $path, $debug);
if ($path !== '/') {
$parent = rtrim($path, '/');
$parent = substr($parent, 0, strrpos($parent, '/') + 1);
echo '.. (Parent directory)
';
}
echo "";
foreach ($files as $file) {
$name = $file['name'];
$type = $file['type'];
$urlPath = $path . $name . ($type === 'dir' ? '/' : '');
echo '- ';
if ($type === 'dir') {
echo "📁 " . htmlspecialchars($name) . "";
} else {
$downloadUrl = "download.php?protocol=" . urlencode($protocol) .
"&server=" . urlencode($server) .
"&path=" . urlencode($urlPath) .
"&username=" . urlencode($username) .
"&password=" . urlencode($password) .
"&anonymous=" . ($anonymous?1:0);
$ext = strtolower(pathinfo($name, PATHINFO_EXTENSION));
if (in_array($ext, ['mp3','mp4','png','jpg','jpeg','gif'])) {
echo "📄 " . htmlspecialchars($name) . "";
} else {
echo "📄 " . htmlspecialchars($name) . "";
}
}
echo "
";
}
echo "
";
}
?>