Kako povezati dodatne biblioteke na PHP skripte. Razumevanje instalacije PHP biblioteke. PHP je već instaliran sa portova

Napomena: Aktivirana je adaptivna verzija stranice koja se automatski prilagođava maloj veličini vašeg pretraživača i skriva neke detalje stranice radi lakšeg čitanja. Uživajte u gledanju!

Dobar dan svim čitaocima bloga Site on!

U poslednja 2 meseca moj rad za kompaniju je usko vezan za čisti PHP (korišćenje okvira i CMS-a je tabu), već sam zaboravio šta je Joomla :) pa bi bilo prikladnije nego ikada da nastavim da pišem više.

Danas ćemo pričati o tome kako funkcionira povezivanje datoteka u PHP-u. Kao što ste možda primijetili, bilo koji mehanizam za web stranicu (Joomla, Wordpress, OpenCart, DLE i sve, sve, sve) se sastoji od hiljada .php (i ne samo php) datoteka i svi oni međusobno komuniciraju, što zapravo formira mjesto radnog mehanizma.

  • Sada zaboravite na motore i zamislite još jedan primjer: imamo mnogo stranica na stranici, svaka od njih ima isti meni, zaglavlje i podnožje stranice. Naravno, nećemo kopirati istu stvar iz datoteke u datoteku, inače bi ispalo da je to drevna HTML stranica iz 90-ih. U najmanju ruku, sve ćemo podijeliti u 4 fajla:
  • index.php – glavni dio stranice, ovaj fajl će se promijeniti
  • menu.php – meni sajta
  • header.php – zaglavlje stranice

footer.php – podnožje stranice

Pored glavne stranice (index.php), na primjer, možemo imati i stranice sa listom proizvoda (category.php) i stranice samih proizvoda (product.php). Biće zgodno povezati datoteke menu.php, header.php, footer.php na ove stranice. Zahvaljujući ovom pristupu, ako dodamo novu stavku menija, dodaćemo je samo jednom (u menu.php), a ne 3 puta (u index.php, product.php, category.php). Stoga se postavlja pitanje:"Kako priložiti fajl u PHP-u?"

. U ove svrhe postoje 2 uputstva u PHP-u:

I njihovi derivati:

Skrećem vam pažnju da include i require nisu funkcije, to su takozvane jezičke konstrukcije, tako da zagrade nisu potrebne.

Koja je razlika između uključiti i zahtijevati uključiti I zahtijevaju - ovo je apsolutno ista stvar, sa jedinom razlikom da ako postoji greška (na primjer, ako navedena datoteka ne postoji i ne može se uključiti), include će generirati grešku poput Upozorenje

Odnosno, instrukcije zahtjeva su radikalnije i strože. Na vama je da odlučite šta je uglavnom najbolje koristiti, uvek preporučuju da odaberete strožiju opciju, odnosno zahtevam, ali meni je lično prijatnije da ukucate reč uključiti :)

include_once i require_once – rade istu stvar kao uključiti (uključiti datoteku), ali u isto vrijeme se pobrinu da svaki fajl nije uključen više od jednom. Posebno su zgodni za korištenje ako nekoliko ljudi radi na projektu i morate biti sigurni da se određeni fajl ne dodaje nekoliko puta.

pažnja:

include_once uključiti zahtijevaju_jednom– radite sporije i konzumirajte više RAM nego uključiti i zahtijevati. Ovo je logično i zbog činjenice da moraju zapamtiti sve datoteke koje su bile povezane i svaki put kada se povežu provjeriti da li je ovaj fajl već povezan.

Dozvolite mi da jasno ilustrujem kako povezivanje fajlova funkcioniše u PHP-u:

Kada povezujete datoteke (bilo koje, na primjer: html, txt, php, xml, itd.) sa PHP skriptom, njihov sadržaj se glupo ubacuje umjesto uključivanja. Drugim riječima, uključiti (a mislim i zahtijevati, budući da su ista stvar) je isto kao da ste kopirali (CTRL+C) kod odnekud i zalijepili (CTRL+V) u datoteku (na primjer, proizvod. php), a zatim sačuvan i pokrenut kao i obično: http://your_site.net/product.php

