Ako pripojiť ďalšie knižnice k PHP skriptom. PHP CURL - funkcie a príklady použitia

Ako pripojiť ďalšie knižnice k PHP skriptom.  PHP CURL - funkcie a príklady použitia
Ako pripojiť ďalšie knižnice k PHP skriptom. PHP CURL - funkcie a príklady použitia

Igor Guzey

Toto nie je presný a definitívny návod na akciu s použitím správnych výrazov a optimálnych možností. Toto je skôr záznam o aktuálnom probléme.

Úloha: Pridajte podporu/modul GD2 do PHP

Ako obvykle, začíname trénovať ďalej lokálny počítač a samozrejme funguje pod Windowsom. Presnejšie Windows XP SP2. Ďalej pripojíme GD2 v PHP, nakonfigurovaný cez porty alebo skompilovaný manuálne pre FreeBSD.

Pripojenie GD2 k PHP v systéme Windows

V distribúcii nájdeme:
\php-4.3.9-Win32.zip\php-4.3.9-Win32\extensions\
knižnica php_gd2.dll, t.j. verzia 2.
a skopírujte php_gd2.dll do c:\windows
v súbore c:\windows\php.ini nájdeme príponu riadku=php_gd2.dll a odstránime komentár.
Reštartujte Apache. Všetky.

Ak najprv naivne odstránite komentár v php.ini a myslíte si, že to stačí, po reštarte Apache sa zobrazí diagnostika:
"Nedá sa načítať dynamická knižnica "./php_gd.dll" - Zadaný modul sa nenašiel."

Pripojenie GD2 k PHP pod FreeBSD

PHP je už nainštalované z portov

Presnejšie, nielen PHP, ale vo všeobecnosti všetko (php, MySQL, Apache, ...) sa konfigurovalo pomocou portov.

# cd /usr/ports/lang/php4-extensions # make config pridať začiarkavacie políčko: "Podpora knižnice GD" # make deinstall # make reinstall # apachectl -k elegantný mäkký reštart alebo # apachectl reštart hrubý reštart

PHP je vytvorené ručne

V tomto prípade sú potrebné predbežné práce na príprave JPEG a ZLIB

Inštalácia podpory JPEG

Možné možnosti

JPEG z portu
# cd /usr/ports/graphics/jpeg # make got directory work/jpeg-6b don't make make install
JPEG z distribúcie
# 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

Musíte si nainštalovať podporu zlib

Z prístavu
# cd /usr/ports/archivers/php4-zlib # make Knižnice boli nainštalované v: /usr/ports/archivers/php4-zlib/work/php-4.4.4/ext/zlib/modules

Budovanie PHP

# cd /usr/dist/php-4.4.4 # ./configure --with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd bez zadania adresár Je nainštalovaná knižnica GD zabudovaná do PHP. --with-jpeg-dir=/usr/ports/graphics/jpeg/work/jpeg-6b, ak je jpeg z portu alebo /usr/dist/jpeg-6b, ak je jpeg z distribúcie --with-zlib-dir =/ usr/ports/archivers/php4-zlib/work/php-4.4.4/ext/zlib/modules # make install && make clean

Testovanie

gif.php:png.phpjpg.php:gd_info.php:
KEY VAL$val) echo "
$kľúč $val"; ?>



Prekonané chyby

Pri inštalácii knižnice JPEG bol po "make" vykonaný príkaz "make install" s očakávaním, že nové súbory pôjdu do /usr/local a potom sa tam automaticky nájdu

# ./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

Ale z nejakého dôvodu sa JPEG nepripojil. Žiadna negatívna diagnóza a žiadny výsledok.

Z hlúposti som sa dookola hrabal ako slepé mačiatko a snažil som sa to povedať tak a tak. Buď cez všetko vstavané, potom cez stiahnuté, potom z portov. Celá táto hanba bola sprevádzaná zbytočnými inštaláciami, čo malo za následok problémy, kvôli ktorým sa v čase inštalácie PHP vyskytli chyby:

# ./configure --with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd=/usr/local Ďakujeme, že používate PHP. # make install /usr/dist/php-4.4.4/ext/gd/gd.c:1151: nedefinovaný odkaz na `gdImageRotate", zatiaľ čo adresár pre GD sa zdá byť špecifikovaný, ale diagnostika odkazuje na vstavaný adresár # ./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 Ďakujeme za pomocou PHP # make install ... /usr/dist/php-4.4.4/ext/gd/gd.c:837: nedefinovaný odkaz na `gdImageColorMatch" /usr/dist/php-4.4.4/ext/gd. /gd.c:1151 : nedefinovaný odkaz na `gdImageRotate" *** Kód chyby 1

Pokúste sa pripraviť všetky moduly samostatne a presne na ne poukázať.

Navrhujem porozprávať sa trochu o programovacom jazyku PHP a konkrétne sa dotknúť témy rozšírení CURL, t.j. schopnosť komunikovať s rôznymi servermi pomocou rôznych protokolov zo samotného skriptu PHP.

Predtým, než sa začneme zaoberať curlingom, rád by som vám to pripomenul jazyk PHP Už sme sa toho dotkli napríklad v materiáli o nahrávaní do Excelu v PHP alebo možnosti autentifikácie v PHP a teraz si povieme niečo o možnosti posielať požiadavky do PHP.

Čo je CURL?

CURL- toto je knižnica PHP funkcie, pomocou ktorého môžete odosielať požiadavky, ako napríklad HTTP PHP skript A. CURL podporuje protokoly ako HTTP, HTTPS, FTP a iné. Odoslať HTTP požiadavky Môžete použiť metódy GET, POST, PUT.

CURL môže byť užitočné v prípadoch, keď potrebujete zavolať vzdialený skript a získať výsledok alebo jednoducho uložiť HTML kód volanej stránky, vo všeobecnosti si každý nájde svoje využitie, ale ide o to, že môžete posielať požiadavky, kým skript je spustený.

Pripojenie knižnice CURL v PHP

Aby ste mohli používať knižnicu CURL, musíte ju zodpovedajúcim spôsobom pripojiť.

Poznámka! Ako príklad použijeme PHP 5.4.39 na Windows 7 a ako webový server použijeme Apache 2.2.22.

Prvá vec, ktorú musíte urobiť, je skopírovať knižnice ssleay32.dll, libeay32.dll, libssh2.dll sú umiestnené v adresári s PHP, v systéme Windows adresár, a to v C:\Windows\System32.

Potom pripojte knižnicu php_curl.dll k php.ini, t.j. odkomentujte nasledujúci riadok

Knižnica nie je pripojená

;extension=php_curl.dll

Knižnica pripojená

Prípona=php_curl.dll

To je všetko, reštartujte Apache, zavolajte funkciu phpinfo() a ak je pripojenie úspešné, mali by ste mať sekciu curl


Ak tam nie je, znamená to len jednu vec: knižnica sa nenačítala, najčastejším dôvodom je, že vyššie uvedené knižnice DLL neboli skopírované do systémového adresára Windows.

Príklad CURL – vyžiadanie si vzdialenej stránky na zobrazenie na obrazovke

IN v tomto príklade len sa opýtame odstránená stránka cez protokol HTTP metódou GET a zobraziť jej obsah na obrazovke.

Máme testovací adresár, v ktorom sú 2 PHP súbory: test_curl.php a test.php, kde test_curl.php je skript, kde budeme používať curl a test.php je vzdialený skript, ktorý zavoláme. Kód som podrobne okomentoval.

Kód test_curl.php

Kód test.php

Nadpis 1"; prestávka; prípad 2: echo"<Н2>Nadpis 2"; prestávka; prípad 3: echo"<Н3>Nadpis 3"; prestávka; ) ) ?>

Výsledkom je, že ak spustíte test_curl.php, na obrazovke uvidíte správu „Nadpis 1“, môžete experimentovať s odovzdávaním parametrov id ( v tomto prípade 2 alebo 3).

Príklad CURL - volanie vzdialeného skriptu a získanie výsledku

Teraz skúsme zavolať skript a získať výsledok, aby sme ho mohli neskôr spracovať, napríklad použite metódu POST. Názvy súborov nechajme rovnaké.

Kód test_curl.php

Kód test.php

A ak spustíme test_curl.php, tak sa na obrazovke zobrazí 111, t.j. 1.11 získaný ako výsledok prístupu k vzdialenému skriptu, vynásobený 100.

Teraz si povieme niečo o funkciách a ich konštantách.

Bežne používané funkcie a konštanty CURL

  • curl_init - Inicializuje reláciu;
  • curl_close - Zatvorí reláciu;
  • curl_exec - Vykoná požiadavku;
  • curl_errno - Vráti kód chyby;
  • curl_setopt – Nastavuje parameter pre reláciu, napríklad:
    • CURLOPT_HEADER – hodnota 1 znamená, že hlavičky by sa mali vrátiť;
    • CURLOPT_INFILESIZE - parameter na určenie očakávanej veľkosti súboru;
    • CURLOPT_VERBOSE - hodnota 1 znamená, že CURL zobrazí podrobné správy o všetkých vykonaných operáciách;
    • CURLOPT_NOPROGRESS – deaktivuje indikátor priebehu operácie, hodnota 1;
    • CURLOPT_NOBODY – ak nepotrebujete dokument, ale potrebujete len hlavičky, tak nastavte hodnotu na 1;
    • CURLOPT_UPLOAD - pre nahranie súboru na server;
    • CURLOPT_POST – vykoná požiadavku metódou POST;
    • CURLOPT_FTPLISTONLY - získanie zoznamu súborov v adresári FTP servery, hodnota 1;
    • CURLOPT_PUT — vykoná požiadavku pomocou metódy PUT, hodnota 1;
    • CURLOPT_RETURNTRANSFER - vráti výsledok bez jeho odoslania do prehliadača, hodnota 1;
    • CURLOPT_TIMEOUT – maximálny čas vykonania v sekundách;
    • CURLOPT_URL – určenie adresy kontaktu;
    • CURLOPT_USERPWD - reťazec s užívateľským menom a heslom v tvare :;
    • CURLOPT_POSTFIELDS – údaje pre požiadavku POST;
    • CURLOPT_REFERER - nastavuje hodnotu HTTP hlavičky “Referer:”;
    • CURLOPT_USERAGENT - nastavuje hodnotu HTTP hlavičky “User-Agent:”;
    • CURLOPT_COOKIE — obsah hlavičky „Cookie:“, ktorá bude odoslaná s požiadavkou HTTP;
    • CURLOPT_SSLCERT - názov súboru s certifikátom vo formáte PEM;
    • CURLOPT_SSL_VERIFYPEER – hodnota 0 na zakázanie overovania certifikátu vzdialený server(predvolené 1);
    • CURLOPT_SSLCERTPASSWD — heslo pre súbor certifikátu.
  • curl_getinfo - Vracia informácie o operácii, druhý parameter môže byť konštanta, ktorá označuje, čo presne treba zobraziť, napríklad:
    • CURLINFO_EFFECTIVE_URL – posledná použitá adresa URL;
    • CURLINFO_HTTP_CODE - posledný prijatý HTTP kód;
    • CURLINFO_FILETIME — dátum úpravy načítaného dokumentu;
    • CURLINFO_TOTAL_TIME — čas vykonania operácie v sekundách;
    • CURLINFO_NAMELOOKUP_TIME — čas rozlíšenia názvu servera v sekundách;
    • CURLINFO_CONNECT_TIME — čas strávený nadviazaním spojenia v sekundách;
    • CURLINFO_PRETRANSFER_TIME — čas, ktorý uplynul od začiatku operácie do pripravenosti na skutočný prenos dát, v sekundách;
    • CURLINFO_STARTTRANSFER_TIME — čas v sekundách, ktorý uplynul od začiatku operácie do prenosu prvého bajtu údajov;
    • CURLINFO_REDIRECT_TIME — čas strávený presmerovaním v sekundách;
    • CURLINFO_SIZE_UPLOAD - počet bajtov pri nahrávaní;
    • CURLINFO_SIZE_DOWNLOAD - počet bajtov pri sťahovaní;
    • CURLINFO_SPEED_DOWNLOAD - priemerná rýchlosť sťahovania;
    • CURLINFO_SPEED_UPLOAD - priemerná rýchlosť sťahovania;
    • CURLINFO_HEADER_SIZE - celková veľkosť všetkých prijatých hlavičiek;
    • CURLINFO_REQUEST_SIZE - celková veľkosť všetkých odoslaných požiadaviek;
    • CURLINFO_SSL_VERIFYRESULT - výsledok kontroly SSL certifikátu požadovaného nastavením parametra CURLOPT_SSL_VERIFYPEER;
    • CURLINFO_CONTENT_LENGTH_DOWNLOAD - veľkosť sťahovaného dokumentu, načítaná z hlavičky Content-Length;
    • CURLINFO_CONTENT_LENGTH_UPLOAD - veľkosť nahrávaných údajov;
    • CURLINFO_CONTENT_TYPE – obsah prijatej hlavičky Content-type alebo NULL, ak táto hlavička nebola prijatá.

