Descărcări nelimitate php. Metoda de execuție infinită PHP rulată din consolă

PHP (în engleză PHP: Hypertext Preprocessor - „PHP: Hypertext Preprocessor”; inițial Personal Home Page Tools - „Instrumente pentru crearea de pagini web personale”) este un limbaj de scripting de uz general care este utilizat intens pentru dezvoltarea aplicațiilor web.

În prezent, PHP este susținut de marea majoritate a furnizorilor de găzduire și este unul dintre limbile de vârf folosite pentru a crea site-uri web dinamice.

Limbajul PHP și interpretul său sunt dezvoltate de un grup de entuziaști ca parte a unui proiect cu sursa deschisa. Proiectul este distribuit sub propria licență, care este incompatibilă cu Licența Publică Generală GNU.

Domeniul de aplicare al PHP

În domeniul programării web, în ​​special pe partea de server, PHP este unul dintre limbajele de scripting populare (împreună cu JSP, Perl și limbajele utilizate în ASP.NET).

Popularitatea în domeniul construirii de site-uri web este determinată de prezența unui set mare de instrumente încorporate pentru dezvoltarea aplicațiilor web. Principalele sunt:

  • extragerea automată a parametrilor POST și GET, precum și a variabilelor de mediu ale serverului web în matrice predefinite;
  • interacțiune cu mulți diverse sisteme gestionarea bazelor de date ( , MySQLi, Oracle (OCI8), Oracle, Microsoft SQL Server, 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, Interfață PDO (Obiecte de date PHP));
  • trimiterea automată a antetelor HTTP;
  • lucrul cu autorizare HTTP;
  • lucrul cu cookie-uri și sesiuni;
  • lucrează cu local şi fișiere șterse, prize;
  • procesarea fișierelor încărcate pe server;
  • lucrul cu XForms.

PHP este folosit în prezent de sute de mii de dezvoltatori. Conform clasamentului TIOBE Corporation pe baza datelor motoare de căutare, în septembrie 2015, PHP era pe locul 6 în rândul limbajelor de programare. Cele mai mari site-uri care folosesc PHP includ

Am vorbit mai multe despre cum să configurați Denver și să vă asigurați că totul funcționează, luând doar puțin timp pentru a implementa un server simplu ws echo. Dar dacă ați descărcat arhivele sursă, atunci sunt sigur că vă puteți da seama cu ușurință cum să primiți și să trimiteți mesaje, ceea ce este suficient pentru a utiliza tehnologia.
Mă bucur că a existat o reacție în blogul meu, care nu a fost încă promovat, iar acest lucru m-a determinat să scriu o continuare și să dezvălui întrebarea cum să fac în continuare scriptul PHP pentru serverul ws să funcționeze pe găzduire, cum să mă asigur că procesul rulează și scriptul PHP rulează și nu a fost închis până la expirarea timpului sau când Apache a fost repornit, cum să evitați rularea unui proces PHP duplicat și răspunsuri la alte întrebări necesare pentru a obține un server ws care funcționează garantat. Cu siguranță voi crea un server Internet ws echo cu o funcție de chat și îl voi plasa pe găzduirea mea mediocră. Pentru restul acestui articol, scriptul PHP care rulează continuu pe server și oferă ws, mă voi referi ca server ws, deși este de fapt un proces pe partea de server. Și cel mai important, voi oferi o soluție gata făcută chiar și pentru cei care nu au acces SSH la consola serverului de găzduire sau a mașinii virtuale.

Azi va fi mult de lucru

Să începem simplu.

Plasarea și rularea unui server web socket pe o găzduire

Simplitatea constă în faptul că nu există probleme cu lansarea. Puteți lua scriptul PHP echows.php din ultimul articol, fără a modifica nimic din el, îl puteți încărca în hosting și accesați fișierul din browser, singura diferență față de rularea în Denver poate fi că setările Apache și mecanismele de stocare în cache. interzice afișarea informațiilor incomplete Script PHP, caz în care nu veți vedea nicio informație în fereastra browserului, iar pagina va continua să se încarce în browser. Dar dacă încercați să vă conectați la serverul ws de la clientul nostru ws, veți vedea că conexiunea a avut succes și serverul ws echo răspunde la toate solicitările transmise. Ca adresă a serverului ws în clientul ws, desigur, trebuie să specificați ws://domeniul dumneavoastră.com:8889. După cum puteți vedea, totul este în ordine. Singura problemă pe care o puteți întâlni este că setările firewall-ului de găzduire și porturile sunt ocupate cu alte servicii. Dacă aveți mai multe domenii pe o singură adresă IP, atunci puteți accesa serverul ws la adresa acestui domeniu ws://anotheromain.com:8889, ceea ce, vedeți, nu este foarte bun, mai ales pentru găzduirea unde sunt suspendate sute de site-uri web. pe un domeniu, teoretic, cineva poate folosi aceleași porturi ca și tine, iar acest lucru poate duce la inoperabilitatea serverului ws, așa că încă o dată vă recomand cu insistență să selectați cu atenție porturile și să vă asigurați că atunci când ws nu mai funcționează, serverul întotdeauna închide toate conexiunile și închide corect prizele. Acum, în ceea ce privește scriptul PHP în sine, după cum probabil ați observat, scriptul nostru PHP trăiește doar 100 de secunde, după care, atunci când încearcă să se conecteze sau să trimită un mesaj, închide toate conexiunile și își încheie execuția. Cum să-l faci să trăiască „pentru totdeauna”? Există un număr suficient de metode. Dar problema nu este că scriptul PHP ar trebui să ruleze la infinit, ci problema este cum să ne asigurăm că scriptul se termină corect în diferite situații și apoi își reia corect activitatea. De exemplu, când serverul este oprit și apoi pornit, scriptul PHP nu va porni singur și este o idee foarte proastă să monitorizați dacă serverul ws rulează și dacă nu funcționează manual, porniți-l.

Metoda de execuție infinită a scriptului PHP rulează din browser

Primul lucru de făcut este să specificați în scriptul propriu-zis durata de viață nelimitată a scriptului PHP set_time_limit(0); și ignorând browser abort ignore_user_abort(true); astfel încât scriptul PHP să fie executat după ce închideți fereastra browserului. După ce ați efectuat acțiunile necesare, îl puteți lansa din browser. Problema este că, rulând-o o dată, nu vom putea verifica dacă totul este în ordine cu procesul, dacă au existat erori în timpul execuției și dacă scriptul continuă să funcționeze sau nu poate fi verificat doar prin conectarea la el. cu clientul ws. Desigur, puteți adăuga funcționalitatea de menținere a unui fișier jurnal la acest script, în care va fi înregistrat istoricul activității sale. De asemenea, când reporniți Apache pe găzduire, procesul cu scriptul va fi dezactivat 100%. Această metodă poate fi potrivită numai în cazul în care încărcăm pe server un script PHP de server ws depanat și funcțional garantat și este important pentru noi ca acesta să funcționeze doar pentru o perioadă scurtă de timp previzibilă, în funcție de fiabilitatea furnizorului de găzduire, dar acest lucru Metoda este complet inaplicabilă pentru funcționarea unui server ws industrial cu drepturi depline din -pentru lipsa sa extremă de fiabilitate și imposibilitatea închiderii în momentul în care avem nevoie de ea. Imaginează-ți o situație în care administratorul serverului de găzduire a decis să repornească Apache în scopul actualizării și nu verifici dacă serverul tău ws funcționează în mod constant sau nu, în timp ce utilizatorii, să zicem, stau în chat-ul tău și brusc totul merge în jos, utilizatorii sunt indignați. Din nou, puteți folosi câteva cârje înainte ca clientul ws să se conecteze la serverul ws prin protocolul ws, să faceți ca clientul ws să acceseze un alt script de server PHP prin XMLHttpRequest() și să solicitați ca serverul ws să fie verificat dacă rulează. Metoda este puțin strâmbă, dar își are locul în soluțiile non-industriale precum o mică cameră de chat sau o jucărie mică. Acesta este ceea ce folosesc în micile mele proiecte.

Pentru orice eventualitate, am făcut un experiment, am lansat serverul ws pe găzduire, introducând anterior în scriptul PHP un mecanism de închidere a tuturor conexiunilor și întreruperea procesului la primirea unui mesaj „OFF” de la client. Nu l-am atins timp de câteva zile, trimițând periodic diferite mesaje și verificând capacitatea de supraviețuire, am trimis comanda „OFF” după aproximativ două zile ws și-a încheiat cu succes munca, durata de viață a procesului serverului ws s-a dovedit a fi de 183.403 secunde (puțin peste 2 zile) și cred că ar putea funcționa și mai mult fără probleme.

Metoda de execuție infinită PHP rulată din consolă

În principiu, practic nu există nicio diferență cu rularea unui script PHP dintr-un browser, cu excepția faptului că toate datele despre scriptul PHP sunt scoase în consolă și alte câteva nuanțe minore. Scriptul PHP în sine trebuie să conțină și set_time_limit(0); și ignore_user_abort(true);. Rularea unui script PHP din consola *nix se face cu comanda $ php -q scriptfile.php(Am folosit Putty pentru a mă conecta la consolă). Comutatorul -q (--no-header) indică faptul că procesul ar trebui să fie rulat în modul silențios și suprimă ieșirea antetelor HTTP care sunt trimise în mod normal către browser. $manphp vă va permite să vedeți alte chei de interes. Documentație excelentă pe site-ul web oficial PHP, care a ajutat nu numai la lansarea scripturilor PHP din consolă, dar a adus și îmbunătățiri semnificative scriptului PHP în sine. Vă rugăm să rețineți că puteți redirecționa ieșirea scriptului către orice fișier de pe server folosind simbolul „mai mare decât” („>”), așa cum fac de obicei.