Da bismo razlikovali glavne fajlove, kao što je product.php, od onih koje povezujemo sa njim (menu.php, header.php, footer.php), povezani fajlovi se preimenuju ovako: menu.inc.php, header .inc.php , footer.inc.php. Zahvaljujući tome, kada odemo u mapu, odmah ćemo vidjeti gdje su glavne datoteke, a gdje pomoćne.

pažnja:

Ova tehnika (add inc) se koristi samo radi vizualne pogodnosti i ne nosi nikakve funkcionalne razlike. Ali vizualna pogodnost je također vrlo važna, pa pokušajte uvijek sve strukturirati i raditi u istom stilu.

uključiti s povratnom vrijednošću

Zapamti ključna riječ? Dakle, u PHP-u postoji takva divlja stvar kao što je povratak unutar uključivanja. Nikada nisam ovo koristio i nikad nisam vidio da ga drugi koriste, ali moguće je, evo neke.php:

Povežite neki.php:

// Štampa string: PHP ?>

Još neke činjenice

  • Možete uključiti datoteke bilo gdje u PHP kodu, uključujući unutar ;
  • Uključi (include) se pokreće tokom izvršavanja skripte ništa se ne dešava u uključenim datotekama unapred;
  • Uključena datoteka ima isti kao i red u kojem je uključeno deklarirano. To jest, ako je negdje u sredini datoteke, onda globalni opseg, a ako unutar funkcije, onda lokalni. Dozvolite mi da još jednom naglasim da je uključivanje isto kao da ste uzeli i kopirali kod u datoteku umjesto uključivanja.

Hvala svima na pažnji i ugodan vikend!

Igor Guzey

Ovo nije tačna i konačna instrukcija za akciju koristeći ispravne termine i optimalne opcije. Ovo je više dnevnik trenutnog problema.

Zadatak: Dodajte GD2 podršku/modul u PHP

Kao i obično, počinjemo sa treningom lokalni računar, i naravno radi pod Windowsom. Tačnije Windows XP SP2.

Zatim, povežimo GD2 u PHP-u, konfigurisan preko portova ili ručno kompajliran za FreeBSD.

Povezivanje GD2 sa PHP-om na Windows-u
U distribuciji nalazimo:
\php-4.3.9-Win32.zip\php-4.3.9-Win32\extensions\
biblioteka php_gd2.dll, tj. verzija 2.
i kopirajte php_gd2.dll u c:\windows
u datoteci c:\windows\php.ini nalazimo liniju extension=php_gd2.dll i uklanjamo komentar.

Ponovo pokrenite Apache. Sve.
Ako prvo naivno uklonite komentar u php.ini i mislite da je to dovoljno, onda će se nakon ponovnog pokretanja Apachea pojaviti dijagnostika:

"Nije moguće učitati dinamičku biblioteku "./php_gd.dll" - Navedeni modul nije pronađen."

Povezivanje GD2 sa PHP-om pod FreeBSD-om

PHP je već instaliran sa portova

Tačnije, ne samo PHP, već generalno sve (php, MySQL, Apache,...) je konfigurisano preko portova.

# cd /usr/ports/lang/php4-extensions # napravi konfiguraciju dodaj polje za potvrdu: "GD biblioteka podrška" # napravi deinstalaciju # napravi ponovnu instalaciju # apachectl -k graciozno meko ponovno pokretanje ili # apachectl restart grubo ponovno pokretanje

PHP se kompajlira ručno

U tom slučaju je potreban preliminarni rad na pripremi JPEG i ZLIB-a

Instaliranje JPEG podrške

Moguće opcije
JPEG sa porta
# cd /usr/ports/graphics/jpeg # make dobio direktorij work/jpeg-6b nemoj make install
JPEG iz distribucije

# cd /usr/dist/ # wget ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz # gunzip -c jpegsrc.v6b.tar.gz | tar xf - # cd /usr/dist/jpeg-6b # ./configure # make

Morate instalirati podršku za zlib
Iz luke

# cd /usr/ports/archivers/php4-zlib # make Biblioteke su instalirane u: /usr/ports/archivers/php4-zlib/work/php-4.4.4/ext/zlib/modules

# cd /usr/dist/php-4.4.4 # ./configure --with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd bez navođenja direktorij Instalira se GD biblioteka ugrađena u PHP.

--with-jpeg-dir=/usr/ports/graphics/jpeg/work/jpeg-6b ako je jpeg sa porta ili /usr/dist/jpeg-6b ako je jpeg iz distribucije --with-zlib-dir =/ usr/ports/archivers/php4-zlib/work/php-4.4.4/ext/zlib/modules # napravi instalaciju && očisti

