Аппараттық және бағдарламалық қамтамасыз етуді орнату

Шексіз PHP жүктеулері. Дерекқорға қосылуды құру

Бұл бағдарламалау тілі арқылы сіз веб-сайттар мен веб-қосымшаларды жасай аласыз жергілікті компьютер Apache сервері арқылы. Қазіргі интернет сайттарының көпшілігі PHP тілінде жазылған. Бұл сайттардың беттері HTML белгілеуіндегі ескі сайттардан айырмашылығы динамикалық.

Барлық ақпарат MySQL дерекқорында сақталады, одан қажетті ақпарат алынады. осы сәт. Тәжірибелі бағдарламашылар веб-сайттарды нөлден бастап жасай алады қарапайым пайдаланушылардайын қозғалтқыштардың (WordPress, Joomla немесе Drupal) қызметтерін пайдалану жақсы, мұнда өз жазуларыңызды қосу жеткілікті - және сіздің сайтыңыз дайын. Жергілікті компьютерде веб-сайттарды жасау үшін сізге тегін жүктеп алу қажет жаңа нұсқасы PHP. Осыдан кейін дайын сайтты Интернетке жүктеуге болады.

Мүмкіндіктер:

  • Web-сайттар мен бағдарламаларды құру және өңдеу;
  • сайт мазмұнын динамикалық басқару;
  • веб-сайттар үшін әртүрлі қозғалтқыштарды тестілеу;
  • HTTP cookie файлдарын пайдалану.

Жұмыс принципі:

Енді PHP қалай жұмыс істейтінін түсінейік. Алдымен сіз, мысалы, виртуалды Apache серверін жүктеп алып, орнатуыңыз керек. Мұны істеу үшін сіз Denwer, XAMPP, OpenServer немесе кез келген басқа бағдарламаны дайын әзірлеушілер жинағын пайдалана аласыз. Орнатқаннан кейін жергілікті сервероған PHP мұрағатының мазмұнын көшіру керек. Осыдан кейін сіз виртуалды хостингте сайттарды нөлден бастап жаза аласыз немесе Интернет жобаларыңызды жасау үшін қажетті сайт қозғалтқыштарын орната аласыз.

Хостинг пен домен үшін ақы төлеп, сіз өз сайтыңызды Интернетке жүктеп, шығармашылық қабілеттеріңізді жүзеге асыра аласыз. Қолданылуы РНР тілісайттарыңыздың мазмұнын жылдам және ыңғайлы жасауға және өңдеуге мүмкіндік береді. Мысалы, сайттың төменгі бөлігінің дизайнын өзгерту үшін сізге тек бір файлды өңдеу керек, ал өзгертулер жобаңыздың әрбір бетінде көрсетіледі. HTML тілінде әрбір бетті жеке өңдеуге тура келеді.

Артықшылықтары:

  • РНР-де динамикалық сайттарды құру;
  • мәліметтер қорын пайдалану;
  • компьютерде PHP тегін жүктеп алу мүмкіндігі
  • жергілікті компьютерде бірнеше дерекқорлар мен сайттарды құруды қолдау;
  • кең таралған және танымал бағдарламалау тілі.

Минустары:

  • компьютерде жұмыс істеу үшін виртуалды серверді орнату қажет болуы мүмкін.

Бүгінгі таңда РНР веб-сайттар мен веб-қосымшаларға арналған ең кең таралған бағдарламалау тілі болып табылады. Сондықтан өз жобаларыңызды жасау үшін Windows жүйесін осы тілге бейімдеу жеткілікті. Сондай-ақ, жұмыс үшін сізге жергілікті сайттарды виртуалды хостингке сервер орнату қажет болады. Бұл бағдарламалау тілін пайдалану сізге интернет жобаларыңызды жасауға және іске қосуға мүмкіндік береді, сондықтан оны тегін жүктеп алуға кеңес береміз соңғы нұсқасы PHP.

РНР (ағылш. PHP: Hypertext Preprocessor – «PHP: Hypertext Preprocessor»; бастапқыда Personal Home Page Tools – «Жеке веб-беттерді құру құралдары») веб-қосымшаларды әзірлеу үшін қарқынды қолданылатын жалпы мақсаттағы сценарий тілі болып табылады.

Қазіргі уақытта PHP-ті хостинг провайдерлерінің басым көпшілігі қолдайды және динамикалық веб-сайттарды жасау үшін қолданылатын жетекші тілдердің бірі болып табылады.

РНР тілі мен оның аудармашысы жобаның бөлігі ретінде энтузиастар тобымен әзірленуде. ашық дереккөз. Жоба GNU General Public License лицензиясымен үйлеспейтін жеке лицензиясы бойынша таратылады.

РНР қолданылу аясы

Веб-бағдарламалау саласында, атап айтқанда сервер жағында, PHP танымал сценарий тілдерінің бірі болып табылады (JSP, Perl және ASP.NET-те қолданылатын тілдермен бірге).

Веб-сайттарды құру саласындағы танымалдылық веб-қосымшаларды әзірлеуге арналған кіріктірілген құралдардың үлкен жиынтығының болуымен анықталады. Олардың негізгілері:

  • POST және GET параметрлерін, сондай-ақ веб-сервер ортасының айнымалы мәндерін алдын ала анықталған массивтерге автоматты түрде шығару;
  • өзара әрекеттесу үлкен сомаәртүрлі дерекқорды басқару жүйелері (, MySQLi, Oracle (OCI8), Oracle, Microsoft SQLСервер, Sybase, ODBC, mSQL, IBM DB2, Cloudscape және Apache Derby, Informix, Ovrimos SQL, IBM Notes, DB++, DBM, dBase, DBX, FrontBase, FilePro, Ingres II, SESAM, / InterBase, Paradox File Access, MaxDB, PDO интерфейсі (PHP Data Objects);
  • HTTP тақырыптарын автоматтандырылған жіберу;
  • HTTP авторизациясымен жұмыс істеу;
  • cookie файлдарымен және сеанстармен жұмыс істеу;
  • жергілікті және жойылған файлдар, розеткалар;
  • серверге жүктелген файлдарды өңдеу;
  • XForms-пен жұмыс істеу.

Қазіргі уақытта РНР-ді жүздеген мың әзірлеушілер пайдаланады. Деректерге негізделген TIOBE корпорациясының рейтингі бойынша іздеу жүйелері, 2015 жылдың қыркүйегінде РНР бағдарламалау тілдері арасында 6 орында болды. РНР қолданатын ең үлкен сайттарға жатады

Мен Денверді қалай орнату және барлығының жұмыс істейтініне көз жеткізу туралы көбірек айттым, қарапайым ws echo серверін енгізу үшін аз уақыт қажет болды. Бірақ егер сіз бастапқы мұрағаттарды жүктеп алған болсаңыз, онда сіз технологияны пайдалану үшін жеткілікті болатын хабарламаларды қабылдау және жіберу жолын оңай анықтай алатыныңызға сенімдімін.
Менің блогымда әлі жарнамаланбаған реакция болғанына қуаныштымын және бұл мені жалғасын жазуға және ws серверінің PHP сценарийін хостингте қалай әлі де жұмыс істеуге болатынын, қалай сенімді болу керек деген сұрақтарды ашуға итермеледі. процестің орындалып жатқаны және PHP сценарийі жұмыс істеп тұрғаны және күту уақытымен жабылмағаны немесе Apache қайта іске қосылған кезде, қайталанатын PHP процесін іске қосудан қалай аулақ болу керек және кепілдік берілген жұмыс істейтін ws серверін алу үшін басқа қажетті сұрақтарға жауаптар. Мен міндетті түрде сөйлесу функциясы бар Internet ws echo серверін жасап, оны өзімнің орташа хостингіме орналастырамын. Осы мақаланың қалған бөлігінде серверде үздіксіз жұмыс істейтін және ws беретін PHP сценарийін мен ws сервері деп атаймын, бірақ ол шын мәнінде сервер жағындағы процесс. Ең бастысы, мен хостинг серверінің немесе виртуалды машинаның консоліне SSH рұқсаты жоқ адамдар үшін де дайын шешім беремін.

Бүгін жұмыс көп болады

Қарапайым бастайық.

Веб-розетка серверін хостингте орналастыру және іске қосу

Қарапайымдылық - ұшыру кезінде ешқандай проблемалар жоқ. Сіз соңғы мақаладан echows.php PHP сценарийін ондағы ештеңені өзгертпестен алып, оны хостингке жүктеп, браузерден файлға қол жеткізе аласыз, Денверде жұмыс істеуден жалғыз айырмашылығы Apache параметрлері мен хостинг кэштеу механизмдері тыйым салуында болуы мүмкін. орындалып жатқан ақпаратты көрсетеді PHP сценарийі, бұл жағдайда браузер терезесінде ешқандай ақпаратты көрмейсіз және бет браузерде жүктелуін жалғастырады. Бірақ егер сіз ws клиентінен ws серверіне қосылуға әрекеттенсеңіз, қосылым сәтті болғанын және ws echo сервері барлық жіберілген сұрауларға жауап беретінін көресіз. ws клиентіндегі ws серверінің мекенжайы ретінде, әрине, ws://yourdomain.com:8889 көрсету керек. Көріп отырғаныңыздай, бәрі тәртіппен. Сіз кездесетін жалғыз мәселе - хостинг брандмауэрінің параметрлері және басқа қызметтермен бос емес порттар. Егер сізде бір IP мекенжайында бірнеше домен болса, онда сіз ws://anotheromain.com:8889 доменінің мекенжайы бойынша ws серверіне қол жеткізе аласыз, бұл өте жақсы емес, әсіресе жүздеген веб-сайттар ілінетін хостинг үшін бір доменде теориялық тұрғыдан біреу сіз сияқты порттарды пайдалана алады және бұл ws серверінің жұмыс істемеуіне әкелуі мүмкін, сондықтан мен порттарды мұқият таңдауды және ws сервері жұмысын тоқтатқан кезде ол әрқашан жабылатынына көз жеткізуді ұсынамын. барлық қосылымдарды және розеткаларды дұрыс жабады. Енді, PHP сценарийінің өзіне келетін болсақ, сіз байқаған боларсыз, біздің PHP сценарийіміз тек 100 секунд өмір сүреді, содан кейін ол қосылуға немесе хабарлама жіберуге әрекеттенгенде, ол барлық қосылымдарды жауып, оның орындалуын аяқтайды. Оны қалай «мәңгілік» өмір сүруге болады? Әдістердің жеткілікті саны бар. Бірақ мәселе PHP сценарийінің шексіз жұмыс істеуінде емес, мәселе сценарийдің әртүрлі жағдайларда дұрыс аяқталуын, содан кейін жұмысын дұрыс жалғастыру жолын қамтамасыз етуде. Мысалы, сервер өшіріліп, содан кейін қосылған кезде, PHP сценарийі өздігінен іске қосылмайды және ws серверінің жұмыс істеп тұрғанын бақылау өте жаман идея және ол қолмен жұмыс істемесе, оны іске қосыңыз.

PHP сценарийін шексіз орындау әдісі браузерден іске қосылады

Бірінші орындалатын нәрсе – сценарийдің өзінде PHP сценарийінің шексіз қызмет ету мерзімін көрсету set_time_limit(0); және браузерді елемеу abort ignore_user_abort(true); PHP сценарийі браузер терезесін жапқаннан кейін орындалады. Қажетті әрекеттерді орындағаннан кейін оны браузерден іске қосуға болады. Мәселе мынада, оны бір рет іске қосу арқылы біз бәрі процеске сәйкес келетінін, орындау кезінде қателер болған-болмағанын және сценарийдің жұмысын жалғастыра ма, жоқ па, оны тек оған қосылу арқылы тексеруге болатынын тексере алмаймыз. ws клиентімен. Әрине, бұл сценарийге журнал файлын жүргізу функционалдығын қосуға болады, онда оның жұмысының тарихы жазылады. Сондай-ақ, хостингте Apache қайта іске қосылғанда, сценариймен процесс 100% өшіріледі. Бұл әдіс серверге кепілдендірілген жұмыс істейтін жөндеуден өткен ws серверінің PHP сценарийін жүктеген жағдайда ғана қолайлы болуы мүмкін және біз үшін хостинг провайдерінің сенімділігіне байланысты оның қысқа уақыт ішінде ғана жұмыс істеуі маңызды, бірақ бұл әдіс толыққанды өнеркәсіптік ws серверінің жұмысы үшін мүлдем жарамсыз - оның өте сенімсіздігі және қажет болған сәтте өшіру мүмкін еместігі үшін. Хостинг серверінің әкімшісі жаңарту мақсатында Apache-ді қайта іске қосуды шешкен жағдайды елестетіп көріңіз, және сіз ws серверіңіздің үнемі жұмыс істеп тұрғанын немесе жұмыс істемейтінін тексермейсіз, ал пайдаланушылар, мысалы, чатта отырған кезде және кенеттен бәрі төмендейді, пайдаланушылар наразы. Тағы да, ws клиенті ws серверіне ws протоколы арқылы қосылмас бұрын бірнеше балдақтарды қолдануға болады, ws клиентіне XMLHttpRequest() арқылы басқа PHP сервер сценарийіне қол жеткізуге және ws серверінің іске қосылуын тексеруді талап етуге болады. Әдіс сәл қисық, бірақ ол шағын сөйлесу бөлмесі немесе кішкентай ойыншық сияқты өнеркәсіптік емес шешімдерде орын алады. Бұл мен өзімнің шағын жобаларымда қолданамын.

Қалай болғанда да, мен эксперимент жүргіздім, хостингте ws серверін іске қостым, бұрын PHP сценарийіне клиенттен «OFF» хабарламасын алған кезде барлық қосылымдарды жабу және процесті тоқтату механизмін енгіздім. Мен оны бірнеше күн ұстамадым, мезгіл-мезгіл әртүрлі хабарламалар жіберіп, өмір сүру мүмкіндігін тексердім, шамамен екі күннен кейін «OFF» пәрменін жібердім ws өз жұмысын сәтті аяқтады, ws сервер процесінің қызмет ету уақыты 183 403 секунд болды (2 секундтан сәл астам). күн) және менің ойымша, ол еш қиындықсыз одан да ұзақ жұмыс істей алады.

PHP шексіз орындау әдісі консольден іске қосылады

Негізінде, PHP сценарийін браузерден іске қосудың іс жүзінде ешқандай айырмашылығы жоқ, тек PHP сценарийі туралы барлық деректер консольге шығарылады және бірнеше басқа да кішігірім нюанстар. РНР сценарийінің өзінде set_time_limit(0) болуы керек; және ignore_user_abort(true);. PHP сценарийін *nix консолінен іске қосу пәрмен арқылы орындалады $ php -q scriptfile.php(Мен консольге қосылу үшін Putty қолданбасын пайдаландым). -q (--no-header) қосқышы процесті дыбыссыз режимде іске қосу керектігін көрсетеді және әдетте браузерге жіберілетін HTTP тақырыптарының шығысын басады. $manphpқызықтыратын басқа кілттерді көруге мүмкіндік береді. Ресми PHP веб-сайтындағы тамаша құжаттама, ол консольден PHP сценарийлерін іске қосуды шешуге көмектесіп қана қоймай, сонымен қатар PHP сценарийінің өзіне айтарлықтай жақсартулар жасады. Сценарийдің шығысын мен әдеттегідей «үлкеннен» ('>') таңбасын пайдаланып сервердегі кез келген файлға қайта бағыттауға болатынын ескеріңіз.

$ php -q scriptfile.php > scriptfileoutput.txt

РНР PHP сценарийлерін Apache-ден абсолютті тәуелсіз түрде іске қосу үшін пайдаланылуы мүмкін, бірақ мен розетка механизмі Apacheсіз жұмыс істейтініне сенімді емеспін, мен оны Apacheсіз іске қосуға тырыспадым - маған ештеңе көрінбеді. Консоль арқылы жұмыс істеу веб-шолғыш арқылы жұмыс істеуге қарағанда дұрысырақ болып саналады, бірақ ол браузер арқылы жұмыс істеу сияқты бірқатар мәселелерді шеше алмайды. Мүмкін, мұндай іске қосу Apache-ді қайта іске қосу кезінде сценарийді тоқтатудан құтқарады және бұл екіталай, бірақ егер бүкіл веб-сервер немесе виртуалды машинақайта жүктеледі. Сізге қолмен серверге көтеріліп, сценарийді іске қосу керек, әрине, егер сізде үлкен ойын жобасы болса және арнайы жүйелік әкімшілерсервердегі процестердің күйін бақылайтын және Apache және басқаларымен бірге ws серверін инициализациялауға және жүктеуге арналған сценарийлер бар, бұл жағдайда бұл жалғыз дұрыс нұсқа, бірақ біз ws серверін іске асырудың ыңғайлы жолы туралы айтып отырмыз. Шағын жобалар үшін PHP тілінде. Сондай-ақ, кейде консольден PHP сценарийін іске қосу кезінде ақаулық туындайды, ол консольден шыққан кезде бір уақытта PHP сценарийінің орындалуын тоқтатады, бұл PHP сценарийінің орындалуының байланысты болғандығына байланысты. Сіздің сеансыңыз клиент ретінде. Теориялық тұрғыдан бұл PHP сценарийіндегі ignore_user_abort(true); жолын пайдалану арқылы емделуі керек, бірақ бұл әрқашан көмектеспейді. әртүрлі параметрлер PHP. Мұндай жағдайда PHP сценарийіне ол клиент деп есептейтін /dev/null ағынын беру болып табылады және консольден шыққанда тоқтатылмайды.

$ php -q scriptfile.php scriptfileoutput.txt &

Процесс жадта қалған кезде Ctrl+C пернелерін басып, консольге оралу үшін соңындағы амперсанд қажет. Немесе nohup утилитасын пайдалануға болады.

Бұған қоса, Windows платформасында сценарийді консольден іске қосуға болатындығын білу пайдалы болады

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

Егер бәрі дұрыс орындалса, Supervisor утилитасын қолданған дұрыс: A Process Control System, ол процестің жұмысын бақылайды, қажет болған жағдайда оны іске қосады және бұзылуларды тіркейді. Сіз маңызды жобамен айналысып жатқанда және сізде арнайы сервер немесе кем дегенде VDS болған кезде өте жақсы нәрсе.

ws сервері PHP процесін браузерден басқару

РНР сценарийлерін іске қосуды үйрену нәтижесінде менде өте жақсы болды қарапайым идея- ws серверіне қосылу алдында ws сервер процесінің күйін тексеретін PHP сценарийіне XMLHttpRequest() сұрауын ws клиент жағында іске асырыңыз және егер ол іске қосылмаса, оны іске қосады. Сондай-ақ, соңғы оқиғалар журналы қолжетімді болатын ws серверінің әкімшісі беті сияқты нәрсені іске асыру идеясы болды: ол қашан іске қосылғаны, неліктен бұзылғаны, келесі іске қосуды кім бастағаны және т.б. ws серверіне қайта қосу, өшіру, барлық қосылымдарды жабу және т.б. пәрменін беруге болады.

ws клиенті үшін интерфейс қандай болуы керек:

  • WS серверінің күйін тексеріңіз және сервер қолжетімсіз болса, бастаңыз

ws әкімшісінің интерфейсі қандай болуы керек:

  • ws серверінің күйі туралы ақпарат, жақсырақ қосылымдар саны мен алатын жад көлемі
  • Журналдарды қарау
  • ws серверін тоқтату

Сонымен, іске асыру үшін бізге ws сервері қажет, ол бұрын сипатталған әдістердің бірімен жадта ілінуі керек, яғни. одан сапалы жын жасау керек. Хабреде процестер мен демондар туралы тамаша мақала бар. Дегенмен, өкінішке орай, еншілес процестерді жасау үшін pcntl_fork PHP пәрменін қолдауы бар хостинг табу розетка қолдауына қарағанда әлдеқайда қиын, сондықтан классикалық демонизация әдісінен бас тартуға тура келеді. Сондай-ақ, мұндай бағдарламаларды терезелерде жөндеу мүмкін емес. шанышқылар тек *nix операциялық жүйелерінде бар. Дегенмен, біз мақаладан пайдалы нәрсені білдік, атап айтқанда процесс идентификаторын сақтайтын PID файлын жасау, ол екі процесті бір уақытта іске қосуға мүмкіндік бермейді - төменде бұл туралы толығырақ.

Нәтижесінде мен STDIN, STDOUT, STDERR кіріс/шығыс ағындарын ауыстыру кодын орналастыру арқылы ws echo сервер сценарийінің PHP кодын сәл өзгерттім және осылайша консольден ws серверін іске қосуды жеңілдетдім:

$ php -q /home/path/echows.php &

pcntl_fork қолданбай жақсы жұмыс істейтін демон бар. Ол консоль арқылы іске қосылады, консольден ажыратылады және ws://yourdomain.com:8889 мекенжайындағы барлық пайдаланушы сұрауларына жауап беру үшін барлығы жақсы жұмыс істейді және «OFF» хабары жіберілгенде дұрыс жабылады. Бірақ мәселе мынада: демонның жұмыс істеп тұрғанын немесе жұмыс істемейтінін тексеру және осылайша демонның қайталануын болдырмау мүмкін емес. Иә, іске қосу кезінде біздің демонның процесс идентификаторын (OS * nix жүйесіндегі бірегей процесс нөмірі) сақтайтын pid_file.pid файлы жасалады және демон дұрыс аяқталғанда, мысалы, «OFF» хабары болғанда. қабылданса, бұл файл жойылды. Іске қосу кезінде сіз, әрине, осы файлдың бар-жоғын тексере аласыз және егер файл бар болса, демонның қазірдің өзінде жұмыс істеп тұрғанын хабарлаңыз және осылайша қайталанатын іске қосуды болдырмаңыз, бірақ егер демон жұмысын қате аяқтап, орындамаған болса ше? pid_file.pid файлын жойыңыз, бұл жағдайда біздің демон ешқашан қайта іске қосылмайды. Тағы да, Хабреде біз демонның бар-жоғын тексеруге арналған тамаша функцияны таба алдық.


