Repository 32bit  Forum
Repository 64bit  Wiki

Piccolo webserver in php

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

Piccolo webserver in php

Messaggioda ZeroUno » ven mar 30, 2012 9:38

Ecco un piccolo server web scritto in php (assolutamente didattico; giusto per studiare i socket).

Codice: Seleziona tutto
<?php
$documentroot="/var/www/htdocs";
$port=8080;

if(!$socket = @socket_create(AF_INET,SOCK_STREAM,SOL_TCP)) die();
if(!@socket_bind($socket,'127.0.0.1',$port)) die();
if(!@socket_listen($socket))die();

$client = socket_accept($socket);

$get=null;
$i=0;
$headers=array();
while(true){
  if(($stringa=@socket_read($client,1000000,PHP_NORMAL_READ))===FALSE)die();
  if($stringa==="\n")continue;
  $stringa=trim($stringa,"\n\r");
  if(is_null($get)){
    $get=substr($stringa,0,3);
    if($get!="GET"){
      socket_write($client,"501 Method Not Implemented\n");
      die();
    }else{
      $stringa=explode(" ",$stringa);
      $get=$stringa[1];
    }
  }else{
    if($stringa === "") break;
    $headers[]=$stringa;
  }
}
$file="$documentroot/$get";
if(is_dir($file))$file.="/index.html";
if(is_file($file)){
  socket_write($client,file_get_contents($file));
}else{
  socket_write($client,"404 Not Found\n");
}
socket_shutdown($client);
socket_close($client);
socket_shutdown($socket);
socket_close($socket);
?>


Che ne pensate?

edit:
limiti:
accetta una singola connessione. Alla connessione non effettua il fork del processo ma soddisfa la richiesta e poi muore :-)
accetta solo metodo GET (no HEAD e POST)
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4414
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite