Desarrollo

Conectarse a SFTP desde PHP con SSH2

Una tarea bastante habitual desde PHP es conectarse a un FTP para lo cual PHP tiene diferentes funciones pero que sin embargo si se trata de SFTP seguramente haya que habilitar la librería libssh2 que no viene instalada por defecto.

Si para la instalación de PHP se utilizan el tutorial Instalación del Stack Nginx+MySQL+MutiPHP en CentOS o  Crear contenedor Docker con CentOS7/Nginx/MariaDB y MultiPHP se puede continuar sin problemas, de lo contrario convendrá solo se instalen los paquetes que se necesiten.

Lo primero va a ser instalar las siguientes librerías, sino no se tiene instalada alguna de las versiones de PHP que figuran a continuación se deben omitir dichos paquetes.

yum install -y libssh2-devel php54-php-pecl-ssh2 php55-php-pecl-ssh2 php56-php-pecl-ssh2 php70-php-pecl-ssh2 php71-php-pecl-ssh2 php72-php-pecl-ssh2 php73-php-pecl-ssh2

A continuación se debe agregar la extensión a los php.ini en este caso, estos pasos a continuación pertenecen a los repositorios de remi y a la instalación de los artículos que ya se mencionaron antes asi que la ubicación de php.ini puede cambiar según lo que tengan instalado

echo "extension=ssh2.so" >> /opt/remi/php54/root/etc/php.ini
echo "extension=ssh2.so" >> /opt/remi/php55/root/etc/php.ini
echo "extension=ssh2.so" >> /opt/remi/php56/root/etc/php.ini
echo "extension=ssh2.so" >> /opt/remi/php56/root/etc/php.ini
echo "extension=ssh2.so" >> /etc/opt/remi/php70/php.ini
echo "extension=ssh2.so" >> /etc/opt/remi/php71/php.ini
echo "extension=ssh2.so" >> /etc/opt/remi/php72/php.ini
echo "extension=ssh2.so" >> /etc/opt/remi/php73/php.ini

Por último se reinician los servicios PHP-FPM

systemctl restart php54-php-fpm
systemctl restart php55-php-fpm
systemctl restart php56-php-fpm
systemctl restart php70-php-fpm
systemctl restart php71-php-fpm
systemctl restart php72-php-fpm
systemctl restart php73-php-fpm

Para probar si funciona correctamente se puede utilizar el siguiente código PHP obviamente cambiando los datos de acceso, sino se tiene muy claro cual es el $path exacto se puede colocar simplemente /./ ( es decir barra/punto/barra)

<?php

$host = "tudominio.com";
$port = "22";
$user = "tuusuario";
$password = "tupasword";
$path = "/home/tuusuario/";

$connection = ssh2_connect($host,$port) or die ("Can't connect to FTP Server : $FTPserver");
ssh2_auth_password($connection, $user , $password);

$sftp = ssh2_sftp($connection);

$dir = opendir("ssh2.sftp://$sftp$path");

while (false !== ($file = readdir($dir))) {
echo "$file<br>\n";
}
?>

Con el ejemplo básico anterior podemos probar que haya quedado todo instalado, si te da un error seguramente falta algún paquete desde yum o falta agregar al php.ini correcto ya que en el sistema podemos tener más de uno, es algo a tener en cuenta. Si tienes cualquier duda puedes dejar la consulta en el comentario.

Entradas recientes

Estadisticas de EasyMySQL

Normalmente, a las estadísticas del blog no le presto demasiada atención, sin embargo, trabajando en…

2 days hace

Nueva pagina de Publicaciones

La idea principal detrás de este blog es marca personal, el blog es para centralizar…

1 week hace

Migrar una maquina virtual desde VirtualBox a KVM

El migrar el disco duro es bastante sencillo como se verá a continuación, la principal…

2 weeks hace

Instalar QEMU/KVM y Virtual Machine Manager

Cuando se trata de virtualización en el escritorio, una de las primeras opciones son sin…

1 month hace

Instalar adaptador WIFI TP-Link AX 1800/ Archer TX20U en Debian y Ubuntu

Siempre he sido un ferviente defensor de una conexión por cable UTP para trabajar por…

2 months hace

Nuevo dominio para el blog, otra vez!!!

Al fin pude recuperar alvarodeleon.com, no es que lo hubiera perdido, fue peor, lo deje…

3 months hace