Prečítajte si viac o funkcie CURL a ich konštanty si môžete pozrieť na oficiálnej webovej stránke PHP -

Poznámka: Aktivuje sa adaptívna verzia stránky, ktorá sa automaticky prispôsobí malej veľkosti vášho prehliadača a skryje niektoré detaily stránky pre ľahšie čítanie. Príjemné sledovanie!

Pekný deň všetkým čitateľom blogu stránky na! Posledné 2 mesiace moja práca pre firmu úzko súvisí s čistým PHP (používanie frameworkov a CMS je tabu), už som zabudol, čo je Joomla :) a tak by bolo vhodnejšie ako kedykoľvek predtým pokračovať v písaní vyššie.

Dnes si povieme, ako funguje spájanie súborov v PHP. Ako ste si mohli všimnúť, akýkoľvek engine pre webovú stránku (Joomla, Wordpress, OpenCart, DLE a všetko, všetko, všetko) pozostáva z tisícov .php (nielen php) súborov a všetky navzájom interagujú, čo vlastne tvorí miesto pracovného mechanizmu.

Teraz zabudnite na motory a predstavte si iný príklad: na webe máme veľa stránok, každá z nich má rovnaké menu, hlavičku a pätu webu. Prirodzene, nebudeme kopírovať to isté zo súboru do súboru, inak by sa ukázalo, že ide o starodávnu HTML stránku z 90. rokov. Minimálne všetko rozdelíme do 4 súborov:

  • index.php – hlavná časť stránky, tento súbor sa zmení
  • menu.php – menu stránky
  • header.php – hlavička stránky
  • footer.php – päta stránky

Okrem domovskej stránke(index.php) môžeme mať napríklad aj stránky so zoznamom produktov (category.php) a stránky samotných produktov (product.php). K týmto stránkam bude vhodné pripojiť súbory menu.php, header.php, footer.php. Vďaka tomuto prístupu, ak pridávame novú položku menu, pridáme ju iba raz (v menu.php), a nie 3-krát (v index.php, produkt.php, category.php).

Preto vzniká otázka: "Ako pripojiť súbor v PHP?". Na tieto účely sú v PHP 2 inštrukcie:

A ich deriváty:

Upozorňujem na skutočnosť, že include a required nie sú funkcie, sú to takzvané jazykové konštrukty, takže zátvorky nie sú potrebné.

Aký je rozdiel medzi zahrnúť a vyžadovať

zahŕňajú A vyžadovať- je to úplne to isté, len s tým rozdielom, že ak sa vyskytne chyba (napríklad, ak zadaný súbor neexistuje a nemožno ho zahrnúť), zahrnutie vygeneruje chybu ako POZOR, po ktorom bude stránka naďalej fungovať a bude vyžadovať vydá , čím sa ďalšie načítavanie stránky úplne zastaví.

To znamená, že požadované inštrukcie sú radikálnejšie a prísnejšie. Je na vás, aby ste sa rozhodli, čo je vo všeobecnosti najlepšie použiť, vždy odporúčajú zvoliť prísnejšiu možnosť, teda vyžadovať, ale osobne sa mi zdá príjemnejšie napísať slovo include :)

include_once a require_once – urobia to isté ako include (zahrnie súbor), no zároveň zabezpečia, aby každý súbor nebol zahrnutý viac ako raz. Obzvlášť vhodné sú na použitie, ak na projekte pracuje viacero ľudí a potrebujete sa uistiť, že sa určitý súbor nepridáva viackrát.

Pozor:

zahrnúť_raz A vyžadovať_raz– pracujte pomalšie a spotrebujte viac Náhodný vstup do pamäťe než zahŕňajú a vyžadujú. Je to logické a je to spôsobené tým, že si musia pamätať všetky súbory, ktoré boli pripojené, a pri každom pripojení skontrolovať, či už tento súbor bol pripojený.

