Fișierul php este lansat. Rulați scriptul PHP în consolă

Acest articol prevede ghid pas cu pas la instalarea PHP pentru colaborare cu serverul Apache HTTP pe Windows. Această procedură a fost testată atât pe Windows XP, cât și pe Vista. Se presupune că ați finalizat deja instalarea Apache.

PHP 5 pași de configurare

1. Descărcați PHP 5

Înainte de a începe, descărcați o copie a PHP 5 de pe pagini de descărcare. Descărcați pachetul securizat VC6 din secțiunea „Windows Binaries” - adică nu descărcați programul de instalare. De exemplu, selectați pachetul marcat cu „ Pachetul zip PHP 5.2.5", dacă este activat acest moment Versiune curentă — 5.2.5 .

Notă: Vă rugăm să rețineți că nu am testat procedura de mai jos cu versiunile PHP 5.3, doar cu 5.2.5 care a fost ultima versiune la momentul scrierii. Teoretic, aceiași pași ar trebui efectuati pentru Instalări PHP 7 .

2. Instalați PHP 5

Creați un folder pe hard disk pentru PHP. Sugerez c:php, deși ați putea folosi un alt nume de folder și locație. Personal, prefer să nu folosesc nume cu spații.

Extrageți toate fișierele din arhiva descărcată în acest folder. Pentru a face acest lucru, pur și simplu faceți dublu clic pe fișierul zip. Și apoi trageți toate fișierele în folderul c:php.

3. Pentru cei care fac upgrade la pachet: Eliminați vechiul fișier PHP.INI din directorul Windows

Dacă faceți upgrade la PHP 5 de la peste versiune veche, accesați directorul Windows, ( de obicei, acesta este c:windows), și ștergeți toate fișierele php.ini pe care le-ați plasat anterior acolo.

4. Configurare PHP

Accesați folderul c:php și creați o copie a fișierului recomandat de php.ini. Nume fișier nou php.ini . Acum ar trebui să aveți un fișier c:phpphp.in cu conținut identic cu fișierul recomandat de c:phpphp.ini.

Notă: Dacă utilizați Apache 1, trebuie să mutați fișierul php.ini în directorul Windows ( c: windows), sau configurați variabilă de mediu PATH pentru a include c:php . Dacă nu știți cum să faceți acest lucru, mutați fișierul php.ini în folderul c:windows. Nu trebuie să faceți acest lucru dacă utilizați Apache 2, deoarece mai târziu vom specifica o directivă în fișierul de configurare Apache 2 cu locația fișierului php.ini.

Pentru a instala PHP pe Windows 7 folosind editor de text (de exemplu, cum ar fi Notepad, care poate fi găsit în secțiunea System din meniul Start)? deschideți fișierul php.ini. Poate fi necesar să faceți următoarele modificări fișierului:

a) Inclusiv etichete scurte de deschidere

Găsiți următoarea linie:

short_open_tag = Dezactivat

Dacă short_open_tag este dezactivat , etichete precum „

Deoarece multe scripturi PHP terțe folosesc „

short_open_tag = Activat

b) Citate magice

Când Apache PHP este instalat în mod implicit, datele primite nu sunt automat slash escape. Dacă doriți ca intrarea să fie prefixată cu o bară oblică inversă (""), de exemplu pentru a reproduce setările de găzduire, găsiți următoarea linie:

magic_quotes_gpc = Dezactivat

si inlocuieste-l cu:

magic_quotes_gpc = Activat

Nu este recomandat să faceți acest lucru dacă acest parametru nu este setat pe găzduire. Chiar și atunci când este setat la Oprit, puteți utiliza în continuare Funcția PHP adaugă bare oblice() pentru a adăuga bare oblice pentru anumite date.

c) Utilizarea variabilelor globale

Un număr de scripturi mai vechi, atunci când sunt executate, presupun că toate datele trimise printr-un formular vor avea automat o variabilă PHP cu același nume. De exemplu, dacă un formular are un câmp de intrare numit „ceva”, scripturile PHP mai vechi presupun că procesorul PHP va crea automat o variabilă numită $something care conține valoarea specificată prin acel câmp.

Dacă utilizați astfel de scripturi, trebuie să găsiți următoarea linie:

register_globals = Dezactivat

si schimba-l in:

register_globals = Activat

Avertisment: Când instalați PHP pe Windows, nu faceți acest lucru decât dacă aveți scripturi terțe care necesită ca acest lucru să funcționeze. Când scrieți scripturi noi, cel mai bine este să presupuneți întotdeauna că elementul register_globals este setat la " Off«.

d) Afișarea erorilor

Pe un site live, erorile din script sunt de obicei înregistrate fără să apară în fișierul de eroare PHP. Dar pe o mașină locală, în timp ce testați și depanați un script PHP, este mai convenabil să trimiteți mesaje de eroare atunci când sunt detectate direct în fereastra browserului. În acest fel, nu veți rata erori chiar dacă uitați să verificați fișierul jurnal de erori.

Pentru ca PHP să afișeze mesaje de eroare direct în fereastra browserului, căutați următoarea linie:

display_errors = Dezactivat

si schimba-l in:

display_errors = Activat

Această setare ar trebui să fie întotdeauna setată la Off pe un site care rulează.

e) Calea sesiunii

Dacă scriptul folosește sesiuni, găsiți următoarea linie:

;session.save_path = "/tmp"