$ php -q scriptfile.php > scriptfileoutput.txt

PHP poate fi folosit pentru a rula scripturi PHP în independență absolută față de Apache, dar nu sunt sigur că mecanismul de socket va funcționa fără Apache, nu am încercat să îl rulez fără Apache - nu mi s-a părut nimic. Rularea prin consolă este considerată mai corectă decât printr-un browser web, dar, la fel ca rularea printr-un browser, nu este capabilă să rezolve o serie de probleme. Poate că o astfel de lansare ne va scuti de la terminarea scriptului la repornirea Apache, iar acest lucru este puțin probabil, dar dacă întregul server web sau mașină virtuală va fi reîncărcat. Va trebui să vă urcați manual pe server și să rulați scriptul, desigur, dacă aveți un proiect de joc mare și aveți dedicat administratorii de sistem care monitorizează starea proceselor de pe server și există scripturi pentru inițializarea și încărcarea serverului ws împreună cu Apache și orice altceva, caz în care aceasta este singura opțiune corectă, dar vorbim despre o modalitate convenabilă de a implementa un ws. server în PHP pentru proiecte mici. De asemenea, uneori există o problemă la rularea unui script PHP din consolă, care oprește execuția scriptului PHP în același timp când ieși din consolă, aceasta se datorează faptului că execuția scriptului PHP a fost legată de dvs. sesiune ca client. În teorie, acest lucru ar trebui să fie remediat prin utilizarea liniei ignore_user_abort(true); în scriptul PHP, dar acest lucru nu ajută întotdeauna din cauza setări diferite PHP. Într-un astfel de caz, trucul este să dai scriptului PHP un flux /dev/null pe care îl va presupune că este un client și să nu se termine când ieși din consolă.

$ php -q scriptfile.php scriptfileoutput.txt &

Ampersand de la sfârșit este necesar, astfel încât să puteți apăsa Ctrl+C și să vă întoarceți la consolă în timp ce procesul rămâne în memorie. Sau puteți folosi utilitarul nohup.

În plus, va fi util să știți că pe platforma Windows, puteți rula scriptul din consolă

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

Dacă totul este făcut corect, atunci este mai bine să utilizați utilitarul Supervisor: Un sistem de control al procesului, acesta monitorizează funcționarea procesului, îl pornește dacă este necesar și înregistrează blocările. Un lucru foarte potrivit atunci când faci un proiect serios și ai la dispoziție un server dedicat sau cel puțin VDS.

server ws controlul procesului PHP din browser

Ca urmare a studierii modalităților de lansare a scripturilor PHP, am avut o idee foarte simplă - să implementez pe partea clientului ws, înainte de a mă conecta la serverul ws, o solicitare XMLHttpRequest () la un script PHP care verifică starea serverului ws. proces și, dacă nu rulează, se lansează. A mai fost o idee de a implementa ceva de genul paginii de administrator al serverului ws, pe care va fi disponibil un jurnal al evenimentelor recente: când a fost lansat, de ce s-a prăbușit, cine a inițiat următoarea lansare etc., din care va fi posibil. pentru a da comanda serverului ws pentru a reporni, opri, închide toate conexiunile etc.

Care ar trebui să fie interfața pentru clientul ws:

  • Verificați starea serverului ws și porniți dacă serverul nu este disponibil

Care ar trebui să fie interfața pentru administratorul ws:

  • Informații despre starea serverului ws, de preferință cu numărul de conexiuni și cantitatea de memorie ocupată
  • Vizualizarea jurnalelor
  • Oprirea serverului ws

Deci, pentru implementare, avem nevoie de un server ws, care trebuie agățat în memorie într-unul dintre modurile descrise mai devreme, adică. trebuie să faci din el un demon de calitate. Există un articol excelent despre procese și daemoni pe Habré. Totuși, din păcate, găsirea găzduirii cu suport pentru comanda pcntl_fork pentru a crea procese copil în PHP este chiar mai dificilă decât cu suportul socket, așa că trebuie să renunți la metoda clasică de demonizare. De asemenea, astfel de programe nu pot fi depanate pe Windows. furcile există doar pe sistemele de operare *nix. Dar totuși, am reușit să învățăm ceva util din articol, și anume crearea unui fișier PID care stochează id-ul procesului, care nu va permite rularea simultană a două procese - mai multe despre asta mai jos.