Testiranjegif.php:png.phpjpg.php:
gd_info.php: KLJUČVAL
$val) echo " $key



$val"; ?>

Prošle greške

Prilikom instaliranja JPEG biblioteke, nakon "make" napravljena je naredba "make install" sa očekivanjem da će novi fajlovi otići u /usr/local i tada se automatski tamo pronaći

# ./configure --with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd --with-jpeg-dir --with-zlib-dir= /usr/ports/archivers/php4-zlib/work/php-4.4.4/ext/zlib/modules

Ali iz nekog razloga JPEG se nije povezao. Nije bilo negativne dijagnoze i rezultata.

Iz gluposti sam čačkao okolo kao slijepo mače, pokušavajući to reći ovako i onako.

Ili preko svega ugrađenog, pa preko preuzetog, pa sa portova.

Svu ovu sramotu pratile su nepotrebne instalacije, što je rezultiralo problemima zbog kojih je došlo do grešaka u vrijeme PHP instalacije: # ./configure --with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd=/usr/local Hvala vam što koristite PHP. # napravi instalaciju /usr/dist/php-4.4.4/ext/gd/gd.c:1151: nedefinirana referenca na `gdImageRotate" dok izgleda da je direktorij za GD specificiran, ali dijagnostika se odnosi na ugrađeni direktorij ./configure - -with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd=/usr/local --with-jpeg-dir=/. usr/local --with -png-dir=/usr/local --with-zlib-dir=/usr/ports/archivers/php4-zlib/work/php-4.4.4/ext/zlib/modules Hvala na koristeći PHP # make install ... /usr/dist/php-4.4.4/ext/gd/gd.c:837: nedefinisana referenca na `gdImageColorMatch" /usr/dist/php-4.4.4/ext/gd. /gd.c:1151 : nedefinisana referenca na `gdImageRotate" *** Kôd greške 1 Trudim se pripremiti sve module posebno i tačno ih istaći.

Prije nego počnemo gledati curl, želim da vas podsjetim da smo se već dotakli PHP jezika, na primjer, u materijalu o učitavanju u Excel u PHP-u ili mogućnosti autentifikacije u PHP-u, a sada razgovarajmo o mogućnosti šaljite zahtjeve PHP-u.

Šta je CURL?

# ./configure --with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd=/usr/local Hvala vam što koristite PHP. # napravi instalaciju /usr/dist/php-4.4.4/ext/gd/gd.c:1151: nedefinirana referenca na `gdImageRotate" dok izgleda da je direktorij za GD specificiran, ali dijagnostika se odnosi na ugrađeni direktorij ./configure - -with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd=/usr/local --with-jpeg-dir=/. usr/local --with -png-dir=/usr/local --with-zlib-dir=/usr/ports/archivers/php4-zlib/work/php-4.4.4/ext/zlib/modules Hvala na koristeći PHP # make install ... /usr/dist/php-4.4.4/ext/gd/gd.c:837: nedefinisana referenca na `gdImageColorMatch" /usr/dist/php-4.4.4/ext/gd. /gd.c:1151 : nedefinisana referenca na `gdImageRotate" *** Kôd greške 1 je biblioteka PHP funkcija koje se mogu koristiti za slanje zahtjeva, kao što je HTTP, iz PHP skripta. CURL podržava protokole kao što su HTTP, HTTPS, FTP i druge. Možete slati HTTP zahtjeve koristeći metode GET, POST i PUT.

CURL može biti koristan u slučajevima kada trebate pozvati udaljenu skriptu i dobiti rezultat ili jednostavno sačuvati HTML kod pozvane stranice, općenito, svako može pronaći svoju upotrebu, ali poenta je da možete slati zahtjeve dok skripta je pokrenuta.

Povezivanje CURL biblioteke u PHP-u

Da biste koristili CURL biblioteku, morate je u skladu s tim povezati.

Napomena! Kao primer, koristićemo PHP 5.4.39 na Windows 7, a koristićemo Apache 2.2.22 kao Web server.

Prva stvar koju treba da uradite je da kopirate biblioteke ssleay32.dll, libeay32.dll, libssh2.dll nalaze se u direktoriju sa PHP-om, u Windows sistemskom direktoriju, odnosno u C:\Windows\System32.