session.save_path specifică folderul în care PHP salvează fișierele de sesiune. Deoarece folderul /tmp nu există în Windows, trebuie să instalați un alt folder. O modalitate este de a crea un folder numit c:tmp ( așa cum am creat anterior, c:php) și specificați acest folder pentru acest parametru. Dacă faceți acest lucru, modificați această linie după cum urmează:

session.save_path = "c:tmp"

Rețineți că, pe lângă schimbarea căii, am eliminat și prefixul punct și virgulă (";") din șir.

De asemenea, puteți utiliza folderul TEMP curent de pe computer. Sau creați un folder tmp în directorul dvs. PHP, cum ar fi c:phptmp și setați fișierul de configurare în consecință. Pot fi multe opțiuni posibile. Dacă nu vă puteți decide pe care să alegeți, trebuie doar să creați c:php și să faceți așa cum am spus mai sus.

f) Server SMTP

Dacă ați instalat PHP 55, dacă scriptul dvs. folosește funcția mail() și doriți ca funcția să trimită cu succes e-mail pe mașina dvs. locală, căutați următoarea secțiune:

; Numai pentru Win32. SMTP = localhost smtp_port = 25 ; Numai pentru Win32. ;sendmail_from= [email protected]

Schimbați-l pentru a include adresa serverului SMTP și contul de e-mail. De exemplu, dacă dvs Server SMTP mail.example.com, și adresa de e-mail [email protected], schimba codul astfel:

SMTP = mail.example.com smtp_port = 25 sendmail_from = [email protected]

Vă rugăm să rețineți că după aceasta, atunci când scriptul încearcă să folosească funcția mail(), va trebui să se conecteze la ISP-ul dumneavoastră pentru ca acesta să funcționeze cu succes. Dacă nu modificați liniile de mai sus și încercați să utilizați funcția mail() într-un script, funcția va returna un cod de eroare și va afișa un mesaj de eroare.

Cum se configurează Apache pentru PHP 5

Există două moduri de a instala Apache PHP. În primul rând: setați-l pentru a descărca interpret PHP ca modul Apache. În al doilea rând: configurați-l să ruleze interpretul ca un binar CGI. Trebuie folosit doar unul dintre ele. Selectați metoda modulului dacă PHP este instalat și pe găzduire, cum ar fi modulul Apache, sau utilizați metoda CGI dacă este implementată pe găzduire.

a) Rularea PHP 5 ca modul Apache

Pentru a configura Apache să încarce PHP ca modul pentru analizarea scripturilor PHP, utilizați un editor de text ASCII pentru a deschide fișierul de configurare Apache, httpd.conf.

Dacă utilizați Apache 1.x, fișierul se află în folder c:Program FilesApache GroupApacheconf. Utilizatorii Apache 2.0.x îl pot găsi în folder C:Program FilesApache GroupApache2conf, iar utilizatorii Apache 2.2.x sunt în folder C:Fișiere de programApache Software FoundationApache2.2conf. De obicei, se află în folderul conf al directorului în care este instalat Apache.

Localizați secțiunea fișierului cu instrucțiuni LoadModule. Declarațiile precedate de simbolul hash „#” sunt considerate comentate.

Dacă utilizați Apache 1.x, adăugați următoarea linie după toate instrucțiunile LoadModule:

LoadModule php5_module „c:/php/php5apache.dll”

Dacă utilizați Apache 2.0.x, adăugați următoarea linie după toate instrucțiunile LoadModule:

LoadModule php5_module „c:/php/php5apache2.dll”

Dacă utilizați Apache 2.2.x, adăugați următoarea linie:

LoadModule php5_module „c:/php/php5apache2_2.dll”

Rețineți că acest exemplu de instalare PHP folosește caracterul bară oblică ("/") în loc de bara oblică tradițională Windows (""). Aceasta nu este o greșeală de tipar.

Dacă utilizați Apache 1.x, găsiți seria de instrucțiuni „AddModule” și adăugați următoarele după toate rândurile.

AddModule mod_php5.c

Apoi găsiți blocul AddType în fișier și adăugați următoarea linie după ultima instrucțiune AddType. Acest lucru trebuie făcut indiferent de versiunea de Apache pe care o utilizați. Pentru Apache 2.2.x trebuie să găsiți liniile AddType în secțiune . Adăugați o linie chiar înainte de închiderepentru aceasta sectiune.

Dacă aveți nevoie de suport pentru alte tipuri de fișiere, cum ar fi „.phtml”, adăugați-le la listă, de exemplu, astfel:

Pentru cei care folosesc una dintre versiunile Apache 2, trebuie să specificați locația fișierului ini PHP. Adăugați următoarea linie la sfârșitul httpd.conf.

PHPIniDir „c:/php”

Dacă ați folosit un director diferit, va trebui să schimbați c:/php în calea corectă. Nu uitați să utilizați o bară oblică ("/").

Dacă utilizați Apache 1, ați plasat deja fișierul php.ini în folderul Windows sau undeva în PATH. Deci PHP va trebui să-l găsească singur.

Rularea PHP 5 ca un binar CGI

Dacă ați configurat PHP 5 să se încarce ca modul Apache, puteți sări peste această secțiune. Este destinat celor care doresc să configureze PHP să ruleze ca un binar CGI.

Procedura pentru a face acest lucru la instalarea PHP 7 este aceeași atât pentru Apache 1.x, cât și pentru toate versiunile din seria 2.x.