Dovoľte mi jasne ilustrovať, ako funguje pripojenie súborov v PHP:

Pri pripájaní súborov (akýchkoľvek, napríklad: html, txt, php, xml atď.) k skriptu PHP sa ich obsah hlúpo vloží na miesto include. Inými slovami, zahrnúť (a myslím aj vyžadovať, keďže ide o to isté) je rovnaké, ako keby ste odniekiaľ skopírovali (CTRL+C) kód a vložili (CTRL+V) do súboru (napríklad product. php) a potom sa uloží a spustí ako zvyčajne: http://your_site.net/product.php

Aby sme odlíšili hlavné súbory, ako napríklad product.php, od tých, ktoré k nemu pripájame (menu.php, header.php, footer.php), pripojené súbory sa premenujú takto: menu.inc.php, header .inc.php, päta.inc.php. Vďaka tomu, keď prejdeme do priečinka, hneď uvidíme, kde sú hlavné súbory a kde pomocné.

Pozor:

Táto technika (add inc) sa používa len pre vizuálne pohodlie a nie funkčné rozdiely nenesie v sebe. Ale vizuálna pohodlnosť je tiež veľmi dôležitá, preto sa snažte vždy všetko štruktúrovať a robiť to v rovnakom štýle.

zahrnúť s návratovou hodnotou

Pamätajte kľúčové slovo? Takže v PHP existuje taká divoká vec, ako je return inside include. Nikdy som to nepoužil a nikdy som nevidel, že by to ostatní používali, ale je to možné, tu je some.php:

Pripojiť some.php:

// Vypíše reťazec: PHP ?>

Ešte pár faktov

  • Súbory môžete zahrnúť kdekoľvek v kóde PHP, vrátane vnútri ;
  • Zahrnutie sa spustí počas vykonávania skriptu vopred;
  • Zahrnutý súbor má rovnakú hodnotu ako riadok, kde je deklarované zahrnutie. To znamená, že ak niekde v strede súboru, tak globálny rozsah, a ak vo vnútri funkcie, tak lokálny. Dovoľte mi ešte raz zdôrazniť, že include je to isté, ako keby ste vzali a skopírovali kód do súboru namiesto include.

Ďakujem všetkým za pozornosť a prajem pekný víkend!

Pár okuliarov...

PHP nemá vstavaný importný rámec ako python, java alebo .net. Existuje niekoľko spôsobov, ako používať knižnice v PHP.

    skompilovať ich do binárneho formátu súbor PHP. Toto je najpokročilejšia metóda a zvyčajne sa neodporúča, pokiaľ nemáte špeciálne potreby.

    Nainštalujte ich ako moduly PHP na server a povoľte ich v PHP.ini. Z pohľadu PHP programátora sú tieto rozšírenia súčasťou PHP – vždy dostupné. Je to jednoduchšie pridávať a odstraňovať bez prestavby samotného PHP.

    Nainštalujte kód PHP niekde na server a zahrňte ho () do svojho skriptu PHP.

    Uložte kópiu knižnice do svojho projektu a zahrňte ju do skriptu PHP.

Stránka zapnutá Základná úroveň kód je buď súčasťou tlmočníka (statického alebo dynamického), alebo je to obyčajný starý PHP kód, ktorý obsahuje () ed vo vašom projekte.

Pre vaše účely môžem len navrhnúť, aby ste sa držali štandardnej distribúcie PHP (vyberte si dobrý operačný systém Linux a použite tento PHP). Potom sú takmer všetky knižnice, ktoré budete potrebovať na úrovni tlmočníka, dostupné ako doplnkové balíčky a zložitosť toho zostáva na tých, ktorí to robia každý deň.

Na RedHat/Centos môžete spustiť:

yum nainštalovať php php-memcached php-gd php-pecl

Strana Pokiaľ ide o všetky ostatné knižnice, ktoré by ste mohli chcieť použiť, pravdepodobne bude najlepšie použiť dobrý rámec PHP, ktorý sa o toto všetko postará za vás.

Niektoré príklady:

  • Zend Framework
  • CakePHP
  • Codeigniter
  • Atď...

(nie v akomkoľvek poradí, len tie, ktoré ma napadnú)