Zatim povežite biblioteku php_curl.dll na php.ini, tj. dekomentirajte sljedeći red

Biblioteka nije povezana

;extension=php_curl.dll

Biblioteka povezana

Extension=php_curl.dll

To je to, ponovo pokrenite Apache, pozovite funkciju phpinfo() i ako je veza uspješna, trebali biste imati curl sekciju


Ako ga nema, onda to znači samo jedno: biblioteka se nije učitala, najčešći razlog za to je taj što gore navedeni DLL-ovi nisu kopirani u sistemski direktorij Windows.

Primjer CURL - traženje udaljene stranice za prikaz na ekranu

U ovom primjeru, jednostavno ćemo zatražiti udaljenu stranicu putem HTTP-a koristeći GET metodu i prikazati njen sadržaj na ekranu.

Imamo test direktorij u kojem se nalaze 2 PHP datoteke: test_curl.php i test.php, gdje je test_curl.php skripta u kojoj ćemo koristiti curl, a test.php udaljena skripta koju ćemo pozvati. Detaljno sam komentarisao kod.

Kod test_curl.php

Code test.php

Naslov 1"; prekid; slučaj 2: eho "<Н2>Naslov 2"; prekid; slučaj 3: eho "<Н3>Naslov 3"; prekid; ) ) ?>

Kao rezultat toga, ako pokrenete test_curl.php, vidjet ćete poruku “Heading 1” na ekranu, možete eksperimentirati sa prosljeđivanjem id parametara ( u ovom slučaju 2 ili 3).

CURL primjer - pozivanje udaljene skripte i dobivanje rezultata

Pokušajmo sada pozvati skriptu i dobiti rezultat, kako bismo je kasnije obrađivali, na primjer, upotrijebimo metodu POST. Ostavimo imena fajlova ista.

Kod test_curl.php

Code test.php

A ako pokrenemo test_curl.php, onda će na ekranu biti prikazano 111, tj. 1.11 dobiveno kao rezultat pristupa udaljenoj skripti, pomnoženo sa 100.

Sada razgovarajmo o funkcijama i njihovim konstantama.

Često korištene CURL funkcije i konstante

  • curl_init - Inicijalizira sesiju;
  • curl_close - Zatvara sesiju;
  • curl_exec - Izvršava zahtjev;
  • curl_errno - Vraća kod greške;
  • curl_setopt - Postavlja parametar za sesiju, na primjer:
    • CURLOPT_HEADER – vrijednost 1 znači da treba vratiti zaglavlja;
    • CURLOPT_INFILESIZE - parametar za određivanje očekivane veličine datoteke;
    • CURLOPT_VERBOSE - vrijednost 1 znači da će CURL prikazati detaljne poruke o svim izvršenim operacijama;
    • CURLOPT_NOPROGRESS – onemogućava indikator toka operacije, vrijednost 1;
    • CURLOPT_NOBODY – ako vam ne treba dokument, već su vam potrebna samo zaglavlja, onda postavite vrijednost na 1;
    • CURLOPT_UPLOAD - za upload fajla na server;
    • CURLOPT_POST – izvršiti zahtjev koristeći POST metodu;
    • CURLOPT_FTPLISTONLY - dobijanje liste fajlova u direktorijumu FTP serveri, vrijednost 1;
    • CURLOPT_PUT — izvršiti zahtjev koristeći metodu PUT, vrijednost 1;
    • CURLOPT_RETURNTRANSFER - vraća rezultat bez izlaza u pretraživač, vrijednost 1;
    • CURLOPT_TIMEOUT – maksimalno vrijeme izvršenja u sekundama;
    • CURLOPT_URL – određivanje adrese za kontakt;
    • CURLOPT_USERPWD - niz sa korisničkim imenom i lozinkom u obliku :;
    • CURLOPT_POSTFIELDS – podaci za POST zahtjev;
    • CURLOPT_REFERER - postavlja vrijednost HTTP zaglavlja “Referer:”;
    • CURLOPT_USERAGENT - postavlja vrijednost HTTP zaglavlja “User-Agent:”;
    • CURLOPT_COOKIE — sadržaj zaglavlja “Cookie:” koji će biti poslan uz HTTP zahtjev;
    • CURLOPT_SSLCERT - naziv datoteke sa certifikatom u PEM formatu;
    • CURLOPT_SSL_VERIFYPEER – vrijednost 0, kako bi se onemogućila verifikacija certifikata udaljenog servera (podrazumevano 1);
    • CURLOPT_SSLCERTPASSWD — lozinka za datoteku certifikata.
  • curl_getinfo - Vraća informacije o operaciji, drugi parametar može biti konstanta koja označava šta tačno treba prikazati, na primjer:
    • CURLINFO_EFFECTIVE_URL - posljednji korišteni URL;
    • CURLINFO_HTTP_CODE - zadnji primljeni HTTP kod;
    • CURLINFO_FILETIME — datum izmjene učitanog dokumenta;
    • CURLINFO_TOTAL_TIME — vrijeme izvršenja operacije u sekundama;
    • CURLINFO_NAMELOOKUP_TIME — vrijeme rješavanja imena servera u sekundama;
    • CURLINFO_CONNECT_TIME — vrijeme provedeno na uspostavljanju veze, u sekundama;
    • CURLINFO_PRETRANSFER_TIME — vrijeme proteklo od početka operacije do spremnosti za stvarni prijenos podataka, u sekundama;
    • CURLINFO_STARTTRANSFER_TIME — vrijeme proteklo od početka operacije do prijenosa prvog bajta podataka, u sekundama;
    • CURLINFO_REDIRECT_TIME — vrijeme utrošeno na preusmjeravanje, u sekundama;
    • CURLINFO_SIZE_UPLOAD - broj bajtova prilikom učitavanja;
    • CURLINFO_SIZE_DOWNLOAD - broj bajtova prilikom preuzimanja;
    • CURLINFO_SPEED_DOWNLOAD - prosječna brzina preuzimanja;
    • CURLINFO_SPEED_UPLOAD - prosječna brzina preuzimanja;
    • CURLINFO_HEADER_SIZE - ukupna veličina svih primljenih zaglavlja;
    • CURLINFO_REQUEST_SIZE - ukupna veličina svih poslatih zahtjeva;
    • CURLINFO_SSL_VERIFYRESULT - rezultat provjere SSL certifikata traženog postavljanjem parametra CURLOPT_SSL_VERIFYPEER;
    • CURLINFO_CONTENT_LENGTH_DOWNLOAD - veličina preuzetog dokumenta, očitana iz zaglavlja Content-Length;
    • CURLINFO_CONTENT_LENGTH_UPLOAD - veličina učitanih podataka;
    • CURLINFO_CONTENT_TYPE - sadržaj primljenog zaglavlja tipa sadržaja, ili NULL ako ovo zaglavlje nije primljeno.

Više o CURL funkcijama i konstantama za njih možete saznati na službenoj PHP web stranici -

Par naočara...

PHP nema ugrađeni okvir za uvoz kao što je python, java ili .net. Postoji nekoliko načina za korištenje biblioteka u PHP-u.

    kompajlirajte ih u PHP binarni fajl. Ovo je najnaprednija metoda i obično se ne preporučuje osim ako nemate posebne potrebe.

    Instalirajte ih kao PHP moduli na serveru i omogućite ih u PHP.ini. Sa stanovišta PHP programera, ove ekstenzije su deo PHP-a – uvek dostupne. Lakše je dodati i ukloniti bez ponovnog sastavljanja samog PHP-a.

    Instalirajte PHP kod negdje na serveru i uključite ga() u svoju PHP skriptu.

    Sačuvajte kopiju biblioteke u svoj projekat i uključite je u svoju PHP skriptu.

P a g e Na osnovnom nivou, kod je ili dio interpretatora (statički ili dinamički) ili je običan stari PHP kod koji uključuje()uključen u vaš projekat.

Za vaše potrebe, mogu samo predložiti da se držite standardne PHP distribucije (odaberite dobar Linux OS i koristite taj PHP). Tada su gotovo sve biblioteke koje će vam trebati na nivou interpretatora dostupne kao dodatni paketi, a složenost toga prepuštena je onima koji to rade svaki dan.

Na RedHat/Centosu možete pokrenuti:

yum install php php-memcached php-gd php-pecl

Page Što se tiče svih ostalih biblioteka koje biste možda želeli da koristite, verovatno je najbolje da koristite dobar PHP okvir koji će se pobrinuti za sve ovo umesto vas.

Neki primjeri:

  • Zend Framework
  • CakePHP
  • Codeigniter
  • itd...

(ne bilo kojim redoslijedom, samo oni koji vam padaju na pamet)

Pod uslovom da ste koristili standardni pristup korišćenja RPM-a ili sličnog za upravljanje kompajliranim PHP-om i aspektima proširenja, tada će se dobar robusni okvir pobrinuti da uključi sve vaše dodatni kod PHP biblioteka koja vam je potrebna.

Šta je krajnji rezultat: fokusirani ste na isporuku proizvoda, a ne na svu infrastrukturu koju biste inače morali da naučite i izmislite.

Stranica php.ini se analizira i pokreće kada se PHP pokrene (svaki put za komandna linija, kada se po serveru pokrene u apache). Definira mnoge postavke, uključuje mnoge module, konfigurira te module itd.

U stvari, možete poništiti neke postavke u php.ini koristeći ini_set() funkciju u PHP-u. Međutim, ovo funkcionira samo za neke postavke. Ostale se moraju instalirati prije pokretanja skripte.

Kada radite pod apacheom, možete dodati linije u .htaccess i , koji potpuno nadjačava PHP.ini za taj direktorij/virtuelni host.

(molim ispravite moju sintaksu i uklonite ovu bilješku ako je netačna)

Ime servera www.example.com DocumentRoot /home/joe/site/docroot php_value include_path "/home/joe/site/php-code"

Stranica Kao odgovor na vaše pitanje #6 o vašoj biblioteci i najbolji način njegovog pakovanja, predlažem da prvo procenite potrebu za bibliotekom. A ako nešto uradite, saznajte na koji način ljudi to najčešće rade. Ako je to jednostavna biblioteka, onda je dovoljna .php datoteka sa dobrom web lokacijom.

Stranica bi možda bila malo neuredna, ali nadam se da vas ovo upućuje u pravom smjeru.

Podrazumevano, ekstenzija za rad sa MySQL-om (biblioteka php_mysql.dll) nije povezana sa PHP-om i odgovarajuće funkcije nisu dostupne. Da biste povezali biblioteku, morate napraviti promjene u konfiguracijskoj datoteci php.ini i kopirati dodatne biblioteke u direktorij c:/windows/system32.

1. Recite PHP-u (Apache) gdje se nalazi php.ini (samo Apache 2.x)

Ako koristite Apache verziju 2 ili noviju, obavezno dodajte direktivu PHPIniDir u Apache konfiguracijsku datoteku (httpd.conf), koja vam omogućava da odredite tačnu lokaciju php.ini datoteke. Nakon dodavanja direktive, ponovo pokrenite Apache i uvjerite se da je pokretanje bilo uspješno.

PHPIniDir “c:/php”

Napomena

Imajte na umu da je putanja napisana pomoću kose crte /, što je neobično za Windows, koji koristi obrnute kose crte \\. Činjenica je da su i Apache i PHP prvobitno kreirani za rad na Unix sistemima, gdje se koriste kose crte. Da biste izbjegli moguće probleme koje je teško dijagnosticirati, toplo preporučujemo korištenje naprijed kosih crta u unix formatu u Apache i PHP konfiguracijskim datotekama.

Ovo pretpostavlja da je konfiguraciona datoteka php.ini pohranjena u direktoriju c:/php. Da biste bili sigurni da je Apache pronašao konfiguracijsku datoteku php.ini, pokrenite funkciju phpinfo().

Izlaz informacija o PHP konfiguraciji

echo phpinfo();
?>

Pronađite vrijednost reda u rezultirajućim ljubičastim tablicama "Putanja konfiguracijske datoteke (php.ini)". Mora naznačiti putanju do korištene datoteke php.ini, uključujući i sam fajl. Ako ova linija specificira samo direktorij, to znači da Apache nije mogao pronaći php.ini datoteku.

C:/php/php.ini // Ispravno - php.ini pronađen i korišten
C:/windows/ // Neispravno - php.ini nije pronađen

Napomena

Apache ima više ranije verzije Nije bilo PHPIniDir direktive i kao rezultat toga, pojavilo se mnogo grešaka zbog pogrešne lokacije datoteke php.ini. Za Apache verziju 1.3, php.ini se mora nalaziti u Windows sistemskom direktoriju, obično: c:/Windows. Korišćenje PHPIniDir direktive u Apache verziji 2 omogućava vam da radikalno rešite ovaj problem.

