PHP žymos aprašymas

PHP (PHP: „Hypertext Preprocessor“) yra plačiai naudojamas, aukšto lygio, dinamiškas, objekto orientuotas ir aiškinamasis scenarijų kalba, pirmiausia skirta serverio pusėje kūrimui.

PHP yra plačiai naudojamas, aukšto lygio, dinamiškas, objekto orientuotas ir aiškinamasis scenarijų kalba, pirmiausia sukurta serverio pusės kūrimui. Originalus PHP projektas, kurį sukūrė Rasmus Lerdorfas, reiškė „asmeninį tinklapį“. Šiandien tai reiškia PHP rekursinį nuorodą: „Hypertext Preprocessor“.

Naujausią stabilų išleidimą, vystymosi pokyčius ir plėtros skyrius galima rasti PHP tinklalapyje , o „C“ parašytas šaltinis yra PHP „ GitHub“ saugykloje .

Norėdami pradėti su PHP, galite naudoti vieną iš šių programų, įskaitant, be kita ko, žiniatinklio serverį ir PHP:

Yra parinkčių, pvz., „Cygwin“ („Linux“ sistemoje „Windows“), kurioje galite įdiegti PHP, kaip ir bet kurią kitą „Linux“ - „ CygWin“ („Linux“ sistemoje „Windows“)

PHP suteikia integruotą žiniatinklio serverį, kurį galima paleisti naudojant šią komandą:

  php -S localhost:8000 

Atlikus pirmiau minėtą komandą, serveris 8000 prievadą išklausys naudodamas dabartinį darbo katalogą kaip pagrindinį dokumentą. Daugiau informacijos rasite PHP vadove .

Pastaba: norint atlikti demonstraciją internete, galite naudoti kodų skydelį , 3v4l arba PHP smėlio dėžę, kuri veikia kaip jsfiddle, bet PHP. Tačiau visi susiję kodai turi būti įtraukti į jūsų klausimą ar atsakymą.

PHP versijos

Dabartinė stabili versija (7.3.x): 7.3.2 // Išleidimo data: 2019 m. Vasario 7 d

Sena stabili versija (7.2.x): 7.2.15 // Išleidimo data: 2019 m. Vasario 07 d

Senoji stabili versija (7.1.x): 7.1.26 // Išleidimo data: 2019 m. Sausio 10 d

Rekomenduojama naudoti dabartinę stabilią versiją. Visos versijos žemiau 7.1 nėra oficialiai palaikomos ir paskelbtos pasenusios . Čia rasite palaikomų filialų sąrašą ir jų palaikymo būseną.

Daugiau informacijos apie naujas funkcijas ir būtinus naujojo versijos pakeitimus rasite Oficialiuose migracijos dokumentuose:

PHP scenarijų pavyzdys

Šis scenarijus rodo Hello World! ekrane.

 <?php echo 'Hello World!'; ?> 

Norėdami paleisti šį scenarijų konsolėje, išsaugokite jį dabartiniame darbiniame kataloge faile, pavadintame hello.php ir tiesiog paleiskite komandą: php hello.php .

Jei jūsų kompiuteryje nėra įdiegta PHP - galite išbandyti šį paprastą scenarijų naudodami „Docker“, tiesiog paleiskite:

 docker run -it --rm --name php-test php:7.1-cli php -r 'echo "Hello World!";' 

Interaktyvios korpusai

Norėdami interaktyviai išbandyti PHP kodą REPL apvalkale, apsilankykite http://psysh.org/ . Naudodami šią funkciją galite išbandyti funkcijas ir kodo fragmentus neprarandant kintamųjų konteksto, o vykdymas nebus nutrauktas dėl išimčių ar klaidų.

PHP konfigūracijos informacija

Šis scenarijus rodo konfigūracijos informaciją:

 <?php phpinfo(); ?> 

Įrašykite failą į savo žiniatinklio serverio dokumento šaknį kaip phpinfo.php ir paleiskite ją iš naršyklės. http://localhost/phpinfo.php

Atminkite, kad saugumo sumetimais ją pašalinti vėliau.

bendruomenei

PHP turi daug aktyvių bendruomenės forumų, įskaitant:

Papildoma informacija

Dabar naršo dokumentacija

