Konfiguracja sprzętu i oprogramowania

Nieograniczone pobieranie plików php. Tworzenie połączenia z bazą danych

Dzięki temu językowi programowania możesz tworzyć strony i aplikacje internetowe w lokalny komputer za pośrednictwem serwera Apache. Większość nowoczesnych stron internetowych jest napisana w PHP. Strony tych witryn są dynamiczne, w przeciwieństwie do starych witryn ze znacznikami HTML.

Wszystkie informacje są przechowywane w bazie danych MySQL, z której pobierane są niezbędne informacje. ten moment. Doświadczeni programiści potrafią tworzyć strony internetowe od podstaw i dla zwykli użytkownicy lepiej skorzystać z usług gotowych silników (WordPress, Joomla czy Drupal), gdzie wystarczy dodać własne napisy - i Twoja strona jest gotowa. Aby tworzyć witryny internetowe na komputerze lokalnym, musisz je bezpłatnie pobrać Nowa wersja PHP. Następnie gotową witrynę można przesłać do Internetu.

Możliwości:

  • tworzenie i edytowanie stron internetowych i programów;
  • dynamiczne zarządzanie treścią witryny;
  • testowanie różnych silników dla witryn internetowych;
  • stosowanie plików cookies HTTP.

Zasada działania:

Teraz zrozummy, jak działa PHP. Najpierw musisz pobrać i zainstalować na przykład wirtualny serwer Apache. Aby to zrobić, możesz użyć gotowych zestawów programistycznych Denwer, XAMPP, OpenServer lub dowolnego innego programu. Po instalacji serwer lokalny musisz skopiować do niego zawartość archiwum PHP. Następnie będziesz mógł pisać strony od podstaw na swoim wirtualnym hostingu lub instalować niezbędne silniki stron do tworzenia własnych projektów internetowych.

Po opłaceniu hostingu i domeny możesz wgrać swoją witrynę do Internetu i zacząć realizować swoje zdolności twórcze. Stosowanie język PHP pozwoli Ci szybko i wygodnie tworzyć i edytować zawartość Twoich stron. Na przykład, aby zmienić wygląd dolnej części witryny, wystarczy edytować jeden plik, a zmiany zostaną odzwierciedlone na każdej stronie Twojego projektu. W HTML musiałbyś edytować każdą stronę osobno.

Plusy:

  • tworzenie dynamicznych stron w PHP;
  • korzystanie z baz danych;
  • możliwość pobrania PHP za darmo na komputer
  • obsługa tworzenia wielu baz danych i witryn na komputerze lokalnym;
  • rozpowszechniony i popularny język programowania.

Minusy:

  • do pracy na komputerze może być konieczne zainstalowanie serwera wirtualnego.

Obecnie PHP jest najpopularniejszym językiem programowania stron internetowych i aplikacji internetowych. Dlatego, aby tworzyć własne projekty, wystarczy dostosować system Windows do tego języka. Ponadto do pracy będziesz musiał zainstalować serwer do wirtualnego hostingu swoich lokalnych witryn. Korzystanie z tego języka programowania pozwoli Ci tworzyć i uruchamiać projekty internetowe, dlatego radzimy pobrać go za darmo Ostatnia wersja PHP.

PHP (angielski PHP: Hypertext Preprocessor – „PHP: Hypertext Preprocessor”; pierwotnie Personal Home Page Tools – „Narzędzia do tworzenia osobistych stron internetowych”) to uniwersalny język skryptowy, który jest intensywnie używany do tworzenia aplikacji internetowych.

Obecnie PHP jest obsługiwane przez zdecydowaną większość dostawców hostingu i jest jednym z wiodących języków używanych do tworzenia dynamicznych stron internetowych.

Język PHP i jego interpreter są rozwijane przez grupę entuzjastów w ramach projektu z otwarte źródło. Projekt jest rozpowszechniany na własnej licencji, która jest niezgodna z Powszechną Licencją Publiczną GNU.

Zakres PHP

W dziedzinie programowania WWW, w szczególności po stronie serwera, PHP jest jednym z popularnych języków skryptowych (obok JSP, Perl i języków używanych w ASP.NET).

Popularność w dziedzinie budowania stron internetowych determinowana jest obecnością dużego zestawu wbudowanych narzędzi do tworzenia aplikacji webowych. Najważniejsze z nich to:

  • automatyczne wyodrębnianie parametrów POST i GET oraz zmiennych środowiskowych serwera WWW do predefiniowanych tablic;
  • interakcja duża ilość różne systemy zarządzania bazami danych (MySQLi, Oracle (OCI8), Oracle, Microsoft SQL Serwer, Sybase , ODBC, mSQL, IBM DB2, Cloudscape i Apache Derby, Informix, Ovrimos SQL, IBM Notes, DB++, DBM, dBase, DBX, FrontBase, FilePro, Ingres II, SESAM, / InterBase, Paradox File Access, MaxDB, Interfejs PDO (obiekty danych PHP));
  • automatyczne wysyłanie nagłówków HTTP;
  • pracować z autoryzacją HTTP;
  • pracować z plikami cookie i sesjami;
  • pracować z lokalnymi i usunięte pliki, gniazda;
  • przetwarzanie plików przesłanych na serwer;
  • praca z XForms.

