avond 
Ik zit met een probleem bij een IRC bot die ik aan het maken ben. Ik weet dat PHP hier niet de ideale taal voor is, maar die discussie is zonder twijfel al vaak genoeg gehouden.
Het probleem is dat er een time out komt nadat de eerste 80kb verstuurd is. Bij een bestand, ongeacht de grootte, worden de eerste 80kb perfect verstuurd en opgeslagen, maar verder weigert hij ook maar een byte te ontvangen. Ik heb al verschillende dingen geprobeerd, in het voorbeeld staan 2 hoofd-probeersels (via fsockopen en via sockets, beide hetzelfde probleem).
De code van het deel dat de bestanden ontvangt is:
De code van recv.rsc (waarin gegevens van de host staan): (ip is verwijderd)
Errors en/of foutmeldingen komen er niet, return van de socket is 'Succes', maar de rest van de bestanden verdwijnen gewoon..
Alvast bedankt!
Ik zit met een probleem bij een IRC bot die ik aan het maken ben. Ik weet dat PHP hier niet de ideale taal voor is, maar die discussie is zonder twijfel al vaak genoeg gehouden.
Het probleem is dat er een time out komt nadat de eerste 80kb verstuurd is. Bij een bestand, ongeacht de grootte, worden de eerste 80kb perfect verstuurd en opgeslagen, maar verder weigert hij ook maar een byte te ontvangen. Ik heb al verschillende dingen geprobeerd, in het voorbeeld staan 2 hoofd-probeersels (via fsockopen en via sockets, beide hetzelfde probleem).
De code van het deel dat de bestanden ontvangt is:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
| <?php // recv.php set_time_limit( 0 ); function di( $txt ){ $fp = fopen( "/home/admin/__bot/log.txt", "a" ); fwrite( $fp, $txt."\n" ); fclose( $fp ); die(); } $data = file_get_contents( "/home/admin/__bot/data/recv.rsc" ); list( $ip, $port, $file, $user, $size ) = explode( "[||]", $data ); $errno = $errstr = ""; #$fp = fsockopen( $ip, $port, $errno, $errstr, 30 ); if( $fp === false ){ # di( "niet gelukt" ); } $type = 2; if( $type == 1 ){ $sock = socket_create( AF_INET, SOCK_STREAM, SOL_TCP ); socket_set_option( $sock, SOL_SOCKET, // socket level SO_SNDTIMEO, // timeout option array( "sec"=>10, // Timeout in seconds "usec"=>0 // I assume timeout in microseconds ) ); socket_connect( $sock, $ip, $port ); $fn = fopen( "/home/admin/__bot/data/files/" . $user . "_" . $file, "w" ); $file = ""; while(@socket_recv($sock, $data, 128, 0)){ #$data = ""; #socket_recv( $sock, $data, 128, 0 ); $file .= $data;//@socket_read( $sock, 128 ); } fwrite( $fn, $file ); echo socket_strerror( socket_last_error($sock) ); fclose( $fn ); socket_close( $sock ); } else{ $sock = fsockopen( $ip, $port, $errno, $errstr, 10 ); $fn = fopen( "/home/admin/__bot/data/files/" . $user . "_" . $file, "w" ); $loop = 0; $data = ""; while (!feof($sock)) { $data .= fgets( $sock, 128 ); } fwrite( $fn, $data ); fclose( $fn ); fclose( $sock ); } unlink( "/home/admin/__bot/data/recv.rsc" ); ?> |
De code van recv.rsc (waarin gegevens van de host staan): (ip is verwijderd)
code:
1
| x.x.x.x[||]1024[||]Kyle.mp3[||]Peter[||]802449 |
Errors en/of foutmeldingen komen er niet, return van de socket is 'Succes', maar de rest van de bestanden verdwijnen gewoon..
Alvast bedankt!