Korlátlan php letöltés. Módszer a konzolról futó PHP folyamat végtelen végrehajtására

A PHP (angolul PHP: Hypertext Preprocessor - "PHP: Hypertext Preprocessor"; eredetileg Personal Home Page Tools - "Eszközök személyes weboldalak létrehozásához") egy általános célú szkriptnyelv, amelyet intenzíven használnak webes alkalmazások fejlesztésére.

Jelenleg a PHP-t a tárhelyszolgáltatók túlnyomó többsége támogatja, és ez az egyik vezető nyelv a dinamikus webhelyek létrehozásához.

A PHP nyelvet és annak tolmácsát rajongók egy csoportja fejleszti egy projekt keretében nyílt forráskód. A projektet saját licence alapján terjesztik, ami nem kompatibilis a GNU General Public License-szel.

A PHP hatóköre

A webes programozás területén, különösen a szerver oldalon, a PHP az egyik legnépszerűbb szkriptnyelv (a JSP, Perl és az ASP.NET-ben használt nyelvek mellett).

A webhelykészítés területén a népszerűséget a webalkalmazások fejlesztéséhez szükséges beépített eszközök nagy készletének jelenléte határozza meg. A főbbek:

  • a POST és GET paraméterek, valamint a webszerver környezeti változóinak automatikus kinyerése előre meghatározott tömbökbe;
  • nagy számmal való interakció különféle rendszerek adatbázis-kezelés ( , MySQLi, Oracle (OCI8), Oracle, Microsoft SQL szerver, Sybase, ODBC, mSQL, IBM DB2, Cloudscape és Apache Derby, Informix, Ovrimos SQL, IBM Notes, DB++, DBM, dBase, DBX, FrontBase, FilePro, Ingres II, SESAM, / InterBase, Paradox File Access, MaxDB, Interface OEM (PHP adatobjektumok);
  • HTTP-fejlécek automatikus küldése;
  • HTTP jogosultsággal dolgozik;
  • cookie-kkal és munkamenetekkel végzett munka;
  • helyi és törölt fájlok, aljzatok;
  • a szerverre feltöltött fájlok feldolgozása;
  • XForms-szal dolgozik.

A PHP-t jelenleg fejlesztők százezrei használják. A TIOBE Corporation adatvezérelt rangsora szerint kereső motorok, 2015 szeptemberében a PHP a 6. helyen állt a programozási nyelvek között. A legnagyobb PHP-t használó webhelyek közé tartozik

Többet beszéltem arról, hogyan kell beállítani Denvert, és megbizonyosodni arról, hogy minden működik, csak egy kis időbe telik egy egyszerű ws echo szerver megvalósítása. De ha letöltötte a forrásarchívumot, akkor biztos vagyok benne, hogy könnyen kitalálhatja, hogyan fogadhat és küldhet üzeneteket, ami elég a technológia használatához.
Örülök, hogy reakció érkezett a blogomon, amelyet még nem reklámoztak, és ez arra késztetett, hogy írjak egy folytatást, és foglalkozzam azzal a kérdéssel, hogy hogyan lehet a PHP ws szerver szkriptjét továbbra is működésre bírni a tárhelyen, hogyan kell figyelni. hogy a folyamat fut, és a PHP szkript fut, és nem zárult le időtúllépés miatt vagy az Apache újraindításakor, hogyan lehet elkerülni a PHP folyamat duplikált futtatását, és válaszok más szükséges kérdésekre, hogy garantáltan futhasson ws szerver. Mindenképpen létrehozok egy Internet ws echo szervert chat funkcióval és elhelyezem a közepes tárhelyemen. Később ebben a cikkben a szerveren folyamatosan futó PHP szkriptet ws szervernek fogom hívni, amely a ws-sel működik, bár valójában ez egy szerveroldali folyamat. És ami a legfontosabb, azoknak is kész megoldást nyújtok, akiknek nincs SSH hozzáférésük a tárhelyszerver vagy virtuális gép konzoljához.

Ma sok munka lesz

Kezdjük valami egyszerűvel.

Web socket szerver elhelyezése és futtatása a tárhelyen

Az egyszerűség abban rejlik, hogy nincs probléma az indítással. Az echows.php PHP szkriptet az előző cikkből, anélkül, hogy bármit is változtatna rajta, feltöltheti a tárhelyre és elérheti a fájlt a böngészőből, az egyetlen különbség a denveri végrehajtástól az lehet, hogy az Apache beállításai és a gyorsítótárazás A tárhely mechanizmusai tiltják a befejezetlen információk megjelenítését PHP szkript, ebben az esetben semmilyen információ nem jelenik meg a böngészőablakban, és az oldal továbbra is betöltődik a böngészőben. De ha megpróbál csatlakozni a ws kiszolgálóhoz a ws kliensünkről, látni fogja, hogy a kapcsolat sikeres volt, és a ws echo szerver válaszol minden továbbított kérésre. Természetesen meg kell adnia a ws://yourdomain.com:8889 ws-kiszolgáló címét a ws kliensben. Amint látja, minden rendben van. Az egyetlen probléma, amellyel találkozhat, a tárhely tűzfal beállításai és a portok, amelyeket más szolgáltatások foglalnak el. Ha több domainje van egy IP-címen, akkor ennek a domainnek a címén érheti el a ws szervert ws://anotheromain.com:8889, ami, elfogadja, nem túl jó, különösen olyan tárhely esetén, ahol több száz webhely található. egy tartományon marad, elméletileg valaki ugyanazokat a portokat használhatja, mint te, és ez ahhoz vezethet, hogy a ws szerver nem működik, ezért még egyszer erősen javaslom a portok körültekintő kiválasztását, és ügyelj arra, hogy amikor a ws szerver leáll, mindig bezárja az összeset megfelelően csatlakoztatja és lezárja az aljzatokat. Nos, ami magát a PHP szkriptet illeti, amint azt már észrevetted, a PHP szkriptünk csak 100 másodpercig él, majd amikor megpróbálsz csatlakozni vagy üzenetet küldeni, lezár minden kapcsolatot és befejezi a végrehajtást. Hogyan lehet „örökké” élni? Elegendő számú módszer létezik. A probléma azonban nem az, hogy a PHP-szkriptet korlátlan ideig kell végrehajtani, hanem az, hogyan biztosítható, hogy a szkript különböző helyzetekben helyesen fejeződjön be, majd megfelelően folytassa a működését. Például, amikor kikapcsolja, majd bekapcsolja a szervert, maga a PHP szkript nem indul el, és figyelni, hogy fut-e a ws szerver, és ha nem, akkor manuálisan elindítani nagyon rossz ötlet.

Böngészőből futó PHP szkript végtelen végrehajtásának módszere

Az első dolog, amit meg kell tennie, hogy magában a szkriptben adja meg a PHP szkript korlátlan élettartamát set_time_limit(0); és a böngésző megszakításának figyelmen kívül hagyása ignore_user_abort(true); hogy a PHP szkript a böngészőablak bezárása után lefusson. A szükséges műveletek elvégzése után elindíthatja a böngészőből. A probléma az, hogy egyszeri indítás után nem tudjuk ellenőrizni, hogy minden rendben van-e a folyamattal, nem történt-e hiba a végrehajtás során, és hogy a szkript működik-e tovább vagy sem, csak úgy ellenőrizhető, hogy egy kapcsolóval csatlakozunk hozzá. ws kliens. Természetesen ehhez a szkripthez hozzáadhatja a naplófájl karbantartásának funkcióját, amely rögzíti a működési előzményeket. Továbbá, amikor újraindítja az Apache-t a tárhelyen, a szkripttel végzett folyamat 100%-ban le lesz tiltva. Ez a módszer csak akkor lehet megfelelő, ha egy garantáltan működő, debuggelt ws server PHP szkriptet töltünk fel a szerverre, és számunkra fontos, hogy a tárhelyszolgáltató megbízhatóságától függően csak előreláthatóan rövid ideig működjön, de ez a módszer teljesen alkalmatlan egy teljes értékű ipari ws szerver futtatásához -ról, rendkívüli megbízhatatlansága és képtelensége miatt kikapcsolni abban a pillanatban, amikor szükségünk van rá. Képzeljünk el egy olyan helyzetet, amikor a tárhelyszerver adminisztrátora úgy döntött, hogy újraindítja az Apache-t frissítés céljából, és Ön nem folyamatosan ellenőrzi, hogy fut-e a ws-szerver vagy sem, és közben felhasználók ülnek a chaten, és hirtelen minden elromlik, felhasználók felháborodnak. Ismét alkalmazhat néhány mankót, mielőtt a ws kliens a ws protokoll használatával csatlakozik a ws szerverhez, kényszerítheti a ws klienst, hogy hozzáférjen egy másik szerver PHP szkriptjéhez az XMLHttpRequest() segítségével, és megkövetelheti a ws szervertől, hogy ellenőrizze, hogy a ws szerver futás. A módszer kissé kínos, de működik a nem ipari megoldásokban, mint például egy kis chat vagy egy kis játék. Ezt használom kis projektjeimben.

Minden esetre elvégeztem egy kísérletet, és elindítottam egy ws szervert a tárhelyen, miután korábban hozzáadtam egy olyan mechanizmust, amely bezárja az összes kapcsolatot és megszakítja a folyamatot, amikor az ügyféltől „OFF” üzenetet kap a PHP szkriptbe. Napokig nem nyúltam hozzá, időnként különböző üzeneteket küldve és ellenőrizve a túlélést, kb. két nap múlva kiküldtem az „OFF” parancsot, miután w sikeresen befejezte a munkáját, a ws szerver folyamat élettartama 183 403 másodpercnek bizonyult (2 és egy kicsit nap), és úgy gondolom, hogy még tovább is működhet probléma nélkül.

Módszer a konzolról futó PHP folyamat vég nélküli végrehajtására

Elvileg gyakorlatilag nincs különbség a PHP szkript böngészőből való futtatásától, kivéve, hogy a PHP szkript működésével kapcsolatos összes adat a konzolra kerül, és még néhány apró árnyalat. A PHP szkriptnek magának is tartalmaznia kell set_time_limit(0); és ignore_user_abort(true);. A PHP szkript futtatása a *nix konzolról a paranccsal történik $ php -q scriptfile.php(Putty segítségével csatlakoztam a konzolhoz). A -q (--no-header) kapcsoló megadja, hogy a folyamatot csendes módban kell futtatni, és elnyomja a HTTP-fejlécek kimenetét, amelyeket általában a böngészőnek küldenek. $ férfi php lehetővé teszi a többi érdekes kulcs megtekintését. Kiváló dokumentáció a hivatalos PHP weboldalon, amely nemcsak a PHP-szkriptek konzolról történő futtatásának megértését segítette elő, hanem magában a PHP szkriptben is jelentős fejlesztéseket hajtott végre. Kérjük, vegye figyelembe, hogy a szkript kimenetét átirányíthatja a szerver bármely fájljára a "nagyobb mint" (">") szimbólum használatával, amit általában csinálok.

$ php -q scriptfile.php > scriptfileoutput.txt

A PHP használható PHP szkriptek futtatására az Apache-tól abszolút függetlenül, de nem vagyok benne biztos, hogy a socket mechanizmus működni fog Apache nélkül. Nem próbáltam meg futtatni Apache nélkül - számomra értelmetlennek tűnt. A konzolon keresztüli indítást korrektebbnek tartják, mint a webböngészőn keresztül, de a böngészőn keresztüli indításhoz hasonlóan ez sem képes számos problémát megoldani. Talán egy ilyen indítás megkímél minket attól, hogy az Apache újraindításakor leállítsuk a szkriptet, és ez nem valószínű, de mit tegyünk, ha a teljes webszerver, ill. Virtuális gépújraindul. Természetesen manuálisan kell fellépnie a szerverre, és le kell futtatnia a szkriptet, ha nagy játékprojektje van, és dedikált rendszergazdák amelyek figyelik a szerveren lévő folyamatok állapotát és vannak szkriptek a ws szerver inicializálására és betöltésére Apache-val és minden mással együtt, ebben az esetben ez az egyetlen helyes lehetőség, de itt egy háztartási, kényelmes megvalósítási módról beszélünk. ws szerver PHP-ben kis projektekhez. Ezenkívül néha probléma adódik egy PHP szkript konzolról történő futtatásakor, amely leállítja a PHP szkript végrehajtását egyidejűleg, amikor kilép a konzolból. Ez annak a ténynek köszönhető, hogy a PHP szkript végrehajtása a munkamenethez volt kötve. mint ügyfél. Elméletileg ezt az ignore_user_abort(true) sor használatával kell orvosolni a PHP szkriptben, de ez nem mindig segít különböző beállításokat PHP. Ebben az esetben egy trükköt használnak, amikor a PHP szkriptnek /dev/null adatfolyamot adnak, amelyet kliensnek tekint, és nem áll le a működése, amikor kilép a konzolból.

$ php -q scriptfile.php scriptfileoutput.txt &

Az "és" jelre azért van szükség, hogy a Ctrl+C billentyűkombinációt lenyomva visszatérhessen a konzolhoz, és a folyamat a memóriában maradjon. Vagy használhatja a nohup segédprogramot.

Ezenkívül hasznos lesz tudni, hogy a Windows platformon futtathatja a szkriptet a konzolról

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

Ha minden helyesen történik, akkor érdemesebb a Supervisor segédprogramot használni: A Process Control System figyeli a folyamat működését, szükség esetén elindítja és regisztrálja az összeomlásokat. Ez nagyszerű dolog, ha komoly projektet hajt végre, és dedikált szerverrel vagy legalább egy VDS-sel rendelkezik.

ws szerver vezérli a PHP folyamatot a böngészőből

A PHP szkriptek indítási módjainak tanulmányozása eredményeként egy nagyon egyszerű ötletem támadt – a ws kliens oldalon, a ws szerverhez való csatlakozás előtt egy XMLHttpRequest() kérést kell végrehajtani egy PHP szkriptnek, amely ellenőrzi a program állapotát. ws szerver folyamatot, és elindítja, ha nem fut. Felmerült az ötlet egy ws szerver adminisztrátori oldal szerű megvalósítására is, amelyen elérhető lesz a legfrissebb események naplója: mikor indult, miért omlott le, ki kezdeményezte a következő indítást stb., ahonnan lehetséges lenne. hogy parancsolja a w szervernek az újraindítást, a leállítást, az összes kapcsolat bezárását stb.

Mi legyen a ws kliens felülete:

  • A w szerver állapotának ellenőrzése és elindítása, ha a szerver nem elérhető

Mi legyen a felület egy ws rendszergazdának:

  • Információ a ws szerver állapotáról, lehetőleg a kapcsolatok számával és az elfoglalt memória mennyiségével
  • Naplók megtekintése
  • A ws szerver leállítása

Tehát a megvalósításhoz szükségünk van egy ws szerverre, amelyet a korábban leírt módszerek valamelyikével a memóriában kell tárolni, pl. minőségi démont kell csinálnod belőle. Van egy kiváló cikk a folyamatokról és a démonokról Habrén. Sajnos azonban még nehezebb olyan tárhelyet találni, amely támogatja a PHP pcntl_fork alatti gyermekfolyamatok létrehozására szolgáló parancsot, mint a socketek támogatásával, ezért el kell hagynia a klasszikus démonizálási módszerrel. Ezenkívül az ilyen programokat nem lehet hibakeresni Windowson, mert A forkok csak *nix operációs rendszereken léteznek. De a cikkből mégis sikerült valami hasznosat kiszűrnünk, mégpedig a folyamatazonosítót tároló PID fájl létrehozását, amely nem engedi meg két folyamat egyidejű futtatását – erről alább.

Ennek eredményeként kissé módosítottam a ws echo szerver szkript PHP kódját azáltal, hogy elhelyeztem benne az STDIN, STDOUT, STDERR bemeneti/kimeneti folyamok váltásához szükséges kódot, és ezzel leegyszerűsítettem a ws szerver elindítását a konzolról:

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

Kaptam egy jól működő démont a pcntl_fork használata nélkül. Végigfut a konzolon, leválik a konzolról, és tökéletesen válaszol minden felhasználói kérésre a ws://yourdomain.com:8889 címen, és megfelelően bezáródik az „OFF” üzenet elküldésekor. De a probléma az, hogy nem lehet ellenőrizni, hogy a démon fut-e vagy sem, és így elkerülhető a démon ismételt elindítása. Igen, indításkor létrejön egy pid_file.pid fájl, amely tárolja a démonunk folyamatazonosítóját (egyedi folyamatszám az OS *nix rendszerben), és amikor a démon megfelelően le van állítva, például amikor egy „ OFF” üzenetet, ez a fájl törlődik. Indításkor természetesen ellenőrizheti ennek a fájlnak a meglétét, és ha a fájl létezik, akkor jelentse, hogy a démon már fut, így elkerülheti a duplikált indításokat, de mi a teendő, ha a démon rosszul végezte a munkáját és nem ne törölje a pid_file.pid fájlt, ebben az esetben a démon soha többé nem fog futni. Ismét a Habrén sikerült egy kiváló funkciót találnunk egy démon jelenlétének ellenőrzésére.


if(is_file($pidfile)) (
//folyamat meglétének ellenőrzése, a posix_kill függvény elavult lehet, cserére szorulhat PHP 5.3+ verzióra való áttéréskor
if(posix_kill($pid,0)) (
//démon már fut
return true;
) más (

if(!unlink($pidfile)) (
consolemsg("HIBA");
kilépés(-1);
}
consolemsg("OK");
}
}
return false;
}

