Cum să conectați biblioteci suplimentare la scripturile PHP. Înțelegerea instalării bibliotecii PHP

O pereche de ochelari...

PHP nu are un cadru de import încorporat precum python, java sau .net. Există mai multe moduri de a folosi bibliotecile în PHP.

    compilați-le într-un binar PHP. Aceasta este cea mai avansată metodă și, de obicei, nu este recomandabilă decât dacă aveți nevoi speciale.

    Instalați-le ca module PHP pe server și activați-le în PHP.ini. Din punctul de vedere al unui programator PHP, aceste extensii fac parte din PHP - întotdeauna disponibile. Este mai ușor să adăugați și să eliminați fără a reconstrui PHP în sine.

    Instalați codul PHP pe server undeva și includeți () în scriptul dvs. PHP.

    Salvați o copie a bibliotecii în proiectul dvs. și includeți-o în scriptul dvs. PHP.

P a g e La un nivel de bază, codul este fie parte a interpretului (static sau dinamic), fie este un cod PHP vechi simplu care include()ed în proiectul dumneavoastră.

Pentru scopurile dvs., vă pot sugera doar să rămâneți cu o distribuție PHP standard (alegeți un sistem de operare Linux bun și utilizați acel PHP). Apoi aproape toate bibliotecile de care veți avea nevoie la nivel de interpret sunt disponibile ca pachete suplimentare, iar complexitatea acestora este lăsată în seama celor care o fac în fiecare zi.

Pe RedHat/Centos puteți rula:

yum instalează php php-memcached php-gd php-pecl

În ceea ce privește toate celelalte biblioteci pe care ați dori să le utilizați, probabil că cel mai bine este să utilizați un cadru PHP bun care să se ocupe de toate acestea pentru dvs.

Câteva exemple:

  • Cadrul Zend
  • CakePHP
  • Codeagniter
  • etc...

(nu in orice ordine, doar cele care iti vin in minte)

Cu condiția că ați folosit abordarea standard de utilizare a RPM sau similar pentru a gestiona aspectele PHP compilate și extensiile, atunci un cadru solid bun se va ocupa de includerea întregului cod suplimentar de bibliotecă PHP de care aveți nevoie.

Care este rezultatul final: vă concentrați pe livrarea produsului, mai degrabă decât pe toată infrastructura pe care altfel ar trebui să o învățați și să o inventați.

Pagina php.ini este analizată și rulată când PHP pornește (de fiecare dată pentru linia de comandă, o dată pe server rulat în apache). Definește multe setări, include multe module, configurează acele module etc.

De fapt, puteți suprascrie unele dintre setările din php.ini folosind funcția ini_set() din PHP. Cu toate acestea, acest lucru funcționează doar pentru anumite setări. Altele trebuie instalate înainte de a rula scriptul.

Când lucrați sub apache puteți adăuga linii la .htaccess și , care suprascrie complet PHP.ini pentru acel director/gazdă virtuală.

(Vă rog să îmi corectați sintaxa și să eliminați această notă dacă este incorectă)

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

Pagina Ca răspuns la întrebarea dvs. #6 despre propria bibliotecă și cel mai bun mod de a o împacheta, vă sugerez să evaluați mai întâi necesitatea bibliotecii. Și dacă faci ceva, află care este cel mai frecvent mod în care oamenii o fac. Dacă este o bibliotecă simplă, atunci este suficient un fișier .php cu un site web bun.

Pagina S-ar putea să fie puțin divagatoare, dar sper că acest lucru vă îndrumă în direcția corectă.

Îmi propun să vorbim puțin despre limbajul de programare PHP și să ating în mod special subiectul extensiilor RĂSUCI, adică capacitatea de a interacționa cu diferite servere folosind protocoale diferite din scriptul PHP însuși.

Înainte de a începe să ne uităm la curl, vreau să vă reamintesc că am atins deja limbajul PHP, de exemplu, în materialul despre încărcarea în Excel în PHP sau despre capacitatea de a se autentifica în PHP, iar acum să vorbim despre capacitatea de a trimite cereri către PHP.

Ce este CURL?

RĂSUCI este o bibliotecă de funcții PHP care poate fi folosită pentru a trimite cereri, cum ar fi HTTP, dintr-un script PHP. CURL acceptă protocoale precum HTTP, HTTPS, FTP și altele. Puteți trimite solicitări HTTP folosind metodele GET, POST și PUT.

CURL poate fi util în cazurile în care trebuie să apelați un script de la distanță și să obțineți rezultatul sau pur și simplu să salvați codul HTML al paginii apelate, în general, fiecare își poate găsi propria utilizare, dar ideea este că puteți trimite cereri în timp ce scriptul rulează.

Conectarea bibliotecii CURL în PHP

Pentru a utiliza biblioteca CURL, trebuie să o conectați în consecință.

Nota! Ca exemplu, vom folosi PHP 5.4.39 pe Windows 7 și vom folosi Apache 2.2.22 ca server Web.

Primul lucru pe care trebuie să-l faceți este să copiați bibliotecile ssleay32.dll, libeay32.dll, libssh2.dll sunt situate în directorul cu PHP, în directorul de sistem Windows și anume în C:\Windows\System32.

Apoi conectați biblioteca php_curl.dll la php.ini, adică. decomentează rândul următor

Biblioteca nu este conectată

;extension=php_curl.dll

Biblioteca conectată

Extensie=php_curl.dll

Gata, reporniți Apache, apelați funcția phpinfo() și dacă conexiunea are succes, ar trebui să aveți o secțiune curl


Dacă nu este acolo, atunci asta înseamnă un singur lucru: biblioteca nu s-a încărcat cel mai frecvent motiv pentru aceasta este că DLL-urile de mai sus nu au fost copiate în directorul de sistem Windows;

Exemplu CURL - solicitarea unei pagini de la distanță pentru a fi afișată pe ecran

În acest exemplu, vom solicita pur și simplu o pagină la distanță prin HTTP folosind metoda GET și vom afișa conținutul acesteia pe ecran.

Avem un director de test în care sunt 2 fișiere PHP: test_curl.php și test.php, unde test_curl.php este scriptul în care vom folosi curl, iar test.php este scriptul la distanță pe care îl vom apela. Am comentat codul în detaliu.

Cod test_curl.php

Cod test.php

Titlul 1"; pauză; cazul 2: ecou"<Н2>Titlul 2"; pauză; cazul 3: ecou"<Н3>Titlul 3"; pauză; ) ) ?>

Ca urmare, dacă rulați test_curl.php, veți vedea mesajul „Tit 1” pe ecran, puteți experimenta cu transmiterea parametrilor de identificare ( în acest caz 2 sau 3).

Exemplu CURL - apelarea unui script la distanță și obținerea rezultatului

Acum să încercăm să apelăm scriptul și să obținem rezultatul, pentru a-l procesa mai târziu, de exemplu, să folosim metoda POST. Să lăsăm aceleași nume de fișiere.

Cod test_curl.php

Cod test.php

Și dacă rulăm test_curl.php, atunci va fi afișat 111 pe ecran, adică. 1.11 obținut ca urmare a accesării unui script la distanță, înmulțit cu 100.

Acum să vorbim despre funcții și constantele lor.