Za predpokladu, že ste na správu kompilovaného PHP a aspektov rozšírenia použili štandardný prístup používania RPM alebo podobného, ​​potom sa dobrý robustný rámec postará o zahrnutie všetkých vašich dodatočný kód PHP knižnica, ktorú potrebujete.

Aký je konečný výsledok: Zameriavate sa na poskytovanie produktu a nie na všetku infraštruktúru, ktorú by ste sa inak museli učiť a vynájsť.

Stránka php.ini sa analyzuje a spustí pri spustení PHP (zakaždým pre príkazový riadok, raz na server sa spustí v Apache). Definuje veľa nastavení, obsahuje veľa modulov, konfiguruje tieto moduly atď.

V skutočnosti môžete prepísať niektoré nastavenia v php.ini pomocou funkcie ini_set() v PHP. Toto však funguje len pri niektorých nastaveniach. Ostatné musia byť nainštalované pred spustením skriptu.

Pri práci pod apache môžete pridať riadky do .htaccess a , ktorý úplne prepíše PHP.ini pre tento adresár/virtuálny hostiteľ.

(opravte moju syntax a odstráňte túto poznámku, ak je nesprávna)

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

Strana Ako odpoveď na vašu otázku č. 6 o vašej vlastnej knižnici a Najlepšia cesta jeho obalu, navrhujem, aby ste najprv zhodnotili potrebu knižnice. A ak niečo robíte, zistite, ako to ľudia najčastejšie robia. Ak je to jednoduchá knižnica, tak stačí .php súbor s dobrou webstránkou.

Stránka môže byť trochu nesúrodá, ale dúfam, že vás to nasmeruje správnym smerom.

Štandardne nie je rozšírenie pre prácu s MySQL (knižnica php_mysql.dll) pripojené k PHP a príslušné funkcie nie sú dostupné. Na pripojenie knižnice musíte vykonať zmeny konfiguračný súbor php.ini a skopírujte ďalšie knižnice do adresára c:/windows/system32.

1. Povedzte PHP (Apache), kde sa nachádza php.ini (iba Apache 2.x)

Ak používate Apache verzie 2 alebo vyššej, nezabudnite do konfiguračného súboru Apache (httpd.conf) pridať direktívu PHPIniDir, ktorá vám umožní určiť presné umiestnenie súboru php.ini. Po pridaní smernice reštartujte Apache a uistite sa, že spustenie bolo úspešné.

PHPIniDir „c:/php“

Poznámka

Upozorňujeme, že cesta je napísaná pomocou lomok /, čo je nezvyčajné pre systém Windows, ktorý používa spätné lomky \\. Faktom je, že Apache aj PHP boli pôvodne vytvorené pre prácu na systémoch Unix, kde sa používajú lomky. Aby ste sa vyhli možným ťažko diagnostikovateľným problémom, dôrazne odporúčame používať lomky v unixovom formáte v konfiguračných súboroch Apache a PHP.

To predpokladá, že konfiguračný súbor php.ini je uložený v adresári c:/php. Aby ste sa uistili, že Apache našiel konfiguračný súbor php.ini, spustite funkciu phpinfo().

Výstup informácií o konfigurácii PHP

echo phpinfo();
?>

Nájdite hodnotu riadka vo výsledných fialových tabuľkách "Cesta konfiguračného súboru (php.ini)". Musí uvádzať cestu k použitému súboru php.ini, vrátane samotného súboru. Ak tento riadok špecifikuje iba adresár, znamená to, že Apache nemohol nájsť súbor php.ini.

C:/php/php.ini // Správne - súbor php.ini bol nájdený a použitý
C:/windows/ // Nesprávne – súbor php.ini sa nenašiel

Poznámka

Apache má viac staršie verzie Neexistovala žiadna direktíva PHPIniDir a v dôsledku toho vzniklo veľa chýb kvôli nesprávnemu umiestneniu súboru php.ini. Pre Apache verzie 1.3 musí byť php.ini umiestnený v systéme Windows adresáre, zvyčajne: c:/Windows. Použitie direktívy PHPIniDir v Apache verzie 2 vám umožňuje radikálne vyriešiť tento problém.

Keď sa ubezpečíte, že Apache používa správne php.ini, môžete ho začať upravovať, aby ste povolili rozšírenie MySQL.

2. Nastavte direktívu extension_dir v PHP.INI

