Próbuję wysłać 6 plików na serwer SFTP.
Autoryzacja do tego serwera odbywa się za pośrdenictwem privateKeya i hasła.
Za cholerę ssh2_connect czy nawet biblioteka phpseclib nie może połączyć się z serwerem. Nie autoryzuje mi połączenia lub nie akceptuje mi pliku klucza i robi inne dziwne kwiatki. Natomiast w konsoli używając:
łączy się normalnie.
sftp -oIdentityFile=privateKey.pem -oServerAliveInterval=60 -oServerAliveCountMax=10000 -oTCPKeepAlive=yes username@host
A że musze to puścić PHPem, bo skrypt ma się wykonać przez przeglądarke. Sięgnąłem po "expect".
Bardzo prosty skrypt doit.sh wygląda następująco:
Jak puszczę go w konsoli ./doit.sh wykonuje się prawidłowo...i wszystkie 6 plików wysyłane są na serwer poprawnie, następuje rozłączenie z serwerem.
#!/usr/bin/expect spawn sftp -oIdentityFile=privateKey.pem -oServerAliveInterval=60 -oServerAliveCountMax=10000 -oTCPKeepAlive=yes username@host expect "Enter passphrase for key 'privateKey.pem'" send "password\n" expect "sftp>" send "lcd /var/www/html/STIR/upload/03012019/\n" expect "sftp>" send "lpwd\n" expect "sftp>" send "cd /var/www/html/server/EXPORT/STIR/\n" expect "sftp>" send "put file1.TXT\n" expect "sftp>" send "put file1.TXT.SEM\n" expect "sftp>" send "put file2.TXT\n" expect "sftp>" send "put file2.TXT.SEM\n" expect "sftp>" send "put file3.TXT\n" expect "sftp>" send "put file3.TXT.SEM\n" expect "sftp>" send "bye\n" interact
Problem pojawia się, gdy próbuję ów skrypt odpalić stosując
Po wypluciu sobie echo $make; w przeglądarce, mogę zaobserwować że skrypt jest zatrzymywany w trakcie kopiowania 2 ostatnich plików...log kończy się na 54% przesyłania pliku...
Czas przesyłania tych 6 plików to około 25sekund...
Łącznie mają nieco poniżej 3mb.
Dodam, że w php.ini wszystko ustawiłem dla testów na maxa (max_execution_time = 0 , max_time_limit = -1) , ale i to nic nie pomaga. Zresztą na pewno nie jest to wina tych ustawień gdyż przeglądarka prawidłowo wyświetla efekt POST'a (nie pojawia się żadnen memory limit itp)...
I tutaj moje pytanie, czy może shell_exec ma jakiś swój czas wykonania skryptu?
Lub co może być problemem, że w konsoli skrypt jest wykonany od A do Z, log wygenerowany jest od samego połączenia aż do bye i rozłączenia z serwerem... a log shell_exec wyświetla się do połowy..i tak też kończy pracę.
P.S. Gdy skrócę ilość wysyłanych plików do 4...i jeszcze z takimi wielkościami po 50kb plik, to shell_exec wszystko ładnie pięknie kończy...czyli ewidentnie gdzieś tu chodzi o czas :/