Ca urmare, am modificat ușor codul PHP al scriptului serverului ws echo, adăpostind codul pentru comutarea fluxurilor de intrare/ieșire STDIN, STDOUT, STDERR în el și, prin urmare, am simplificat lansarea serverului ws din consolă:

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

Am un daemon care funcționează bine fără a utiliza pcntl_fork. Este lansat prin consolă, se deconectează din consolă și totul funcționează bine pentru a răspunde la toate solicitările utilizatorilor la ws://yourdomain.com:8889 și se închide corect când este trimis un mesaj „OFF”. Dar aici este problema, nu este posibil să verificați dacă demonul rulează sau nu și, prin urmare, să evitați o lansare duplicată a demonului. Da, la pornire, este creat fișierul pid_file.pid, care stochează ID-ul procesului (numărul unic de proces în sistemul OS * nix) al demonului nostru și când demonul se termină corect, de exemplu, când mesajul „OFF” este primit, acest fișier este șters. La pornire, puteți, desigur, să verificați prezența acestui fișier și, dacă fișierul există, apoi să raportați că demonul rulează deja și astfel evitați o lansare duplicată, dar ce se întâmplă dacă demonul și-a finalizat munca incorect și nu a făcut-o. ștergeți fișierul pid_file.pid, în acest caz demonul nostru nu va mai rula niciodată. Din nou, pe Habré, am reușit să găsim o funcție excelentă pentru verificarea prezenței unui demon.


if(este_fișier($fișier pid)) (
// verificați procesul, posix_kill poate fi depreciat, poate fi necesar să fie înlocuit la migrarea la PHP 5.3+
if(posix_kill($pid,0)) (
//daemonul rulează deja
returnează adevărat;
) altfel (

dacă(!unlink($pidfile)) (
consolemsg("EROARE");
ieșire(-1);
}
consolemsg("OK");
}
}
returnează fals;
}

Și din nou, problema este că funcția posix_kill($pid,0) s-a dovedit a fi inoperabilă din același motiv ca pcntl_fork. Nu am putut suporta asta și am dezvoltat din nou o soluție „sprețuită”. Deoarece Am decis în continuare să implementez funcționalitatea care arată starea serverului ws, apoi am nevoie cumva de o funcție care să arate starea procesului în sistemul de operare. Pentru a implementa această funcție, vom folosi comanda exec(), care vă permite să executați orice comenzi din consolă. Și dacă o facem

Exec("ps -aux -p ".$pid, $ieșire);

apoi, ca rezultat, în matricea $output, dacă demonul rulează și are $pid, vor fi afișate informații despre demon (proces).

PID UTILIZATOR %CPU %MEM VSZ RSS TT STAT COMANDA TIMP PORNIT aow 62335 0,3 0,1 120080 16020 ?? SJ 16:31 00:00.02 php -q echows.php

Astfel, avem funcții funcționale fără posix_kill, care verifică dacă demonul rulează și, respectiv, oferă date despre el.

Actualizare 14.08.2017: Exemplul de mai sus folosește sintaxa BSD pentru comanda ps. Pentru cele mai multe * sisteme nix va fi grozav, iar această comandă va lista toate procesele în loc de cel cu id-ul pid. Începând cu panoul de administrare a serverului ws v.0.4. și mai sus utilizează sintaxa clasică, care funcționează corect pe majoritatea sistemelor *nix.

Funcția isDaemonActive($pidfile) (
if(este_fișier($fișier pid)) (
$pid = file_get_contents($pidfile);
// obține starea procesului
$status = getDaemonStatus($pid);
if($status[„run”]) (
//daemonul rulează deja
consolemsg("daemonul rulează deja info=".$status["info"]);
returnează adevărat;
) altfel (
//fișierul pid există, dar nu există niciun proces
consolemsg("nu există niciun proces cu PID = ".$pid.", ultima terminare a fost anormală...");
consolemsg("încercați să deconectați fișierul PID...");
dacă(!unlink($pidfile)) (
consolemsg("EROARE");
//nu se poate distruge fișierul pid. eroare
ieșire(-1);
}
consolemsg("OK");
}
}
returnează fals;
}

getDaemonStatus($pid) (
$rezultat = array("run" => false);
$ieșire = nul;
exec("ps -aux -p ".$pid, $ieșire);

If(count($output)>1)(//Dacă există mai multe linii ca rezultat al execuției, atunci există un proces! deoarece prima linie este antetul, iar a doua este deja procesul
$rezultat["run"] = adevărat;
$result["info"] = $output;//șir cu informații despre proces
}
returnează $rezultat;
}