Nakon što se uvjerite da Apache koristi ispravan php.ini, možete početi da ga uređujete kako biste omogućili MySQL ekstenziju.

2. Postavite direktivu extension_dir u PHP.INI

Direktiva extension_dir specificira direktorij u kojem se nalaze knjižnice php ekstenzije, uključujući biblioteku php_mysql.dll. Ako ste instalirali php u direktorij c:/php, tada se biblioteke ekstenzija obično nalaze u poddirektorijumu ext (c:/php/ext). Provjerite da li je to istina i postavite direktivu extension_dir na ispravnu vrijednost.

Extension_dir = "c:/php/ext"

3. Povežite ekstenziju za rad sa MySQL

Da biste to uradili, pronađite red u php.ini:

;extension=php_mysql.dll

I uklonite simbol komentara sa njega - tačku i zarez.

Extension=php_mysql.dll

4. Kopirajte dodatnu biblioteku libmysql.dll u c:/windows

Ako imate PHP povezan na Apache kao modul, tada da biste povezali MySQL ekstenziju morate kopirati dodatnu biblioteku libmysql.dll iz direktorija c:/php u direktorij c:/windows/system32. Ako je php povezan na Apache kao CGI aplikacija, tada kopiranje dodatne biblioteke nije potrebno.

5. Ponovo pokrenite Apache

Ponovo pokrenite Apache da bi sve promjene stupile na snagu.

6. Provjerite instalaciju proširenja

Da biste bili sigurni da se MySQL biblioteka uspješno povezala sa PHP-om, pokrenite funkciju phpinfo(). Pregledajte "ljubičaste tabele" i pronađite dio u njima koji se zove MySQL. Ako takva sekcija postoji, to znači da je ekstenzija uspješno povezana.

Provjera interakcije PHP-a sa MySQL-om

1. Provjerite radi li vaš MySQL server.

Pre nego što počnete da testirate interakciju PHP-a sa MySQL-om, uverite se da vaš MySQL server radi. To se može učiniti otvaranjem liste Windows usluge: "Start" | "Kontrolna tabla" | "Administracija" | "Usluge". Pronađite uslugu pod nazivom MySQL i uvjerite se da je u stanju rada (treća kolona tabele).

Drugi način da se uvjerite da je MySQL server pokrenut: pritisnite tipke “Crtl” + “Alt” + “Del” i na kartici “Procesi” pronađite proces pod nazivom mysqld.exe. Sljedeći procesi također mogu raditi umjesto mysqld.exe procesa: mysqld-nt.exe, mysqld-max-nt.exe, mysqld-debug.exe.

2. Pokrenite probnu php skriptu

$dblocation = "127.0.0.1" ;
$dbname = "test" ;
$dbuser = "root" ;
$dbpasswd = "" ;