Funcții și constante CURL utilizate în mod obișnuit

  • curl_init - Inițializează o sesiune;
  • curl_close - Închide sesiunea;
  • curl_exec - Execută o solicitare;
  • curl_errno - Returnează codul de eroare;
  • curl_setopt - Setează un parametru pentru sesiune, de exemplu:
    • CURLOPT_HEADER – o valoare de 1 înseamnă că anteturile trebuie returnate;
    • CURLOPT_INFILESIZE - parametru pentru a specifica dimensiunea așteptată a fișierului;
    • CURLOPT_VERBOSE - valoarea 1 înseamnă că CURL va afișa mesaje detaliate despre toate operațiunile efectuate;
    • CURLOPT_NOPROGRESS – dezactivează indicatorul de progres al operațiunii, valoarea 1;
    • CURLOPT_NOBODY – dacă nu aveți nevoie de un document, ci aveți nevoie doar de anteturi, atunci setați valoarea la 1;
    • CURLOPT_UPLOAD - pentru încărcarea unui fișier pe server;
    • CURLOPT_POST – execută o cerere folosind metoda POST;
    • CURLOPT_FTPLISTONLY — obținerea unei liste de fișiere din directorul serverului FTP, valoarea 1;
    • CURLOPT_PUT — execută o cerere folosind metoda PUT, valoarea 1;
    • CURLOPT_RETURNTRANSFER - returnează rezultatul fără a-l scoate în browser, valoarea 1;
    • CURLOPT_TIMEOUT – timpul maxim de execuție în secunde;
    • CURLOPT_URL – specificarea adresei de contact;
    • CURLOPT_USERPWD - un șir cu numele de utilizator și parola sub forma :;
    • CURLOPT_POSTFIELDS – date pentru cererea POST;
    • CURLOPT_REFERER - setează valoarea antetului HTTP „Referer:”;
    • CURLOPT_USERAGENT - setează valoarea antetului HTTP „User-Agent:”;
    • CURLOPT_COOKIE — conținutul antetului „Cookie:” care va fi trimis împreună cu solicitarea HTTP;
    • CURLOPT_SSLCERT - numele fișierului cu certificatul în format PEM;
    • CURLOPT_SSL_VERIFYPEER – valoarea 0, pentru a dezactiva verificarea certificatului de server la distanță (implicit 1);
    • CURLOPT_SSLCERTPASSWD — parola pentru fișierul de certificat.
  • curl_getinfo - Returnează informații despre operație, al doilea parametru poate fi o constantă pentru a indica exact ce trebuie afișat, de exemplu:
    • CURLINFO_EFFECTIVE_URL - ultima adresă URL utilizată;
    • CURLINFO_HTTP_CODE - ultimul cod HTTP primit;
    • CURLINFO_FILETIME — data modificării documentului încărcat;
    • CURLINFO_TOTAL_TIME — timpul de executare a operațiunii în secunde;
    • CURLINFO_NAMELOOKUP_TIME — timpul de rezoluție a numelui serverului în secunde;
    • CURLINFO_CONNECT_TIME — timpul petrecut pentru stabilirea unei conexiuni, în secunde;
    • CURLINFO_PRETRANSFER_TIME — timpul scurs de la începutul operațiunii până la pregătirea pentru transferul efectiv de date, în secunde;
    • CURLINFO_STARTTRANSFER_TIME — timpul scurs de la începutul operațiunii până la transferul primului octet de date, în secunde;
    • CURLINFO_REDIRECT_TIME — timpul petrecut pentru redirecționare, în secunde;
    • CURLINFO_SIZE_UPLOAD - numărul de octeți la încărcare;
    • CURLINFO_SIZE_DOWNLOAD - numărul de octeți la descărcare;
    • CURLINFO_SPEED_DOWNLOAD - viteza medie de descărcare;
    • CURLINFO_SPEED_UPLOAD - viteza medie de descărcare;
    • CURLINFO_HEADER_SIZE - dimensiunea totală a tuturor antetelor primite;
    • CURLINFO_REQUEST_SIZE - dimensiunea totală a tuturor solicitărilor trimise;
    • CURLINFO_SSL_VERIFYRESULT - rezultatul verificării certificatului SSL solicitat prin setarea parametrului CURLOPT_SSL_VERIFYPEER;
    • CURLINFO_CONTENT_LENGTH_DOWNLOAD - dimensiunea documentului descărcat, citită din antetul Content-Length;
    • CURLINFO_CONTENT_LENGTH_UPLOAD - dimensiunea datelor încărcate;
    • CURLINFO_CONTENT_TYPE - conținutul antetului de tip Content primit sau NULL dacă acest antet nu a fost primit.

Puteți afla mai multe despre funcțiile CURL și constantele pentru ele pe site-ul oficial PHP -

Nota: Este activată versiunea adaptivă a site-ului, care se adaptează automat la dimensiunea redusă a browserului dumneavoastră și ascunde câteva detalii ale site-ului pentru ușurință în citire. Vizionare placuta!