Localizați partea din fișierul de configurare Apache care conține secțiunea ScriptAlias. Adăugați linia de mai jos imediat după linia ScriptAlias ​​pentru " cgi-bin" Dacă utilizați Apache 2.2.x, asigurați-vă că linia este înainte de a închidepentru sectiune .

Notă: Dacă ați instalat PHP într-o altă locație, de exemplu c:Program Filesphp , trebuie să specificați calea corespunzătoare. c:/php/ (de exemplu, c:Program Filesphp). Nu uitați că aici folosim slash-ul înainte ("/") în loc de backslash-ul Windows ("").

ScriptAlias ​​​​/php/ "c:/php/"

Apache trebuie să configureze tipul MIME PHP. Găsiți blocul de comentarii AddType care explică utilizarea acestuia și adăugați următoarea linie dedesubt. Pentru Apache 2.2.x, găsiți liniile AddType sub . Adăugați linia de mai jos chiar înainte de închidere pentru aceasta sectiune.

Aplicația AddType/x-httpd-php .php

Ca și în cazul instalării PHP ca modul Apache, puteți adăuga orice extensie pentru ca Apache să le recunoască ca scripturi PHP, de exemplu:

Aplicație AddType/x-httpd-php .phtml

Apoi trebuie să spuneți serverului să execute executabilul PHP de fiecare dată când întâlnește un script PHP. Adăugați următorul cod în fișier, de exemplu după un bloc de comentarii care explică „ Acțiune«.

Dacă utilizați Apache 2.2.x, adăugați codul imediat după instrucțiunea AddType descrisă mai sus; Apache 2.2.x nu are un bloc de comentarii " Acțiune«.

Aplicație de acțiune/x-httpd-php „/php/php-cgi.exe”

Notă: Partea „/php/” va fi recunoscută ca ScriptAlias, un fel de macrocomandă care va fi extinsă de Apache la „c:/php/” ( sau „c:/Program Files/php/” dacă ați instalat PHP acolo). Cu alte cuvinte, nu pune calea „c:/php/php.exe” sau „c:/Fișiere de program/php/php.exe”, dar utilizați „/php/php-cgi.exe” .

Dacă utilizați Apache 2.2.x, găsiți următoarea secțiune în fișierul dvs. httpd.conf:

Adăugați rândurile de mai jos imediat după secțiunea pe care tocmai ați găsit-o.

AllowOverride Niciunul Opțiuni Nici unul Comanda permite, refuza Permite tuturor

c) Setarea paginii de index implicite

Această secțiune se aplică opțiunii de instalare PHP pe Windows atât ca modul Apache, cât și ca binar CGI.

Dacă creați un fișier index.php și doriți ca Apache să îl încarce ca pagina de pornire a site-ului, va trebui să adăugați o altă linie la fișierul httpd.conf. Găsiți linia care începe cu " DirectoryIndex", si adauga " index.php" la lista de fișiere. De exemplu, dacă ați avut cod ca acesta:

DirectoryIndex index.html

schimba-l in:

DirectoryIndex index.php index.html

Data viitoare când vă conectați la serverul web printr-un nume de director precum „ gazdă locală" sau " localhost/director/", Apache va trimite toate scripturile din index.php sau conținutul fișierului index.html dacă index.php nu este disponibil.

Reporniți serverul web Apache

Reporniți serverul Apache. Acest lucru este necesar pentru ca Apache să citească noile directive de configurare PHP pe care le-ați plasat în fișierul httpd.conf. Serverul Apache 2.2 poate fi repornit făcând dublu clic pe pictograma Apache Service Monitor din bara de activități și făcând clic pe butonul „Repornire” din fereastra care apare.

Testarea instalării PHP

După instalarea PHP 5 5 sau o altă versiune a limbii, creați un fișier php cu următoarea linie:

Salvați un fișier numit test.php în directorul Apache htdocs. Dacă utilizați Notepad, asigurați-vă că salvați numele " test.php„ cu ghilimele. În caz contrar, programul va adăuga automat extensia .txt.

Deschideți acest fișier în browser introducând „localhost/test.php” (fără ghilimele) în bara de adrese. Nu deschideți fișierul direct prin Explorer - veți vedea doar codul pe care l-ați introdus mai devreme. Trebuie să utilizați adresa URL de mai sus pentru ca browserul să încerce să acceseze serverul web Apache, care rulează PHP pentru a interpreta scriptul.

Dacă totul merge bine, veți vedea o pagină cu informații despre configurarea PHP. Felicitări - ați instalat cu succes PHP și ați configurat Apache să lucreze cu el. Puteți încărca același fișier test.php pe găzduirea dvs. și îl puteți rula acolo pentru a afla cum a configurat PHP găzduirea și încercați să reproduceți aceste setări pe mașina dvs.

Dacă acest lucru nu funcționează, verificați dacă instalarea PHP sau instalarea Apache generează erori. Pentru a face acest lucru, deschideți o fereastră de prompt de comandă și rulați php-cgi.exe pe fișierul test.php, de exemplu c:phpphp-cgi test.php .

Dacă ați apelat PHP din linia de comandă și ați văzut un fișier HTML mare cu toate informațiile de configurare PHP, atunci PHP este configurat corect. Problema este probabil legată de configurația Apache. Asigurați-vă că reporniți Apache după ce ați făcut modificări de configurare și că ați configurat corect serverul web.

