Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][SFTP][shell_exec] Problem z wykonaniem skryptu .sh, W konsoli skrypt wykonuje się poprawnie w shell_exec nie
MateuszRyaN
post 3.01.2019, 19:05:34
Post #1





Grupa: Zarejestrowani
Postów: 84
Pomógł: 0
Dołączył: 10.11.2010
Skąd: Jastrzębie Zdrój

Ostrzeżenie: (0%)
-----


Witam, nie wiedziałem za bardzo pod który dział podpiąć problem, pod PHP czy pod Serwery www, ale spróbuje tutaj.

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:
  1. sftp -oIdentityFile=privateKey.pem -oServerAliveInterval=60 -oServerAliveCountMax=10000 -oTCPKeepAlive=yes username@host
łączy się normalnie.

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:
  1. #!/usr/bin/expect
  2.  
  3. spawn sftp -oIdentityFile=privateKey.pem -oServerAliveInterval=60 -oServerAliveCountMax=10000 -oTCPKeepAlive=yes username@host
  4. expect "Enter passphrase for key 'privateKey.pem'"
  5. send "password\n"
  6. expect "sftp>"
  7. send "lcd /var/www/html/STIR/upload/03012019/\n"
  8. expect "sftp>"
  9. send "lpwd\n"
  10. expect "sftp>"
  11. send "cd /var/www/html/server/EXPORT/STIR/\n"
  12. expect "sftp>"
  13. send "put file1.TXT\n"
  14. expect "sftp>"
  15. send "put file1.TXT.SEM\n"
  16. expect "sftp>"
  17. send "put file2.TXT\n"
  18. expect "sftp>"
  19. send "put file2.TXT.SEM\n"
  20. expect "sftp>"
  21. send "put file3.TXT\n"
  22. expect "sftp>"
  23. send "put file3.TXT.SEM\n"
  24. expect "sftp>"
  25. send "bye\n"
  26. interact
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.
Problem pojawia się, gdy próbuję ów skrypt odpalić stosując
  1. $make = shell_exec("./doit.sh");
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 :/

Ten post edytował MateuszRyaN 3.01.2019, 19:12:20
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 10.06.2024 - 16:29