Just nu i M3-nätverket
Gå till innehåll

PhP: sftp ladda ner fler behöver hjälp


kikotte

Rekommendera Poster

Hej igen,

 

Jag försöker göra så att jag kan ladda ner saker från min web panel här är en länk http://phpseclib.sourceforge.net/sftp/examples.html och gå till "Download File" jag försöker bygga in det i min panel men får inte det att funka så bra.

<?php

require("configuration.php");
require("include.php");

require_once('./libs/phpseclib/SFTP.php');
require_once("./libs/phpseclib/Crypt/AES.php");


if(!isset($_SESSION['clientid']))
{
	//DON'T KNOW HOW THE REQEUSTOR IS!!
	die();
}

$clientid = $_SESSION['clientid'];

$serverid = '';
$extendedPath = '';
$action = '';

if(!isset($_GET['serverid']) or !isset($_GET['path']) or !isset($_GET['action']))
{
	die();
}


$serverid = $_GET['serverid'];
$extendedPath = $_GET['path'];
$action = $_GET['action'];

$boxDetailsSQL = sprintf("SELECT box.boxid, box.ip, box.login, box.password, box.sshport, srv.path
							FROM %sbox box
							JOIN %sserver srv ON box.boxid = srv.boxid
							JOIN %sgroupMember grpm ON (grpm.groupids LIKE CONCAT(srv.groupid, ';%%')
													  OR grpm.groupids LIKE CONCAT('%%;', srv.groupid, ';%%'))

							WHERE srv.serverid = %d
							AND grpm.clientid = %d;", DBPREFIX, DBPREFIX, DBPREFIX, $serverid, $clientid);
							
$boxDetails = mysql_query($boxDetailsSQL);
$rowsBoxes = mysql_fetch_assoc($boxDetails);

$aes = new Crypt_AES();
$aes->setKeyLength(256);
$aes->setKey(CRYPT_KEY);
		
$sftp= new Net_SFTP($rowsBoxes['ip'], $rowsBoxes['sshport']);

if(!$sftp->login($rowsBoxes['login'], $aes->decrypt($rowsBoxes['password'])))
{
	echo 'Failed to connect';
	die();
}


//ACTION SELECTOR
if($action == 'list')
{
	getlist($rowsBoxes, $extendedPath, $sftp);
}	

if($action == 'fileUpload')
{
	fileUpload($rowsBoxes, $extendedPath, $sftp);

}	

if($action == 'delete')
{
    delete($rowsBoxes, $extendedPath, $sftp);	
}	

//ACTION FUNCTIONS

function delete($rowsBoxes, $extendedPath, $sftp)
{
	$remoteFile = dirname($rowsBoxes['path']).'/'.trim($extendedPath.'/');
	return $sftp->delete($remoteFile, true);
}


function fileUpload($rowsBoxes, $extendedPath, $sftp)
{
	$sourceFile = $_FILES["uploadFile"]["tmp_name"];
	$sourceName = $_FILES["uploadFile"]["name"];
	
	$remoteFile = dirname($rowsBoxes['path']).'/'.trim($extendedPath.'/'.$sourceName, '/');
	
	echo $sftp->put($remoteFile, file_get_contents($sourceFile));
}


function getList($rowsBoxes, $extendedPath, $sftp)
{	

	$path =  dirname($rowsBoxes['path']).$extendedPath.'/';
	
	//echo $path;

	$list = $sftp->rawlist($path);	
	
	if(count($list) > 0)
	{
		foreach($list as $key => $row)
		{
			$names[] = $key;
			$types[] = $row['type'];	
		}

		array_multisort($types, SORT_DESC, $names, SORT_ASC, $list);
	}
	
	echo '<div class="well">';
	echo '<div class="pull-left">'.$extendedPath.'</div>';
	
	echo '<form enctype="multipart/form-data" class="form-inline" name="uploadForm" role="form">';
	echo '<input type="hidden" id="path" name="path" value="'.$extendedPath.'"></input>';
	echo '<div class="input-group pull-right">';
	echo '<input type="file" name="uploadFile" id="uploadFile">';
	echo '<span class="input-group-btn" style="margin-right:5px;">';
    echo '<button id="upload" type="button" class="btn btn-success">Upload</button>';
    echo '</span>';
	
	echo '';
	echo '<button id="delete" type="button" class="btn btn-danger">Delete</button></div>';

	echo '</div>';
	echo '</form>';
	
	RenderFileList($list, $extendedPath);
	

}

function RenderFileList($list, $extendedPath)
{
	echo '<table class="table table-condensed table-striped">';
	echo '<thead>';
	echo '<tr>';
	echo '<th width="16px"></th>';
	echo '<th width="16px"></th>';
	echo '<th>Name</th>';
	echo '<th style="text-align:right">Size</th>';
	echo '<th style="text-align:right">Modified</th>';
	echo '</tr>';
	echo '</thead>';
	echo '<tbody>';
	
	foreach($list as $key => $row)
	{
		if($key != '.')
		{
			echo '<tr>';	
			echo '<td><div class="checkbox"><input class="fileSelector" type="checkbox" value="'.$extendedPath.'/'.$key.'"></div></td>';
			echo '<td>';
					
			switch ($row['type'])
			{	
				case 2:
					echo '<span class="icon-folder-close"></span>';
					break;
				case 1;
					echo '<span class="icon-file"></span>';
					break;
			}	
			echo '</td>';
			
			if($key == '..')
			{
				
				echo '<td><b><div title="Return to parent folder" style="cursor: pointer;" class="folder" value="'.dirname($extendedPath).'">'.$key.'</div></b></td>';
				
			
			}
			elseif($row['type'] == 2)
			{
				echo '<td><div style="cursor: pointer;" class="folder" value="'.$extendedPath.'/'.$key.'">'.$key.'</div></td>';
			}
			else	
			{
			echo '<td>'.$key.'</td>';
			}
			
			echo '<td style="text-align:right;">'.formatBytes($row['size']).'</td>';
			echo '<td style="text-align:right;">'.gmdate("Y-m-d H:i:s", $row['mtime']).'</td>';
		}
	}
	echo '</tbody>';
	echo '</table>';
}


function formatBytes($size, $precision = 2)
{
	if($size == 0)
	{
		return 0;
	}else
	{
    $base = log($size) / log(1024);
    $suffixes = array('B', 'KB', 'MB', 'GB', 'TB');   
    return round(pow(1024, $base - floor($base)), $precision) . $suffixes[floor($base)];
	}
}

Den här panelen är inte 100% klar så jag försöker lägga till mer saker i panel.

Det är så här att i server filer i panel ska dom välja en eller fler saker som dom kan ladda ner från sin panel. Har försök nu snart 14 timmar att komma på hur man ska göra det på.

Länk till kommentar
Dela på andra webbplatser

function fileDownload ($rowsBoxes, $extendedPath, $sftp)
{
	$remoteFile = dirname($rowsBoxes['path']).'/'.trim($extendedPath.'/');
	return $sftp->get($remoteFile, 'filename.local');
}

Jag har gjort den här sen så vet jag inte hur jag ska fort sätta med det här.

$sftp->get('filename.remote', 'filename.local');

Det är där filename.local som jag inte vet hur man ska göra för att den ska börja ladda ner.

Länk till kommentar
Dela på andra webbplatser

$sftp->get('filename.remote', 'filename.local');

 

Raden gör att filen laddas ner där koden exekveras och eftersom koden exekveras i servern så hamnar filen i ????

Länk till kommentar
Dela på andra webbplatser

$sftp->get('filename.remote', 'filename.local');

 

Raden gör att filen laddas ner där koden exekveras och eftersom koden exekveras i servern så hamnar filen i ????

Inget händer. någon ide hur jag fixar det här problemet?

Länk till kommentar
Dela på andra webbplatser

Alltså om du försöker att ladda ner en fil som ligger på servern till klienten så kommer det inte att funka med FTP. Som sagt det på grund av att koden exekveras på servern.

 

Du kan överföra filer via HTTP däremot. Något jag skrev för länge sedan

<?php
/**
 * Download a file from the server
 */
class FileDownloader{
	/**
	 * Pushes a file on the server to the client.
	 * @param  string $filePath The full path of the file.
	 * @throws Exception If the file does not exist.
	 * @return void
	 */
	public function download($filePath) {
		if(!file_exists($filePath)) {
			throw new \Exception("The file does not exist");
		}

	    header('Content-Description: File Transfer');
	    header('Content-Type: application/octet-stream');
	    header('Content-Disposition: attachment; filename='.basename($filePath));
	    header('Content-Transfer-Encoding: binary');
	    header('Expires: 0');
	    header('Cache-Control: must-revalidate');
	    header('Pragma: public');
	    header('Content-Length: ' . filesize($filePath));
	    readfile($filePath);
	}
}
Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...