O zi bună tuturor cititorilor blogului Site pe! În ultimele 2 luni, munca mea pentru companie a fost strâns legată de PHP pur (folosirea cadrelor și a CMS-ului este tabu), am uitat deja ce este Joomla :) așa că ar fi mai potrivit ca niciodată să continui să scriu mai sus.

Astăzi vom vorbi despre cum funcționează conectarea fișierelor în PHP. După cum probabil ați observat, orice motor pentru un site web (Joomla, Wordpress, OpenCart, DLE și tot, totul, totul) constă din mii de fișiere .php (și nu numai php) și toate interacționează între ele, care de fapt formează locul mecanismului de lucru.

Acum uitați de motoare și imaginați-vă un alt exemplu: avem multe pagini pe site, fiecare dintre ele având același meniu, antet și subsol de site. Desigur, nu vom copia același lucru din fișier în fișier, altfel s-ar dovedi a fi un vechi site HTML din anii 90. Cel puțin, vom împărți totul în 4 fișiere:

  • index.php – partea principală a paginii, acest fișier se va schimba
  • menu.php – meniul site-ului
  • header.php – antetul site-ului
  • footer.php – subsolul site-ului

Pe lângă pagina principală (index.php), de exemplu, putem avea și pagini cu o listă de produse (category.php) și pagini ale produselor în sine (product.php). Va fi convenabil să conectați fișierele menu.php, header.php, footer.php la aceste pagini. Datorită acestei abordări, dacă adăugăm un nou element de meniu, îl vom adăuga o singură dată (în menu.php), și nu de 3 ori (în index.php, product.php, category.php).

Prin urmare, se pune întrebarea: „Cum să atașez un fișier în PHP?”. În aceste scopuri, există 2 instrucțiuni în PHP:

Și derivatele lor:

Vă atrag atenția asupra faptului că include și cere nu sunt funcții, acestea sunt așa-numitele constructe ale limbajului, deci nu sunt necesare paranteze.

Care este diferența dintre include și require

includeŞi cere- acesta este absolut același lucru, cu singura diferență că, dacă există o eroare (de exemplu, dacă fișierul specificat nu există și nu poate fi inclus), include va genera o eroare de genul Avertizare, după care site-ul va continua să funcționeze și va solicita va emite , care va opri complet încărcarea ulterioară a paginii.

Adică, instrucțiunile necesare sunt mai radicale și mai stricte. Ceea ce este mai bine să folosiți depinde de dvs. să decideți în mare, este recomandat să alegeți întotdeauna opțiunea mai strictă, adică să solicitați, dar personal, mi se pare mai plăcut să introduceți cuvântul include :)

include_once și require_once – fac același lucru ca include (include un fișier), dar în același timp se asigură că fiecare fișier este inclus nu mai mult de o dată. Sunt deosebit de convenabile de utilizat dacă mai multe persoane lucrează la un proiect și trebuie să vă asigurați că un anumit fișier nu este adăugat de mai multe ori.

Atenţie:

include_o datăŞi cere_o dată– sunt mai lente și consumă mai multă RAM decât includ și necesită. Acest lucru este logic și se datorează faptului că trebuie să-și amintească toate fișierele care au fost conectate și de fiecare dată când se conectează, verifică dacă acest fișier a fost deja conectat.

Permiteți-mi să ilustrez clar cum funcționează conectarea fișierelor în PHP:

Când conectați fișiere (orice, de exemplu: html, txt, php, xml, etc.) la un script PHP, conținutul lor este inserat stupid în loc de include. Cu alte cuvinte, include (și vreau să spun, de asemenea, cere, deoarece sunt același lucru) este același ca și cum ați copia (CTRL+C) cod de undeva și ați lipit (CTRL+V) într-un fișier (de exemplu, produs. php), apoi salvat și lansat ca de obicei: http://your_site.net/product.php

Pentru a distinge fișierele principale, precum product.php, de cele pe care le conectăm la el (menu.php, header.php, footer.php), fișierele conectate sunt redenumite astfel: menu.inc.php, header .inc.php , footer.inc.php. Datorită acestui lucru, atunci când mergem într-un folder, vom vedea imediat unde sunt fișierele principale și unde sunt cele auxiliare.

Atenţie:

Această tehnică (adăugați inc) este utilizată numai pentru comoditate vizuală și nu prezintă nicio diferență funcțională. Dar comoditatea vizuală este, de asemenea, foarte importantă, așa că încercați să structurați întotdeauna totul și să o faceți în același stil.

include cu valoarea returnată

Vă amintiți cuvântul cheie? Deci, în PHP există un lucru atât de sălbatic precum returnarea în interiorul include. Nu l-am folosit niciodată și nu am văzut pe alții să-l folosească, dar este posibil, iată some.php:

Conectați some.php:

// Tipărește șirul: PHP ?>

Mai multe fapte

  • Puteți include fișiere oriunde în codul PHP, inclusiv în interiorul ;
  • Include (include) este declanșată în timpul execuției scriptului nu se întâmplă nimic în fișierele incluse;
  • Fișierul inclus are aceeași linie în care este declarată includerea. Adică, dacă undeva în mijlocul unui fișier, atunci domeniul global, iar dacă este în interiorul unei funcții, atunci cel local. Permiteți-mi să subliniez încă o dată că include este același ca și cum ați prelua și copiat codul într-un fișier în loc de include.

Mulțumesc tuturor pentru atenție și un weekend minunat!

În mod implicit, extensia pentru lucrul cu MySQL (biblioteca php_mysql.dll) nu este conectată la PHP și funcțiile corespunzătoare nu sunt disponibile. Pentru a conecta biblioteca, trebuie să faceți modificări în fișierul de configurare php.ini și să copiați biblioteci suplimentare în directorul c:/windows/system32.

1. Spuneți PHP (Apache) unde se află php.ini (numai Apache 2.x)

Dacă utilizați Apache versiunea 2 sau mai mare, asigurați-vă că adăugați directiva PHPIniDir în fișierul de configurare Apache (httpd.conf), care vă permite să specificați locația exactă a fișierului php.ini. După adăugarea directivei, reporniți Apache și asigurați-vă că pornirea a avut succes.

PHPIniDir „c:/php”

Nota

Vă rugăm să rețineți că calea este scrisă folosind barele oblice înainte /, ceea ce este neobișnuit pentru Windows, care utilizează barele oblice inverse \\. Faptul este că atât Apache, cât și PHP au fost create inițial pentru a funcționa pe sisteme Unix, unde sunt folosite barele oblice. Pentru a evita posibile probleme dificil de diagnosticat, vă recomandăm insistent să utilizați bare oblice în format Unix în fișierele de configurare Apache și PHP.

Aceasta presupune că fișierul de configurare php.ini este stocat în directorul c:/php. Pentru a vă asigura că Apache a găsit fișierul de configurare php.ini, rulați funcția phpinfo().

Ieșirea informațiilor de configurare PHP

echo phpinfo();
?>

Găsiți valoarea rândului în tabelele violet rezultate „Calea fișierului de configurare (php.ini)”. Trebuie să indice calea către fișierul php.ini folosit, inclusiv fișierul în sine. Dacă această linie specifică doar un director, înseamnă că Apache nu a putut găsi fișierul php.ini.

C:/php/php.ini // Corect - php.ini găsit și folosit
C:/windows/ // Incorect - php.ini nu a fost găsit

Nota

În Apache, versiunile anterioare ale directivei PHPIniDir nu existau și, ca urmare, au apărut o mulțime de erori din cauza locației incorecte a fișierului php.ini. Pentru Apache versiunea 1.3, php.ini trebuie să fie localizat în directorul de sistem Windows, de obicei: c:/Windows. Folosirea directivei PHPIniDir în versiunea 2 a Apache vă permite să rezolvați radical această problemă.

După ce v-ați asigurat că Apache folosește php.ini corect, puteți începe să îl editați pentru a activa extensia MySQL.

2. Configurați directiva extension_dir în PHP.INI