PHP vadovas yra oficialus kalbos sintaksės dokumentas, kuriame yra paieškos funkcija ir URL nuorodos (pvz., Https://secure.php.net/explode ). API yra gerai dokumentuota dėl susijusių ir papildomų plėtinių. Daugumą papildomų plėtinių galima rasti PECL . PEAR saugykloje yra daug bendruomenės teikiamų klasių. Čia taip pat galite atsisiųsti neprisijungusios dokumentacijos versiją.

Be to, PHP Framework Interop Group (PHP-FIG) sukūrė PHP kodavimo stilių ir standartų standartus. Šias standartines PHP rekomendacijas galima rasti čia .

PHP konsultacijos

PHP saugumo informacija

Nemokamos internetinės pamokos

Nemokamos PHP programavimo knygos

Duomenų bazės palaikymas

PHP palaiko platų duomenų bazių, tiek reliacinių , tiek nesusijusių, spektrą.

PHP dažnai prisijungia prie „ MySQL“ reliacinės duomenų bazės . PHP taip pat apima puikią „ PostgreSQL“ , „ SQLite“ , „ Microsoft SQL Server“ ( API nuoroda ), „ Oracle“ , „ IBM DB2 Cloudscape“, „Apache Derby“ ir netgi „ ODBC“ duomenų bazės palaikymą.

Visose moderniose PHP versijose yra SKVN : įmontuota duomenų prieigos abstrakcijos biblioteka, turinti didelį ryšį . Neseniai pasirodė PECL plėtiniai, kurie palaiko „NoSQL“ duomenų bazę, įskaitant „ Apache Thrift“ („ Apache Cassandra“ ), „ MongoDB“ , „ Redis“ ir kt.

SAPI palaikymas

Kaip ir daugelis kitų programų, žiniatinklio serveriai teikia API (taikomųjų programų sąsajas), kad išplėstų jų funkcionalumą su trečiosios šalies plėtiniais. Web serverio teikiama API paprastai vadinama SAPI (Server API). Naudojant kitą SAPI, PHP gali dirbti skirtinguose interneto serveriuose kaip serverio pusės skriptų kalba. Į palaikomų SAPI susijusių interneto serverių sąrašą sudaro:

Jei serveris nepalaiko tam tikro SAPI, tuomet galite naudoti vieną iš bendrų sąsajų, kurias plačiai palaiko interneto serveriai. Jie apima:

  • CGI (bendroji sąsajos sąsaja)
  • FPM („FastCGI Process Manager“)

Iš pradžių PHP buvo sukurta kurti žiniatinklio serverio programas, tačiau gali būti sukurtos atskiros ir kliento programos. Norėdami suderinti savo serverį orientuotą architektūrą, PHP šioms programoms apibrėžia ir įgyvendina CLI (komandinės eilutės sąsają) SAPI.

PHP taip pat gali būti naudojamas kaip el. Pašto siuntimo priemonė („portmanteau“).

Naudingas trečiosios šalies kodas ir įrankiai

Be didelės PHP pagrindinės funkcijos ir per PEAR ir PECL, PHP pasaulyje buvo padaryta nemažai įspūdingų trečiųjų šalių įnašų, kai kurie iš jų yra išvardyti toliau:

Paketų valdymas su kompozitoriumi

Kompozitorius yra paketo valdymo įrankis PHP, įkvėptas „npm“ „NodeJS“ ir „Bundler for Ruby“. Tai leidžia nurodyti kiekvieno projekto priklausomybę JSON faile.

Kompozitorius naudoja paketų paketus , kurie sparčiai auga ir kuriame yra daugelis populiariausių PHP bibliotekų.

Kompozitorius sprendžia šias problemas:

  1. Turite projektą, kuris priklauso nuo kelių bibliotekų.
  2. Kai kurios iš šių bibliotekų priklauso nuo kitų bibliotekų.
  3. Jūs skelbiate dalykus, nuo kurių priklauso.
  4. Kompozitorius nustato, kurias versijas, kurias paketai įdiegti, ir įkelia į savo projektą (paprastai vendor ).

Nieko ateina nemokamai. Programoje „Kompozitorius“ atsisiunčiama programinė įranga gali turėti klaidų, kaip ir bet kuri kita, įskaitant saugumo spragas. Turite žinoti, ką diegiate ir atnaujinate, jei reikia, norėdami gauti saugumo pataisas.

Sistemos

PHP turi daug objektų orientuotų žiniatinklio taikomųjų programų aplinkų, kurios suteikia daug bendrų funkcijų, reikalingų modernioms žiniatinklio programoms kurti iš dėžutės. Garsiausios yra:

Turinio valdymo sistemos

PHP sukurta daug skirtingų turinio valdymo sistemų, kurių daugelis gali naudoti žmonės, kurie nėra kūrėjai. Kai kurie yra atviro kodo, kiti - nuosavybės teise.

Objektų reliacinis žemėlapis

Objektų reliaciniai žemėlapiai bando išspręsti ar sušvelninti objekto-reliacinės varžos neatitikimo problemą, skaidriai rodant duomenų bazės lentelės struktūras ir programos verslo objektus. Garsiausias ORM PHP pasaulyje:

„WebSockets“

„WebSocket“ - tai kompiuterio ryšio protokolas, kuris suteikia pilno dvipusio ryšio kanalus per vieną TCP ryšį.

Populiariausi klausimai ir atsakymai

Kokybės užtikrinimo įrankiai

Pastaraisiais metais kokybės užtikrinimo priemonių skaičius PHP pasaulyje nuolat augo. Kadangi PHP persikėlė į profesinę pagrindinę sistemą, PHP bendruomenei reikėjo įrankių tam tikroms kokybės funkcijoms ir metrikams pateikti . Šios priemonės apima derinimo platformas, vieneto testavimą , kodų analizę ir aprėptį , nuolatinę integraciją ir kitus profesinio tobulėjimo aspektus. Kai kurie iš šių įrankių yra išvardyti toliau:

Populiariausi klausimai ir atsakymai

Ida

Integruota plėtros aplinka (IDE) yra programinė įranga, kuri suteikia daugumą įrankių, reikalingų kitai programinei įrangai sukurti patogioje pakuotėje. Standartinės IDE funkcijos paprastai yra šaltinio kodo redaktoriai su sintaksės paryškinimu, kodo užbaigimu, taip pat derinimo funkcija, kūrimo parama, versijos valdymo sistemos integracija ir daug daugiau. Kai kurie pagrindiniai žinomi PHP IDE:

Populiariausi klausimai ir atsakymai

Standartai ir kodavimo konvencijos

Yra daug kodavimo standartų, kuriuos pasiūlė ir priėmė PHP Framework Interaction Team (PHP-FIG) . Tai vadinama PHP standartinėmis rekomendacijomis (PSR) . Nuo 2017 m. Liepos 2 d. Galioja šios rekomendacijos:

Išsamų visų rekomendacijų sąrašą ir jų statusą galima rasti PHP-FIG rekomendacijų puslapyje.


Dažniausiai užduodami klausimai

Suraskite atsakymus į kai kuriuos dažniausiai užduodamus klausimus apie žemiau pateiktą PHP.

Turiu tipišką „neveikiančią“ problemą. Ką turėčiau daryti prieš užduodant klausimą?

Tipinės „neveikiančios“ problemos priežastys arba „veikia vietiniame kompiuteryje, bet neveikia gamybos serveryje“ gali būti lengvai diagnozuojamos nustatant parametrą „ display_errors į „ On arba „ 1 .

Netinkamai sukonfigūruotas kūrimo serveris ir tipiškas gamybos serveris išjungė display_errors . Tai slopina visus klaidų pranešimus, kurie nepadeda bandant diagnozuoti problemas.

Prieš palikdami klausimą, suraskite visus PHP pranešimus apie klaidas ir pažiūrėkite, ar galite juos pataisyti. Klaidos, pvz., „PHP Warning: ...“ ir „SQL SQL sintaksė turi klaidą, patikrinkite vadovą ...“ gali būti gana lengvai nustatytos. Google praneškite apie klaidos pranešimą ir suraskite ją perkrovos viršuje. Dauguma klaidų pranešimų turi žinomų sprendimų. Be to, daugelis dažniausiai pasitaikančių klaidų pranešimų buvo sukompiliuoti į vieną nuorodą. Peržiūrėkite, ar jūsų klaida yra nustatyta. Žr. Nuoroda: Ką ši klaida reiškia PHP?

display_errors gali būti nustatyta kaip On keliais būdais. Savo kūrimo įrenginyje turite nustatyti vertę redaguodami php.ini failą. Gamybiniame serveryje, jei neįmanoma (ar pageidautina) redaguoti šį failą, pridėkite šias eilutes scenarijaus pradžioje:

 // Turn on all error reporting error_reporting(-1); // Turn off all error reporting error_reporting(0); // Report simple running errors error_reporting(E_ERROR | E_WARNING | E_PARSE); // Reporting E_NOTICE can be good too (to report uninitialized // variables or catch variable name misspellings ...) error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); // Report all errors except E_NOTICE error_reporting(E_ALL  ~E_NOTICE); // Report all PHP errors (see changelog) error_reporting(E_ALL); // Report all PHP errors error_reporting(-1); // Same as error_reporting(E_ALL); ini_set('error_reporting', E_ALL); ini_set('display_errors', 1); ini_set('display_startup_errors', 1); 

Būtinai išvardykite klaidas, kurių negalite išspręsti savo klausime.

Įsitikinkite, kad neslėpiate klaidų naudodami @ sintaksę. Tai nėra gera praktika, ypač vystymosi metu, kai norite pranešti apie klaidas. Iš vadovo :

Įspėjimas!
Šiuo metu „@“ operatoriaus klaidos prefiksas netgi išjungia klaidų ataskaitas dėl kritinių klaidų, kurios nutraukia scenarijaus vykdymą. Be kitų dalykų, tai reiškia, kad jei naudojate „@“ tam tikros funkcijos klaidų slopinimui, o tai nėra arba spausdinama su klaida, scenarijus iškart nustos veikti nepateikdamas priežasties.

Galite greitai pakeisti šį elgesį naudodami set_error_handler("var_dump"); kuri neapdorota spausdina visus klaidos pranešimus, nepriklausomai nuo @decorators arba išjungta „error_reporting“.

Ar PHP yra pažeidžiamas? Kaip apsaugoti savo „PHP“ programą?

Kalbant apie saugumą, jūs negalite užtikrinti savo paraiškos saugumo 100%. 100% saugi programa realaus pasaulio nėra, tačiau galite sumažinti tikimybę, kad jūsų programa bus įsilaužta, laikydamasi toliau pateiktų standartų:

Pirmiau minėtos nuorodos nurodo bendras pažeidžiamumas ir atsakomąsias priemones.

Kaip padaryti, kad mano duomenų bazės užklausos būtų saugios nuo SQL injekcijos?

Trumpai tariant, naudokite parengtus pareiškimus ir vietinius asmenis. Kai negalite, įsitikinkite, kad reikšmės yra teisingai apsaugotos. Kiekviena duomenų bazės sąsaja atitinka tą patį bendrą modelį:

  • Paruoškite SQL, kuriame yra vietos žymenų
  • Susieti PHP kintamuosius su šiais vietos žymenimis
  • Pradėti paruoštą išraišką

Kai kurios sąsajos leidžia praleisti privalomą veiksmą, pateikiant vietinių žymenų pakeitimų sąrašą vykdymo metu. Nuoroda:

Pastaba: senas plėtinys „ext / mysql“ nepalaiko paruoštų pareiškimų. Tai pasenusi PHP 5,5 ir pašalinama PHP 7. Vietoj to naudokite SKVN arba „ MySqli“ .

Taip pat žr

Mano specialūs simboliai įsukti. Kodėl?

Turite žinoti, kas yra simbolių rinkiniai, ir naudoti savo koduotes teisingai. Kai kurie ištekliai, kurie padės jums pradėti šią temą:

„Antraštės jau išsiųstos ...“

Prieš pateikdami savo header() skambutį, išleidžiate turinį ir paleiskite numatytąjį PHP Content-type: text/html antraštę. Tai gali būti keletas būdų. Patikrinkite atsitiktinį echo ar print , tarpus prieš ir po <?php ir ?> Žymių arba Unicode specifikacijų. Apsvarstykite galimybę naudoti išvesties buferį. Daugeliu scenarijų nereikia įtraukti pabaigos ?> Ir problema lengvai išsprendžiama ištrinant galutinį žymą ?> Iš failų. Žr. Kaip išspręsti klaidą „PHP“ jau buvo išsiųsta antraštės .

Kaip apsaugoti el. Paštą nuo el. Pašto ?

Patvirtinkite savo indėlį! Naujausiose PHP versijose paštas () nebėra pažeidžiamas įterpiant el. Antraštės antraštę per temą arba gavėją, nes jis pašalina visus valdymo simbolius, tačiau galite įsitikinti, kad gavėjų sąraše nėra kelių adresų, jei tai nėra tai, ko norite. Jei leisite vartotojui nurodyti pranešimo korpuso dalį, taip pat turite patikrinti arba dezinfekuoti, kad jis negalėtų, pavyzdžiui, pridėti naujų MIME dalių arba jas užbaigti per anksti. Todėl labai rekomenduojama naudoti biblioteką MIME pranešimų kūrimui. Žr., Pvz., PEAR Mail_Mime .

Ar galiu apsaugoti savo PHP kodą nuo vagystės? Jei taip, kaip?

Nėra veiksmingo techninio sprendimo, kaip apsaugoti, užšifruoti ar užšifruoti PHP kodą. Yra daug produktų, kurie siūlo tam tikrą apsaugos lygį, pvz., „ IonCube“ (komercinis) ir „ Zend Guard“ (komercinis), tačiau visi gali būti sulaužyti su laiku ir pastangomis. Jūsų geriausias variantas nėra techninis sprendimas, o teisinis sprendimas kaip licencijos sutartis.

Kaip galiu rašyti eilutes PHP?

Yra keturi būdai, kaip parašyti styginių literatūrą PHP . Kiekvienas metodas yra šiek tiek skirtingas, kalbant apie evakuacijos sekas ir styginių interpoliaciją. Например, '\n' - это буквенная двухсимвольная строка с символами \ и n , а "\n" - это односимвольная строка с символом LF . Все они выдают значения типа string (который на самом деле является байтовым массивом, так как он полностью не кодируется).

Когда/почему функция mail() не работает?

Функция mail() зависит от правильной конфигурации сервера. Посмотрите, что функция PHP mail не завершает отправку электронной почты по списку распространенных причин. Затем исследуйте PHPMailer/SwiftMailer как альтернативу.

Что означает конкретный оператор в PHP?

Посмотрите эту вики-страницу сообщества для полезного списка.

Как мне разобрать HTML/XML с PHP?

Посмотрите, как вы анализируете и обрабатываете HTML/XML в PHP? и Лучший XML-парсер для PHP .

Как включить отчеты об ошибках, чтобы найти источник проблем?

Посмотрите производственный сервер PHP - включите сообщения об ошибках . Обычно вам нужно просто error_reporting(E_ALL); вверху вашего скрипта, если только там нет ошибки разбора. Как очень грубый метод set_error_handler("var_dump"); переопределяет все необычные параметры отключения. А в случае внутренней ошибки сервера HTTP 500 или совершенно пустой страницы, вам часто нужно сначала заглянуть в веб-серверы error.log .

Как исправить сообщения "eregi is deprecated" и перейти на preg_match() ?

См. Как я могу преобразовать выражения ereg в preg в PHP? ,

Почему mysqli_fetch_array() или mysqli_fetch_assoc() возвращают только одну строку?

Многие функции выборки СУБД должны вызываться в цикле, пока ресурс результата запроса не вернет FALSE .

зарезервированного ключевого слова MySQL в качестве имени таблицы или столбца, не заключая его в обратные ноты.  Pavyzdžiui: 

 $query = 'SELECT order FROM my_table'; // This will fail $query = 'SELECT 'order' FROM my_table'; //This will work 

Используйте echo mysqli_error($link) для просмотра сообщения об ошибке, сгенерированного MySQL.

Как мне подтвердить адрес электронной почты?

Просто используйте filter_var() с фильтром FILTER_VALIDATE_EMAIL . См. Как проверить адрес электронной почты в PHP .

Как мне декодировать и извлекать данные JSON?

См. Как извлечь данные из JSON с помощью PHP? и примеры json_decode() в руководстве о том, как пройти через полученные структуры объекта/массива.

Почему моя назначенная переменная сеанса не появляется в следующем сценарии?

Переменные сеанса требуют запуска сеанса. Пожалуйста, просмотрите страницу руководства для session_start() .

Кроме того, файлы cookie должны быть включены, как описано на этой странице Google .

Что означает мое сообщение об ошибке: