Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [skrypt] Serwer PHP w PHP
Forum PHP.pl > Inne > Oceny
cepa
Taka mała zabawka napisana na szybko, do przetestowania:

https://github.com/cepa/php-http-server

Jest to prosta implementacja serwera HTTP który potrafi wyświetlać statyczne strony internetowe, listować katalogi oraz uruchamiać skrypty php poprzez CGI (php-cgi).

Docelowo ma być użyte do testów jednostkowych, chodzi oto aby móc przetestować zapytania do webapi (mock/stub) bez potrzeby używania prawdziwego serwera www w projekcie, uruchamiać / zatrzymywać serwer www w każdym teście.

aby to uruchomić wystarczy:
Kod
cd bin; ./httpd


i potem w przeglądarce wejść na http://localhost:1080


Uwaga! To sie NIE nadaje na produkcje, może być sporo bugów wink.gif
Spawnm
Czemu trzymasz wszystkie klasy w 1 pliku? :/
W wolnej chwili się pobawię.
erix
Przecież php ma już wbudowany serwer...

http://php.net/manual/en/features.commandline.webserver.php

Po co wynajdywać koło na nowo?
irmidjusz
Z tego co pamiętam (na 90%) na phpclasses są takie gotowce, z pełną implementacją serwera www napisaną w PHP.
mrWodoo
erix dobrze napisał, po co wynajować koło na nowo, żeby zobaczyć czy potoczy się inaczej?

Polecam poczytać co nie co o PSR-0 tak na przyszłość smile.gif
uncuncunc
Cytat
Polecam poczytać co nie co o PSR-0 tak na przyszłość

PSR-2 lepsze wink.gif
pamil
Cytat(uncuncunc @ 8.09.2012, 21:59:44 ) *
PSR-2 lepsze wink.gif

Jak można porównywać rzeczy, które świadczą zupełnie o czymś innym? Jak uzupełnienie czegoś może być lepsze?
Jak standard PSR-2, de facto zawierający w sobie PSR-1, który nakazuje stosowanie nazewnictwa określonego w PSR-0 może być lepszy od standardu PSR-0?
mls
Pomysł nowy nie jest: http://php.webtutor.pl/en/2011/06/14/phpmu...en-in-pure-php/ smile.gif
marcio
Nie wiem co zabardzo mam ocenic(bo nic na nim nie odpalalem) ale wedlug mnie zbytnio sie czepiace chcial to zrobil co wam do tego ze wynajduje kolo na nowo?Mial czas i checi to napisal czy na tym forum sa jeszcze ludzie ktorzy robia cos sami?idac waszym tokiem myslenia to 99% ludzi z tego forum jedzie na gotowcach...

Wiec troche tolerancji i pochwalcie kogos za dobre checi, bo o ile poczatkujacym nie jestem to ja osobiscie nie wiedzialbym za co sie zabrac gdybym mial zrobic cos takiego.

@cepa szacun i bravo za checi wink.gif
!*!
marcio - odpuść, nie warto, Oni za jakiś czas nie będą wiedzieć jak zdefiniować stałą, bo jakiś FW v5000 nie będzie miał zdeklarowanej takiej metody i specjalnej opcji dla edytora.
cepa - że Ci się chciało wink.gif chcesz to dalej rozwijać, czy to tylko tak na jeden raz dla własnych potrzeb?
cepa
Chciec sie chcialo, nawet for fun, 13kB kodu to specjalnie duzo nie jest a dziala i cos robi wink.gif
Napisalem to z bardzo prozaicznego powodu: potrzebuje zrobic test jednostkowy ktory pokrywa komunikacje z webapi poprzez adaptery np: curl. Testy dzialaja w srodowisku CI ktore jest w pelni automatyczne, moglbym zrobic mocki webapi i postawic je np: na normalnym serwerze www jak apache, ale wtedy musialbym miec taki serwer uruchomiony w kazdym srodowisku. Ten kawalek kodu upraszcza mi zycie, bo moge wrzucic go bezposrednio do projektu i z poziomu klas phpunit uruchamiac i wylaczac serwer www z mockami ktore takze sa czescia projektu, krotko mowiac moge przetestowac CALA komunikacje po http bez potrzeby korzystania z zewnetrznych narzedzi.

A co do serwerka www wbudowanego w binarke php, to jest faktycznie, ale dopiero od 5.4, a ja testy uruchamiam na 5.2, 5.3 i 5.4 wink.gif

jakby ktos byl zainteresowany, na githubie jest tag 1.0.2.
przkladowy test w phpunicie czegos tam ktory korzysta z owego projektu:

  1. <?php
  2.  
  3. require_once 'Mock_Http_Server.php';
  4.  
  5. class HttpTest extends PHPUnit_Framework_TestCase
  6. {
  7.  
  8. public function testConnect()
  9. {
  10. $rootPath = dirname(dirname(__FILE__));
  11.  
  12. $server = new Mock_Http_Server();
  13. $server
  14. ->setBinDir($rootPath.'/bin')
  15. ->setWebDir($rootPath.'/web')
  16. ->start();
  17.  
  18. $url = $server->getBaseUrl().'/mock/json.php';
  19. $json = json_decode(file_get_contents($url));
  20. $this->assertEquals(123, $json->a);
  21. $this->assertEquals(456, $json->b);
  22.  
  23. $server->stop();
  24. }
  25.  
  26. }


Mock_Http_Server jest tutaj: https://github.com/cepa/php-http-server/blo...Http_Server.php

test odpala sobie instancje serwera http w tle, na unikalnym porcie, wykonuje jakies operacje i wylacza serwer, dziala na php 5.2.x, 5.3.x, 5.4.x
ogolnie w ten sposob mozna pisac testy ktore pokrywaja api, w javie mozna to zrobic w podobny uzywajac np: embedded jetty, niestety nie znalazlem nic w php, ktore by dzialalo w taki sposob.

erix
Cytat
ale wedlug mnie zbytnio sie czepiace chcial to zrobil co wam do tego ze wynajduje kolo na nowo?Mial czas i checi to napisal czy na tym forum sa jeszcze ludzie ktorzy robia cos sami?idac waszym tokiem myslenia to 99% ludzi z tego forum jedzie na gotowcach...

Uważam, że ten czas, który poświęcił na naukę napisania czegoś, czego nigdy nie wykorzysta, mógłby spożytkować w inny sposób.

Czy piszesz własny system operacyjny, czy z jakiegoś korzystasz?
Tuminure
Cytat
Uważam, że ten czas, który poświęcił na naukę napisania czegoś, czego nigdy nie wykorzysta, mógłby spożytkować w inny sposób
vs
Cytat
Napisalem to z bardzo prozaicznego powodu: potrzebuje zrobic test jednostkowy ktory pokrywa komunikacje z webapi poprzez adaptery np: curl. Testy dzialaja w srodowisku CI ktore jest w pelni automatyczne, moglbym zrobic mocki webapi i postawic je np: na normalnym serwerze www jak apache, ale wtedy musialbym miec taki serwer uruchomiony w kazdym srodowisku. Ten kawalek kodu upraszcza mi zycie (...)

Skoro autor uważa, że skrypt mu się przyda, nie zajął mu zbyt wiele czasu, ma i chce się czym pochwalić, to wydaje mi się, że jest to co najmniej dobrze wykorzystany czas. Porównywanie tego do tworzenia systemu operacyjnego troszeczkę mija się z celem - gdyż jest to zupełnie inna skala projektu.
erix
Proste pytanie, piszesz własnego frameworka?
!*!
Cytat(erix @ 12.09.2012, 12:51:51 ) *
Proste pytanie, piszesz własnego frameworka?


Tak i system operacyjny też po części. I co w związku z tym?
erix - skończ już wypisywać te brednie pod pseudo argumentem "po co, skoro jest już", bo nikogo to nie obchodzi. Jak ktoś ma większe ambicje, chce się sprawdzić, bo mu toster w kuchni każe to dlaczego nie? Po co za każdym razem pisać coś takiego? Nic to nie zmieni, a Ty czy inni jesteście postawieni przed faktem dokonanym.
abort
Cytat(erix @ 12.09.2012, 11:24:37 ) *
Uważam, że ten czas, który poświęcił na naukę napisania czegoś, czego nigdy nie wykorzysta, mógłby spożytkować w inny sposób.

Niby tak - problem w tym, że (jak dla mnie) bardzo sensownie uzasadnił potrzebę napisania czegoś takiego: testy jednostkowe w środowiskach PHP<5.4

Cytat(erix @ 12.09.2012, 12:51:51 ) *
Proste pytanie, piszesz własnego frameworka?

Wielu ludzi pisze. Literatury na ten temat w sieci też jest od groma; zresztą sam chcąc "naumieć" się obiektówki musiałem przedzierać się przez sterty stron, na których htłumaczyli zawiłości architektury MVC, routingów i takich tam. Pomijam, że wiele informacji było dla mnie zupełnie niepotrzebnych.
Powtórzę jeszcze raz: wielu ludzi pisze, a właściwie "próbuje pisać" frameworki. Z różnym skutkiem. Ale niezależnie od "jakości" takich frameworków uważam, że jak ktoś się na coś takiego porywa, to może być to dla niego pouczające doświadczenie.
Zresztą, Ty wybrałeś Zenda, inny Symfony, ja CI, inni wolą Kohanę, Cake czy Yii. A, właśnie: zapytaj się autora Yii, po co napisał frameworka, skoro już "na rynku" były bardzo rozwinięte Symfony i Zend. Ciekawym, jaką odpowiedź dostaniesz.
Tuminure
Cytat
Proste pytanie, piszesz własnego frameworka?

