Repository 32bit  Forum
Repository 64bit  Wiki

Piccolo webserver in php

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata e la versione del Kernel. Questi dati aiutano le persone che possono rispondere.
2) Specificare sempre il tipo di shell (bash, sh, csh, etc...)
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 dell'ultima regola 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 10: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)
My packages&files searcher: http://slakfinder.org | My repository for slackware64-current: http://www.z01.eu/repo-slack
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 3778
Iscritto il: ven giu 02, 2006 14:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: slack-current
Distribuzione: 01000000-current

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti

cron