Începând cu versiunea 4.3, PHP acceptă un nou tip SAPI (Server Application Programming Interface) numit CLI, ceea ce înseamnă Linia de comandă. După cum sugerează și numele, scopul principal al acestui tip SAPI este de a dezvolta aplicații shell (sau desktop) folosind PHP. Există diferențe foarte minore între CLI SAPI și alte SAPI, care vor fi discutate în continuare în acest capitol.

SAPI CLI a fost lansat pentru prima dată cu PHP 4.2.0, dar pe atunci era un experiment și trebuia activat în mod explicit cu --enable-cli la pornire./configure. Începând cu PHP 4.3.0, SAPI CLI nu mai este experimental și Mereuîncorporat și instalat ca un executabil binar php (numit php.exe pe Windows).

Diferențe semnificative între CLI SAPI și alte SAPI:

    Spre deosebire de CGI SAPI, niciun antet nu este scris în ieșire.

    Deși CGI SAPI are o modalitate de a suprima antetele HTTP, nu există un comutator echivalent pentru a le activa în CLI SAPI.

    Există anumite directive php.ini care sunt suprascrise în CLI SAPI deoarece nu au sens într-un mediu shell:

Tabelul 24-1. Suprascrierea directivelor php.ini
DirectivăCLI SAPI - valoare implicităUn comentariu
html_errors FALS Poate fi destul de dificil să citiți un mesaj de eroare în shell-ul plin cu toate acele etichete HTML fără sens, deci valoarea implicită a acestei directive este FALS .
implicit_flush ADEVĂRAT Este de dorit ca orice concluzie din imprimare() , ecou() iar compania a fost imediat scrisă la ieșire, mai degrabă decât trimisă într-un buffer. Puteți utiliza în continuare tamponarea de ieșire dacă doriți să lucrați cu ieșirea standard.
timp_max_execuție0 (nelimitat) Datorită posibilităților infinite de utilizare a PHP într-un mediu shell, nu există timp maxim de execuție. În timp ce aplicațiile scrise pentru web se execută în câteva fracțiuni de secundă, aplicațiile shell încearcă să dureze cât mai mult posibil.
register_argc_argv ADEVĂRAT Variabilele globale PHP $argc (numărul de argumente transmise aplicației) și $argv (matricea argumentelor curente) sunt întotdeauna înregistrate și completate cu valorile corespunzătoare atunci când se utilizează SAPI CLI.

