ssh2_scp_recv blijft hangen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Nariman
  • Registratie: November 2001
  • Laatst online: 31-01-2024
Hallo,

Ik ben bezig met een stukje code om bestanden op een externe sFTP server te kopieren naar een locale map op mijn webserver.

Ik wil hiervoor ssh2_scp_recv() gebruiken, maar de code blijft hangen (zonder resultaat).

Mijn code ziet er zo uit:
PHP:
1
2
3
4
5
6
7
8
$dir_import_remote  = "/extern_sftp_server/snd";
$dir_import_local   = "/var/www/local_server/import_map";
$fileNaam           = "/item.xml";

$connection = ssh2_connect($FTP_host, 22);
ssh2_auth_password($connection, $FTP_user, $FTP_pass);

ssh2_scp_recv($connection, $dir_import_remote . $fileNaam,  $dir_import_local . $fileNaam);


Wat doe ik nou fout?
Alvast bedankt.

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Zet je error_reporting hoog en je display_errors aan.

Acties:
  • 0 Henk 'm!

  • Nariman
  • Registratie: November 2001
  • Laatst online: 31-01-2024
HuHu schreef op maandag 15 november 2010 @ 15:22:
Zet je error_reporting hoog en je display_errors aan.
Hij staat nu op E_ALL
Echt geen idee wat er fout gaat.

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Nariman schreef op maandag 15 november 2010 @ 15:34:
[...]

Hij staat nu op E_ALL
Echt geen idee wat er fout gaat.
Zet hem op E_ALL | E_STRICT. Staat je display_errors aan? Wat zijn de return-waarden van ssh2_connect, ssh2_auth_password en ssh2_scp_recv?

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 11-09 20:27

Matis

Rubber Rocket

Misschien een gekke vraag, maar weet je ook zeker dat het externe bestand bestaat?
Ik zie ook dat je je bestand naar een (hoogstwaarschijnlijke) read-only locatie probeert te schrijven. Ik denk dat de PHP/HTTP deamon er niet mag/kan schrijven.

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • Nariman
  • Registratie: November 2001
  • Laatst online: 31-01-2024
HuHu schreef op maandag 15 november 2010 @ 16:00:
[...]

Zet hem op E_ALL | E_STRICT. Staat je display_errors aan? Wat zijn de return-waarden van ssh2_connect, ssh2_auth_password en ssh2_scp_recv?
E_ALL is naar mijn weten alle errors weergeven, maar ik heb het ook met E_ALL | E_STRICT geprobeerd.
display_errors staat inderdaad aan.

ssh2_connect geeft TRUE
ssh2_auth_password geeft TRUE
ssh2_scp_recv geeft NIETS, blijft hangen.

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 11-09 20:27

Matis

Rubber Rocket

Kun je uberhaupt wel data overzenden via port 22?

Wat doet volgende code bij jou?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$dir_import_remote    = "/extern_sftp_server/snd";
$dir_import_local    = "/var/www/local_server/import_map";
$fileNaam             = "/item.xml";

$connection = ssh2_connect($FTP_host, 22);
ssh2_auth_password($connection, $FTP_user, $FTP_pass); 

$com ="ls $dir_import_remote";
$stream = ssh2_exec($connection, $com);
stream_set_blocking($stream,true);

$cmd=fread($stream,4096);
$arr=explode("\n",$cmd); 

print_r($arr);


Als het goed is krijg je nu een dir listing van alle bestanden in de externe map.

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • Nariman
  • Registratie: November 2001
  • Laatst online: 31-01-2024
Matis schreef op maandag 15 november 2010 @ 17:06:
Misschien een gekke vraag, maar weet je ook zeker dat het externe bestand bestaat?
Ik zie ook dat je je bestand naar een (hoogstwaarschijnlijke) read-only locatie probeert te schrijven. Ik denk dat de PHP/HTTP deamon er niet mag/kan schrijven.
Het bestand bestaat echt ;(
Ik heb voor de zekerheid alles rechten 777 gegeven.

Ik twijfel wel over de pad:
Moet het een absolute pad zijn: /var/www/ftp/item.xml
Of moet het een sftp pad zijn: ssh2.sftp://var/www/ftp/item.xml

Acties:
  • 0 Henk 'm!

  • Noxious
  • Registratie: Juli 2002
  • Laatst online: 10-09 14:45
Ik zou inderdaad even bovenstaande dirlisting code executen, weet je meteen of het werkt.

Acties:
  • 0 Henk 'm!

  • Nariman
  • Registratie: November 2001
  • Laatst online: 31-01-2024
Dit blijft ook hangen :'(

Jij hebt mij wel op een idee gebracht 8)
Als ik op mijn webserver inlog (Ubuntu) en via SSH-command line probeer in te loggen op de externe sFTP server, krijg ik de volgende foutmelding:
code:
1
2854981: Shell access has been disabled by the system administrator


Helpt dit ons verder?

Uploaden naar de server gaat overigens prima met deze code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public function uploadFile($local_file, $remote_file)
    {
        $sftp = $this->sftp;
        $stream = @fopen("ssh2.sftp://$sftp$remote_file", 'w');

        if (! $stream)
            throw new Exception("Could not open file: $remote_file");

        $data_to_send = @file_get_contents($local_file);
        if ($data_to_send === false)
            throw new Exception("Could not open local file: $local_file");

        if (@fwrite($stream, $data_to_send) === false)
            throw new Exception("Could not send data from file: $local_file");

        @fclose($stream);
    }

Acties:
  • 0 Henk 'm!

  • Nariman
  • Registratie: November 2001
  • Laatst online: 31-01-2024
Opgelost !!!

ssh2_scp_recv bleef hangen dus ik mijn upload functie omgeschreven naar een download functie en wat blijkt... het werkt ook nog :*)

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public function downloadFile($local_file, $remote_file)
    {
        $sftp = $this->sftp;
        $stream = @fopen($local_file, 'w');

        if (! $stream)
            throw new Exception("Could not open file: $local_file");

        $data_to_send = @file_get_contents("ssh2.sftp://$sftp$remote_file");
        if ($data_to_send === false)
            throw new Exception("Could not open local file: $remote_file");

        if (@fwrite($stream, $data_to_send) === false)
            throw new Exception("Could not send data from file: $remote_file");

        @fclose($stream);
    }


Matis en anderen... bedankt voor meedenken :)

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 11-09 20:27

Matis

Rubber Rocket

Waarom doe je aan Error Suppression?
Be aware that using @ is dog-slow, as PHP incurs overhead to suppressing errors in this way. It's a trade-off between speed and convenience.

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • Nariman
  • Registratie: November 2001
  • Laatst online: 31-01-2024
Matis schreef op dinsdag 16 november 2010 @ 10:30:
Waarom doe je aan Error Suppression?

[...]
Code is afkomstig van een online tutorial.
Ik heb hem inmiddels aangepast naar mijn eigen stijl en behoeften :)
Pagina: 1