parametros - sftp php ejemplo




No se puede hacer que SFTP funcione en PHP (6)

Estoy teniendo un problema similar. Supongo que estás haciendo algo similar a esto:

    $dir = "ssh2.sftp://{$sftp}{$remote_dir}"; 
    $handle = opendir($dir);

Cuando $remote_dir es la ruta completa desde la raíz, entonces open_dir funciona. Si $remote_dir es solo '/' o '', entonces aparece el error 'no se puede abrir' como lo hizo.

En mi caso, parece que ssh se conecta en la carpeta raíz en lugar del directorio 'home' como lo hace ftp. Mencionaste que funcionaba en un servidor diferente, así que me pregunto si es solo un problema de configuración.

Estoy escribiendo un cliente SFTP simple en PHP porque tenemos la necesidad de recuperar archivos de forma programática a través de n servidores remotos. Estoy usando la extensión PECL SSH2.

Me he topado con un bloqueo de carretera, sin embargo. La documentación en php.net sugiere que puedes hacer esto:

$stream = fopen("ssh2.sftp://$sftp/path/to/file", 'r');

Sin embargo, tengo un método de ls que intenta algo similar

public function ls($dir)
{
    $rd = "ssh2.sftp://{$this->sftp}/$dir";
    $handle = opendir($rd);
    if (!is_resource($handle)) {
        throw new SFTPException("Could not open directory.");
    }

    while (false !== ($file = readdir($handle))) {
        if (substr($file, 0, 1) != '.'){
            print $file . "\n";
        }
    }
    closedir($handle);
}

Obtuve el siguiente error:

PHP Warning:  opendir(): Unable to open ssh2.sftp://Resource id #5/outgoing on remote host

Esto tiene mucho sentido porque eso es lo que sucede cuando lanzas un recurso a la cadena. ¿La documentación está equivocada? Intenté reemplazar el recurso con el host, el nombre de usuario y el host, y tampoco funcionó. Sé que la ruta es correcta porque puedo ejecutar SFTP desde la línea de comandos y funciona bien.

¿Alguien más ha intentado usar la extensión SSH2 con SFTP? ¿Me estoy perdiendo algo obvio aquí?

ACTUALIZAR:

Configuré sftp en otra máquina internamente y funciona bien. Por lo tanto, debe haber algo sobre el servidor al que intento conectar que no funciona.


Hace poco intenté hacer funcionar SFTP en PHP y descubrí que phpseclib era mucho más fácil de usar:

http://phpseclib.sourceforge.net/

Si puede darse el lujo de no estar en un host compartido y puede instalar las extensiones que desee, tal vez la extensión PECL sea mejor, pero no todos somos tan afortunados. Además, la API de phpseclib parece un poco más intuitiva, es OOP y todo.


la forma más sencilla de que SFTP funcione dentro de PHP (incluso en Windows) sin instalar ninguna extensión, etc. es PHPSECLIB: http://phpseclib.sourceforge.net/ . El material SSH está completamente implementado en una clase PHP.

Tu uso es así:

<?php
include('Net/SFTP.php');

$sftp = new Net_SFTP('www.domain.tld');
if (!$sftp->login('username', 'password')) {
    exit('Login Failed');
}

echo $sftp->pwd();
?>

La documentación en esa página contiene un error. En su lugar, observe el ejemplo aquí: http://php.net/ssh2_sftp : lo que realmente necesita hacer es abrir un recurso SFTP especial utilizando ssh2_sftp () antes de usarlo con fopen (). Y sí, se ve así, por ejemplo, "Recurso # 24" cuando se convierte en cadena ... un poco extraño, pero aparentemente funciona.

Otra advertencia es que SFTP se inicia en el directorio raíz en lugar del directorio de inicio del usuario remoto, por lo que su ruta remota en el URI siempre debe ser absoluta.


Para versiones de php> 5.6.27 use intval ()

$sftpConnection = ssh2_connect($host);
$sftp = ssh2_sftp($sftpConnection);
$fp = fopen("ssh2.sftp://" . intval($sftp) . $remoteFile, "r");

https://bugs.php.net/bug.php?id=73597


Resolvió mi problema al habilitar el soporte de sftp en el servidor (Powershell)







sftp