Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHP - wysłanie pliku do serwera tftp
Forum PHP.pl > Forum > PHP
aksnet
Witam

Szukam przykładu w PHP (na socketach) jak wysłać plik do serwera tftp.

(przykład jak ściągnąć plik z serwera tftp mam)

PS.

może ktoś wie jak przerobić ten przykład:
(funkcja pobiera plik z tftp)

  1. <?php
  2. function tftp_fetch($host, $filename)
  3. {
  4. $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
  5.  
  6. // create the request packet
  7. $packet = chr(0) . chr(1) . $filename . chr(0) . 'octet' . chr(0);
  8. // UDP is connectionless, so we just send on it.
  9. socket_sendto($socket, $packet, strlen($packet), 0x100, $host, 69);
  10.  
  11. $buffer = '';
  12. $port = '';
  13. $ret = '';
  14. do
  15. {
  16. // $buffer and $port both come back with information for the ack
  17. // 516 = 4 bytes for the header + 512 bytes of data
  18. socket_recvfrom($socket, $buffer, 516, 0, $host, $port);
  19.  
  20. // add the block number from the data packet to the ack packet
  21. $packet = chr(0) . chr(4) . substr($buffer, 2, 2);
  22. // send ack
  23. socket_sendto($socket, $packet, strlen($packet), 0, $host, $port);
  24.  
  25. // append the data to the return variable
  26. // for large files this function should take a file handle as an arg
  27. $ret .= substr($buffer, 4);
  28. }
  29. while(strlen($buffer) == 516); // the first non-full packet is the last.
  30. return $ret;
  31. }
  32. ?>
q.michal
https://github.com/wader/php-tftpserver
aksnet
To jest serwer tftp.
Połączenie z serwerem jest testowane przez skrypt test_clients.sh (skrypt w shellu a nie w PHP).

Chyba, że coś przeoczyłem?


.
.
.
sam musiałem napisać taką funkcję i wklejam dla potomnych wink.gif
PS.
trzeba by jeszcze dorobić obsługę błędów

  1. function tftp_put($host, $filename)
  2. {
  3. $data = '';
  4. $buffer = '';
  5. $port = '';
  6. $block = 0; // nr bloku
  7. $block_lo = 0; // nr bloku mlodszy bajt
  8. $block_hi = 0; // nr bloku starszy bajt
  9.  
  10. $srcfile = fopen($filename, "r");
  11.  
  12.  
  13. $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
  14. // zapis pliku - chr(2)
  15. $packet = chr(0) . chr(2) . $filename . chr(0) . 'octet' . chr(0);
  16. // UDP is connectionless, so we just send on it.
  17. socket_sendto($socket, $packet, strlen($packet), 0x100, $host, 69);
  18.  
  19.  
  20. do
  21. {
  22. // odbieramy ACK
  23. socket_recvfrom($socket, $buffer, 516, 0, $host, $port);
  24.  
  25.  
  26. // czytamy kolejny blok danych z pliku
  27. $block++;
  28. $block_lo = $block%256;
  29. $block_hi = $block>>8;
  30. $data = fread($srcfile, 512 );
  31.  
  32.  
  33. // DATA - chr(3)
  34. $buffer = chr(0) . chr(3) . chr($block_hi) . chr($block_lo) . $data;
  35. // wysylamy pakiet
  36. socket_sendto($socket, $buffer, strlen($buffer), 0x100, $host, $port);
  37.  
  38. }
  39. while( $data );
  40.  
  41. fclose($srcfile);
  42. }
  43.  
  44.  
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.