Nadal porównujesz to do kobyły. Mam świeżo ściągniętą Kohanę na dysku, która jest jednym z mniejszych frameworków - zajmuje około 2MB, czyli jakieś 200 razy więcej niż omawiany w tym temacie skrypt.
erix
Cytat
Tak i system operacyjny też po części. I co w związku z tym?

Skoro uważasz, że to nie jest strata czasu, w tym kontekście.

Cytat
erix - skończ już wypisywać te brednie pod pseudo argumentem "po co, skoro jest już", bo nikogo to nie obchodzi. Jak ktoś ma większe ambicje, chce się sprawdzić, bo mu toster w kuchni każe to dlaczego nie? Po co za każdym razem pisać coś takiego? Nic to nie zmieni, a Ty czy inni jesteście postawieni przed faktem dokonanym.

A kto mówi tu o "uciszaniu ambicji"? Jak najbardziej. Jednak na Świecie jest wiele problemów do rozwiązania i poszukiwanie istniejącego już rozwiązania:
  • nie usprawnia istniejącego
  • jest wolniejsze od istniejącego (mianowicie od wkompilowanego w interpreter)
  • podobne już powstały, które wymagały wyłącznie refaktoryzacji
  • np. zaprzągnięcie thttpd z wkompilowanymi debug-symbols pozwoliłoby na szczegółowe śledzenie


Cytat
Zresztą, Ty wybrałeś Zenda, inny Symfony, ja CI, inni wolą Kohanę, Cake czy Yii. A, właśnie: zapytaj się autora Yii, po co napisał frameworka, skoro już "na rynku" były bardzo rozwinięte Symfony i Zend. Ciekawym, jaką odpowiedź dostaniesz

Tak, wszystko fajnie. Do momentu. Do momentu, w którym prócz Ciebie do kodu/rozwiązania ma zasiąść ktoś jeszcze.

Zamiast rozwiązywać faktyczne problemy, tworzy się kolejne rozwiązania, które - summa summarum - stają się kopią istniejących.

Cytat
Nadal porównujesz to do kobyły. Mam świeżo ściągniętą Kohanę na dysku, która jest jednym z mniejszych frameworków - zajmuje około 2MB

Funkcje do regexpów też piszesz od zera? Bardzo są optymalne?
!*!
Cytat(erix @ 12.09.2012, 15:09:03 ) *
Skoro uważasz, że to nie jest strata czasu, w tym kontekście.

Zdobywanie dodatkowej wiedzy i doświadczenia, nigdy nie jest stratą czasu.

Cytat(erix @ 12.09.2012, 15:09:03 ) *
A kto mówi tu o "uciszaniu ambicji"? Jak najbardziej. Jednak na Świecie jest wiele problemów do rozwiązania i poszukiwanie istniejącego już rozwiązania:
  • nie usprawnia istniejącego
  • jest wolniejsze od istniejącego (mianowicie od wkompilowanego w interpreter)
  • podobne już powstały, które wymagały wyłącznie refaktoryzacji
  • np. zaprzągnięcie thttpd z wkompilowanymi debug-symbols pozwoliłoby na szczegółowe śledzenie


I co z tego, szczególnie że autor, a Tuminure Ci to nawet zaznaczył. Masz za dużo wolnego czasu że się przejmujesz problemami świata? Masz kod, sprawdzasz, interesuje Cie, rozwijasz/korzystasz, a jak nie to olewasz i korzystasz z czego innego, proste jak budowa cepa.
Kofel
Cytat(erix @ 12.09.2012, 14:09:03 ) *
Skoro uważasz, że to nie jest strata czasu, w tym kontekście.


A kto mówi tu o "uciszaniu ambicji"? Jak najbardziej. Jednak na Świecie jest wiele problemów do rozwiązania i poszukiwanie istniejącego już rozwiązania:
  • nie usprawnia istniejącego
  • jest wolniejsze od istniejącego (mianowicie od wkompilowanego w interpreter)
  • podobne już powstały, które wymagały wyłącznie refaktoryzacji
  • np. zaprzągnięcie thttpd z wkompilowanymi debug-symbols pozwoliłoby na szczegółowe śledzenie



Tak, wszystko fajnie. Do momentu. Do momentu, w którym prócz Ciebie do kodu/rozwiązania ma zasiąść ktoś jeszcze.

Zamiast rozwiązywać faktyczne problemy, tworzy się kolejne rozwiązania, które - summa summarum - stają się kopią istniejących.


Funkcje do regexpów też piszesz od zera? Bardzo są optymalne?

Moderator... a taki głupi. smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.