$dbcnx = mysql_connect ($dblocation, $dbuser, $dbpasswd);
ako (! $dbcnx )
{
echo "" ;
exit();
}
ako(!

{
echo "" ;
exit();
}

if(!$ver)
{
echo "

Greška u zahtjevu

" ;
exit();
}
echo
mysql_result($ver, 0);
?>

Ako je test uspješan, na ekranu će biti prikazan broj verzije MySQL servera. U suprotnom, na ekranu će se prikazati opisi grešaka koje su se dogodile.

Greške prilikom povezivanja ekstenzije za rad sa MySQL

Greške poput: Poziv na nedefiniranu funkciju

Sve greške koje sadrže frazu "Pozovi nedefinisanu funkciju" ukazuju na nepovezanu PHP ekstenziju. Ako se takve greške pojave pri radu sa MySQL funkcijama, to znači da PHP biblioteka za rad sa MySQL - php_mysql.dll - nije uključena

Primjer poruke o grešci:

Fatalna greška: Poziv na nedefiniranu funkciju mysql_connect()

Da biste riješili ovaj problem, pogledajte početak članka.

Nema MySQL bloka u phpinfo()

Ako je sve urađeno kako treba, ali se ekstenzija za rad sa MySQL-om ne povezuje pa čak i MySQL blok nedostaje u izlazu funkcije phpinfo(), onda provjerite verziju biblioteke libmysql.dll koja se nalazi u c:/windows/ sistem32.

  1. Uporedite veličinu biblioteke libmysql.dll, koja se nalazi u c:/windows/system32, sa veličinom biblioteke istog imena koja je instalirana sa PHP-om. Moraju biti jednaki.
  2. Pronađite biblioteke libmysql.dll kroz c:/windows direktorij i sve poddirektorije. Uklonite sve pronađene duplikate i ostavite samo jednu potrebnu biblioteku – onu koja je kopirana iz direktorija c:/php.

Napomena

Biblioteka libmysql.dll istog imena se također isporučuje s MySQL serverom. Međutim, ovo su različite biblioteke i ako direktorijum c:/windows/system32 sadrži biblioteku iz MySQL-a, onda PHP neće moći da poveže ekstenziju. Biblioteka libmysql.dll se može automatski kopirati na c:/windows/system32 prilikom instalacije MySQL servera. Prisustvo biblioteke stare verzije PHP-a u sistemskom direktorijumu takođe može postati prepreka.

Prazna stranica test skripte

Skripta prikazana na listi ispod se često koristi kao skripta za testiranje interakcije PHP-a i MySQL-a na našoj web stranici. Njegove razlike u odnosu na sličnu PHP skriptu datu na početku članka su simboli @ prije pozivanja funkcija mysql_connect() i mysql_select_db(). Ovi znakovi se koriste za suzbijanje izlaza greške u pretraživač. Korisno ih je koristiti na radnoj web stranici na Internetu kako bi se spriječilo prikazivanje povjerljivih informacija u pregledniku, ali prilikom otklanjanja grešaka u skriptama, zabrana izlaza grešaka nije neophodna, jer može otežati dijagnosticiranje problema.

PHP skripta koja testira PHP interakciju sa MySQL serverom

$dblocation = "127.0.0.1" ;
$dbname = "test" ;
$dbuser = "root" ;
$dbpasswd = "" ;

$dbcnx = @mysql_connect ($dblocation, $dbuser, $dbpasswd);
ako (! $dbcnx )
{
echo "

Nažalost, mySQL server nije dostupan

" ;
exit();
}
ako (!@
mysql_select_db ($dbname, $dbcnx))
{
echo "

Nažalost, baza podataka nije dostupna

"
;
exit();
}
$ver = mysql_query("SELECT VERSION()" );
if(!$ver)
{
echo "

Greška u zahtjevu

"
;
exit();
}
echo
mysql_result($ver, 0);
?>

Ako se kao rezultat izvršavanja ove skripte prikaže prazna stranica, to po pravilu znači da biblioteka php_mysql.dll nije povezana sa PHP-om. Da biste preciznije dijagnosticirali problem, izvršite sljedeći slijed radnji.

  1. Uvjerite se da su pokrenute druge PHP skripte koje ne koriste MySQL bazu podataka.
  2. Uklonite simbol @ prije pozivanja funkcija mysql_connect i mysql_select, koji se koristi za suzbijanje izlaza greške u pretraživač. Nakon toga, u pregledniku će se prikazati potpunije informacije o greškama, što će pomoći u rješavanju problema.

Greška: Ne mogu se povezati na MySQL server na "127.0.0.1" (10061)

Ako se prilikom izvršavanja PHP test skripte prikaže greška slična sljedećoj:


Ne mogu se povezati na MySQL server na "127.0.0.1" (10061)
u C:\www\panel\htdocs\test.php na liniji 7

Ovo ukazuje da MySQL server baze podataka ne radi. Tačnija dijagnoza ovog problema data je gore u pasusu 1 pododjeljka “Provjera interakcije PHP-a sa MySQL-om”.

Greška: Pristup odbijen za korisnika "root"@"localhost" (koristeći lozinku: DA)

Ima sljedeću grešku:

Upozorenje: mysql_connect() :
Pristup odbijen za korisnika "root"@"localhost" (koristeći lozinku: DA)
u C:\www\panel\htdocs\test.php na liniji 7

Označava da pokušavate da se povežete na MySQL bazu podataka sa neispravnom lozinkom. Provjerite vrijednost varijable $dbpasswd u test skripti. Podrazumevano, MySQL server je instaliran sa praznom root korisničkom lozinkom. Ako sami postavite lozinku za root korisnika, upišite je u varijablu $dbpasswd skripte za verifikaciju.

Sva pitanja koja imate o povezivanju na PHP ekstenzije za rad možete postaviti na našem forumu posvećenom instalaciji i konfiguraciji Apache, PHP i biblioteka ekstenzija.

Počni