if(is_file($pidfile)) (
// процесті тексеріңіз, posix_kill ескірген болуы мүмкін, PHP 5.3+ нұсқасына көшкен кезде ауыстыру қажет болуы мүмкін.
if(posix_kill($pid,0)) (
//демон жұмыс істеп тұр
шындықты қайтару;
) басқа (

if(!unlink($pidfile)) (
consolemsg("ERROR");
exit(-1);
}
consolemsg («Жарайды»);
}
}
жалған қайтару;
}

Тағы да мәселе, posix_kill($pid,0) функциясы pcntl_fork сияқты себеппен жұмыс істемейтін болып шықты. Мен бұған шыдай алмай, тағы да «қулық» шешім ойлап таптым. Өйткені Мен әлі де ws серверінің күйін көрсететін функцияны енгізуді шештім, содан кейін маған ОЖ-дағы процестің күйін көрсететін функция қажет. Бұл функцияны жүзеге асыру үшін біз кез келген консольдық командаларды орындауға мүмкіндік беретін exec() командасын қолданамыз. Ал егер жасасақ

Exec("ps -aux -p ".$pid, $шығару);

содан кейін, нәтижесінде $output массивінде, егер демон жұмыс істеп тұрса және $pid болса, демон (процесс) туралы ақпарат көрсетіледі.

ПАЙДАЛАНУШЫ PID %CPU %MEM VSZ RSS TT STAT БАСТАЛУ УАҚЫТЫ ПӘРІСІ aow 62335 0,3 0,1 120080 16020 ?? SJ 16:31 0:00.02 php -q echows.php

Осылайша, бізде демонның жұмыс істеп тұрғанын тексеретін және сәйкесінше ол туралы деректер беретін posix_kill жоқ шынымен жұмыс істейтін функциялар алдық.

Жаңартылған 14.08.2017:Жоғарыдағы мысал ps пәрмені үшін BSD синтаксисін пайдаланады. Көптеген *nix жүйелері үшін бұл жақсы болады және бұл пәрмен pid бар бірінің орнына барлық процестерді тізімдейді. ws серверінің басқару тақтасының v.0.4 нұсқасынан бастап. және жоғарыда *nix жүйелерінің көпшілігінде дұрыс жұмыс істейтін классикалық синтаксис қолданылады.

Функция —DaemonActive($pidfile) (
if(is_file($pidfile)) (
$pid = file_get_contents($pidfile);
// процесс күйін алу
$status = getDaemonStatus($pid);
if($status["run"]) (
//демон жұмыс істеп тұр
consolemsg("демон қазірдің өзінде жұмыс істеп тұр info=".$status["info"]);
шындықты қайтару;
) басқа (
//pid-файл бар, бірақ процесс жоқ
consolemsg("PID = ".$pid." бар процесс жоқ, соңғы аяқтау әдеттен тыс болды...");
consolemsg («PID файлының байланысын ажыратып көріңіз...»);
if(!unlink($pidfile)) (
consolemsg("ERROR");
//pid файлын жою мүмкін емес. қате
exit(-1);
}
consolemsg («Жарайды»);
}
}
жалған қайтару;
}

getDaemonStatus($pid) (
$нәтиже = массив("run"=>false);
$output = null;
exec("ps -aux -p ".$pid, $шығару);

If(count($output)>1)(//Орындау нәтижесінде бірден көп жол болса, онда процесс бар! себебі бірінші жол тақырып, ал екіншісі қазірдің өзінде процесс.
$нәтиже["іске қосу"] = шын;
$result["info"] = $output;//процесс туралы ақпарат бар жол
}
қайтару $нәтиже;
}

Енді күйді тексеру функциясы дайын, біз демонды консольден емес, PHP пәрменін орындау арқылы іске қоса аламыз exec("php -q echows.php &"); және ӨШІРУ хабарымен демонды өшіріңіз.
Ws echo серверінде және ws клиентінде өзгертуге болатын соңғы нәрсе қосылу алдында серверге AJAX сұрауын қосу болып табылады, ол өшірілген болса оны арттырады. Енді жынның жағдайы туралы ойлаудың қажеті жоқ, өйткені. сервер қайта жүктелсе де, клиент оны бірінші қоңырауда қабылдайтынын білеміз.

Браузердің басқару тақтасы ws сервері

дамытамын қарапайым жүйедемонды басқару және бақылау. Ол өте қарапайым және бірнеше echowsadmin.html (әкімші панелі), echowsadmin.js (әкімші панелінің логикасы), echowsadmin.php (ws echo серверді басқару логикасы) файлдарынан тұрады. Бұл жүйені әзірлеу таңқаларлық оңай болды, мен уақытымның 1 сағатынан артық емес болдым.

Кез келген пайдаланушының демонды OFF пәрменімен өшіруіне жол бермеу үшін мен бұл функцияны ws echo серверінің PHP кодынан алып тастадым. Тиісінше, демон басқару жүйесінен өшіру функциясын жүзеге асыру арқылы. Іске асыру ең талғампаз емес, мен сигналдардың орнына off_file.pid файлын қолданамын, бірақ қосымша кітапханалар қажет емес және өшіру дұрыс орындалатынына кепілдік беріледі. Өйткені ws серверінде while циклі розетка хабарларын тыңдау сәтінде ілініп тұрады, содан кейін off_file.pid файлын жасағаннан кейін циклдің соңына жетіп, off_file.pid файлын тексеру үшін ws серверіне қосылу керек. бұл мен echowsadmin.php розеткасына еліктеп, аздап трюк жасаймын және бәрі жұмыс істейтіндей және сценарий жұмыстың сәтті аяқталғанын хабарлайды. Жүктеп алу (ескірген мұрағат, ішінде жаңарақ), echowsadmin.php файлының 10-жолдағы echowsadmin.js ішіндегі хостингтегі орнын, socket.js ішіндегі echowsstart.php мекенжайын және ws серверінің мекенжайын көрсетуді ұмытпаңыз. echowsadmin.php ішінде (дәлірек айтқанда мекенжай емес, порт, файл серверде болуы керек болғандықтан, мекенжай әрқашан 127.0.0.1 болады), мұнда біздің бір ұяшықты шағын клиент ws echo болғанда қосылуға тырысады. сервер өшірілген. Мен ws echo серверін қайта іске қосу түймешігін жасамадым, өйткені бұл үшін тоқтатуды басу керек, содан кейін бастау керек және бір түймеде бұл әрекетті орындаудың іс жүзінде қажеті жоқ. Бұл басқару жүйесі тек *nix операциялық жүйелерінде жұмыс істейді, яғни. хостингте. Және ол осылай көрінеді.

