
socket-listener.php
By: a guest on
Apr 29th, 2012 | syntax:
PHP | size: 1.72 KB | hits: 17 | expires: Never
<?php
$ipAddressToListenOn = '192.168.0.100';
$portToListenOn = 9000;
$mysqlUser = 'root';
$mysqlPass = '';
$mysqlHost = '127.0.0.1';
$mysqlDatabaseName = 'scanner';
$mysqlSchema = "
create table scanner_data(
name varchar(250) not null
, value varchar(250)
, dt datetime
, key(name)
, key(dt)
) engine=memory
";
try {
$dsn = "mysql:dbname=$mysqlDatabaseName;host=$mysqlHost";
$dbh = new PDO($dsn, $user, $password, array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
, PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
, PDO::ATTR_EMULATE_PREPARES => false
));
$dbh->exec($mysqlSchema);
$addKeyValueStmt = $dbh->prepare("
insert into scanner_data (name, value, dt) (:name, :value, FROM_UNIXTIME(:dt))
");
} catch (PDOException $e) {
echo 'db err: ' . $e->getMessage();
}
function isValidNameValuePacket($str) {
return 0 < preg_match('#^\w+\,\w+\,\d+$#Di', $str);
}
set_time_limit (0);
// Create a TCP Stream socket
$sock = socket_create(AF_INET, SOCK_STREAM, 0);
// Bind the socket to an address/port
socket_bind($sock, $ipAddressToListenOn, $portToListenOn) or die('Could not bind to address');
// Start listening for connections
socket_listen($sock);
/* Accept incoming requests and handle them as child processes */
$client = socket_accept($sock);
while (true) {
// block until it can read at least 1 byte, up to 1024 bytes or \n, whichever comes first
$data = trim(socket_read($client, 1024, PHP_NORMAL_READ));
if (isValidNameValuePacket($str)) {
list($name, $value, $dt) = explode(',', $data);
$addKeyValueStmt->execute(compact('name', 'value', 'dt'));
}
}