Tijdje geleden alweer, maar ik wil hier toch op terug komen.
Ik ben ook bezig een xinetd service te maken die de Omega binary toegankelijk maakt.
De service draait nu en is via telnet toegankelijk gebleken. De Omega binary werkt met de parameters die ik meegeef.
Nu wil ik de socket gebruiken om de parameters aan de binary te geven. Ik heb php niet gecompileerd met --with-sockets, dus ik gebruik fsockopen() in php.
De volgende code gebruik ik:
$omega is een string met de juiste NAME=VALUE parameters gescheiden door "\r\n" newlines. De string eindigt met een extra newline.
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
| // Execute omega binary with parameters
$socket = fsockopen("ip-address", PORT_NUMBER, $errno, $errstr, 30);
# header naar socket sturen
$return = array();
if( fwrite( $socket, $omega ) )
{
print_r( stream_get_meta_data( $socket ) );
# output van socket [de PDF] opslaan
while ( !feof( $socket ) )
{
$data = fgets( $socket, 1024 );
print $data;
$return[] = $data;
}
}
else
{
# output sturen is mislukt
echo "Het sturen is mislukt!";
}
fclose($socket); |
Wat gebeurd er nu: de socket verbinding wordt gemaakt, maar het PHP script blijft lopen. Als ik dan op de socket server bak kijk zie ik dat de omega binary nog actief is, maar ik zie geen xinetd process actief.
Als ik de omega binary kill, dan krijg ik de volgende array terug van het php script:
Array ( [stream_type] => tcp_socket [mode] => r+ [unread_bytes] => 0 [seekable] => [timed_out] => [blocked] => 1 [eof] => )
Deze wordt gegenereerd door: stream_get_meta_data();
ACM en/of anderen, heeft iemand hier ervaring mee hoe ik die socket het beste kan benaderen vanuit PHP? Zware omega queries kunnen een paar seconden duren, dus de socket moet open blijven staan tot alle data er is..
Heel graag input!
Ik blijf er iig vrij nuchter onder....