Әлбетте, жетілдіретін көп нәрсе бар:

  • Көрсетілімді жақсартыңыз және ws серверінің күйі туралы толығырақ ақпарат жасаңыз
  • Қосымша журналға шығу үшін шығыс қосыңыз егжей-тегжейлі ақпаратбос тұрған жад және ағымдағы қосылымдар саны туралы
  • үшін чек жасаңыз операциялық жүйежәне Денвер мен Windows үшін нұсқасын әзірлеу
  • Рұқсат ету

Бірақ, менің жағдайда, тапсырма өзімді веб арқылы демонның күйін бақылаудың қарапайым құралына айналдыру болды. Айтпақшы, кішкене модификациямен бұл зат тек ws емес, кез келген демонды бақылау үшін пайдаланылуы мүмкін.

Windows жүйесін іске асыруға келетін болсақ, pid-ті тексеру арқылы айналып өтуге болатын барлық жерлерді іске қосу мүмкіндігін қамтамасыз етеді.

Егер (strtoupper(substr(PHP_OS,0,3)) === "WIN") ( )

Демон жұмыс істеп тұр ма, жоқ па, тек pid файлының бар-жоғын тексеру жеткілікті.

Демалыс күндері мен ws echo серверін өшіруді ұмытып кеттім, нәтижесінде оның қызмет ету уақыты 233774 секунд болды, яғни. бір жерде шамамен 3 күн, бос жады шамамен 0,1% қалды, бұл шешімнің өмір сүруге құқығы бар екенін көрсетеді.

Кері байланыс, пікірлер әрқашан қабылданады. Мен тақырыпты дамытуды жалғастырамын және уәде етілгендей қарапайым чатты жүзеге асырамын.

PHP демондары мен веб-розеткалар туралы менің мақалаларым

  • PHP веб-сокет сервері, PHP демонын іске қосу

Бірде-бір сайт шарлаусыз аяқталмайды немесе «сайт мәзірі» деп те аталады. Сонымен, сайт мәзірі ағаш түрінде бір деңгейлі және көп деңгейлі болуы мүмкін. Егер бір деңгейлі мәзірді іске асыруда ерекше қиындықтар болмаса, құру кезінде көп деңгейлі мәзіржақсы ойлау керек.

Бұл тапсырмадағы ең маңызды нәрсе - біздің көп деңгейлі мәзіріміз үшін дерекқорды жобалау. Үш өрістен тұратын Санаттар кестесін құрайық id, тақырып, ата-анамұнда:

  • ID- идентификатор
  • Тақырып- Мәзір атауы
  • ата-ана- Әдепкі санат ата-анасы 0

Өріс мәзірді тармақтауға жауапты ата-анаегер ата-ана = 0, онда бұл санат негізгі санат болып табылады. Ата-ана санатына балаларды қосу үшін ата-аналық өрісте көрсету керек IDқалаған ата-ана. Мысалға:

Категориялары бар кестелер

Кестеден көрініп тұрғандай, ата-аналық категория Көліктерекі ұрпағы бар МаздаЖәне Хондаөрісімен байланысты ата-ана. Және санат Мотоциклдерекі ұрпақ кавасакиЖәне Харли. Сонымен қатар, қайықтар санатының ұрпақтары жоқ. Категорияларды қалай байланыстыру керектігін түсінесіз деп үміттенемін.

Әрі қарай сөзден тәжірибеге көшеміз. Санаттар кестесін құрайық.

'санаттар' БОЛМАСА, КЕСТЕНІ ЖАСАУ (`id` int(10) таңбасыз NULL ЕМЕС AUTO_INCREMENT, `тақырып` varchar(255) NULL ЕМЕС, `ата-ана` int(10) таңбасыз NULL ЕМЕС, БАСТАУЫШ КҮЙСЕ (`id`)) ENGINE=MyISAM Әдепкі таңбалар жинағы=utf8 AUTO_INCREMENT=20 ; -- -- `санаттар` кесте деректерін тастаңыз -- INSERT INTO `санаттар` (`id`, `атауы`, `ата-ана`) VALUES (1, «Автомобильдер», 0), (2, «Мотоциклдер», 0) , (3, Mazda, 1), (4, Honda, 1), (5, Kawasaki, 2), (6, Harley, 2), (7, Mazda 3, 3 ), (8, "Mazda 6", 3), (9, «Седан», 7), (10, «Хэтчбек», 7), (11, «Қайық», 0), (12, «Лифтбек», 8), (13, «Кроссовер», 8), (14, «Ақ», 13), (15, «Қызыл», 13), (16, «Қара», 13), (17, «Жасыл», 13), (18, Mazda CX, 3) ), (19, Mazda MX, 3);

Жұмыс алгоритмі мыналардан тұрады:

Дерекқорға қосылуды құру

query("АТТАРДЫ ОРНАТУ "utf8""); /* * Бұл мұны істеудің «ресми» нысанға бағытталған жолы * дегенмен $connect_error PHP 5.2.9 және 5.3.0 дейін жұмыс істемеді. */ if ($mysqli->connect_error) ( die("Қосылым сәтсіз аяқталды (" . $mysqli->connect_errno . ") " . $mysqli->connect_error); ) /* * Егер нұсқалармен үйлесімділікке сенімді болғыңыз келсе 5.2 .9 дейін, * осындай жақсырақ код */ if (mysqli_connect_error()) ( die("Байланыс сәтсіз аяқталды (" . mysqli_connect_errno() . ") " . mysqli_connect_error()); )

Санаттар кестесінен мәліметтер алу функциясын жазу

//Мәзір массивін дерекқордан массив функциясы ретінде алыңыз getCat($mysqli)( $sql = "SELECT * FROM `categories`"; $res = $mysqli->query($sql); //Массивті жасаңыз, мұнда массив пернесі мәзір идентификаторы болып табылады $cat = array(); while($row = $res->fetch_assoc())( $cat[$row["id"]] = $row; ) return $cat; )

Біз осындай массив аламыз, онда массив кілті санат идентификаторы болып табылады.

Томми Лакруастың массив ағашының функциясы

//Tommy Lacroix массивінен ағаш құру функциясы getTree($dataset) ( $tree = array(); foreach ($id => &$түйін) ( //Егер тіркемелер болмаса, (!$түйін[" parent"])( $tree[$id] = &$түйін; )else( //Егер балалар болса, онда $dataset[$node["parent"]][" массиві бойынша циклды өткізіңіз. childs"][$id] = &$ түйін; ) ) қайтару $tree; )

Ағаш түріндегі массив алу

Бүкіл сценарий

query("АТТАРДЫ ОРНАТУ "utf8""); /* * Бұл мұны істеудің «ресми» нысанға бағытталған жолы * дегенмен $connect_error PHP 5.2.9 және 5.3.0 дейін жұмыс істемеді. */ if ($mysqli->connect_error) ( die("Қосылым сәтсіз аяқталды (" . $mysqli->connect_errno . ") " . $mysqli->connect_error); ) /* * Егер нұсқалармен үйлесімділікке сенімді болғыңыз келсе 5.2 .9 дейін, * бұл кодты пайдаланған дұрыс */ if (mysqli_connect_error()) ( die("Байланыс қатесі (" . mysqli_connect_errno() . ") " . mysqli_connect_error()); ) //Біздің мәзірді алу массив дерекқордан массив функциясы ретінде getCat($mysqli)( $sql = "SELECT * FROM `categories`"; $res = $mysqli->query($sql); //Массив кілті болатын массив жасаңыз мәзір идентификаторы $cat = array(); while ($row = $res->fetch_assoc())( $cat[$row["id"]] = $row; ) return $cat; ) //құру функциясы Tommy Lacroix функциясының массивінен ағаш getTree($dataset) ( $tree = array(); foreach ($id => &$түйін ретінде $dataset) ( //Егер (!$түйін["parent) тіркемелер болмаса "])( $tree[$id] = &$node; )else( //Егер балалар болса, $dataset[$node["parent"]]["childs"][$id] массиві арқылы қайталаңыз. = &$түйін; ) ) $tree; қайтарады; ) //Дайын болыңыз $cat = getCat($mysqli) деректері бар массив; //Ағаш мәзірін жасау $tree = getTree($cat); //Мәзірді ағаш функциясы түрінде көрсетуге арналған үлгі tplMenu($category)( $menu = "
  • ".$category["title"].""; if(isset($category["childs"]))( $menu .= "
      ".showCat($категория["балалар"]) ."
    "; ) $меню .= "
  • "; return $menu; ) /** * Үлгімізді рекурсивті түрде оқыңыз **/ function showCat($data)( $string = ""; foreach($data as $item)( $string .= tplMenu($item); ) return $string; ) //HTML белгілеуін алу $cat_menu = showCat($tree); //жаңғырығын көрсету "
      ". $cat_menu ."
    "; ?>

    Жұмыстың нәтижесі

    Әкімшіге арналған PHP + MySQL тіліндегі көп деңгейлі мәзір

    Қолданғыңыз келсе осы мәзірсайтыңыздың басқару тақтасында бірнеше функцияларды қайта жазу керек tplMenu(), showCat().

    ".$category["title"].""; )else( $menu = " "; ) if(isset($category["childs"]))( $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 ""; ?>

    Жұмыстың нәтижесі

    Автомобильдер → Mazda →→ Mazda 3 →→→ Седан →→→ Хэтчбек →→ Mazda 6 →→→ Лифтбек →→→ Кроссовер →→→→ Ақ →→→ Қызыл →→→→ Қара →→→ Жасыл →→ Mazda CX →→ Mazda MX → Honda мотоциклдері → Kawasaki → Harley Boats

    1C-Bitrix - жоғары кәсіби басқару жүйесіИнтернет-дүкен тапсырыстарын икемді басқаруға мүмкіндік беретін веб-жобаларыңыз қайталанатын процестердің көлемін азайтадыжәне тұтынушыларға қызмет көрсету сапасын арттыру.

    Bitrix жүйесінің негізгі артықшылықтарынан басқа, барлық пайдаланушылар бұл өнімнің жоғары талаптары белгілідейін техникалық параметрлерхостинг. Біз серверлерімізді оңтайландыруға және реттеуге қол жеткіздік. Қазір HyperHost – тамаша, өнімділігі жоғары хост.
    Төменде осы жүйені хостингке орнату процесін қарастырамыз:
    1-қадам
    CMS Bitrix орнатуды бастамас бұрын, тіркелгіңіз үшін жеке php.ini файлына кейбір өзгерістер енгізуіңіз керек. Мұны қалай жасауға болады, скриншоттарды қараңыз:



    2-қадам
    Bitrix CMS үшін жеке php.ini файлына қажетті параметрлерді енгізгеннен кейін орнату сценарийін жүктеп алып, жүктеп салу керек:
    Bitrix CMS (bitrixsetup.php).
    Сіз оны 1c-bitrix.ru ресми сайтындағы мекенжай бойынша жүктей аласыз:
    http://www.1c-bitrix.ru/download/cms.php

    қадам 3
    Әрі қарай, оны сайтыңыздың негізгі каталогындағы серверге жүктеп салуымыз керек.
    Мұны Cpanel басқару тақтасы арқылы да, FTP арқылы да жасауға болады
    Басқару тақтасы арқылы жүктеп алу үшін келесі әрекеттерді орындау керек:






    4-қадам
    Сайтты орнату үшін бізге мәліметтер қорын (МҚ), деректер базасының пайдаланушысын құру және пайдаланушыны құрылған деректер қорына қосу керек








    қадам 5
    CMS Bitrix орнатуды бастайық

    Маңызды!Сіз DNS (домен делегациясы) өзгертпей-ақ біздің хостингте сайттың жұмысын жергілікті түрде тексере аласыз, тек тіркелу қажет. хосттар файлыкелесі жазба:

    53.114.112.45 domain.ru

    қайда,
    domain.ru - сіздің доменіңіз.
    53.114.112.45 - хостинг серверіңіздің ip-мекен-жайы. Тапсырыс бергеннен кейін сіздің сайтыңыздың біздің компанияда қандай IP орналасқанын көру үшін келесі әрекеттерді орындау қажет:
    «Веб-домендер» бөліміндегі сайттың басқару тақтасына өтіп, сайтыңыз үшін қандай IP мекенжайы көрсетілгенін көріңіз;

    Хосттар файлы келесі жолдарда орналасқан:

    - Windows XP/2003/Vista/7: WINDOWS\system32\drivers\etc\хосттар
    - Windows NT/2000: WINNT\system32\drivers\etc\хосттар
    - Windows 95/98/ME: WINDOWS\хосттар
    - Mac OS X 10.2+: /private/etc/hosts
    - Linux: /etc/hosts

    Осы өзгерістерді енгізгеннен кейін сіз біздің хостингке ауыстырған сайттың нұсқасы компьютеріңіздің шолғышынан domain.ru сайтында ашылады.
    Сайтыңыздың өнімділігін тексергеннен кейін бұл жазбаны хосттар файлынан жоюды ұмытпаңыз.
    Браузеріңізде келесіге өтіңіз http://your_domain/bitrixsetup.php, орнататын тарату жинағын таңдаңыз.
    Біз сізге «Сайтты басқару» тарату жинағында CMS орнату үлгісін және демо нұсқасын көрсетеміз


    Келесі қадам - ​​таратуды серверге жүктеп алу және оны орамнан шығару.



    қадам 6

    CMS орнату
    Таратуды орамнан шығарғаннан кейін сіз CMS орнату бетіне қайта бағытталасыз


    Лицензиялық келісімді оқып, растаңыз

    7-қадам

    Біз деректерімізді енгіземіз және «UTF-8 кодтауында орнату» элементінің жанына «белгі» қоямыз, содан кейін біз келесі қадамға өтеміз


    қадам 8

    Бұл қадамда тексеру беті көрсетіледі, мұнда Bitrix CMS дұрыс орнату және жұмыс істеу үшін сервер параметрлерінің сәйкестігін тексеру бар.


    9-қадам

    Мәліметтер қорымен байланыс орнату.
    Өрістерде біз жасаған дерекқорға қосылу деректерін көрсету керек 4-қадам


    10-қадам

    Бұл қадам жүреді автоматты орнатуөнім

    11-қадам

    Осы сайт үшін әкімші жасаңыз
    Қажетті өрістерді толтыру керек: логин, пароль және парольді растау.

    12-қадам

    Орнату үлгісін таңдаңыз.
    Орнату сәтінде бұл тек 1 - «бекітілген», өйткені бұл стандартты орнату.

    Тақырып таңдау


    Сайтты орнатып жатқан компанияңыз туралы ақпаратты енгізіңіз және таңдалған тақырыпты орнатуды бастаңыз.


    Құттықтаймыз! Сіз CMS Bitrix орнаттыңыз.
    Айта кету керек, сынақ нәтижелері серверлерімізде өте жоғары 1С өнімділік нәтижелерін көрсетті.
    Біздің желіден VPS-Start тарифінде өнімділік болды 88,58 стандарт бойынша 30

    жақсырақ нәтиже көрсетті 127,84 стандартпен 30
    Бұл көрсеткіштер ТМД елдеріндегі хостинг-компаниялар арасында ең жоғары көрсеткіш болып табылады.
    HyperHost компаниясы сізге жағымды жұмыс тілейді!

    8775 рет Бүгін 9 рет қаралды

    Мақала ұнады ма? Достарыңызбен бөлісіңіз!
    Бұл мақала пайдалы болды ма?
    Иә
    Жоқ
    Пікіріңізге рахмет!
    Бірдеңе дұрыс болмады және сіздің дауысыңыз есептелмеді.
    рахмет. Сіздің хабарламаңыз жіберілді
    Мәтіннен қате таптыңыз ба?
    Оны таңдаңыз, басыңыз Ctrl+Enterжәне біз оны түзетеміз!