Direktíva extension_dir určuje adresár, v ktorom sa nachádzajú knižnice rozšírení php, vrátane knižnice php_mysql.dll. Ak ste nainštalovali php do adresára c:/php, potom sa knižnice rozšírení zvyčajne nachádzajú v podadresári ext (c:/php/ext). Skontrolujte, či je to pravda, a nastavte smernicu extension_dir na správnu hodnotu.

Extension_dir = "c:/php/ext"

3. Pripojte rozšírenie na prácu s MySQL

Ak to chcete urobiť, nájdite riadok v php.ini:

;extension=php_mysql.dll

A odstráňte z neho symbol komentára - bodkočiarku.

Rozšírenie=php_mysql.dll

4. Skopírujte dodatočnú knižnicu libmysql.dll do c:/windows

Ak máte PHP pripojené k Apache ako modul, potom na pripojenie rozšírenia MySQL potrebujete skopírovať dodatočnú knižnicu libmysql.dll z adresára c:/php do adresára c:/windows/system32. Ak je php pripojený k Apache ako CGI aplikácia, nie je potrebné kopírovanie ďalšej knižnice.

5. Reštartujte Apache

Reštartujte Apache, aby sa všetky zmeny prejavili.

6. Skontrolujte inštaláciu rozšírenia

Aby ste sa uistili, že knižnica MySQL sa úspešne pripojila k PHP, spustite funkciu phpinfo(). Prezrite si „fialové tabuľky“ a nájdite v nich sekciu s názvom MySQL. Ak takáto sekcia existuje, znamená to, že rozšírenie bolo úspešne pripojené.

Kontrola interakcie PHP s MySQL

1. Skontrolujte, či váš server MySQL beží.

Než začnete testovať interakciu PHP s MySQL, uistite sa, že váš MySQL server beží. Môžete to urobiť otvorením zoznamu služby systému Windows: "Štart" | "Ovládací panel" | "Administrácia" | "služby". Nájdite službu s názvom MySQL a uistite sa, že je v spustenom stave (tretí stĺpec tabuľky).

Druhý spôsob, ako sa uistiť, že server MySQL beží: stlačte tlačidlá „Crtl“ + „Alt“ + „Del“ a na karte „Procesy“ nájdite proces s názvom mysqld.exe. Namiesto procesu mysqld.exe môžu fungovať aj nasledujúce procesy: mysqld-nt.exe, mysqld-max-nt.exe, mysqld-debug.exe.

2. Spustite testovací php skript

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