És megint az a probléma, hogy a posix_kill($pid,0) függvény ugyanabból az okból bizonyult hatástalannak, mint a pcntl_fork. Ezt nem tudtam beletörődni, és ismét kidolgoztam egy „ravasz” megoldást. Mert Még mindig úgy döntöttem, hogy olyan funkcionalitást implementálok, amely megmutatja a ws szerver állapotát, akkor így vagy úgy szükségem lesz egy olyan funkcióra, amely megmutatja a folyamat állapotát az operációs rendszerben. A funkció megvalósításához az exec() parancsot fogjuk használni, amely lehetővé teszi bármely konzolparancs végrehajtását. És ha teljesítjük

Exec("ps -aux -p ".$pid, $kimenet);

akkor ennek eredményeként a démonról (folyamatról) vonatkozó információk a $output tömbbe kerülnek, ha a démon fut és $pid-vel rendelkezik.

FELHASZNÁLÓI PID %CPU %MEM VSZ RSS TT ÁLLAPOT INDÍTÁSI IDŐ Parancs aow 62335 0,3 0,1 120080 16020 ?? SJ 16:31 0:00.02 php -q echows.php

Így ténylegesen működő függvényeket kaptunk posix_kill nélkül, amelyek ellenőrzik, hogy fut-e a démon, és ennek megfelelően adnak adatokat róla.