Directiva extension_dir specifică directorul în care se află bibliotecile de extensii php, inclusiv biblioteca php_mysql.dll. Dacă ați instalat php în directorul c:/php, atunci bibliotecile de extensii se află de obicei în subdirectorul ext (c:/php/ext). Verificați dacă acest lucru este adevărat și setați directiva extension_dir la valoarea corectă.

Extension_dir = "c:/php/ext"

3. Conectați extensia pentru a lucra cu MySQL

Pentru a face acest lucru, găsiți linia în php.ini:

;extension=php_mysql.dll

Și eliminați simbolul comentariului de pe acesta - punct și virgulă.

Extensie=php_mysql.dll

4. Copiați biblioteca suplimentară libmysql.dll în c:/windows

Dacă aveți PHP conectat la Apache ca modul, atunci pentru a conecta extensia MySQL trebuie să copiați biblioteca suplimentară libmysql.dll din directorul c:/php în directorul c:/windows/system32. Dacă php este conectat la Apache ca o aplicație CGI, atunci nu este necesară copierea unei biblioteci suplimentare.

5. Reporniți Apache

Reporniți Apache pentru ca toate modificările să intre în vigoare.

6. Verificați instalarea extensiei

Pentru a vă asigura că biblioteca MySQL s-a conectat cu succes la PHP, rulați funcția phpinfo(). Căutați prin „tabelele violet” și găsiți o secțiune în ele numită MySQL. Dacă există o astfel de secțiune, înseamnă că extensia a fost conectată cu succes.

Verificarea interacțiunii PHP cu MySQL

1. Verificați dacă serverul dvs. MySQL rulează.

Înainte de a începe să testați interacțiunea PHP cu MySQL, asigurați-vă că serverul dvs. MySQL rulează. Acest lucru se poate face prin deschiderea listei de servicii Windows: „Începe” | „Panou de control” | „Administrație” | „Servicii”. Găsiți serviciul numit MySQL și asigurați-vă că este într-o stare de rulare (a treia coloană a tabelului).

A doua modalitate de a vă asigura că serverul MySQL rulează: apăsați butoanele „Crtl” + „Alt” + „Del” și în fila „Procese”, găsiți procesul numit mysqld.exe. Următoarele procese pot funcționa, de asemenea, în locul procesului mysqld.exe: mysqld-nt.exe, mysqld-max-nt.exe, mysqld-debug.exe.

2. Rulați scriptul php de testare

$dblocation = "127.0.0.1" ;
$dbname = "test" ;
$dbuser = "rădăcină" ;
$dbpasswd = "" ;