Acum că funcția de verificare a stării este gata, putem porni demonul nu din consolă, ci executând comanda PHP exec("php -q echows.php &"); și opriți demonul cu mesajul OFF.
Ultimul lucru pe care trebuie să îl schimbați în serverul ws echo și clientul ws este să adăugați o solicitare AJAX la server înainte de a vă conecta, care ar ridica-o dacă nu este. Acum nu trebuie să ne gândim la starea demonului, pentru că. știm că, chiar dacă serverul a fost repornit, clientul îl va prelua la primul apel.

Panoul de control al browserului ws server

Voi dezvolta un sistem simplu de control și monitorizare demon. Este foarte simplu și constă din mai multe fișiere echowsadmin.html (panoul de administrare), echowsadmin.js (logica panoului de administrare), echowsadmin.php (logica de gestionare a serverului echo ws). S-a dovedit a fi surprinzător de ușor să dezvolt acest sistem, nu mi-am petrecut mai mult de 1 oră din timpul meu.

Pentru a preveni orice utilizator să dezactiveze demonul cu comanda OFF, am eliminat această funcționalitate din codul PHP al serverului ws echo. În consecință, prin implementarea funcției de închidere din sistemul de control al demonului. Implementarea nu este cea mai elegantă, folosesc fișierul off_file.pid în loc de semnale, dar este garantat că nu sunt necesare biblioteci suplimentare și oprirea are loc corect. Deoarece pe serverul ws buclă while se blochează în momentele de ascultare a mesajelor socket, apoi după ce ai creat off_file.pid, trebuie să te conectezi la serverul ws, astfel încât să ajungă la sfârșitul ciclului și să verifice off_file.pid, pentru asta fac un mic truc, imit o conexiune socket de la echowsadmin.php și introduceți o oarecare întârziere la tot ceea ce a funcționat, iar scriptul a raportat finalizarea cu succes a lucrării. Descărcați (arhivă învechită, mai nouă în ), nu uitați să specificați locația fișierului echowsadmin.php pe găzduirea dvs. în echowsadmin.js pe linia 10, adresa echowsstart.php în socket.js și adresa serverului ws în echowsadmin.php (sau mai degrabă, nu adresa și portul, deoarece fișierul trebuie să fie pe server, adresa va fi întotdeauna 127.0.0.1), unde mini-clientul nostru cu o singură celulă va încerca să se conecteze când echo ws serverul este oprit. Nu am făcut butonul de repornire a serverului ws echo, deoarece este clar că pentru aceasta trebuie să apăsați pe stop, apoi să porniți și practic nu este nevoie de această acțiune într-un singur buton. Acest întreg sistem de control funcționează numai sub sistemele de operare *nix, de exemplu. pe gazduire. Și așa arată ea.

Evident, sunt multe de îmbunătățit:

  • Îmbunătățiți prezentarea și faceți informații mai detaliate despre starea serverului ws
  • Adăugați ieșire pentru a înregistra mai multe informatii detaliate despre memoria ocupată și numărul de conexiuni curente
  • Faceți un control pentru sistem de operareși dezvoltă o versiune pentru Denver și Windows
  • Faceți autorizație

Dar, în cazul meu, sarcina a fost să mă fac un instrument simplu pentru monitorizarea stării demonului prin web. Apropo, cu o mică modificare, acest lucru poate fi folosit pentru a monitoriza orice demon, nu doar ws.

În ceea ce privește implementarea pentru Windows, toate locurile în care pid-ul poate fi ocolit prin verificare și astfel asigură lansarea.

Dacă (strtoupper(substr(PHP_OS,0,3)) === „WIN”) ( )

Indiferent dacă demonul rulează sau nu, este suficient să verificați pur și simplu prin prezența fișierului pid.

În timp ce eram în weekend, am uitat să opresc serverul ws echo, ca urmare, durata lui de viață a fost de 233774 de secunde, adică. undeva pe la 3 zile, memoria ocupata a ramas in jur de 0,1%, ceea ce indica ca solutia are dreptul la viata.

Feedback-ul, comentariile sunt întotdeauna binevenite. Voi continua să dezvolt subiectul și să implementez un chat simplu așa cum am promis.

Articolele mele despre demonii PHP și socket-uri web

  • Server web socket PHP, lansare demon PHP

Cu acest limbaj de programare, puteți crea site-uri web și aplicații web în calculator local prin serverul Apache. Cele mai multe site-uri de internet moderne sunt scrise în PHP. Paginile acestor site-uri sunt dinamice, spre deosebire de site-urile vechi cu marcaj HTML.

Toate informațiile sunt stocate în baza de date Date MySQL, din care necesarul acest moment. Programatorii cu experiență pot crea site-uri web de la zero și pentru utilizatorii obișnuiți este mai bine să utilizați serviciile de motoare gata făcute (WordPress, Joomla sau Drupal), unde este suficient să adăugați propriile inscripții - și site-ul dvs. este gata. Pentru a vă crea site-urile Web pe computerul local, trebuie să descărcați gratuit versiune noua PHP. După aceea, site-ul finalizat poate fi încărcat pe Internet.

Posibilitati:

  • crearea si editarea de site-uri web si programe;
  • gestionarea dinamică a conținutului site-ului;
  • testarea diferitelor motoare pentru site-uri web;
  • utilizarea cookie-urilor HTTP.

Principiul de funcționare:

Acum să înțelegem cum funcționează PHP. Mai întâi trebuie să descărcați și să instalați, de exemplu, un server Apache virtual. Pentru a face acest lucru, puteți utiliza kituri de dezvoltare gata făcute Denwer, XAMPP, OpenServer sau orice alt program. După instalare server local trebuie să copiați conținutul arhivei PHP în ea. După aceea, veți putea să scrieți site-uri de la zero pe găzduirea dvs. virtuală sau să instalați motoarele de site necesare pentru a vă crea proiectele pe Internet.

După ce ați plătit pentru găzduire și un domeniu, vă puteți încărca site-ul pe Internet și puteți începe să vă realizați abilitățile creative. Utilizarea limbajului PHP vă va permite să creați și să editați rapid și convenabil conținutul site-urilor dvs. De exemplu, pentru a schimba designul din partea de jos a site-ului, trebuie să editați doar un fișier, iar modificările se vor reflecta pe fiecare pagină a proiectului. În HTML, ar trebui să editați fiecare pagină individual.

Pro:

  • crearea de site-uri dinamice în PHP;
  • utilizarea bazelor de date;
  • posibilitatea de a descărca PHP gratuit pe un computer
  • suport pentru crearea mai multor baze de date și site-uri pe computerul local;
  • limbaj de programare larg răspândit și popular.

Minusuri:

  • pentru a lucra pe un computer, poate fi necesar să instalați un server virtual.

Astăzi, PHP este cel mai comun limbaj de programare pentru site-uri web și aplicații web. Prin urmare, pentru a vă crea propriile proiecte, trebuie pur și simplu să vă adaptați sistemul Windows la această limbă. De asemenea, pentru muncă, va trebui să instalați un server pentru gazduire virtuala site-urile dvs. locale. Utilizarea acestui limbaj de programare vă va permite să vă creați și să rulați proiectele dvs. de Internet, așa că vă sfătuim să îl descărcați gratuit ultima versiune PHP.

1C-Bitrix - sistem de administrare foarte profesionist Proiectele dvs. web, care vă permite să gestionați în mod flexibil comenzile magazinului online, care reduce volumul proceselor repetitiveși îmbunătățirea calității serviciului clienți.

Pe lângă principalele avantaje ale sistemului Bitrix, toți utilizatorii sunt cunoscute cerințele ridicate ale acestui produs la parametrii tehnici ai găzduirii. Am reușit să ne optimizăm și să ne reglam serverele. Acum HyperHost este o gazdă excelentă, de înaltă performanță.
Mai jos vom lua în considerare procesul de instalare a acestui sistem pe găzduirea noastră:
pasul 1
Înainte de a începe instalarea CMS Bitrix, trebuie să faceți câteva modificări la php.ini individual pentru contul dvs. Cum să faceți acest lucru, vedeți capturile de ecran:



pasul 2
După introducerea parametrilor necesari în php.ini individual pentru Bitrix CMS, trebuie să descărcați și să încărcați scriptul de instalare:
Bitrix CMS (bitrixsetup.php).
Îl puteți descărca la adresa de pe site-ul oficial 1c-bitrix.ru:
http://www.1c-bitrix.ru/download/cms.php

pasul 3
În continuare, trebuie să-l încărcăm pe server în directorul principal al site-ului dvs.
Acest lucru se poate face atât prin panoul de control Cpanel, cât și prin FTP
Pentru a descărca prin panoul de control, trebuie să faceți următoarele:






pasul 4
Pentru a instala site-ul, trebuie să creăm o bază de date (DB), un utilizator al bazei de date și să adăugăm utilizatorul la baza de date creată








pasul 5
Să începem să instalăm CMS Bitrix

Important! Puteți verifica funcționarea site-ului pe găzduirea noastră local, fără a schimba DNS-ul (delegarea domeniului), trebuie doar să vă înregistrați în fișierul hosts urmatoarea intrare:

53.114.112.45 domeniu.ru

Unde,
domain.ru - domeniul tău.
53.114.112.45 - adresa IP a serverului dvs. de găzduire. Pentru a vedea ce IP se află site-ul dvs. în compania noastră după ce ați comandat, trebuie să faceți următoarele:
Accesați panoul de control al site-ului din secțiunea „Domenii web” și vedeți ce adresă IP este specificată pentru site-ul dvs.;

Fișierul hosts se află pe următoarele căi:

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

După efectuarea acestor modificări, versiunea site-ului pe care ați transferat-o pe găzduirea noastră se va deschide la adresa domain.ru din browserul computerului dumneavoastră.
Nu uitați să eliminați această intrare din fișierul hosts după ce verificați performanța site-ului dvs.
Navigați în browser la http://domeniul_dvs./bitrixsetup.php, selectați kitul de distribuție pe care îl veți instala.
Vă vom arăta un exemplu de instalare a unui CMS pe kit-ul de distribuție „Site Management” și a unei versiuni demo


Următorul pas este să descărcați distribuția pe server și să o despachetați.



pasul 6

Instalare CMS
După despachetarea distribuției, veți fi redirecționat către pagina de instalare CMS


Citiți și confirmați acordul de licență

pasul 7

Introducem datele noastre și punem o „bifare” lângă elementul „Instalare în codificare UTF-8”, după care trecem la pasul următor


pasul 8

În acest pas este afișată pagina de verificare, aici se verifică conformitatea cu setările serverului pt instalare corectăși munca CMS Bitrix.


pasul 9

Stabilirea unei conexiuni la baza de date.
În câmpurile trebuie să specificați datele de conectare la baza de date în care am creat-o pasul 4


pasul 10

Acest pas merge instalare automată produs

pasul 11

Creați un administrator pentru acest site
Trebuie să completați câmpurile obligatorii: autentificare, parolă și confirmare parolă.

pasul 12

Selectați un șablon de instalare.
În momentul instalării, este doar 1 - „fix”, deoarece aceasta este instalarea standard.

Selectarea subiectului


Introduceți informații despre compania dumneavoastră pentru care instalați site-ul și începeți instalarea temei selectate.


Felicitări! Ai instalat CMS Bitrix.
Trebuie remarcat faptul că rezultatele testelor au arătat rezultate foarte mari de performanță 1C pe serverele noastre.
La tariful VPS-Start de la linia noastră, performanța a fost 88,58 la standard 30

a dat rezultate mai bune 127,84 cu standardul 30
Aceste cifre sunt printre cele mai mari dintre companiile de hosting din CSI.
Compania HyperHost vă dorește o muncă plăcută!

8775 ori Vizualizat de 9 ori azi

Niciun site nu este complet fără navigare, sau așa cum este numit și „meniul site-ului”. Deci, meniul site-ului poate fi pe un singur nivel și pe mai multe niveluri sub formă de arbore. Dacă nu există dificultăți deosebite în ceea ce privește implementarea cu un meniu cu un singur nivel, atunci când creați un meniu cu mai multe niveluri, trebuie să vă gândiți cu atenție.

Cel mai important lucru în această sarcină este să proiectăm o bază de date pentru meniul nostru cu mai multe niveluri. Să creăm un tabel Categorii cu trei câmpuri id, titlu, mamă Unde:

  • ID- identificator
  • Titlu- Numele meniului
  • mamă- Categoria implicită părinte 0

Câmpul este responsabil pentru ramificarea meniului mamă Dacă părinte = 0, atunci această categorie este categoria părinte. Pentru a adăuga copii la categoria părinte, trebuie să specificați în câmpul părinte ID părintele dorit. De exemplu:

Tabele cu categorii

După cum se vede din tabel, categoria părinte Mașini sunt doi descendenți MazdaȘi Hondaînrudite pe domenii mamă. Și categoria Motociclete doi descendenți sunt kawasakiȘi harley. În același timp, categoria Bărci nu are descendenți. Sper că înțelegeți cum să legați categoriile.

În continuare, trecem de la cuvinte la practică. Să creăm tabelul Categorii.

