sabato 18 maggio 2013

Sending files via Socket Php

With php you can, just like with the java or c + + or any other language, implement tcp sockets for the exchange of data according to the client-server scheme.I show you how you can send a text file using a socket in php from a client to a server implementing only 2 files php: Server.php and Client.php.We start from the Server:

    
<? Php
    
set_time_limit (0);
    
if (($ sock = @ socket_create (AF_INET, SOCK_STREAM, SOL_TCP))) {
    
echo socket_strerror (socket_last_error ($ sock)); exit;
    
}
    
if ((@ socket_set_option ($ sock, SOL_SOCKET, SO_REUSEADDR, 1))) {echo socket_strerror (socket_last_error ($ sock));
    
exit;
    
}
    
if ((@ socket_bind ($ sock, '10 .0.1.4 ', 1048))) {/ / associate an ip of the machine and bring it to the socket
    
echo socket_strerror (socket_last_error ($ sock)); exit;
    
}
    
if ((@ socket_listen ($ sock))) {/ / put the listening socket
    
echo socket_strerror (socket_last_error ($ sock)); exit;
    
}
    
while (true) {
    
if (($ client = @ socket_accept ($ sock))) {/ / locking function: as long as it receives a request
    
echo socket_strerror (socket_last_error ($ sock));
    
exit;}
    
if ((@ socket_getpeername ($ client, $ addr))) {/ / we take the IP address of the client that is connected echo socket_strerror (socket_last_error ($ sock));
    
exit;
    
}
    
echo "Client connection from: $ addr \ n";
    
echo "Receiving file."
    
if (($ file = @ fopen ("." time ().. "txt", "w"))) {
    
echo "File open error. \ n"; exit;
    
}
    
if (($ rcv = @ socket_read ($ client, 1024, PHP_BINARY_READ))) {
    
echo socket_strerror (socket_last_error ($ sock));
    
exit;}
    
do {
    
if ((@ fwrite ($ file, $ rcv, 1024))) {
    
echo socket_strerror (socket_last_error ($ sock));
    
exit;}
    
if ((@ socket_write ($ client, "ok"))) {
    
echo socket_strerror (socket_last_error ($ sock));
    
exit;
    
}
    
if (($ rcv = @ socket_read ($ client, 1024, PHP_BINARY_READ))) {echo socket_strerror (socket_last_error ($ sock));
    
exit;
    
}
    
echo "."
    
} While ($ rcv! = "- @ END @ -");
    
echo "DONE \ n"; socket_close ($ client); break;
    
}
    
fclose ($ file);
    
socket_close ($ sock);
    
?>
And now the client:

    
<? Php
    
set_time_limit (0); / / Avoid that after a certain time the interpreter blocks php script as php.ini
    
if (($ file = @ fopen ("myfile.txt", "r"))) {
    
echo "File open error \ n."
    
exit;}
    
$ Server = array ('address' => 'Enter server ip', 'port' => 1048);
    
$ Sock = socket_create (AF_INET, SOCK_STREAM, SOL_TCP);
    
if (($ connection = @ socket_connect ($ sock, $ server ['address'], $ server ['port']))) {echo socket_strerror (socket_last_error ($ sock));
    
exit;
    
}
    
echo "Uploading files."
    
do {
    
if (feof ($ file)) {
    
echo "send complete \ n"; socket_write ($ sock, "- @ END @ -"); break;
    
}
    
if (($ pkt = @ fread ($ file, 1024))) {
    
echo socket_strerror (socket_last_error ($ sock));
    
exit;}
    
if ((@ socket_write ($ sock, $ pkt, 1024))) {
    
echo socket_strerror (socket_last_error ($ sock)); exit;
    
}
    
echo "."
    
if (($ rcv = @ socket_read ($ sock, 1024))) {
    
echo socket_strerror (socket_last_error ($ sock)); exit;
    
}
    
/ / Echo $ rcv. "\ N";
    
} While (true);
    
echo "DONE \ n";
    
fclose ($ file); socket_close ($ sock); echo "Exiting ... \ n";
    
?>
First start the server socket and then the client socket and you will see that the file "myfile.txt" will be sent from the client to the server!

Nessun commento:

Posta un commento