$dbcnx = mysql_connect ($dblocation, $dbuser, $dbpasswd);
ak (! $dbcnx )
{
ozvena "" ;
VÝCHOD();
}
ak(!

{
ozvena "" ;
VÝCHOD();
}

ak(!$ver)
{
ozvena "

Chyba v žiadosti

" ;
VÝCHOD();
}
ozvena
mysql_result($ver, 0);
?>

Ak je test úspešný, na obrazovke sa zobrazí číslo verzie servera MySQL. V opačnom prípade sa na obrazovke zobrazia popisy chýb, ktoré sa vyskytli.

Chyby pri pripájaní rozšírenia pre prácu s MySQL

Chyby ako: Volanie nedefinovanej funkcie

Všetky chyby obsahujúce frázu „Call to undefined function“ označujú nepripojené rozšírenie PHP. Ak sa takéto chyby vyskytnú pri práci s funkciami MySQL, znamená to, že nie je zahrnutá knižnica PHP pre prácu s MySQL - php_mysql.dll

Príklad chybového hlásenia:

Závažná chyba: Volanie nedefinovanej funkcie mysql_connect()

Ak chcete tento problém vyriešiť, pozrite si začiatok článku.

Žiadny blok MySQL v phpinfo()

Ak je všetko urobené správne, ale rozšírenie pre prácu s MySQL sa nepripojí a dokonca vo výstupe funkcie phpinfo() chýba blok MySQL, skontrolujte verziu knižnice libmysql.dll umiestnenú v c:/windows/ systém32.

  1. Porovnajte veľkosť knižnice libmysql.dll, ktorá sa nachádza v c:/windows/system32, s veľkosťou knižnice s rovnakým názvom, ktorá bola nainštalovaná s PHP. Musia byť rovnocenné.
  2. Vyhľadajte knižnice libmysql.dll cez adresár c:/windows a všetky podadresáre. Odstráňte všetky nájdené duplikáty a ponechajte iba jednu požadovanú knižnicu – tú, ktorá bola skopírovaná z adresára c:/php.

Poznámka

K serveru MySQL je dodávaná aj knižnica libmysql.dll s rovnakým názvom. Ide však o rôzne knižnice a ak adresár c:/windows/system32 obsahuje knižnicu z MySQL, tak PHP nebude môcť rozšírenie pripojiť. Knižnica libmysql.dll sa môže automaticky skopírovať do c:/windows/system32 pri inštalácii servera MySQL. Prekážkou sa môže stať aj prítomnosť knižnice zo starej verzie PHP v systémovom adresári.

Prázdna stránka testovacieho skriptu

Skript zobrazený v zozname nižšie sa často používa ako skript na testovanie interakcie PHP s MySQL na našej webovej stránke. Jeho rozdiely od podobného skriptu PHP uvedeného na začiatku článku sú symboly @ pred volaním funkcií mysql_connect() a mysql_select_db(). Tieto znaky sa používajú na potlačenie chybového výstupu do prehliadača. Je užitočné ich použiť na fungujúcej webovej lokalite na internete, aby sa zabránilo zobrazovaniu dôverných informácií v prehliadači, ale pri ladení skriptov nie je potrebné zakazovať výstup chýb, pretože môže to sťažiť diagnostiku problému.

PHP skript, ktorý testuje interakciu PHP so serverom MySQL

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

$dbcnx = @mysql_connect ($dblocation, $dbuser, $dbpasswd);
ak (! $dbcnx )
{
ozvena "

Bohužiaľ, mySQL server nie je dostupný

" ;
VÝCHOD();
}
ak (!@
mysql_select_db ($dbname, $dbcnx))
{
ozvena "

Žiaľ, databáza nie je dostupná

"
;
VÝCHOD();
}
$ver = mysql_query("SELECT VERSION()" );
ak(!$ver)
{
ozvena "

Chyba v žiadosti

"
;
VÝCHOD();
}
ozvena
mysql_result($ver, 0);
?>

Ak sa v dôsledku vykonania tohto skriptu zobrazí prázdna stránka, potom to spravidla znamená, že knižnica php_mysql.dll nie je pripojená k PHP. Ak chcete presnejšie diagnostikovať problém, vykonajte nasledujúcu postupnosť akcií.

  1. Uistite sa, že sú spustené ďalšie PHP skripty, ktoré nepoužívajú databázu MySQL.
  2. Pred volaním funkcií mysql_connect a mysql_select, ktoré sa používajú na potlačenie chybového výstupu do prehliadača, odstráňte symbol @. Potom sa v prehliadači zobrazia úplnejšie informácie o chybách, čo pomôže vyriešiť problém.

Chyba: Nedá sa pripojiť k serveru MySQL na "127.0.0.1" (10061)

Ak sa pri vykonávaní testovacieho skriptu PHP zobrazí chyba podobná nasledujúcej:


Nedá sa pripojiť k serveru MySQL na "127.0.0.1" (10061)
v C:\www\panel\htdocs\test.php v riadku 7

To znamená, že databázový server MySQL nie je spustený. Presnejšia diagnóza tohto problému je uvedená vyššie v odseku 1 podsekcie „Kontrola interakcie PHP s MySQL“.

Chyba: Prístup odmietnutý pre používateľa "root"@"localhost" (pomocou hesla: ÁNO)

S nasledujúcou chybou:

Upozornenie: mysql_connect() :
Prístup odmietnutý pre používateľa "root"@"localhost" (pomocou hesla: ÁNO)
v C:\www\panel\htdocs\test.php v riadku 7

Označuje, že sa pokúšate pripojiť k databáze MySQL s nesprávnym heslom. Skontrolujte hodnotu premennej $dbpasswd v testovacom skripte. Štandardne je server MySQL nainštalovaný s prázdnym heslom užívateľa root. Ak ste sami nastavili heslo pre užívateľa root, potom ho napíšte do premennej $dbpasswd verifikačného skriptu.

Na našom fóre venovanom inštalácii a konfigurácii Apache, PHP a knižníc rozšírení môžete položiť akékoľvek otázky týkajúce sa pripojenia k rozšíreniam PHP, s ktorými budete pracovať.