Frissítés 2017.08.14: A fenti példa a ps parancs BSD szintaxisát használja. Legtöbbnek * nix rendszerek kiváló lesz, és ez a parancs az összes folyamatot felsorolja, nem csak egy pid-t tartalmazó folyamatot. A ws szerver adminisztrációs panelről indulva, v.0.4. és a fentiek a klasszikus szintaxist használják, amely a legtöbb *nix rendszerben megfelelően működik.

Függvény isDaemonActive($pidfile) (
if(is_file($pidfile)) (
$pid = file_get_contents($pidfile);
//lekéri a folyamat állapotát
$állapot = getDaemonStatus($pid);
if($status["fut"]) (
//démon már fut
consolemsg("démon már fut info=".$status["info"]);
return true;
) más (
// van egy pid fájl, de nincs folyamat
consolemsg("nincs folyamat PID = ".$pid.", az utolsó lezárás rendellenes volt...");
consolemsg("próbálja meg leválasztani a PID fájlt...");
if(!unlink($pidfile)) (
consolemsg("HIBA");
//Nem tudom megsemmisíteni a pid fájlt. hiba
kilépés(-1);
}
consolemsg("OK");
}
}
return false;
}

függvény getDaemonStatus($pid) (
$eredmény = array ("run"=>false);
$kimenet = null;
exec("ps -aux -p ".$pid, $kimenet);

If(count($output)>1)(//Ha a végrehajtás eredménye több mint egy sor, akkor van folyamat! Mert az első sor a fejléc, a második pedig már a folyamat
$eredmény["futtatás"] = igaz;
$result["info"] = $output;//sor a folyamattal kapcsolatos információkkal
}
return $eredmény;
}

