Toon posts:

ssh2_scp_recv blijft hangen

Pagina: 1
Acties:

Onderwerpen


  • Nariman
  • Registratie: november 2001
  • Laatst online: 27-06 12:40
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.

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

  • Nariman
  • Registratie: november 2001
  • Laatst online: 27-06 12:40
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.

  • 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?

  • Matis
  • Registratie: januari 2007
  • Laatst online: 18:38

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


  • Nariman
  • Registratie: november 2001
  • Laatst online: 27-06 12:40
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.

  • Matis
  • Registratie: januari 2007
  • Laatst online: 18:38

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


  • Nariman
  • Registratie: november 2001
  • Laatst online: 27-06 12:40
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

  • JapyDooge
  • Registratie: juli 2002
  • Laatst online: 19-09 21:14

JapyDooge

NoxiousPluK

Ik zou inderdaad even bovenstaande dirlisting code executen, weet je meteen of het werkt.

  • Nariman
  • Registratie: november 2001
  • Laatst online: 27-06 12:40
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);
    }

  • Nariman
  • Registratie: november 2001
  • Laatst online: 27-06 12:40
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 :)

  • Matis
  • Registratie: januari 2007
  • Laatst online: 18:38

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


  • Nariman
  • Registratie: november 2001
  • Laatst online: 27-06 12:40
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


Nintendo Switch (OLED model) Apple iPhone 13 LG G1 Google Pixel 6 Call of Duty: Vanguard Samsung Galaxy S21 5G Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True

Tweakers maakt gebruik van cookies

Bij het bezoeken van het forum plaatst Tweakers alleen functionele en analytische cookies voor optimalisatie en analyse om de website-ervaring te verbeteren. Op het forum worden geen trackingcookies geplaatst. Voor het bekijken van video's en grafieken van derden vragen we je toestemming, we gebruiken daarvoor externe tooling die mogelijk cookies kunnen plaatsen.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Forum cookie-instellingen

Bekijk de onderstaande instellingen en maak je keuze. Meer informatie vind je in ons cookiebeleid.

Functionele en analytische cookies

Deze cookies helpen de website zijn functies uit te voeren en zijn verplicht. Meer details

janee

    Cookies van derden

    Deze cookies kunnen geplaatst worden door derde partijen via ingesloten content en om de gebruikerservaring van de website te verbeteren. Meer details

    janee