Notă: Aceste directive nu pot fi inițializate cu o altă valoare din fișierul de configurare php.ini sau cu un fișier special (dacă este specificat). Aceasta este oarecum o limitare, deoarece aceste valori implicite sunt aplicate după ce toate fișierele de configurare au fost analizate. Cu toate acestea, valoarea lor poate fi modificată în timpul execuției (ceea ce nu are sens pentru toate celelalte directive, de exemplu, pentru register_argc_argv).

    Este mai ușor să lucrați într-un mediu shell atunci când sunt definite următoarele constante:

    Tabelul 24-2. Constante specifice CLI
    ConstantDescriere
    STDIN Fluxul a fost deja deschis în stdin. Îl protejează pe cel care îl deschide

    Nu trebuie să închideți în mod explicit aceste fluxuri; PHP face acest lucru automat.

  • CLI SAPI Nu schimbă directorul curent în directorul scriptului executabil!

    Exemplu care arată diferența dintre CGI SAPI:

    Când se utilizează versiunea CGI, rezultatul va fi:

    Acest lucru oferă o mai mare flexibilitate atunci când scrieți utilități de linie de comandă în PHP.

    Notă: CGI SAPI acceptă comportamentul CLI SAPI folosind comutatorul -C atunci când rulează din linia de comandă.

  • O listă de opțiuni de linie de comandă pentru un executabil PHP poate fi obținută în orice moment prin rularea PHP cu comutatorul -h:

    CLI SAPI are trei moduri diferite de a executa codul PHP:

    1. Spuneți PHP să execute un anumit fișier.

      O atenție deosebită trebuie acordată la înlocuirea variabilelor shell și la utilizarea ghilimelelor.

      Notă: Privește cu atenție exemplul, nu există etichete de început și de sfârșit! Comutatorul -r pur și simplu nu are nevoie de ele. Folosirea lor în acest caz va duce la o eroare de analiză.

    2. Furnizați codul PHP pentru a fi executat prin intrarea standard (stdin).

      Acest lucru vă permite să creați în mod dinamic cod PHP și să-l transmiteți executabilului, așa cum se arată în acest exemplu (conceput):

      $une_aplicație | unele_filtru | php | sort -u >final_output.txt

    Nu puteți combina aceste trei metode atunci când executați cod.

    Ca și în cazul oricărei aplicații shell, nu numai PHP-ul în sine, ci și scripturile dvs. PHP acceptă argumente. Numărul de argumente transmise scriptului în PHP nu este limitat (shell-ul are o limită a numărului de caractere trecute).
    Argumentele transmise scriptului dumneavoastră sunt disponibile prin intermediul matricei globale $argv. Indicele zero conține întotdeauna numele scriptului (care este un caracter - în cazul în care codul PHP provine de la intrarea standard sau folosind comutatorul -r din linia de comandă).
    A doua variabilă globală înregistrată este $argc, care conține numărul de elemente din tabloul $argv (și Nu numărul de argumente transmise scriptului).

    Dacă argumentele pe care doriți să le transmiteți scriptului nu încep cu un caracter cratimă (-), nu este nimic special de observat. Trecerea unui argument care începe cu - la script va crea probleme deoarece PHP crede că trebuie să le gestioneze singur. Pentru a preveni acest lucru, utilizați -- ca separator de argumente de listă. Odată ce argumentul este analizat de PHP, fiecare argument ulterior este transmis scriptului dumneavoastră neschimbat/neparsat.

    Cu toate acestea, iată o altă modalitate de a utiliza PHP pentru scripting shell. Puteți scrie un script a cărui primă linie începe cu #!/usr/bin/php , urmat de codul PHP normal conținut între etichetele de început și de sfârșit PHP și atributele de execuție ale fișierului setate corespunzător. În acest fel, poate fi executat ca un shell normal sau un script perl:

    După cum puteți vedea, nu trebuie să faceți nimic special când treceți parametri unui script care începe cu - .

    Tabelul 24-3. Opțiuni pentru linia de comandă
    OpțiuneDescriere
    -s

    Afișează sintaxa color.

    Această opțiune folosește mecanismul intern de analiză al fișierului, produce o versiune HTML colorată a acestuia și o scrie în ieșirea standard. Vă rugăm să rețineți că numai un bloc [...] de etichete HTML este generat fără antet HTML.

    Notă:

    -w

    Afișați textul original fără comentarii sau spații.

    Notă: Această opțiune nu funcționează împreună cu opțiunea -r.

    -f

    Analizează și execută fișierul dat. Acest comutator este opțional și poate fi omis. Este suficient să furnizați un nume de fișier pentru execuție.

    -v

    Scrie versiunile PHP, PHP SAPI și Zend la ieșirea standard, de exemplu:

    -A

    Rulează PHP interactiv.

    -d

    Această opțiune vă permite să setați o valoare specială pentru fiecare directivă de configurare care este permisă în php.ini. Sintaxa este:

    -e

    Generează informații extinse pentru depanator/profiler.

    -z

    Încarcă extensia Zend. Dacă este dat doar un nume de fișier, PHP încearcă să încarce extensia dată din calea curentă implicită a bibliotecii de pe sistemul dumneavoastră (de obicei specificată ca /etc/ld.so.conf pe sistemele Linux). Transmiterea numelui de fișier cu o cale absolută nu va folosi calea de căutare de sistem a bibliotecii. Un nume de fișier relativ cu informații despre director va spune PHP să încerce să încarce extensia în raport cu directorul curent.

    -l

    Această opțiune oferă o modalitate convenabilă de a efectua verificarea sintaxei pe un anumit cod PHP. Dacă are succes, textul Fără erori de sintaxă detectate în este scris în ieșirea standard, iar codul de returnare a shell-ului va fi 0 . Dacă nu reușește, textul Errors parsing împreună cu mesajul de eroare intern al parserului este scris la ieșirea standard, iar codul de returnare al shell-ului va fi 255 .

    Această opțiune nu va găsi erori fatale (cum ar fi funcții nedefinite). Folosiți -f dacă doriți să verificați și erorile fatale.

    Notă: Această opțiune nu funcționează împreună cu -r .

    -m

    Folosind această opțiune, PHP imprimă modulele PHP și Zend încorporate (și încărcate):

    $ php -m xml tokenizer sesiune standard posix pcre supraîncărcare mysql mbstring ctype
    -iAceastă opțiune de linie de comandă provoacă phpinfo()și imprimă rezultatele. Dacă PHP nu funcționează corect, vă recomandăm să rulați php -i și să vedeți dacă mesajele de eroare sunt tipărite înainte sau în locul tabelelor de informații. Rețineți că rezultatul va fi în HTML și, prin urmare, destul de amestecat.
    -r

    Această opțiune vă permite să rulați PHP direct pe linia de comandă. Etichete de început și de sfârșit PHP () Nu e necesarși provoacă erori de analiză.

    Notă: Trebuie avut grijă când utilizați această formă de PHP pentru a vă asigura că nu există conflicte cu substituțiile variabilelor din linia de comandă efectuate de shell.

    Un exemplu care produce o eroare de parser:

    Este corect să folosiți ghilimele simple " . Variabilele șir închise între ghilimele simple nu sunt extinse atunci când rulați sh/bash.

    Executabilul PHP poate fi folosit pentru a rula scripturi PHP complet independente de serverul web.
    Dacă rulați Unix, ar trebui să adăugați o primă linie specială la scripturile dvs. PHP și să le faceți executabile, astfel încât sistemul să știe ce program ar trebui să execute acele scripturi.
    Pe Windows, puteți asocia php.exe cu opțiunea de a face dublu clic pe fișierele .php sau puteți crea un fișier batch (.bat) pentru a rula scriptul prin PHP. O linie adăugată în partea de sus a unui script pentru a rula pe Unix va funcționa bine pe Windows, astfel încât să puteți scrie programe pe mai multe platforme în acest fel. Mai jos este un exemplu de program PHP simplu care trebuie executat din linia de comandă.

    Aici folosim o primă linie specială pentru a indica faptul că acest fișier ar trebui să fie rulat în PHP. Aici lucrăm cu versiunea CLI, astfel încât anteturile HTTP nu sunt afișate. Există două variabile pe care le puteți utiliza când scrieți aplicații PHP cu linia de comandă: $argc și $argv. Primul este numărul de argumente plus 1 (numele scriptului care rulează). Al doilea este o matrice de argumente, începând cu numele scriptului cu indexul zero ($argv).

    Verificăm dacă există mai puțin sau mai mult de un argument. De asemenea, dacă argumentul a fost --help , -help , -h sau -? , imprimăm un mesaj de ajutor, afișând numele scriptului în mod dinamic. Dacă am primit orice alt argument, îl vom repeta.

    Dacă doriți să rulați scriptul de mai sus pe Unix, trebuie să îl faceți executabil și să îl numiți pur și simplu ca script.php echothis sau script.php -h . Pe Windows puteți crea un fișier batch pentru a efectua această sarcină:

    Presupunând că ați numit programul script.php și că php.exe dvs. se află în c:\php\php.exe , acest fișier batch îl va rula cu opțiunile pe care le-ați adăugat: script.bat echothis sau script.bat -h .

    Consultați, de asemenea, documentația extensiei Readline pentru caracteristicile pe care le puteți utiliza pentru a vă îmbunătăți aplicația PHP de linie de comandă.