Most, hogy az állapotellenőrző funkció készen áll, a démont nem a konzolról indíthatjuk el, hanem a PHP exec("php -q echows.php &") parancs végrehajtásával; és kapcsolja ki a démont az OFF üzenettel.
Az utolsó dolog, amit a ws echo szerveren és a ws kliensen módosítani kell, az az, hogy csatlakozás előtt egy AJAX kérést kell hozzáadni a szerverhez, amely hazudik, ez megemelné. Most már nem kell azon gondolkodnunk, hogy milyen állapotban van a démon, mert... Tudjuk, hogy még ha a szervert újraindították is, a kliens az első híváskor felveszi.

A böngésző ws szerver vezérlőpultja

Ki fogok fejleszteni egy egyszerű rendszert a démon irányítására és megfigyelésére. Nagyon egyszerű, és több fájlból áll: echowsadmin.html (adminisztrátori panel), echowsadmin.js (admin panel logika), echowsadmin.php (ws echo szerver felügyeleti logika). Meglepően egyszerűnek bizonyult ennek a rendszernek a fejlesztése, és nem töltöttem többet az időmből.

Annak érdekében, hogy a felhasználó ne kapcsolja ki a démont az OFF paranccsal, eltávolítottam ezt a funkciót a ws echo szerver PHP kódjából. Ennek megfelelően a démon leállítási funkciójának megvalósításával a vezérlőrendszerből. A megvalósítás nem a legelegánsabb, a jelek helyett az off_file.pid fájlt használom, de garantáltan nem lesz szükség további könyvtárakra és a leállás is megfelelően történik. Mert ws szerveren míg hurok lefagy a socket üzenetek hallgatása közben, majd az off_file.pid létrehozása után csatlakozni kell a ws szerverhez, hogy elérje a ciklus végét és ellenőrizze az off_file.pid meglétét, ehhez csinálok egy kis trükköt, utánozok egy socket kapcsolatot az echowsadmin.php webhelyről, és iktasson be némi késleltetést, hogy minden működjön, és a szkript jelezze a feladat sikeres befejezését. Letöltés ( elavult archívum, újabb in ), ne felejtse el megadni a tárhelyén lévő echowsadmin.php fájl helyének címét az echowsadmin.js 10. sorában, az echowsstart.php címét a socket.js fájlban és a ws szerver címét echowsadmin.php (vagy inkább nem a cím, hanem a port, mivel a fájlnak a szerveren kell lennie, a cím mindig 127.0.0.1 lesz), ahová az egycellás minikliensünk megpróbál csatlakozni, amikor a ws echo szerver ki van kapcsolva. Nem hoztam létre gombot a ws echo szerver újraindításához, mivel egyértelmű, hogy ehhez meg kell nyomni a stop gombot, majd elindítani, és gyakorlatilag nincs szükség erre a műveletre egy gombban. Ez az egész vezérlőrendszer csak *nix operációs rendszerek alatt működik, pl. a hostingról. És így néz ki.

Nyilvánvalóan sok mindent lehet javítani:

  • Javítsa a bemutatót, és készítsen részletesebb információkat a ws szerver állapotáról
  • Adjon hozzá kimenetet további naplózáshoz részletes információk az elfoglalt memóriáról és az aktuális kapcsolatok számáról
  • Ellenőrizni operációs rendszerés dolgozzon ki egy verziót Denver és Windows számára
  • Készítsen felhatalmazást

De az én esetemben az volt a feladat, hogy egyszerű eszközt készítsek magamnak a démon állapotának a weben keresztüli nyomon követésére. Ezzel a dologgal egyébként, kicsit módosítva, bármilyen démon figyelhető, nem csak a ws.

Ami a Windows operációs rendszer megvalósítását illeti, minden olyan hely, ahol a pid ellenőrzéssel megkerülhető, és így biztosítható az indíthatóság.

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

Hogy a démon fut-e vagy sem, elegendő pusztán a pid fájl megléte alapján ellenőrizni.

Hétvégén elfelejtettem kikapcsolni a ws echo szervert, aminek következtében az élettartama 233774 másodperc volt, azaz. valahol 3 nap körül az elfoglalt memória 0,1% körül maradt, ami arra utal, hogy a megoldásnak élethez való joga van.

A visszajelzéseket és észrevételeket mindig szívesen fogadjuk. Továbbra is fejlesztem a témát, és az ígéretnek megfelelően egy egyszerű chatet valósítok meg.

A PHP démonokról és websocketekről szóló cikkeim

  • Websocket szerver PHP-ben, démon futtatása PHP-ben

Ezzel a programozási nyelvvel weboldalakat és webes alkalmazásokat hozhat létre helyi számítógép Apache szerveren keresztül. A legtöbb modern internetes oldal PHP nyelven készült. Ezeknek a webhelyeknek az oldalai dinamikusak, ellentétben a régi, HTML-jelölésen alapuló webhelyekkel.

Minden információt az adatbázisban tárolunk MySQL adatok, amelyből kivonják a szükségeset Ebben a pillanatban. Tapasztalt programozók weboldalakat készíthetnek a semmiből, és a hétköznapi felhasználók Jobb, ha a kész motorok (WordPress, Joomla vagy Drupal) szolgáltatásait használja, ahol csak saját feliratokat kell hozzáadnia - és a webhely készen áll. Saját webhelyek létrehozásához a helyi számítógépen ingyenesen kell letöltenie új verzió PHP. Ezt követően az elkészült oldalt fel lehet tölteni az Internetre.

Lehetőségek:

  • Webhelyek és programok létrehozása és szerkesztése;
  • a webhely tartalmának dinamikus kezelése;
  • különböző motorok tesztelése webhelyekhez;
  • HTTP cookie-k használata.

Működés elve:

Most pedig értsük meg a PHP működését. Először le kell töltenie és telepítenie kell például a virtuális Apache-kiszolgálót. Ehhez használhatja a Denwer, XAMPP, OpenServer vagy bármely más program kész fejlesztőkészletét. Telepítés után helyi szerverát kell másolnia a PHP archívum tartalmát. Ezek után a semmiből írhat weboldalakat a virtuális tárhelyére, vagy telepítheti a szükséges weboldalmotorokat, hogy saját internetes projektjeit létrehozza.

Miután fizetett a tárhelyért és a domainért, feltöltheti webhelyét az internetre, és elkezdheti megvalósítani kreatív képességeit. A PHP nyelv használatával gyorsan és kényelmesen hozhatja létre és szerkesztheti webhelyei tartalmát. Például a webhely aljának kialakításához csak egy fájlt kell szerkesztenie, és a változtatások a projekt minden oldalán megjelennek. HTML-ben minden oldalt külön-külön kell szerkesztenie.

Előnyök:

  • dinamikus weboldalak készítése PHP-ben;
  • adatbázisok használata;
  • ingyenes PHP letöltési lehetőség a számítógépére
  • több adatbázis és webhely létrehozásának támogatása helyi számítógépen;
  • elterjedt és népszerű programozási nyelv.

Mínuszok:

  • A számítógépen való munkához szükség lehet egy virtuális szerver telepítésére.

Napjainkban a PHP a webhelyek és webes alkalmazások leggyakoribb programozási nyelve. Ezért saját projektek létrehozásához egyszerűen hozzá kell igazítania a Windows rendszert ehhez a nyelvhez. Ezenkívül a munkavégzéshez telepítenie kell egy kiszolgálót a számára virtuális tárhely a helyi webhelyeket. Ennek a programozási nyelvnek a használata lehetővé teszi saját internetes projektek létrehozását és elindítását, ezért javasoljuk, hogy töltse le ingyenesen legújabb verzió PHP.

1C-Bitrix – rendkívül professzionális adminisztrációs rendszer Az Ön webprojektjei, amely lehetővé teszi az online bolti rendelések rugalmas kezelését, amely csökkenti a monoton folyamatok mennyiségétés javítja az ügyfélszolgálat minőségét.

A Bitrix rendszer fő előnyei mellett minden felhasználó ismertek ennek a terméknek a magas követelményei a technikai hosting paraméterekhez. Sikerült optimalizálnunk és konfigurálnunk szervereinket. Most A HyperHost egy kiváló, nagy teljesítményű .
Az alábbiakban megnézzük ennek a rendszernek a telepítési folyamatát a tárhelyünkön:
1. lépés
Mielőtt elkezdené a CMS Bitrix telepítését, néhány módosítást kell végrehajtania a fiókja egyedi php.ini fájljában. Hogyan kell ezt megtenni, nézze meg a képernyőképeket:



2. lépés
Miután megadta a szükséges paramétereket a CMS Bitrix egyedi php.ini fájljába, le kell töltenie és fel kell töltenie a telepítő szkriptet:
CMS Bitrix (bitrixsetup.php).
Letöltheti az 1c-bitrix.ru hivatalos webhelyről:
http://www.1c-bitrix.ru/download/cms.php

3. lépés
Ezután fel kell töltenünk a webhely kezdőkönyvtárában lévő szerverre.
Ez megtehető a Cpanel vezérlőpultján vagy FTP használatával
A vezérlőpulton keresztüli letöltéshez a következőket kell tennie:






4. lépés
Az oldal telepítéséhez létre kell hoznunk egy adatbázist (DB), egy DB felhasználót, és hozzá kell adnunk a felhasználót a létrehozott DB-hez








5. lépés
Kezdjük a CMS Bitrix telepítésével

Fontos! Az oldal működését a tárhelyünkön helyben ellenőrizheti, a DNS (domain delegáció) megváltoztatása nélkül, csak regisztrálnia kell hosts fájl a következő bejegyzést:

53.114.112.45 domain.ru

Ahol,
domain.ru az Ön domainje.
53.114.112.45 - A tárhelyszerver IP-címe. Ahhoz, hogy megrendelés után megnézze, milyen IP-n található a weboldala cégünknél, a következőket kell tennie:
Nyissa meg a webhely vezérlőpultját a „Webdomainek” részben, és nézze meg, hogy milyen IP-cím van megadva webhelyéhez;

A hosts fájl a következő útvonalakon található:

- 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

A módosítások elvégzése után a webhely azon verziója, amelyet átvitt a tárhelyünkre, megnyílik a domain.ru címen számítógépe böngészőjéből.
Webhelye működőképességének ellenőrzése után ne felejtse el törölni ezt a bejegyzést a hosts fájlból.
Nyissa meg a címet a böngészőjében http://your_domain/bitrixsetup.php, válassza ki a telepíteni kívánt disztribúciót.
Mutatunk egy példát a CMS telepítésére a „Site Management” disztribúcióra és egy demóverzióra


A következő lépés a disztribúció betöltése a szerverre és kicsomagolása.



6. lépés

CMS telepítése
A disztribúció kicsomagolása után a rendszer átirányítja a CMS közvetlen telepítési oldalára


Olvassa el és erősítse meg a licencszerződést

7. lépés

Adja meg adatait, és jelölje be a „Telepítés UTF-8 kódolással” elem mellett, majd folytassa a következő lépéssel


8. lépés

Ebben a lépésben egy ellenőrző oldal jelenik meg, ahol a szerverbeállítások megfelelőségét ellenőrizzük helyes telepítésés a CMS Bitrix munkája.


9. lépés

Kapcsolat létrehozása az adatbázissal.
A mezőkben meg kell adni a csatlakozási adatokat az adatbázishoz, amelyben létrehoztuk 4. lépés


10. lépés

Ez a lépés magában foglalja automatikus telepítés termék

11. lépés

Hozzon létre egy rendszergazdát ehhez a webhelyhez
Ki kell töltenie a kötelező mezőket: bejelentkezés, jelszó és jelszó megerősítése.

12. lépés

Válasszon ki egy telepítési sablont.
A telepítés pillanatában csak 1 – „fix”, mivel ez egy szabványos telepítés.

Téma kiválasztása


Adja meg a cég adatait, amelyhez webhelyet telepít, és kezdje el a kiválasztott téma telepítését.


Gratulálunk! Telepítette a CMS Bitrixet.
Meg kell jegyezni, hogy a teszteredmények nagyon magas 1C teljesítményt mutattak szervereinken.
Vonalunk VPS-Start tarifáján a teljesítmény az volt 88,58 a színvonalon 30

még jobb eredményeket mutatott - 127,84 szabvány szerint - 30
Ezek a mutatók a legmagasabbak közé tartoznak a FÁK-beli hosting cégek között.
Kellemes munkát kíván a HyperHost!

8775 alkalommal 9 Ma megtekintve

Egyetlen webhely sem teljes navigáció vagy – ahogy ők is nevezik – „webhelymenü” nélkül. Tehát a webhely menüje lehet egyszintű vagy többszintű fa formájában. Ha nincs különösebb nehézség az egyszintű menü megvalósítása során, akkor a többszintű menü létrehozásakor alaposan át kell gondolnia.

Ebben a feladatban a legfontosabb a többszintű menünk adatbázisának megtervezése. Hozzunk létre egy Kategóriák táblát három mezővel id, cím, szülő Ahol:

  • ID- azonosító
  • Cím- Menü neve
  • Szülő- Alapértelmezett kategória szülő 0

A mező a menü elágaztatásáért felelős Szülő Ha Szülő = 0, akkor ez a kategória a szülőkategória. Ha utódokat szeretne hozzáadni a szülőkategóriához, meg kell adnia a szülő mezőben ID a megfelelő szülő. Például:

Táblázatok kategóriákkal

A táblázatból látható, a szülő kategória Autók két leszármazottja van – ez van MazdaÉs Honda szakterület szerint összefügg Szülő. És a kategória Motorkerékpárok két leszármazottja van KawasakiÉs Harley. Ugyanakkor a Hajók kategóriának nincsenek leszármazottai. Remélem érti a kategóriák összekapcsolását.

Ezután a szavaktól a gyakorlat felé haladunk. Hozzunk létre egy kategóriák táblázatot.

TÁBLÁZAT LÉTEZÉSE, HA NEM LÉTEZIK "kategóriák" ("azonosító" int(10) előjel nélküli NOT NULL AUTO_INCREMENT, "title" varchar(255) NOT NULL, "parent" int(10) előjel nélküli NEM NULL, ELSŐDLEGES KULCS ("id") ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=20 ; -- -- Adatkiírat a `categories` táblából -- INSERT INTO `categories` (`id`, `title`, `parent`) ÉRTÉKEK (1, "Autók", 0), (2, "Motorkerékpárok", 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, "Csónakok", 0), (12, "Liftback") , 8), (13, "Crossover", 8), (14, "fehér", 13), (15, "piros", 13), (16, "fekete", 13), (17, "zöld" , 13), (18, "Mazda CX", 3), (19, "Mazda MX", 3);

A munkaalgoritmus a következőkből áll:

Hozzon létre kapcsolatot az adatbázissal

query("NEVEK BEÁLLÍTÁSA "utf8"); /* * Ez a "hivatalos" objektum-orientált módja ennek * azonban a $connect_error nem működött a PHP 5.2.9-es és 5.3.0-s verziójáig. */ if ($mysqli->connect_error) ( die("Kapcsolódási hiba (" . $mysqli->connect_errno . ") " . $mysqli->connect_error); ) /* * Ha meg kell bizonyosodni a verziókkal való kompatibilitásról 5.2 .9 előtt, * jobb ezt a kódot használni */ if (mysqli_connect_error()) ( die("Kapcsolódási hiba (" . mysqli_connect_errno() . ") " . mysqli_connect_error()); )

Függvény írása adatok beszerzéséhez a Kategóriák táblából

//A menü tömbjének lekérése az adatbázisból tömbfüggvényként getCat($mysqli)( $sql = "SELECT * FROM `categories`"; $res = $mysqli->query($sql); //Hozzon létre egy tömb ahol a tömb kulcsa a menüazonosító $cat = array( while($row = $res->fetch_assoc())( $cat[$row["id"]] = $sor; ) return $; macska )

Egy ilyen tömböt kapunk, ahol a tömb kulcsa a kategóriaazonosító.

Tömör fa építő funkció a Tommy Lacroix-tól

//Funkció egy tömbből való fa létrehozásához Tommy Lacroix függvényből getTree($dataset) ( $tree = array(); foreach ($dataset as $id => &$node) ( //Ha nincsenek mellékletek if ( !$node[" szülő"])( $tree[$id] = &$node; )else( //Ha vannak gyerekek, akkor a $dataset[$node["parent"]]["childs "][$id] = &$ csomópont; ) return $tree;

Egy fa formájú tömböt kapunk

A teljes forgatókönyv

query("NEVEK BEÁLLÍTÁSA "utf8"); /* * Ez a "hivatalos" objektum-orientált módja ennek * azonban a $connect_error nem működött a PHP 5.2.9-es és 5.3.0-s verziójáig. */ if ($mysqli->connect_error) ( die("Kapcsolódási hiba (" . $mysqli->connect_errno . ") " . $mysqli->connect_error); ) /* * Ha meg kell bizonyosodni a verziókkal való kompatibilitásról 5.2 .9 előtt, * jobb ezt a kódot használni */ if (mysqli_connect_error()) ( die("Kapcsolódási hiba (" . mysqli_connect_errno() . ") " . mysqli_connect_error()); ) //A tömb lekérése menüből az adatbázisból tömbfüggvényként getCat($mysqli)( $sql = "SELECT * FROM `categories`"; $res = $mysqli->query($sql); //Hozzon létre egy tömböt, ahol a tömb kulcsa a menüazonosító $cat = array(), míg ($sor = $res->fetch_assoc())( $cat[$row["id"]] = $cat ) //Function for fa létrehozása egy tömbből Tommy Lacroix függvényből getTree($dataset) ( $tree = array(); foreach ($dataset as $id => &$node) ( //Ha nincsenek mellékletek if (!$node[ "parent"])( $tree[$id] = &$node; )else( //Ha vannak leszármazottak, akkor iteráljuk végig a tömböt: $dataset[$node["parent"]]["childs"][ $id] = &$node ) ) return $tree ) //Előkészített tömb beszerzése adatokkal $cat = getCat($mysqli); //Fa menü létrehozása $tree = getTree($cat); //Sablon egy menü megjelenítéséhez fafüggvény formájában tplMenu($category)( $menu = "
  • ". $category["title"].""; if(isset($category["gyermekek"]))( $menu .= "
      ". showCat($category["gyermekek"]) ."
    "; ) $menü .= "
  • "; return $menu; ) /** * Sablonunk rekurzív olvasása **/ function showCat($data)( $string = ""; foreach($data mint $item)( $string .= tplMenu($item); ) return $string ) //HTML jelölés letöltése $cat_menu = showCat($tree //Visszhang megjelenítése ");
      ".$cat_menu."
    "; ?>

    A munka eredménye

    Többszintű menü PHP + MySQL adminisztrációs panelhez

    Ha ezt a menüt szeretné használni webhelye adminisztrációs panelén, akkor át kell írnia néhány funkciót tplMenu(), showCat().

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

    A munka eredménye

    Válassza az Autók → Mazda → → Mazda 3 → → → Sedan → → → Ferdehátú → → Mazda 6 → → → Liftback → → → Crossover → → → → Fehér → → → Piros → → → → Fekete → → → Zöld → → lehetőséget. Mazda CX → Mazda MX → Honda Motorkerékpárok → Kawasaki → Harley Boats

    Betöltés...
    Top