$dbcnx = mysql_connect ($dblocation, $dbuser, $dbpasswd);
dacă (! $dbcnx )
{
ecou "" ;
Ieșire();
}
dacă(!

{
ecou "" ;
Ieșire();
}

dacă(!$ver)
{
ecou "

Eroare la cerere

" ;
Ieșire();
}
ecou
mysql_result($ver, 0);
?>

Dacă testul are succes, numărul versiunii serverului MySQL va fi afișat pe ecran. În caz contrar, pe ecran vor fi afișate descrieri ale erorilor apărute.

Erori la conectarea extensiei pentru lucrul cu MySQL

Erori precum: Apel la funcția nedefinită

Toate erorile care conțin expresia „Apel la funcția nedefinită” indică o extensie PHP neconectată. Dacă apar astfel de erori atunci când lucrați cu funcții MySQL, aceasta înseamnă că biblioteca PHP pentru lucrul cu MySQL - php_mysql.dll - nu este inclusă

Exemplu de mesaj de eroare:

Eroare fatală: apel la funcția nedefinită mysql_connect()

Pentru a rezolva această problemă, consultați începutul articolului.

Niciun bloc MySQL în phpinfo()

Dacă totul este făcut corect, dar extensia pentru lucrul cu MySQL nu se conectează și chiar și blocul MySQL lipsește din ieșirea funcției phpinfo(), atunci verificați versiunea bibliotecii libmysql.dll aflată în c:/windows/ sistem32.

  1. Comparați dimensiunea bibliotecii libmysql.dll, care se află în c:/windows/system32, cu dimensiunea bibliotecii cu același nume, care a fost instalată cu PHP. Ele trebuie să fie egale.
  2. Localizați bibliotecile libmysql.dll prin directorul c:/windows și prin toate subdirectoarele. Eliminați toate duplicatele găsite și lăsați o singură bibliotecă necesară - cea care a fost copiată din directorul c:/php.

Nota

Biblioteca libmysql.dll cu același nume este, de asemenea, furnizată împreună cu serverul MySQL. Totuși, acestea sunt biblioteci diferite și dacă directorul c:/windows/system32 conține biblioteca din MySQL, atunci PHP nu va putea conecta extensia. Biblioteca libmysql.dll poate fi copiată automat în c:/windows/system32 la instalarea serverului MySQL. Prezența unei biblioteci dintr-o versiune veche de PHP în directorul de sistem poate deveni, de asemenea, un obstacol.

Pagina de script de testare goală

Scriptul prezentat în lista de mai jos este adesea folosit ca un script pentru a testa interacțiunea PHP cu MySQL pe site-ul nostru. Diferențele sale față de scriptul PHP similar dat la începutul articolului sunt simbolurile @ înainte de a apela funcțiile mysql_connect() și mysql_select_db(). Aceste caractere sunt folosite pentru a suprima ieșirea de eroare în browser. Ele sunt utile pentru a fi utilizate pe un site web care funcționează pe Internet pentru a preveni afișarea informațiilor confidențiale în browser, dar la depanarea scripturilor, interzicerea ieșirii erorilor nu este necesară, deoarece poate face dificilă diagnosticarea problemei.

Script PHP care testează interacțiunea PHP cu serverul MySQL

$dblocation = "127.0.0.1" ;
$dbname = "test" ;
$dbuser = "rădăcină" ;
$dbpasswd = "" ;

$dbcnx = @mysql_connect ($dblocation, $dbuser, $dbpasswd);
dacă (! $dbcnx )
{
ecou "

Din păcate, serverul mySQL nu este disponibil

" ;
Ieșire();
}
dacă (!@
mysql_select_db ($dbname, $dbcnx))
{
ecou "

Din păcate, baza de date nu este disponibilă

"
;
Ieșire();
}
$ver = mysql_query("SELECT VERSIUNE()");
dacă(!$ver)
{
ecou "

Eroare la cerere

"
;
Ieșire();
}
ecou
mysql_result($ver, 0);
?>

Dacă, în urma executării acestui script, este afișată o pagină goală, atunci, de regulă, aceasta înseamnă că biblioteca php_mysql.dll nu este conectată la PHP. Pentru a diagnostica mai precis problema, efectuați următoarea secvență de acțiuni.

  1. Asigurați-vă că rulează alte scripturi PHP care nu folosesc baza de date MySQL.
  2. Eliminați simbolul @ înainte de a apela funcțiile mysql_connect și mysql_select, care este folosit pentru a suprima ieșirea de eroare în browser. După aceasta, în browser vor fi afișate informații mai complete despre erori, ceea ce va ajuta la rezolvarea problemei.

Eroare: nu se poate conecta la serverul MySQL pe „127.0.0.1” (10061)

Dacă, la executarea scriptului de testare PHP, este afișată o eroare similară cu următoarea:


Nu se poate conecta la serverul MySQL pe „127.0.0.1” (10061)
în C:\www\panel\htdocs\test.php pe linia 7

Aceasta indică faptul că serverul de baze de date MySQL nu rulează. O diagnosticare mai precisă a acestei probleme este dată mai sus în paragraful 1 al subsecțiunii „Verificarea interacțiunii PHP cu MySQL”.

Eroare: Acces refuzat utilizatorului „root”@“localhost” (folosind parola: YES)

Avand urmatoarea eroare:

Avertisment: mysql_connect() :
Acces refuzat utilizatorului „root”@”localhost” (folosind parola: YES)
în C:\www\panel\htdocs\test.php pe linia 7

Indică faptul că încercați să vă conectați la baza de date MySQL cu o parolă incorectă. Verificați valoarea variabilei $dbpasswd în scriptul de testare. În mod implicit, serverul MySQL este instalat cu o parolă de utilizator root goală. Dacă setați singur o parolă pentru utilizatorul root, atunci scrieți-o în variabila $dbpasswd a scriptului de verificare.

Puteți adresa orice întrebări despre conectarea la extensiile PHP pentru a lucra pe forumul nostru dedicat instalării și configurării Apache, PHP și bibliotecile de extensii.

Igor Guzey

Aceasta nu este o instrucțiune exactă și definitivă de acțiune folosind termenii corecti și opțiunile optime. Acesta este mai mult un jurnal al problemei curente.

Sarcină: Adăugați suport/modul GD2 la PHP

Ca de obicei, începem antrenamentul pe un computer local și, desigur, rulează sub Windows.

Mai precis Windows XP SP2.

Apoi, să conectăm GD2 în PHP, configurat prin porturi sau compilat manual pentru FreeBSD.
Conectarea GD2 la PHP pe Windows
Găsim în distribuție:
\php-4.3.9-Win32.zip\php-4.3.9-Win32\extensions\
biblioteca php_gd2.dll, adică versiunea 2.
și copiați php_gd2.dll în c:\windows

Dacă eliminați în mod naiv comentariul din php.ini mai întâi și credeți că este suficient, atunci după repornirea Apache va apărea diagnosticarea:
„Nu se poate încărca biblioteca dinamică „./php_gd.dll” – Modulul specificat nu a fost găsit.”

Conectarea GD2 la PHP sub FreeBSD

PHP este deja instalat din porturi

Mai exact, nu numai PHP, ci în general totul (php, MySQL, Apache, ...) a fost configurat folosind porturi.

# cd /usr/ports/lang/php4-extensions # make config adăugați o casetă de selectare: „GD library support” # make deinstall # make reinstall # apachectl -k graceful soft restart sau # apachectl restart rough restart

PHP este compilat manual

În acest caz, sunt necesare lucrări preliminare pentru pregătirea JPEG și ZLIB

Instalarea suportului JPEG

Opțiuni posibile

JPEG din port
# cd /usr/ports/graphics/jpeg # make got directory work/jpeg-6b nu face make install
JPEG din distribuție
# 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

Trebuie să instalați suportul zlib

Din port
# cd /usr/ports/archivers/php4-zlib # make Bibliotecile au fost instalate în: /usr/ports/archivers/php4-zlib/work/php-4.4.4/ext/zlib/modules

Construirea PHP

# cd /usr/dist/php-4.4.4 # ./configure --with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd fără a specifica un director Biblioteca GD construită în PHP este instalată.

--with-jpeg-dir=/usr/ports/graphics/jpeg/work/jpeg-6b dacă jpeg este de la port sau /usr/dist/jpeg-6b dacă jpeg este din distribuție --with-zlib-dir =/ usr/ports/archivers/php4-zlib/work/php-4.4.4/ext/zlib/modules # make install && make clean

Testaregif.php:png.phpjpg.php:
gd_info.php: CHEIEVAL
$val) echo " $key



$val"; ?>

Erori trecute

La instalarea bibliotecii JPEG, după „make” a fost făcută comanda „make install” cu așteptarea ca fișierele noi să meargă în /usr/local și apoi să fie găsite automat acolo

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

Dar din anumite motive, JPEG nu s-a conectat. Nu a existat un diagnostic negativ și nici un rezultat.

# ./configure --with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd=/usr/local Vă mulțumim că folosiți PHP. # make install /usr/dist/php-4.4.4/ext/gd/gd.c:1151: referință nedefinită la `gdImageRotate” în timp ce directorul pentru GD pare să fie specificat, dar diagnosticul se referă la directorul încorporat ./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 Vă mulțumim pentru folosind PHP # make install ... /usr/dist/php-4.4.4/ext/gd/gd.c:837: referință nedefinită la `gdImageColorMatch" /usr/dist/php-4.4.4/ext/gd. /gd.c:1151: referință nedefinită la `gdImageRotate" *** Cod de eroare 1

Încercarea de a pregăti toate modulele separat și de a le indica exact.