Am decis să dedic acest articol tuturor celor care încep să studieze PHP pentru că toată lumea primește aceeași eroare. Nu știu de ce o permit, dar o fac tot timpul. Voi spune fără exagerare că am primit deja aproximativ o sută de întrebări, la care se va răspunde în acest articol. Această eroare este legată de lansare incorectă în PHP.

Așa cum fac aproape toți începătorii:

  1. Crea fișier PHP(Uneori fișier HTML, dar aceștia sunt cei mai începători).
  2. Scrie-l acolo Cod PHP.
  3. Și fac dublu clic pentru a-l deschide în browser.

Rezultatul este că browserul deschide codul, dar nu se grăbește să-l execute. Pur și simplu afișează câteva bucăți de cod în text simplu sau nu afișează nimic.

Greșeala acestei abordări este că elevul nu înțelege asta PHP este un limbaj pe partea de server, nu client. Acest HTML sau JavaScript limbile client, acestea sunt desigur procesate de browser. Dar pentru PHP are nevoie de un interpret. Și acest interpret este lansat de server.

Concluzie: trebuie să rulați cod PHP prin server. Daca ai Denwer, adică prin el.

Acum, cum să rulați cod PHP prin Denwer. Majoritatea începătorilor fac din nou aceeași greșeală. Ei par să facă totul corect, creând folderele necesare, repornind Denwerși se pare că tot ce rămâne este să apelați corect fișierul. Dar aici din nou există o eroare: ei deschid din nou fișierul pur și simplu în browser (fie trăgând fișierul în browser, fie făcând dublu clic). Acest lucru poate fi văzut cu ușurință după adresa din bara de adrese. Va fi ceva de genul: file:///Z:\home\mysite.local\www\script.php.

Și trebuie să-l lansați corect, introducerea adresei gazdei virtuale. Adică, direct în bara de adrese a browserului, introduceți: http://mysite.local/script.php- asta este, acum scriptul va rula și va afișa rezultatul.

Sper că acest articol va ajuta mulți începători care abia încep să învețe PHP.

Există trei moduri diferite de a rula cod PHP în CLI SAPI:

    Specificarea unui anumit fișier de rulat.

    $ php my_script.php $ php -f my_script.php

    Ambele metode (cu specificarea opțiunii -f sau fără) va rula fișierul my_script.php. Nu există restricții cu privire la ce fișier să ruleze și nu este necesar ca scripturile PHP să aibă extensia .php.

    cometariu:

    Dacă trebuie să transmiteți argumente scriptului, atunci când utilizați opțiunea -f primul argument ar trebui să fie -- .

  1. Transmite codul PHP direct pe linia de comandă.

    $ php -r "print_r(get_defined_constants());"

    Trebuie să fiți deosebit de atenți când utilizați această metodă, deoarece înlocuirea variabilelor de tip shell poate apărea atunci când sunt folosite ghilimele duble.

    cometariu:

    Citiți cu atenție exemplul: nu există etichete de deschidere sau de închidere! Opțiune -r pur si simplu nu are nevoie de ele. Folosirea acestora va avea ca rezultat o eroare de analiză.

  2. Transmite codul PHP care rulează prin intrarea standard ( stdin).

    Acest lucru oferă capacitatea puternică de a crea cod PHP și de a-l alimenta într-un fișier de pornire, așa cum se arată în acest exemplu (fictiv):

    $une_aplicație | unele_filtru | php | sort -u > final_output.txt

Nu puteți combina niciuna dintre aceste trei moduri de a rula codul.

Ca orice altă aplicație de consolă, un binar PHP acceptă argumente, dar un script PHP poate primi și argumente. PHP nu limitează numărul de argumente transmise scriptului (shell-ul consolei stabilește un anumit prag pentru numărul de caractere care pot fi trecute; această limită este de obicei suficientă). Argumentele transmise sunt disponibile în tabloul global $argv . Primul index (zero) conține întotdeauna numele scriptului apelat din linia de comandă. Vă rugăm să rețineți că dacă codul este apelat din mers din linia de comandă folosind opțiunea -r, valoarea lui $argv va fi pur și simplu o cratimă ( - ). Același lucru este valabil și pentru codul transmis de la STDIN.