PHP jest obecnie używany przez setki tysięcy programistów. Według rankingu TIOBE Corporation na podstawie danych Wyszukiwarki, we wrześniu 2015 PHP znalazło się na 6 miejscu wśród języków programowania. Największe witryny korzystające z PHP to

Mówiłem więcej o tym, jak skonfigurować Denver i upewnić się, że wszystko działa, po prostu poświęcając trochę czasu na zaimplementowanie prostego serwera ws echo. Ale jeśli pobrałeś archiwa źródłowe, jestem pewien, że możesz łatwo dowiedzieć się, jak odbierać i wysyłać wiadomości, co jest wystarczające do korzystania z tej technologii.
Cieszę się, że pojawiła się reakcja na moim blogu, który jeszcze nie był promowany, a to skłoniło mnie do napisania kontynuacji i ujawnienia pytania, jak jeszcze sprawić, by skrypt PHP ws server działał na hostingu, jak się upewnić że proces jest uruchomiony, a skrypt PHP działa i nie został zamknięty przez przekroczenie limitu czasu lub podczas ponownego uruchamiania Apache, jak uniknąć zduplikowanego procesu PHP i odpowiedzi na inne pytania niezbędne do uzyskania gwarantowanego działającego serwera ws. Na pewno stworzę internetowy serwer echo z funkcją czatu i umieszczę go na moim przeciętnym hostingu. W dalszej części tego artykułu skrypt PHP, który działa nieprzerwanie na serwerze i udostępnia ws, będę nazywał serwer ws, chociaż w rzeczywistości jest to proces po stronie serwera. A co najważniejsze, podam gotowe rozwiązanie nawet dla tych, którzy nie mają dostępu SSH do konsoli serwera hostingowego lub maszyny wirtualnej.

Będzie dziś dużo pracy

Zacznijmy od prostych.

Umieszczenie i uruchomienie serwera gniazda sieciowego na hostingu

Prostota polega na tym, że nie ma problemów z uruchomieniem. Możesz wziąć skrypt PHP echows.php z ostatniego artykułu, nic w nim nie zmieniając, wgrać go na hosting i uzyskać dostęp do pliku z przeglądarki, jedyną różnicą od uruchomienia w Denver może być to, że ustawienia Apache i mechanizmy buforowania hostingu zakazać wyświetlania niekompletnych informacji Skrypt PHP, w takim przypadku nie zobaczysz żadnych informacji w oknie przeglądarki, a strona będzie nadal ładowana w przeglądarce. Ale jeśli spróbujesz połączyć się z serwerem ws z naszego klienta ws, zobaczysz, że połączenie się powiodło, a serwer ws echo odpowiada na wszystkie przesłane żądania. Jako adres serwera ws w kliencie ws musisz oczywiście podać ws://twojadomena.com:8889. Jak widać, wszystko jest w porządku. Jedyny problem, jaki możesz napotkać, to ustawienia zapory hostingowej i porty, które są zajęte przez inne usługi. Jeśli masz kilka domen na jednym adresie IP, możesz uzyskać dostęp do serwera ws pod adresem tej domeny ws://anotheromain.com:8889, co, jak widzisz, nie jest zbyt dobre, szczególnie w przypadku hostingu, w którym zawieszają się setki stron internetowych na jednej domenie teoretycznie ktoś może korzystać z tych samych portów co Ty, a to może prowadzić do niedziałania serwera ws, więc jeszcze raz zdecydowanie polecam ostrożne wybieranie portów i upewnienie się, że gdy serwer ws przestanie działać, zawsze się zamyka wszystkie połączenia i prawidłowo zamyka gniazda. Teraz, jeśli chodzi o sam skrypt PHP, jak mogłeś zauważyć, nasz skrypt PHP żyje tylko przez 100 sekund, po czym przy próbie połączenia lub wysłania wiadomości zamyka wszystkie połączenia i kończy wykonywanie. Jak sprawić, by żyło „wiecznie”? Istnieje wystarczająca liczba metod. Ale problem nie polega na tym, że skrypt PHP powinien działać w nieskończoność, ale na tym, jak upewnić się, że skrypt kończy się poprawnie w różnych sytuacjach, a następnie poprawnie wznawia swoją pracę. Na przykład, gdy serwer zostanie wyłączony, a następnie włączony, skrypt PHP nie uruchomi się sam, a bardzo złym pomysłem jest monitorowanie, czy serwer ws jest uruchomiony, a jeśli nie działa ręcznie, uruchamianie go.

Metoda nieskończonego wykonywania skryptu PHP uruchamiana z przeglądarki

Pierwszą rzeczą do zrobienia jest określenie w samym skrypcie nieograniczonego czasu życia skryptu PHP set_time_limit(0); i ignorowanie przeglądarki abort ignore_user_abort(true); aby skrypt PHP był wykonywany po zamknięciu okna przeglądarki. Po wykonaniu niezbędnych czynności możesz uruchomić go z przeglądarki. Problem w tym, że uruchamiając go raz, nie będziemy w stanie sprawdzić, czy wszystko jest w porządku z procesem, czy wystąpiły jakieś błędy podczas wykonywania i czy skrypt nadal działa, czy nie można zweryfikować tylko łącząc się z nim z klientem ws. Oczywiście do tego skryptu można dodać funkcjonalność prowadzenia pliku dziennika, w którym będzie zapisywana historia jego pracy. Ponadto po ponownym uruchomieniu Apache na hostingu proces ze skryptem zostanie w 100% wyłączony. Ta metoda może być odpowiednia tylko w przypadku, gdy wgrywamy na serwer gwarantowany działający debugowany skrypt PHP ws server i ważne jest dla nas aby działał tylko przez krótki przewidywalny czas zależny od wiarygodności dostawcy hostingu, ale ta metoda jest całkowicie nieodpowiedni do działania w pełni rozwiniętego przemysłowego serwera ws od -ze względu na jego ekstremalną zawodność i niemożność wyłączenia w momencie, gdy tego potrzebujemy. Wyobraź sobie sytuację, w której administrator serwera hostingowego postanowił zrestartować Apache w celu aktualizacji, a Ty nie sprawdzasz, czy Twój serwer ws ciągle działa, czy nie, podczas gdy użytkownicy np. siedzą na Twoim czacie i nagle wszystko spada, użytkownicy są oburzeni. Ponownie, możesz użyć kilku kul, zanim klient ws połączy się z serwerem ws za pomocą protokołu ws, sprawić, by klient ws uzyskał dostęp do innego skryptu serwera PHP przez XMLHttpRequest() i zażądać sprawdzenia działania serwera ws. Metoda jest trochę kręta, ale ma miejsce w rozwiązaniach nieprzemysłowych, takich jak mały czat czy mała zabawka. To właśnie wykorzystuję w moich małych projektach.

Na wszelki wypadek przeprowadziłem eksperyment, uruchomiłem serwer ws na hostingu, wprowadzając wcześniej do skryptu PHP mechanizm zamykania wszystkich połączeń i przerywania procesu w przypadku otrzymania komunikatu „OFF” od klienta. Nie ruszałem tego przez kilka dni, okresowo wysyłając różne wiadomości i sprawdzając przeżywalność, wysłałem komendę „OFF” po około dwóch dniach pomyślnie zakończył pracę, czas życia procesu serwera ws wyniósł 183 403 sekundy (nieco ponad 2 dni) i myślę, że bez problemu mogłaby działać jeszcze dłużej.

Metoda nieskończonego wykonywania PHP uruchamiana z konsoli

W zasadzie nie ma praktycznie żadnej różnicy w uruchamianiu skryptu PHP z przeglądarki, poza tym, że wszystkie dane o skrypcie PHP są wyprowadzane do konsoli i kilka innych drobnych niuansów. Sam skrypt PHP musi również zawierać set_time_limit(0); i ignore_user_abort (prawda);. Uruchamianie skryptu PHP z konsoli *nix odbywa się za pomocą polecenia $ php -q plik_skryptu.php(Użyłem Putty do połączenia z konsolą). Przełącznik -q (--no-header) wskazuje, że proces powinien działać w trybie cichym i pomija dane wyjściowe nagłówków HTTP, które są zwykle wysyłane do przeglądarki. $manphp pozwoli Ci zobaczyć inne interesujące Cię klucze. Doskonała dokumentacja na oficjalnej stronie PHP, która pomogła nie tylko uporać się z uruchamianiem skryptów PHP z konsoli, ale także umożliwiła wprowadzenie znaczących ulepszeń w samym skrypcie PHP. Zwróć uwagę, że możesz przekierować wyjście skryptu do dowolnego pliku na serwerze za pomocą symbolu „większe niż” („>”), jak to zwykle robię.

$ php -q plik_skryptu.php > plik_skryptu.txt

PHP można wykorzystać do uruchamiania skryptów PHP w całkowitej niezależności od Apache, ale nie jestem pewien, czy mechanizm gniazd będzie działał bez Apache, nie próbowałem go uruchomić bez Apache - wydawało mi się, że nic. Uruchamianie przez konsolę jest uważane za bardziej poprawne niż przez przeglądarkę internetową, ale podobnie jak przez przeglądarkę nie jest w stanie rozwiązać wielu problemów. Być może takie uruchomienie uchroni nas przed zakończeniem działania skryptu przy restarcie Apache, a jest to mało prawdopodobne, ale co jeśli cały serwer WWW lub maszyna wirtualna zostanie ponownie załadowany. Będziesz musiał ręcznie wejść na serwer i uruchomić skrypt, oczywiście, jeśli masz duży projekt gry i masz dedykowaną administratorzy systemu które monitorują stan procesów na serwerze i są skrypty do inicjalizacji i ładowania serwera ws wraz z Apache i wszystkim innym, w takim przypadku jest to jedyna słuszna opcja, ale mówimy o wygodnym sposobie implementacji serwera ws w PHP dla małych projektów. Również czasami pojawia się problem podczas uruchamiania skryptu PHP z konsoli, który zatrzymuje wykonywanie skryptu PHP w tym samym czasie, gdy wychodzisz z konsoli, jest to spowodowane tym, że wykonanie skryptu PHP było powiązane z Twoja sesja jako klienta. Teoretycznie należy to naprawić za pomocą wiersza ignore_user_abort(true); w skrypcie PHP, ale to nie zawsze pomaga ze względu na różne ustawienia PHP. W takim przypadku sztuczka polega na przekazaniu skryptowi PHP strumienia /dev/null, który będzie przyjmowany za klienta i nie zostanie zakończony po wyjściu z konsoli.

$ php -q plik_skryptu.php plik_skryptuwyjście.txt &

Znak ampersand na końcu jest wymagany, aby można było nacisnąć Ctrl+C i wrócić do konsoli, gdy proces pozostaje w pamięci. Możesz też użyć narzędzia nohup.

Dodatkowo warto wiedzieć, że na platformie Windows skrypt można uruchomić z konsoli

> w:\usr\local\php5\php.exe -q w:\home\localhost\www\echows.php

Jeśli wszystko zostało zrobione poprawnie, lepiej użyć narzędzia Supervisor: System kontroli procesu, który monitoruje działanie procesu, uruchamia go w razie potrzeby i rejestruje awarie. Świetna słuszność, gdy robisz poważny projekt i masz do dyspozycji serwer dedykowany lub przynajmniej VDS.

ws serwer kontrola procesu PHP z przeglądarki

W wyniku nauki obsługi skryptów PHP miałem bardzo prosty pomysł- zaimplementuj po stronie klienta ws, przed połączeniem się z serwerem ws, żądanie XMLHttpRequest() do skryptu PHP, który sprawdza stan procesu serwera ws i uruchamia go, jeśli nie jest uruchomiony. Pojawił się też pomysł na zaimplementowanie czegoś w rodzaju strony administratora serwera ws, na której będzie dostępny dziennik ostatnich zdarzeń: o tym, kiedy został uruchomiony, dlaczego się zawiesił, kto zainicjował kolejne uruchomienie itp., z którego będzie możliwość wydania polecenia serwera ws, aby zrestartować, wyłączyć, zamknąć wszystkie połączenia itp.

Jaki powinien być interfejs dla klienta ws:

  • Sprawdź stan serwera ws i uruchom, jeśli serwer jest niedostępny

Jaki powinien być interfejs dla administratora ws:

  • Informacja o stanie serwera ws, najlepiej z liczbą połączeń i ilością zajętej pamięci
  • Przeglądanie dzienników
  • Zatrzymywanie serwera ws

Czyli do implementacji potrzebujemy serwera ws, który musi być zawieszony w pamięci w jeden z opisanych wcześniej sposobów, tj. musisz zrobić z niego demona jakości. W Habré znajduje się doskonały artykuł o procesach i demonach. Niestety, znalezienie hostingu z obsługą polecenia PHP pcntl_fork do tworzenia procesów potomnych jest jeszcze trudniejsze niż z obsługą gniazd, więc musisz zrezygnować z klasycznej metody demonizacji. Ponadto takich programów nie można debugować w systemie Windows. Forki istnieją tylko w systemach operacyjnych *nix. Mimo to udało nam się dowiedzieć czegoś przydatnego z artykułu, a mianowicie stworzyć plik PID przechowujący id procesu, który nie pozwoli na jednoczesne działanie dwóch procesów - więcej o tym poniżej.

W rezultacie nieznacznie zmodyfikowałem kod PHP skryptu serwera ws echo, aby zawierał kod przełączania strumieni wejścia/wyjścia STDIN, STDOUT, STDERR i tym samym uprościłem uruchamianie serwera ws z konsoli:

$ php -q /home/ścieżka/echows.php &

Mam dobrze działającego demona bez użycia pcntl_fork. Uruchamia się za pomocą konsoli, rozwiązuje się z konsoli i wszystko działa dobrze, aby odpowiadać na wszystkie żądania użytkowników pod adresem ws://twojadomena.com:8889, i zamyka się zgrabnie po wysłaniu komunikatu „OFF”. Ale tutaj jest problem, nie można sprawdzić, czy demon działa, czy nie, a tym samym uniknąć zduplikowanego uruchomienia demona. Tak, przy starcie tworzony jest plik pid_file.pid, który przechowuje id procesu (unikalny numer procesu w systemie OS*nix) naszego demona, a także kiedy demon kończy się poprawnie, np. gdy pojawia się komunikat „OFF” odebrany, ten plik jest usuwany. Podczas uruchamiania możesz oczywiście sprawdzić obecność tego pliku, a jeśli plik istnieje, zgłoś, że demon już działa, dzięki czemu można uniknąć zduplikowanego uruchomienia, ale co, jeśli demon nieprawidłowo zakończył swoją pracę i nie usuń plik pid_file.pid, w którym to przypadku nasz demon nigdy więcej się nie uruchomi. Ponownie w Habré udało nam się znaleźć doskonałą funkcję do sprawdzania obecności demona.


if(is_file($pidfile)) (
// sprawdź proces, posix_kill może być przestarzały, może wymagać wymiany podczas migracji do PHP 5.3+
if(posix_kill($pid,0)) (
//demon już działa
zwróć prawdę;
) w przeciwnym razie (

if(!unlink($pidfile)) (
consolemsg("BŁĄD");
wyjście(-1);
}
consolemsg("OK");
}
}
zwróć fałsz;
}

I znowu problem polega na tym, że funkcja posix_kill($pid,0) okazała się nie działać z tego samego powodu, co pcntl_fork. Nie mogłem się z tym pogodzić i ponownie opracowałem „przebiegłe” rozwiązanie. Dlatego Nadal zdecydowałem się na zaimplementowanie funkcjonalności pokazującej stan serwera ws, wtedy jakoś potrzebuję funkcji, która pokazuje stan procesu w systemie operacyjnym. Aby zaimplementować tę funkcję, użyjemy polecenia exec(), które pozwala na wykonanie dowolnych poleceń konsoli. A jeśli to zrobimy

Exec("ps -aux -p ".$pid, $wyjście);

wtedy w wyniku w tablicy $output, jeśli demon działa i ma $pid, zostaną wyświetlone informacje o daemonie (procesie).

PID UŻYTKOWNIKA %CPU %MEM VSZ RSS TT STAT CZAS ROZPOCZĘCIA POLECENIE aow 62335 0,3 0,1 120080 16020 ?? SJ 16:31 0:00.02 php -q echows.php

W ten sposób otrzymaliśmy naprawdę działające funkcje bez posix_kill, które sprawdzają, czy demon działa i odpowiednio podają dane na jego temat.

Aktualizacja 2017.08.14: Powyższy przykład używa składni BSD dla polecenia ps. Dla większości systemów *nix będzie dobrze, a ta komenda wyświetli listę wszystkich procesów zamiast tego z pid. Począwszy od panelu administracyjnego serwera ws v.0.4. i powyżej używa klasycznej składni, która działa poprawnie na większości systemów *nix.

Funkcja isDaemonActive($pidfile) (
if(is_file($pidfile)) (
$pid = file_get_contents($pidfile);
// pobierz status procesu
$status = pobierzDaemonStatus($pid);
if($status["uruchom"]) (
//demon już działa
consolemsg("demon już działa info=".$status["informacje"]);
zwróć prawdę;
) w przeciwnym razie (
//plik-pid istnieje, ale nie ma procesu
consolemsg("nie ma procesu z PID = ".$pid.", ostatnie zakończenie było nieprawidłowe...");
consolemsg("spróbuj odłączyć plik PID...");
if(!unlink($pidfile)) (
consolemsg("BŁĄD");
//nie można zniszczyć pliku pid. błąd
wyjście(-1);
}
consolemsg("OK");
}
}
zwróć fałsz;
}

getDaemonStatus($pid) (
$result = array("run"=>false);
$wyjście = null;
exec("ps -aux -p ".$pid, $wyjście);

If(count($output)>1)(//Jeśli w wyniku wykonania jest więcej niż jedna linia, to istnieje proces! ponieważ pierwsza linia jest nagłówkiem, a druga jest już procesem
$result["uruchom"] = prawda;
$result["info"] = $output;//ciąg z informacjami o procesie
}
zwróć $wynik;
}

Teraz, gdy funkcja sprawdzania statusu jest gotowa, możemy uruchomić demona nie z konsoli, ale przez wykonanie polecenia PHP exec("php -q echows.php &"); i wyłącz demona z komunikatem OFF.
Ostatnią rzeczą, którą należy zmienić w serwerze echo ws i kliencie ws, jest dodanie żądania AJAX do serwera przed połączeniem, które podniosłoby je, jeśli nie działa. Teraz nie musimy myśleć o stanie demona, ponieważ. wiemy, że nawet jeśli serwer został zrestartowany, klient odbierze go przy pierwszym połączeniu.

Panel sterowania przeglądarki ws serwer

będę się rozwijać prosty system kontrola i monitorowanie demonów. Jest bardzo prosty i składa się z kilku plików echowsadmin.html (panel administracyjny), echowsadmin.js (logika panelu administracyjnego), echowsadmin.php (logika zarządzania serwerem echo ws). Rozwijanie tego systemu okazało się zaskakująco łatwe, spędziłem nie więcej niż 1 godzinę swojego czasu.

Aby uniemożliwić każdemu użytkownikowi wyłączenie demona za pomocą polecenia OFF, usunąłem tę funkcjonalność z kodu PHP serwera echo ws. W związku z tym, implementując funkcję wyłączania z systemu kontroli demona. Implementacja nie jest najbardziej elegancka, zamiast sygnałów używam pliku off_file.pid, ale gwarantuje to, że nie są potrzebne żadne dodatkowe biblioteki i wyłączenie następuje poprawnie. Dlatego na serwerze ws pętla while zawiesza się w momentach nasłuchiwania komunikatów z gniazda, następnie po utworzeniu off_file.pid należy połączyć się z serwerem ws tak, aby dotarł do końca pętli i sprawdzać czy off_file.pid, dla to robię mały trik, imituję połączenie z gniazdem z echowsadmin.php i wprowadzam pewne opóźnienie, aby wszystko działało i skrypt zgłaszał pomyślne zakończenie pracy. Pobierz (nieaktualne archiwum, nowsze w ), nie zapomnij podać lokalizacji pliku echowsadmin.php na swoim hostingu w echowsadmin.js w wierszu 10, adresu echowsstart.php w socket.js i adresu serwera ws w echowsadmin.php (a raczej nie adres , a port, ponieważ plik musi znajdować się na serwerze, adres zawsze będzie 127.0.0.1), gdzie nasz jednokomórkowy mini klient będzie próbował się połączyć, gdy ws echo serwer jest wyłączony. Nie zrobiłem przycisku restartu serwera echo ws, ponieważ jasne jest, że do tego trzeba nacisnąć stop, a następnie uruchomić, a potrzeba tej akcji w jednym przycisku jest praktycznie nieobecna. Cały ten system kontroli działa tylko w systemach operacyjnych *nix, tj. na hostingu. I tak wygląda.

Oczywiście jest wiele do poprawienia:

  • Popraw prezentację i podaj bardziej szczegółowe informacje o stanie serwera ws
  • Dodaj dane wyjściowe, aby logować więcej dokładna informacja o zajętej pamięci i ilości aktualnych połączeń
  • Sprawdź system operacyjny i opracuj wersję dla Denver i Windows
  • Dokonaj autoryzacji

Ale w moim przypadku zadanie polegało na zrobieniu sobie prostego narzędzia do monitorowania stanu demona przez sieć. Nawiasem mówiąc, z niewielką modyfikacją ta rzecz może być używana do monitorowania dowolnego demona, nie tylko ws.

Jeśli chodzi o implementację pod Windows, to wszystkie miejsca, w których pid można ominąć sprawdzając i tym samym zapewnić uruchamialność.

If (strtoupper(substr(PHP_OS,0,3)) === "WIN") ( )

Czy demon działa, czy nie, wystarczy sprawdzić po prostu obecność pliku pid.

Będąc w weekend zapomniałem wyłączyć serwer ws echo w efekcie jego żywotność wyniosła 233774 sekundy, czyli gdzieś około 3 dni zajęta pamięć pozostała około 0,1%, co wskazuje, że rozwiązanie ma prawo do życia.

Informacje zwrotne, komentarze są zawsze mile widziane. Będę dalej rozwijał temat i wdrażał prosty czat zgodnie z obietnicą.

Moje artykuły o demonach PHP i gniazdach internetowych

  • PHP serwer gniazd sieciowych, uruchomienie demona PHP

Żadna witryna nie jest kompletna bez nawigacji, lub jak nazywa się „menu witryny”. Tak więc menu witryny może być jednopoziomowe i wielopoziomowe w postaci drzewa. Jeśli nie ma szczególnych trudności w realizacji z jednopoziomowym menu, to przy tworzeniu wielopoziomowe menu trzeba dobrze myśleć.

Najważniejsze w tym zadaniu jest zaprojektowanie bazy danych dla naszego wielopoziomowego menu. Stwórzmy tabelę Kategorie z trzema polami ID, tytuł, rodzic gdzie:

  • ID- identyfikator
  • Tytuł- Nazwa menu
  • rodzic- Domyślna kategoria rodzicielska 0

Pole odpowiada za rozgałęzienie menu rodzic Jeśli rodzic = 0, to ta kategoria jest kategorią nadrzędną. Aby dodać dzieci do kategorii rodzica, musisz określić w polu rodzic ID pożądany rodzic. Na przykład:

Tabele z kategoriami

Jak widać z tabeli, kategoria nadrzędna Samochody jest dwóch potomków Mazda I Honda powiązane według dziedziny rodzic. I kategoria Motocykle dwa potomstwo są kawasaki I Harley. Jednocześnie kategoria Łodzie nie ma potomków. Mam nadzieję, że rozumiesz, jak łączyć kategorie.

Następnie przechodzimy od słów do praktyki. Utwórzmy tabelę Kategorie.

UTWÓRZ TABELĘ, JEŚLI NIE ISTNIEJE `kategorie` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, `parent` int(10) unsigned NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=20 ; -- -- Zrzuć dane tabeli `categories` -- INSERT IN TO `categories` (`id`, `title`, `parent`) WARTOŚCI (1, "Samochody", 0), (2, "Motocykle", 0) , (3, Mazda, 1), (4, Honda, 1), (5, Kawasaki, 2), (6, Harley, 2), (7, Mazda 3, 3 ), (8, "Mazda 6", 3), (9, "Sedan", 7), (10, "Hatchback", 7), (11, "Łodzie", 0), (12, "Liftback", 8), (13, "Crossover", 8), (14, "Biały", 13), (15, "Czerwony", 13), (16, "Czarny", 13), (17, "Zielony", 13), (18, Mazda CX, 3 ), (19, Mazda MX, 3);

Algorytm pracy składa się z:

Tworzenie połączenia z bazą danych

query("SET NAMES "utf8""); /* * Jest to "oficjalny" obiektowy sposób na zrobienie tego * jednak $connect_error nie działał do PHP 5.2.9 i 5.3.0. */ if ($mysqli->connect_error) ( die("Połączenie nieudane (" . $mysqli->connect_errno . ") " . $mysqli->connect_error); ) /* * Jeśli chcesz mieć pewność co do zgodności z wersjami przed 5.2 .9, * lepszy kod, taki jak ten */ if (mysqli_connect_error()) ( die("Połączenie nie powiodło się (" . mysqli_connect_errno() . ") " . mysqli_connect_error()); )

Pisanie funkcji pobierającej dane z tabeli Kategorie

//Pobierz tablicę menu z bazy danych jako funkcję tablicową getCat($mysqli)( $sql = "SELECT * FROM `categories`"; $res = $mysqli->query($sql); //Utwórz tablicę, w której klucz tablicy to identyfikator menu $cat = array(); while($row = $res->fetch_assoc())( $cat[$row["id"]] = $row; ) return $cat; )

Otrzymujemy tablicę taką jak ta, gdzie klucz tablicy jest identyfikatorem kategorii.

Funkcja Array Tree autorstwa Tommy'ego Lacroix

//Funkcja budująca drzewo z tablicy z funkcji Tommy'ego Lacroix getTree($dataset) ( $tree = array()); foreach ($dataset as $id => &$node) ( //Jeśli nie ma załączników jeśli (!$node[" parent"])( $drzewo[$id] = &$węzeł; )else( //Jeśli są dzieci, przeprowadź pętlę przez tablicę $dataset[$node["parent"]][" dziecko"][$id] = &$ węzeł; ) ) return $drzewo; )

Uzyskiwanie tablicy w postaci drzewa

Cały skrypt

query("SET NAMES "utf8""); /* * Jest to "oficjalny" obiektowy sposób na zrobienie tego * jednak $connect_error nie działał do PHP 5.2.9 i 5.3.0. */ if ($mysqli->connect_error) ( die("Połączenie nieudane (" . $mysqli->connect_errno . ") " . $mysqli->connect_error); ) /* * Jeśli chcesz mieć pewność co do zgodności z wersjami przed wersją 5.2 .9, * lepiej jest użyć tego kodu */ if (mysqli_connect_error()) ( die("Błąd połączenia (" . mysqli_connect_errno() . ") " . mysqli_connect_error()); ) //Pobierz nasze menu tablica z bazy danych jako funkcja tablicowa getCat($mysqli)( $sql = "SELECT * FROM `categories`"; $res = $mysqli->query($sql); //Utwórz tablicę, w której kluczem tablicy jest identyfikator menu $cat = array(); while ($row = $res->fetch_assoc())( $cat[$row["id"]] = $row; ) return $cat; ) //Funkcja budowania drzewo z tablicy przez funkcję Tommy'ego Lacroix getTree($dataset) ( $tree = array()); foreach ($dataset as $id => &$node) ( //Jeśli nie ma załączników if (!$node["parent "])( $tree[$id] = &$node; )else( //Jeśli są dzieci, przejdź do tablicy $dataset[$node["parent"]]["childs"][$id] = &$node; ) ) return $drzewo; ) //Przygotuj się tablica z danymi $cat = getCat($mysqli); //Utwórz menu w formie drzewa $tree = getTree($cat); //Szablon wyświetlania menu w postaci funkcji drzewa tplMenu($category)( $menu = "
  • ".$kategoria["tytuł"].""; if(isset($kategoria["dzieci"]))( $menu .= "
      ".showCat($kategoria["dzieci"]) ."
    "; ) $menu .= "
  • "; return $menu; ) /** * Przeczytaj nasz szablon rekurencyjnie **/ function showCat($data)( $string = ""; foreach($data as $item)( $string .= tplMenu($item); ) return $string; ) //Pobierz znacznik HTML $cat_menu = showCat($tree); //Wyświetl echo "
      ". $cat_menu ."
    "; ?>

    Wynik pracy

    Wielopoziomowe menu w PHP + MySQL dla administratora

    Jeśli chcesz użyć to menu w panelu administracyjnym Twojej strony musisz przepisać kilka funkcji tplMenu(), pokażKota().

    ".$kategoria["tytuł"].""; )else( $menu = " "; ) if(isset($kategoria["dzieci"]))( $i = 1; for($j = 0; $j< $i; $j++){ $str .= "→"; } $i++; $menu .= showCat($category["childs"], $str); } return $menu; } /** * Рекурсивно считываем наш шаблон **/ function showCat($data, $str){ $string = ""; $str = $str; foreach($data as $item){ $string .= tplMenu($item, $str); } return $string; } //Получаем HTML разметку $cat_menu = showCat($tree, ""); //Выводим на экран echo ""; ?>

    Wynik pracy

    Wybierz Samochody → Mazda →→ Mazda 3 →→→ Sedan →→→ Hatchback →→ Mazda 6 →→→ Liftback →→→ Crossover →→→→ Biały →→→→ Czerwony →→→→ Czarny →→→→ Zielony →→ Mazda CX →→ Mazda MX → Motocykle Honda → Kawasaki → Łodzie Harley

    1C-Bitrix - wysoce profesjonalny system administracyjny Twoje projekty internetowe, które pozwalają elastycznie zarządzać zamówieniami w sklepie internetowym, które: zmniejsza objętość powtarzalnych procesów i poprawić jakość obsługi klienta.

    Oprócz głównych zalet systemu Bitrix wszyscy użytkownicy znane są wysokie wymagania tego produktu do parametry techniczne hosting. Udało nam się zoptymalizować i dostroić nasze serwery. Ale już HyperHost to doskonały host o wysokiej wydajności.
    Poniżej rozważymy proces instalacji tego systemu na naszym hostingu:
    krok 1
    Przed rozpoczęciem instalacji CMS Bitrix musisz wprowadzić pewne zmiany w indywidualnym pliku php.ini dla swojego konta. Jak to zrobić, zobacz zrzuty ekranu:



    krok 2
    Po wprowadzeniu niezbędnych parametrów w indywidualnym pliku php.ini dla Bitrix CMS należy pobrać i przesłać skrypt instalacyjny:
    Bitrix CMS (bitrixsetup.php).
    Możesz go pobrać pod adresem z oficjalnej strony 1c-bitrix.ru:
    http://www.1c-bitrix.ru/download/cms.php

    krok 3
    Następnie musimy wgrać go na serwer w katalogu domowym Twojej witryny.
    Można to zrobić zarówno za pomocą panelu sterowania Cpanel, jak i za pomocą FTP
    Aby pobrać za pośrednictwem panelu sterowania, musisz wykonać następujące czynności:






    krok 4
    Aby zainstalować witrynę, musimy stworzyć bazę danych (DB), użytkownika bazy danych i dodać użytkownika do tworzonej bazy danych








    krok 5
    Zacznijmy instalować CMS Bitrix

    Ważny! Możesz sprawdzić działanie strony na naszym hostingu lokalnie, bez zmiany DNS (delegacja domeny), wystarczy się zarejestrować plik hosts następujący wpis:

    53.114.112.45 domena.ru

    gdzie,
    domain.ru - Twoja domena.
    53.114.112.45 - adres IP twojego serwera hostingowego. Aby zobaczyć, jaki adres IP znajduje się w naszej firmie po złożeniu zamówienia, należy wykonać następujące czynności:
    Przejdź do panelu sterowania witryny w sekcji „Domeny internetowe” i zobacz, jaki adres IP jest określony dla Twojej witryny;

    Plik hosts znajduje się w następujących ścieżkach:

    - Windows XP/2003/Vista/7: WINDOWS\system32\drivers\etc\hosts
    - Windows NT/2000: WINNT\system32\drivers\etc\hosts
    - Windows 95/98/ME: WINDOWS\hosty
    - Mac OS X 10.2+: /private/etc/hosts
    - Linux: /etc/hosts

    Po wprowadzeniu tych zmian wersja strony, którą przeniosłeś na nasz hosting, otworzy się pod adresem domain.ru z przeglądarki Twojego komputera.
    Nie zapomnij usunąć tego wpisu z pliku hosts po sprawdzeniu wydajności witryny.
    Przejdź w przeglądarce do http://twoja_domena/bitrixsetup.php, wybierz pakiet dystrybucyjny, który chcesz zainstalować.
    Pokażemy Ci przykład instalacji CMS w pakiecie dystrybucyjnym „Zarządzanie witryną” oraz wersji demonstracyjnej


    Następnym krokiem jest pobranie dystrybucji na serwer i jej rozpakowanie.



    krok 6

    Instalacja CMS
    Po rozpakowaniu dystrybucji zostaniesz przekierowany na stronę instalacji CMS


    Przeczytaj i potwierdź umowę licencyjną

    krok 7

    Wprowadzamy nasze dane i umieszczamy „ptaszek” obok pozycji „Zainstaluj w kodowaniu UTF-8”, po czym przechodzimy do następnego kroku


    krok 8

    W tym kroku wyświetlana jest strona weryfikacji, tutaj sprawdzana jest zgodność ustawień serwera pod kątem prawidłowej instalacji i działania Bitrix CMS.


    krok 9

    Nawiązanie połączenia z bazą danych.
    W polach musisz podać dane połączenia z bazą danych, którą utworzyliśmy w krok 4


    krok 10

    Ten krok idzie instalacja automatyczna produkt

    krok 11

    Utwórz administratora dla tej witryny
    Musisz wypełnić wymagane pola: login, hasło i potwierdzenie hasła.

    krok 12

    Wybierz szablon instalacji.
    W momencie instalacji jest to tylko 1 - „naprawione”, ponieważ jest to standardowa instalacja.

    Wybór tematu


    Wprowadź informacje o swojej firmie, dla której instalujesz witrynę i rozpocznij instalację wybranego motywu.


    Gratulacje! Zainstalowałeś CMS Bitrix.
    Należy zauważyć, że wyniki testów wykazały bardzo wysokie wyniki wydajności 1C na naszych serwerach.
    W taryfie VPS-Start z naszej linii wydajność wynosiła 88,58 w standardzie 30

    pokazał lepsze wyniki 127,84 ze standardem 30
    Te liczby należą do najwyższych wśród firm hostingowych w WNP.
    Firma HyperHost życzy miłej pracy!

    8775 raz(y) 9 razy oglądane dzisiaj

    Podobał Ci się artykuł? Podziel się z przyjaciółmi!
    Czy ten artykuł był pomocny?
    TAk
    Nie
    Dziękuję za opinię!
    Coś poszło nie tak i Twój głos nie został policzony.
    Dzięki. Twoja wiadomość została wysłana
    Znalazłeś błąd w tekście?
    Wybierz, kliknij Ctrl+Enter a my to naprawimy!