CREATE TABLE IF NU EXIST `categories` (`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 ; -- -- Dump `categories` data table -- INSERT INTO `categories` (`id`, `title`, `parent`) VALORI (1, "Mașini", 0), (2, "Motociclete", 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, „Barci”, 0), (12, „Liftback”, 8), (13, „Crossover”, 8), (14, „Alb”, 13), (15, „Roșu”, 13), (16, „Negru”, 13), (17, „Verde”, 13), (18, Mazda CX, 3) ), (19, Mazda MX, 3);

Algoritmul de lucru constă în următoarele:

Crearea unei conexiuni la baza de date

query("SET NUMELE "utf8""); /* * Acesta este modul „oficial” orientat pe obiect de a face acest lucru * cu toate acestea $connect_error nu a funcționat până în PHP 5.2.9 și 5.3.0. */ if ($mysqli->connect_error) ( die("Conexiune a eșuat (" . $mysqli->connect_errno . ") " . $mysqli->connect_error); ) /* * Dacă doriți să fiți sigur de compatibilitatea cu versiunile înainte de 5.2 .9, * cod mai bun ca acesta */ if (mysqli_connect_error()) ( die("Conexiune a eșuat (" . mysqli_connect_errno() . ") " . mysqli_connect_error()); )

Scrierea unei funcții pentru a obține date din tabelul Categorii

//Obțineți tabloul nostru de meniu din baza de date ca funcție de matrice getCat($mysqli)( $sql = "SELECT * FROM `categories`"; $res = $mysqli->query($sql); //Creați o matrice în care cheia matricei este ID-ul meniului $cat = array(); while($row = $res->fetch_assoc())( $cat[$row["id"]] = $row; ) return $cat; )

Obținem o matrice ca aceasta, unde cheia matricei este ID-ul categoriei.

Funcția Array Tree de Tommy Lacroix

//Funcția de a construi un arbore dintr-un tablou din funcția Tommy Lacroix getTree($dataset) ( $tree = array(); foreach ($dataset as $id => &$node) ( //Dacă nu există atașamente dacă (!$node[" părinte"])( $tree[$id] = &$nod; )else( //Dacă există copii, atunci treceți prin matricea $dataset[$node["părinte"]][" copii"][$id] = &$ nod; ) ) returnează $tree; )

Obținerea unei matrice sub formă de arbore

Întregul scenariu

query("SET NUMELE "utf8""); /* * Acesta este modul „oficial” orientat pe obiect de a face acest lucru * cu toate acestea $connect_error nu a funcționat până în PHP 5.2.9 și 5.3.0. */ if ($mysqli->connect_error) ( die("Conexiune a eșuat (" . $mysqli->connect_errno . ") " . $mysqli->connect_error); ) /* * Dacă doriți să fiți sigur de compatibilitatea cu versiunile înainte de 5.2 .9, * este mai bine să folosiți acest cod */ if (mysqli_connect_error()) ( die("Eroare de conectare (" . mysqli_connect_errno() . ") " . mysqli_connect_error()); ) //Obțineți matricea noastră de meniuri din baza de date ca o funcție matrice getCat($mysqli)( $sql = "SELECT * FROM `categories`"; $res = $mysqli->query($sql); //Creează o matrice în care cheia matricei este meniul ID $cat = array(); while ($row = $res->fetch_assoc())( $cat[$row["id"]] = $row; ) return $cat; ) //Funcție pentru a construi un arbore dintr-o matrice de Tommy Lacroix funcția getTree($dataset) ( $tree = array(); foreach ($dataset as $id => &$node) ( //Dacă nu există atașamente dacă (!$node["părinte" ])( $tree[$id] = &$node; )else( //Dacă există copii, atunci iterați prin matricea $dataset[$node["părinte"]]["copii"][$id] = &$node; ) ) returnează $tree; ) //Pregătește-te matricea cu date $cat = getCat($mysqli); //Creează un meniu arbore $tree = getTree($cat); //Șablon pentru afișarea meniului sub forma unei funcții arborescente tplMenu($category)( $meniu = "
  • ".$category["titlu"].""; if(isset($category["copii"]))( $meniu .= "
      ".showCat($category["copii"]) ."
    "; ) $meniu .="
  • "; return $meniu; ) /** * Citiți șablonul nostru recursiv **/ function showCat($date)( $string = ""; foreach($data as $item)( $string .= tplMenu($item); ) returnează $șir; ) //Obțineți marcaj HTML $cat_menu = showCat($tree); //Afișează ecou "
      ". $cat_menu ."
    "; ?>

    Rezultatul muncii

    Meniu pe mai multe niveluri în PHP + MySQL pentru administrator

    Dacă doriți să utilizați acest meniu în panoul de administrare al site-ului dvs., atunci trebuie să rescrieți câteva funcții tplMenu(), showCat().

    ".$category["titlu"].""; )else( $meniu = " "; ) if(isset($categoria["copii"]))( $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 ""; ?>

    Rezultatul muncii

    Selectați Mașini → Mazda →→ Mazda 3 →→→ Sedan →→→ Hatchback →→ Mazda 6 →→→ Liftback →→→ Crossover →→→→ Alb →→→→ Roșu →→→→ Negru →→→→ Verde →→ Mazda CX →→ Mazda MX → Motociclete Honda → Kawasaki → Harley Boats

    Se încarcă...
    Top