A doua variabilă globală înregistrată este $argc, care conține numărul de elemente din tabloul $argv ((și Nu numărul de argumente transmise scriptului).

Dacă argumentele transmise nu încep cu caracterul - , atunci nu ar trebui să existe probleme speciale. Un argument transmis scriptului care începe cu - va crea probleme deoarece PHP va decide că ar trebui să se ocupe singur. Pentru a preveni acest comportament, utilizați un delimitator de listă de argumente -- . Odată ce acest delimitator este citit de PHP, toate argumentele ulterioare vor fi trecute neatins la script.

# Această comandă nu va rula acest cod, dar va afișa informații despre utilizarea PHP $ php -r "var_dump($argv);" -h Utilizare: php [-f] [...] # Această comandă va transmite argumentul „-h” scriptului, împiedicând afișarea ajutorului PHP $ php -r „var_dump($argv);” -- -h array(2) ( => string(1) "-" => string(2) "-h" )

Cu toate acestea, pe sistemele Unix există o altă modalitate de a folosi PHP pentru scripturi de consolă. Puteți scrie un script a cărui primă linie începe cu #!/usr/bin/php(sau altă cale corectă către fișierul binar PHP CLI). După această linie, puteți plasa cod PHP obișnuit, inclus în etichetele de deschidere și de închidere PHP. De îndată ce atributele de lansare corecte sunt setate pentru fișier (de exemplu, testul chmod +x), scriptul poate fi rulat ca o consolă obișnuită sau ca script perl:

Exemplul #1 Rularea unui script PHP ca script de consolă

#!/usr/bin/php
var_dump ($argv);
?>

Presupunând că acest fișier se numește test și se află în directorul curent, puteți face următoarele:

$ chmod +x test $ ./test -h -- foo array(4) ( => string(6) "./test" => string(2) "-h" => string(2) "--" => șir (3) „foo” )

După cum puteți vedea, în acest caz nu trebuie să vă faceți griji cu privire la trecerea parametrilor care încep cu - .

Executabilul PHP poate fi folosit pentru a rula scripturi PHP independent de serverul web. În cazul lucrului pe un sistem asemănător Unix, trebuie să adăugați o linie specială la toate scripturile #! (numit și „shebang”) la începutul fișierului și faceți-le executabile pentru a indica ce program ar trebui să proceseze aceste scripturi. Pe platformele Windows, puteți aloca un handler php.exe pentru fișierele cu extensiile .php sau creați un fișier batch (.bat) pentru a rula scripturi folosind PHP. Linia adăugată la începutul scriptului pentru sistemele Unix nu afectează funcționarea acestora pe sistemul de operare Windows, așa că pot fi create scripturi multiplatformă. Mai jos este un exemplu simplu de script executat din linia de comandă:

Exemplul #2 Script conceput pentru a fi rulat din linia de comandă (script.php)

#!/usr/bin/php

Dacă ($argc != 2 || în_array ($argv [ 1 ], array("--help" , "-help" , "-h" , "-?" ))) (
?>

Acesta este un script de consolă PHP care ia un singur argument.

Utilizare:

) altfel (
echo $argv [ 1 ];
}
?>

Scriptul de mai sus include o linie specială Unix care indică faptul că ar trebui să fie rulat folosind PHP. Lucrăm cu versiunea CLI, așa că nu va fi afișat niciun antet HTTP.

Exemplul de mai sus verifică și numărul de argumente transmise. În cazul în care există mai mult sau mai puțin de unul, și, de asemenea, în cazul în care argumentul trecut a fost --Ajutor , -Ajutor , -h sau -? , un mesaj de ajutor este tipărit folosind $argv , care conține numele scriptului care este executat. În caz contrar, argumentul primit este pur și simplu tipărit.

Pentru a rula exemplul de mai sus pe un sistem Unix, trebuie să îl faceți executabil și pur și simplu să îl executați în consolă script.php echothis sau script.php -h. Pe un sistem Windows, puteți crea un fișier batch:

Exemplul #3 Fișier batch pentru a rula un script PHP din linia de comandă (script.bat)

@echo OFF „C:\php\php.exe” script.php %*

Presupunând că scriptul se numește script.php și calea completă către CLI php.exe este C:\php\php.exe, fișierul batch dat va rula scriptul cu parametrii trecuți: script.bat echothis sau script.bat -h.

De asemenea, puteți verifica extensia Readline, care poate fi folosită pentru a vă îmbunătăți scriptul de consolă PHP.

Pe Windows, PHP poate fi configurat să ruleze fără a fi nevoie să specificați C:\php\php.exe și extensia .php. Acest subiect este descris mai detaliat în secțiune

PHP este unul dintre cele mai populare limbaje de programare de pe web. Își datorează popularitatea în primul rând ușurinței de învățare și versatilității. Însă domeniul de aplicare al acesteia nu se termină doar cu crearea de pagini web simple. Scripturile PHP pot fi rulate din linia de comandă, ceea ce vă permite să scrieți aplicații de consolă cu drepturi depline pe el.

Cum să rulezi un script php din linia de comandă?

Indiferent de sistemul de operare pe care îl utilizați, pentru a rula scriptul trebuie să tastați următoarea comandă în consolă:

Script PHP.php

Sistemul de operare dvs. poate afișa un mesaj că comanda php este necunoscută. În acest caz, și dacă sunteți sigur că interpretul PHP în sine este instalat corect, specificarea căii complete către interpret atunci când rulați scriptul va ajuta.

C:\php\php.exe script.php

Pentru sisteme asemănătoare UNIX:

/usr/bin/php script.php

Vă rugăm să rețineți că calea către interpretul PHP de pe sistemul dumneavoastră poate fi diferită, așa că trebuie luat în considerare și acest lucru. De exemplu, pentru utilizatorii pachetului popular WampServer, calea ar putea fi:

C:\wamp\bin\php\php5.3.8\php.exe

În cele din urmă, pentru a evita să introduceți calea completă de fiecare dată, ar trebui să adăugați calea către interpret la variabila de mediu PATH a sistemului dumneavoastră de operare.

Scriem un script simplu pentru a verifica codul de răspuns al serverului

Pentru a afișa caracteristicile scriptului din linia de comandă, vom scrie o aplicație simplă care va lua un fișier text cu link-uri și va verifica codul de răspuns al serverului pentru fiecare dintre aceste link-uri. Mai mult, vom oferi posibilitatea de a selecta fișierul dorit în mod interactiv, pentru a afla în același timp cum se face acest lucru.

Imediat după lansare, scriptul selectează toate fișierele cu extensia *.txt din folderul fișiere. Apoi afișează această listă utilizatorului în formatul număr => nume și așteaptă ca utilizatorul să introducă numărul fișierului de interes.

Recuperarea tuturor fișierelor prin mască este ușoară; pentru aceasta vom folosi funcția standard glob, dar citirea datelor de pe consolă este puțin mai interesantă. Faptul este că, după rularea scriptului din linia de comandă, trei fluxuri standard sunt deschise în el: pentru ieșire (STDOUT), intrare (STDIN) și erori (STDERR). Indicatorii către aceste fluxuri sunt disponibile pentru script sub formă de constante cu același nume și puteți lucra cu ele în același mod ca, de exemplu, cu fișierele obișnuite. Astfel, pentru a citi date din consolă, pur și simplu citiți linia din fluxul de intrare: fgets(STDIN) .

$fișiere = glob("fișiere/*.txt"); $fișiere sau ieșire ("Fără fișiere de verificat.".PHP_EOL); echo „Fișiere în folder: „.count($fișiere).PHP_EOL; foreach ($fișiere ca $index => $nume) ( echo "[($index)] => ($nume)".PHP_EOL; ) echo "Alege fișierul: "; $alegere = intval(fgets(STDIN));

După ce utilizatorul a făcut selecția și a verificat că selecția este corectă, putem deschide fișierul pentru citire.

Array_key_exists($choice, $fișiere) sau exit(„Fișier greșit selectat.”.PHP_EOL); $fișier = $fișiere[$alegere]; echo „Fișier de procesare „($fișier)...”.PHP_EOL; $start_time = microtime(true); $code_stats = matrice(); $f = fopen($fisier, "r");

Folosind o buclă while, începem să iterăm prin toate liniile din fișier. Șirurile trebuie să fie adrese URL valide, altfel nu vom putea determina codul de răspuns corect al serverului. Anteturile pentru fiecare adresă sunt obținute folosind funcția standard get_headers, iar codul de răspuns se găsește de obicei în prima linie a antetului.

While ($url = trim(fgets($f))) ( $headers = get_headers($url); if (is_array($headers)) ( array_key_exists($headers, $code_stats) sau $code_stats[$headers] = 0 ; $code_stats[$headers]++; echo date("H:i:s")." Cod HTTP "($headers)" pentru adresa URL "($url)"".PHP_EOL; ) else ( array_key_exists ("Necunoscut ", $code_stats) sau $code_stats["Necunoscut"] = 0; $code_stats["Necunoscut"]++; echo date("H:i:s")." Problemă cu adresa URL "($url)"". PHP_EOL; ) ) fclose($f);

Drept urmare, după procesarea fișierului, puteți afișa mici statistici despre cât timp a durat procesarea și ce coduri de răspuns au fost întâlnite și de câte ori.

$timp_trecut = rotund(microtimp(adevărat) - $timp_început, 3); echo „Fișier procesat în ($elapsed_time)s”.PHP_EOL; echo „Statisticile codului sunt:”.PHP_EOL; print_r($code_stats);

Rezultatul unei astfel de aplicații ar putea fi, de exemplu, următorul rezultat:

$ php check.php Fișiere în folder: 1 => fișiere/db.txt Alegeți fișierul: 0 Se procesează fișierul „fișiere/db.txt”... 18:33:43 Cod HTTP „HTTP/1.0 200 OK” pentru url „http://mail.ru/” 18:33:45 Cod HTTP „HTTP/1.1 301 Mutat permanent” pentru adresa URL „http://yandex.ru/” 18:33:46 Cod HTTP „HTTP/1.1 302 Mutat Temporar" pentru adresa URL "http://rambler.ru/" 18:33:47 Cod HTTP "HTTP/1.0 301 Mutat permanent" pentru adresa URL "http://google.ru/" Fișier procesat în 5.558s Statisticile codului sunt: Matrice ( => 1 => 1 => 1 => 1)

concluzii

Asta e, o aplicație de consolă simplă și interactivă în PHP este gata. Nu am vrut să scriu vreun program complet inutil, așa că acest script este potrivit nu numai pentru învățare, ci și pentru utilizare. De exemplu, dacă salvați un sitemap într-un fișier text, scriptul vă va ajuta la identificarea posibilelor erori cu link-uri, iar dacă îl modificați puțin, va indica chiar care dintre ele :).

Aplicația în sine poate fi descărcată.