php - management - myh go daddy
Subiendo archivos con SFTP (5)
He subido archivos con éxito a través de ftp, pero ahora debo hacerlo a través de SFTP. Puedo conectarme con éxito al servidor remoto, crear un archivo y escribir en él, pero no puedo cargar un archivo existente desde mi servidor local al servidor remoto. ¿No se dispara ftp_put con una conexión sftp?
Mi código solía escribir un archivo:
//Send file via sftp to server
$strServer = "*****";
$strServerPort = "****";
$strServerUsername = "*****";
$strServerPassword = "*****";
$csv_filename = "Test_File.csv";
//connect to server
$resConnection = ssh2_connect($strServer, $strServerPort);
if(ssh2_auth_password($resConnection, $strServerUsername, $strServerPassword)){
//Initialize SFTP subsystem
echo "connected";
$resSFTP = ssh2_sftp($resConnection);
$resFile = fopen("ssh2.sftp://{$resSFTP}/".$csv_filename, ''w'');
fwrite($resFile, "Testing");
fclose($resFile);
}else{
echo "Unable to authenticate on server";
}
¿Alguien ha tenido éxito en agarrar un archivo local y cargarlo a través de un método como el anterior con sftp? Un ejemplo sería muy apreciado.
Gracias
Al compartir más entradas, se encontró que ssh2_scp_send no se estaba copiando correctamente (los bytes eran diferentes) cuando se copió el archivo de Linux (64 bits) a Windows (32 bits), la rutina sftp funcionó a la perfección. Cuando se usa Windows con stfp, la ruta en el caso de C: / to / path se debe poner como ssh2.sftp: // {$ resSFTP} / cygdrive / c / to / path si Cygwin se usa para SSH en el cuadro de Windows .
Con el método anterior (que involucra sftp) puedes usar stream_copy_to_stream :
$resFile = fopen("ssh2.sftp://{$resSFTP}/".$csv_filename, ''w'');
$srcFile = fopen("/home/myusername/".$csv_filename, ''r'');
$writtenBytes = stream_copy_to_stream($srcFile, $resFile);
fclose($resFile);
fclose($srcFile);
También puedes intentar usar ssh2_scp_send
Para el documento simple de phpseclib, una implementación PHP SFTP pura .
Consulte el siguiente enlace:
Subiendo archivos sobre SFTP usando PHP
Estructura de la carpeta:
Main Folder->
my-files(Contain File Which Transfer To Remote Server)
phpseclib0.3.0
sftp.php
Para mí esto funcionó:
$connection = ssh2_connect($server, $serverPort);
if(ssh2_auth_password($connection, $serverUser, $serverPassword)){
echo "connected/n";
ssh2_scp_send($connection, "/path/to/local/".$file, "/path/to/remote/".$file);
echo "done/n";
} else {
echo "connection failed/n";
}
Aunque primero tuve que instalar libssh2-php:
sudo apt-get install libssh2-php
Personalmente, prefiero evitar la extensión PECL SSH2. Mi enfoque preferido involucra phpseclib, una implementación PHP SFTP pura . p.ej.
<?php
include(''Net/SFTP.php'');
$sftp = new Net_SFTP(''www.domain.tld'');
if (!$sftp->login(''username'', ''password'')) {
exit(''Login Failed'');
}
$sftp->put(''remote.ext'', ''local.ext'', NET_SFTP_LOCAL_FILE);
?>
Una de las cosas importantes que me gustan de phpseclib sobre la extensión PECL es que es portátil. Tal vez la extensión PECL funcione en una versión de Linux pero no en otra. Y en los hosts compartidos casi nunca funciona porque casi nunca se instala.
phpseclib también es, sorprendentemente, faster . Y si necesita confirmación de que el archivo cargado, puede usar el registro incorporado de phpseclib como prueba.