PHP-də faylların birləşdirilməsi prinsipi. PHP CURL - funksiyalar və istifadə nümunələrinə dəyərin qaytarılması daxildir




Bir cüt eynək...

PHP-də python, java və ya .net kimi daxili idxal çərçivəsi yoxdur. PHP-də kitabxanalardan istifadə etməyin bir neçə yolu var.

    onları PHP binarına tərtib edin. Bu, ən qabaqcıl üsuldur və xüsusi ehtiyaclarınız olmadığı halda adətən məsləhət görülmür.

    Onları serverdə PHP modulları kimi quraşdırın və PHP.ini-də aktivləşdirin. PHP proqramçısının nöqteyi-nəzərindən bu genişlənmələr PHP-nin bir hissəsidir - həmişə mövcuddur. PHP-nin özünü yenidən qurmadan əlavə etmək və silmək daha asandır.

    PHP kodunu serverdə bir yerə quraşdırın və onu PHP skriptinizə daxil edin ().

    Kitabxananın bir nüsxəsini layihənizdə saxlayın və onu PHP skriptinizə daxil edin.

P a g e Əsas səviyyədə kod ya tərcüməçinin bir hissəsidir (statik və ya dinamik) və ya layihənizdə() ed-i ehtiva edən sadə köhnə PHP kodudur.

Məqsədlərinizə görə, mən sizə yalnız standart PHP paylanması ilə bağlı olmağı təklif edə bilərəm (yaxşı Linux ƏS seçin və həmin PHP-dən istifadə edin). Sonra tərcüməçi səviyyəsində ehtiyac duyacağınız demək olar ki, bütün kitabxanalar əlavə paketlər kimi mövcuddur və onun mürəkkəbliyi hər gün bunu edənlərin öhdəsinə düşür.

RedHat/Centos-da siz işləyə bilərsiniz:

yum php php-memcached php-gd php-pecl-i quraşdırın

Səhifə İstifadə etmək istəyə biləcəyiniz bütün digər kitabxanalar kimi, bütün bunları sizin üçün həll edəcək yaxşı PHP çərçivəsindən istifadə etmək yəqin ki, ən yaxşısıdır.

Bəzi nümunələr:

  • Zend Çərçivəsi
  • CakePHP
  • Codeigniter
  • və s...

(heç bir sıra ilə deyil, sadəcə ağlına gələnlər)

Bir şərtlə ki, siz tərtib edilmiş PHP və genişləndirmə aspektlərini idarə etmək üçün RPM və ya oxşar istifadə standart yanaşmasından istifadə etmisinizsə, o zaman yaxşı möhkəm çərçivə sizə lazım olan bütün əlavə PHP kitabxana kodunu daxil etməklə məşğul olacaq.

Nəticə nədir: siz başqa cür öyrənmək və icad etməli olduğunuz bütün infrastrukturdan daha çox məhsulun çatdırılmasına diqqət yetirirsiniz.

PHP başlayanda php.ini səhifəsi təhlil edilir və işə salınır (hər dəfə komanda xətti üçün, hər server apache-də bir dəfə işləyir). O, bir çox parametrləri müəyyənləşdirir, bir çox modulları ehtiva edir, həmin modulları konfiqurasiya edir və s.

Əslində, siz PHP-də ini_set() funksiyasından istifadə edərək php.ini-də bəzi parametrləri ləğv edə bilərsiniz. Ancaq bu yalnız bəzi parametrlər üçün işləyir. Digərləri skripti işə salmazdan əvvəl quraşdırılmalıdır.

Apache altında işləyərkən siz .htaccess-ə sətirlər əlavə edə bilərsiniz və , bu kataloq/virtual host üçün PHP.ini-ni tamamilə ləğv edir.

(zəhmət olmasa sintaksisimi düzəldin və səhvdirsə bu qeydi silin)

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

Səhifə Öz kitabxananız və onu qablaşdırmağın ən yaxşı yolu ilə bağlı 6-cı sualınıza cavab olaraq əvvəlcə kitabxanaya olan ehtiyacı qiymətləndirməyi təklif edirəm. Və əgər bir şey edirsinizsə, insanların bunu ən ümumi üsulunu tapın. Sadə bir kitabxanadırsa, yaxşı veb-saytı olan .php faylı kifayətdir.

Səhifə bir az dolaşıq ola bilər, amma ümid edirəm ki, bu sizi düzgün istiqamətə yönəldir.

Varsayılan olaraq, MySQL ilə işləmək üçün genişlənmə (php_mysql.dll kitabxanası) PHP-yə qoşulmayıb və müvafiq funksiyalar mövcud deyil. Kitabxanaya qoşulmaq üçün php.ini konfiqurasiya faylında dəyişikliklər etməli və əlavə kitabxanaları c:/windows/system32 qovluğuna köçürməlisiniz.

1. PHP-yə (Apache) php.ini-nin harada yerləşdiyini bildirin (yalnız Apache 2.x)

Əgər siz Apache 2 və ya daha yüksək versiyanı istifadə edirsinizsə, php.ini faylının dəqiq yerini təyin etməyə imkan verən Apache konfiqurasiya faylına (httpd.conf) PHPIniDir direktivini əlavə etməyi unutmayın. Direktivi əlavə etdikdən sonra Apache-ni yenidən başladın və başlanğıcın uğurlu olduğuna əmin olun.

PHPIniDir “c:/php”

Qeyd

Nəzərə alın ki, yol irəli slashes / istifadə edərək yazılır, bu, əks kəsiklərdən \\ istifadə edən Windows üçün qeyri-adidir. Məsələ burasındadır ki, həm Apache, həm də PHP əvvəlcə eğik işarələrin istifadə edildiyi Unix sistemlərində işləmək üçün yaradılmışdır. Mümkün çətin diaqnoz qoyulan problemlərin qarşısını almaq üçün biz Apache və PHP konfiqurasiya fayllarında unix formatında irəli slashlardan istifadə etməyi şiddətlə tövsiyə edirik.

Bu, php.ini konfiqurasiya faylının c:/php qovluğunda saxlandığını nəzərdə tutur. Apache-nin php.ini konfiqurasiya faylını tapdığından əmin olmaq üçün phpinfo() funksiyasını işə salın.

PHP konfiqurasiya məlumatının çıxarılması

echo phpinfo();
?>

Yaranan bənövşəyi cədvəllərdə sıra dəyərini tapın "Konfiqurasiya faylı (php.ini) yolu". İstifadə olunan php.ini faylına gedən yolu göstərməlidir, faylın özü də daxil olmaqla. Əgər bu sətir yalnız kataloqu göstərirsə, bu o deməkdir ki, Apache php.ini faylını tapa bilməyib.

C:/php/php.ini // Düzgün - php.ini tapıldı və istifadə edildi
C:/windows/ // Səhv - php.ini tapılmadı

Qeyd

Apache-də PHPIniDir direktivinin əvvəlki versiyaları mövcud deyildi və nəticədə php.ini faylının yanlış yerləşməsi səbəbindən çoxlu xətalar baş verdi. Apache 1.3 versiyası üçün php.ini Windows sistem kataloqunda yerləşməlidir, adətən: c:/Windows. Apache 2-ci versiyada PHPIniDir direktivindən istifadə bu problemi kökündən həll etməyə imkan verir.

Apache-nin düzgün php.ini istifadə etdiyinə əmin olduqdan sonra MySQL genişləndirilməsini aktivləşdirmək üçün onu redaktə etməyə başlaya bilərsiniz.

2. PHP.INI-də extension_dir direktivini qurun

extension_dir direktivi php_mysql.dll kitabxanası da daxil olmaqla, php genişləndirmə kitabxanalarının yerləşdiyi kataloqu müəyyən edir. Əgər siz c:/php qovluğunda php quraşdırmısınızsa, onda genişləndirmə kitabxanaları adətən ext alt kataloqunda (c:/php/ext) yerləşir. Bunun doğru olub olmadığını yoxlayın və extension_dir direktivini düzgün qiymətə təyin edin.

Extension_dir = "c:/php/ext"

3. MySQL ilə işləmək üçün genişləndirməni birləşdirin

Bunu etmək üçün php.ini-də xətti tapın:

;extension=php_mysql.dll

Və oradan şərh simvolunu - nöqtəli vergülü çıxarın.

Extension=php_mysql.dll

4. Əlavə libmysql.dll kitabxanasını c:/windows-a köçürün

Əgər sizdə modul kimi Apache-yə qoşulmuş PHP varsa, o zaman MySQL genişləndirilməsinə qoşulmaq üçün c:/php qovluğundan libmysql.dll əlavə kitabxanasını c:/windows/system32 qovluğuna köçürməlisiniz. Əgər php Apache-yə CGI proqramı kimi qoşulubsa, əlavə kitabxananın kopyalanması tələb olunmur.

5. Apache-ni yenidən başladın

Bütün dəyişikliklərin qüvvəyə minməsi üçün Apache-ni yenidən başladın.

6. Uzatmanın quraşdırılmasını yoxlayın

MySQL kitabxanasının PHP-yə uğurla qoşulduğuna əmin olmaq üçün phpinfo() funksiyasını işə salın. "Bənövşəyi cədvəllər"ə baxın və onların içərisində MySQL adlı bölmə tapın. Əgər belə bir bölmə varsa, bu, genişləndirmənin uğurla bağlandığını göstərir.

PHP-nin MySQL ilə qarşılıqlı əlaqəsinin yoxlanılması

1. MySQL serverinizin işlək olub olmadığını yoxlayın.

PHP-nin MySQL ilə qarşılıqlı əlaqəsini sınamağa başlamazdan əvvəl MySQL serverinizin işlədiyinə əmin olun. Bu, Windows xidmətlərinin siyahısını açmaqla edilə bilər: "Başla" | "İdarəetmə Paneli" | "İdarəetmə" | "Xidmətlər". MySQL adlı xidməti tapın və onun işlək vəziyyətdə olduğundan əmin olun (cədvəlin üçüncü sütunu).

MySQL serverinin işlədiyinə əmin olmağın ikinci yolu: "Crtl" + "Alt" + "Del" düymələrini basın və "Proseslər" sekmesinde mysqld.exe adlı prosesi tapın. mysqld.exe prosesinin əvəzinə aşağıdakı proseslər də işləyə bilər: mysqld-nt.exe, mysqld-max-nt.exe, mysqld-debug.exe.

2. Test php skriptini işə salın

$dblocation = "127.0.0.1" ;
$dbname = "test" ;
$dbuser = "kök" ;
$dbpasswd = "" ;

$dbcnx = mysql_connect ($dblocation, $dbuser, $dbpasswd);
əgər (! $dbcnx )
{
əks-səda "" ;
çıxış();
}
əgər(!

{
əks-səda "" ;
çıxış();
}

if(!$ver)
{
əks-səda "

Sorğuda səhv

" ;
çıxış();
}
əks-səda
mysql_result($ver, 0);
?>

Test uğurlu olarsa, MySQL serverinin versiya nömrəsi ekranda görünəcək. Əks halda, baş vermiş səhvlərin təsvirləri ekranda göstəriləcək.

MySQL ilə işləmək üçün uzantıya qoşulma zamanı səhvlər

Bu kimi xətalar: Müəyyən edilməmiş funksiyaya zəng edin

“Müəyyən edilməmiş funksiyaya zəng” ifadəsini ehtiva edən bütün xətalar əlaqəsiz PHP genişlənməsini göstərir. MySQL funksiyaları ilə işləyərkən belə xətalar baş verirsə, bu o deməkdir ki, MySQL ilə işləmək üçün PHP kitabxanası - php_mysql.dll - daxil deyil.

Misal xəta mesajı:

Ölümcül xəta: təyin olunmamış mysql_connect() funksiyasına zəng edin

Bu problemi həll etmək üçün məqalənin əvvəlinə müraciət edin.

phpinfo()-da MySQL bloku yoxdur

Hər şey düzgün aparılıbsa, lakin MySQL ilə işləmək üçün genişləndirmə qoşulmursa və hətta phpinfo() funksiyasının çıxışında MySQL bloku yoxdursa, c:/windows/ ünvanında yerləşən libmysql.dll kitabxanasının versiyasını yoxlayın. sistem 32.

  1. c:/windows/system32-də yerləşən libmysql.dll kitabxanasının ölçüsünü PHP ilə quraşdırılmış eyniadlı kitabxananın ölçüsü ilə müqayisə edin. Onlar bərabər olmalıdır.
  2. C:/windows kataloqu və bütün alt kataloqlar vasitəsilə libmysql.dll kitabxanalarını tapın. Tapılan bütün dublikatları silin və yalnız bir tələb olunan kitabxananı - c:/php qovluğundan kopyalananı buraxın.

Qeyd

Eyni adlı libmysql.dll kitabxanası da MySQL serveri ilə təchiz edilmişdir. Bununla belə, bunlar müxtəlif kitabxanalardır və əgər c:/windows/system32 qovluğunda MySQL-dən olan kitabxana varsa, PHP genişləndirməni birləşdirə bilməyəcək. MySQL serverini quraşdırarkən libmysql.dll kitabxanası avtomatik olaraq c:/windows/system32-ə kopyalana bilər. Sistem kataloqunda PHP-nin köhnə versiyasından kitabxananın olması da maneə ola bilər.

Boş test skript səhifəsi

Aşağıdakı siyahıda göstərilən skript tez-tez veb saytımızda PHP-nin MySQL ilə qarşılıqlı əlaqəsini yoxlamaq üçün skript kimi istifadə olunur. Onun məqalənin əvvəlində verilmiş oxşar PHP skriptindən fərqləri mysql_connect() və mysql_select_db() funksiyalarını çağırmazdan əvvəl @ simvollarıdır. Bu simvollar brauzerdə səhv çıxışını aradan qaldırmaq üçün istifadə olunur. Məxfi məlumatların brauzerdə göstərilməsinin qarşısını almaq üçün onlardan İnternetdə işləyən veb saytında istifadə etmək faydalıdır, lakin skriptləri sazlayarkən səhvlərin çıxarılmasını qadağan etmək lazım deyil, çünki problemin diaqnozunu çətinləşdirə bilər.

MySQL serveri ilə PHP qarşılıqlı əlaqəsini sınayan PHP skripti

$dblocation = "127.0.0.1" ;
$dbname = "test" ;
$dbuser = "kök" ;
$dbpasswd = "" ;

$dbcnx = @mysql_connect ($dblocation, $dbuser, $dbpasswd);
əgər (! $dbcnx )
{
əks-səda "

Təəssüf ki, mySQL server mövcud deyil

" ;
çıxış();
}
əgər (!@
mysql_select_db ($dbname, $dbcnx))
{
əks-səda "

Təəssüf ki, verilənlər bazası mövcud deyil

"
;
çıxış();
}
$ver = mysql_query("SEÇ VERSION()" );
if(!$ver)
{
əks-səda "

Sorğuda səhv

"
;
çıxış();
}
əks-səda
mysql_result($ver, 0);
?>

Əgər bu skriptin icrası nəticəsində boş səhifə görünürsə, bu, bir qayda olaraq, php_mysql.dll kitabxanasının PHP-yə qoşulmaması deməkdir. Problemi daha dəqiq diaqnoz etmək üçün aşağıdakı hərəkətlər ardıcıllığını yerinə yetirin.

  1. MySQL verilənlər bazasından istifadə etməyən digər PHP skriptlərinin işlədiyinə əmin olun.
  2. Brauzerdə xətanın qarşısını almaq üçün istifadə olunan mysql_connect və mysql_select funksiyalarına zəng etməzdən əvvəl @ simvolunu silin. Bundan sonra, problemi həll etməyə kömək edəcək səhvlər haqqında daha dolğun məlumat brauzerdə göstəriləcək.

Xəta: "127.0.0.1" (10061) üzərindəki MySQL serverinə qoşulmaq mümkün deyil

PHP test skriptini yerinə yetirərkən aşağıdakılara bənzər bir xəta göstərilir:


"127.0.0.1" (10061) üzərindəki MySQL serverinə qoşulmaq mümkün deyil
C:\www\panel\htdocs\test.php-də 7-ci sətirdə

Bu, MySQL verilənlər bazası serverinin işləmədiyini göstərir. Bu problemin daha dəqiq diaqnozu yuxarıda “PHP-nin MySQL ilə qarşılıqlı əlaqəsinin yoxlanılması” alt bölməsinin 1-ci bəndində verilmişdir.

Xəta: "root"@"localhost" istifadəçisi üçün giriş rədd edildi (parol istifadə edərək: YES)

Aşağıdakı xətanın olması:

Xəbərdarlıq: mysql_connect():
İstifadəçi "root"@"localhost" üçün giriş rədd edildi (parol istifadə edərək: YES)
C:\www\panel\htdocs\test.php-də 7-ci sətirdə

MySQL verilənlər bazasına səhv parol ilə qoşulmağa çalışdığınızı göstərir. Test skriptində $dbpasswd dəyişəninin dəyərini yoxlayın. Varsayılan olaraq, MySQL serveri boş kök istifadəçi parolu ilə quraşdırılır. Kök istifadəçi üçün parolu özünüz təyin etsəniz, onu yoxlama skriptinin $dbpasswd dəyişəninə yazın.

Siz Apache, PHP və genişləndirmə kitabxanalarının quraşdırılması və konfiqurasiyasına həsr olunmuş forumumuzda işləmək üçün PHP genişləndirmələrinə qoşulma ilə bağlı istənilən sualınızı verə bilərsiniz.

Qeyd: Brauzerinizin kiçik ölçüsünə avtomatik uyğunlaşan və oxumaq asanlığı üçün saytın bəzi detallarını gizlədən saytın adaptiv versiyası aktivləşdirilib. Baxmaqdan həzz alın!

Bütün blog oxucularına yaxşı gün Sayt açıq! Son 2 ayda şirkətdəki işlərim təmiz PHP ilə sıx bağlı idi (çərçivələrdən və CMS-dən istifadə tabudur), mən artıq Joomlanın nə olduğunu unutmuşam :) ona görə də yazmağa davam etmək həmişəkindən daha məqsədəuyğun olardı. daha yüksək.

Bu gün biz PHP-də faylları birləşdirməyin necə işlədiyindən danışacağıq. Diqqət etdiyiniz kimi, vebsayt üçün hər hansı bir mühərrik (Joomla, Wordpress, OpenCart, DLE və hər şey, hər şey, hər şey) minlərlə .php (və təkcə php deyil) fayllarından ibarətdir və onların hamısı bir-biri ilə qarşılıqlı əlaqədə olur. iş mexanizminin yeri.

İndi motorları unudub başqa bir misal təsəvvür edin: bizim saytda çoxlu səhifələrimiz var, onların hər birində eyni menyu, saytın başlığı və altbilgisi var. Təbii ki, biz eyni şeyi fayldan fayla köçürməyəcəyik, əks halda o, 90-cı illərdən qədim HTML saytı olacaqdı. Ən azı hər şeyi 4 fayla böləcəyik:

  • index.php – səhifənin əsas hissəsi, bu fayl dəyişəcək
  • menu.php – sayt menyusu
  • header.php – saytın başlığı
  • footer.php – saytın altbilgisi

Əsas səhifəyə (index.php) əlavə olaraq, məsələn, məhsulların siyahısı (kateqoriya.php) və məhsulların öz səhifələri (product.php) olan səhifələrimiz də ola bilər. Menyu.php, header.php, footer.php fayllarını bu səhifələrə qoşmaq rahat olacaq. Bu yanaşma sayəsində yeni menyu elementi əlavə etsək, onu 3 dəfə deyil (index.php, product.php, category.php-də) yalnız bir dəfə (menyu.php-də) əlavə edəcəyik.

Buna görə də sual yaranır: "PHP-də faylı necə əlavə etmək olar?". Bu məqsədlər üçün PHP-də 2 təlimat var:

Və onların törəmələri:

Diqqətinizi cəlb edirəm ki, daxil və tələb funksiyaları deyil, bunlar sözdə dil konstruksiyalarıdır, ona görə də mötərizəyə ehtiyac yoxdur.

Daxil etmək və tələb etmək arasındakı fərq nədir

daxildirtələb edir- bu, tamamilə eyni şeydir, yeganə fərqlə, əgər xəta olarsa (məsələn, göstərilən fayl yoxdursa və onu daxil etmək mümkün deyilsə) daxil etmək kimi bir xəta yaradacaq. Xəbərdarlıq, bundan sonra sayt işləməyə davam edəcək və tələb edəcək, bu da səhifənin daha da yüklənməsini tamamilə dayandıracaq.

Yəni tələb olunan göstəriş daha radikal və sərtdir. Hansının daha yaxşı istifadə olunacağına qərar vermək sizin ixtiyarınızdadır; ümumiyyətlə, onlar həmişə daha sərt variant seçməyi məsləhət görürlər, yəni tələb edirlər, amma şəxsən mənə daxil olan sözü yazmaq daha xoşdur :)

include_once və require_once – daxil etməklə eyni şeyi edin (fayl daxil edin), lakin eyni zamanda hər bir faylın bir dəfədən çox daxil edilmədiyinə əmin olurlar. Bir neçə nəfər bir layihə üzərində işləyirsə və müəyyən bir faylın bir neçə dəfə əlavə olunmadığından əmin olmalısınızsa, onlardan istifadə etmək xüsusilə rahatdır.

Diqqət:

bir dəfə daxil edinbir dəfə tələb edin– daxil və tələb olunandan daha yavaşdır və daha çox RAM istehlak edir. Bu məntiqlidir və ona görədir ki, onlar qoşulmuş bütün faylları yadda saxlamalı və hər dəfə qoşulduqda bu faylın artıq qoşulub-qoşulmadığını yoxlamalıdırlar.

İcazə verin, PHP-də faylların birləşdirilməsinin necə işlədiyini aydın şəkildə göstərim:

Faylları (hər hansı, məsələn: html, txt, php, xml və s.) PHP skriptinə birləşdirərkən, onların məzmunu axmaq şəkildə daxil yerinə daxil edilir. Başqa sözlə, daxil edin (və mən də tələb etməyi nəzərdə tuturam, çünki onlar eyni şeydir) siz haradansa (CTRL+C) kodunu kopyalayıb (CTRL+V) fayla (məsələn, məhsul. php) və sonra yadda saxlayıb həmişəki kimi işə salın: http://your_site.net/product.php

product.php kimi əsas faylları ona qoşulduqlarımızdan (menu.php, header.php, footer.php) fərqləndirmək üçün qoşulmuş faylların adı belə dəyişdirilir: menu.inc.php, header .inc.php , footer.inc.php. Bunun sayəsində bir qovluğa getdiyimiz zaman dərhal əsas faylların harada olduğunu və köməkçilərin harada olduğunu görəcəyik.

Diqqət:

Bu texnika (inc əlavə edin) yalnız vizual rahatlıq üçün istifadə olunur və heç bir funksional fərq daşımır. Ancaq vizual rahatlıq da çox vacibdir, buna görə də həmişə hər şeyi strukturlaşdırmağa və eyni üslubda etməyə çalışın.

qaytarılması dəyəri ilə daxil edin

Açar sözü xatırlayın? Beləliklə, PHP-də belə bir vəhşi şey var ki, içəriyə qayıtmaq daxildir. Mən bunu heç vaxt istifadə etməmişəm və başqalarının da istifadə etdiyini görməmişəm, lakin bu mümkündür, burada some.php:

Some.php-yə qoşulun:

// Sətiri çap edir: PHP ?>

Daha bir neçə fakt

  • Siz faylları PHP kodunun istənilən yerinə, o cümlədən içəri daxil edə bilərsiniz;
  • Daxiletmə (include) skript icrası zamanı işə salınır, daxil edilmiş fayllarda əvvəlcədən heç nə baş vermir;
  • Daxil edilmiş fayl, daxiletmənin elan edildiyi sətirlə eynidir. Yəni, əgər faylın ortasındadırsa, o zaman qlobal əhatə dairəsi, funksiyanın içərisindədirsə, onda yerlidir. Bir daha vurğulayım ki, daxil etmək, kodu daxil etmək əvəzinə fayla götürüb kopyalamağınızla eynidir.

Diqqətiniz üçün hər kəsə təşəkkür edirik və gözəl həftəsonu keçirin!

İqor Quzey

Bu, düzgün şərtlərdən və optimal variantlardan istifadə etməklə fəaliyyət üçün dəqiq və qəti göstəriş deyil. Bu, daha çox cari problemin qeydidir.

Tapşırıq: PHP-yə GD2 dəstəyi/modul əlavə edin

Həmişə olduğu kimi, biz yerli kompüterdə məşqə başlayırıq və o, əlbəttə ki, Windows altında işləyir. Daha doğrusu Windows XP SP2. Sonra, portlar vasitəsilə konfiqurasiya edilmiş və ya FreeBSD üçün əl ilə tərtib edilmiş GD2-ni PHP-də birləşdirək.

Windows-da GD2-nin PHP-yə qoşulması

Dağıtımda tapırıq:
\php-4.3.9-Win32.zip\php-4.3.9-Win32\extensions\
kitabxana php_gd2.dll, yəni. versiya 2.
və php_gd2.dll faylını c:\windows-a köçürün
c:\windows\php.ini faylında uzantısı=php_gd2.dll xəttini tapırıq və şərhi çıxarırıq.
Apache-ni yenidən başladın. Hamısı.

Əvvəlcə php.ini-də şərhi sadəlövhlüklə silsəniz və bunun kifayət olduğunu düşünürsünüzsə, Apache-ni yenidən işə saldıqdan sonra diaqnostika görünəcək:
"./php_gd.dll dinamik kitabxanasını yükləmək alınmadı" - Göstərilən modul tapılmadı."

FreeBSD altında GD2-nin PHP-yə qoşulması

PHP artıq portlardan quraşdırılıb

Daha dəqiq desək, təkcə PHP deyil, ümumiyyətlə hər şey (php, MySQL, Apache, ...) portlar vasitəsilə konfiqurasiya edilib.

# cd /usr/ports/lang/php4-extensions # konfiqurasiya etmək üçün bir onay qutusu əlavə edin: "GD kitabxana dəstəyi" # deinstall et # yenidən quraşdırın # apachectl -k zərif yumşaq yenidən başladın və ya # apachectl yenidən başladın.

PHP əl ilə qurulmuşdur

Bu halda, JPEG və ZLIB-nin hazırlanması üzrə ilkin iş tələb olunur

JPEG dəstəyinin quraşdırılması

Mümkün variantlar

Limandan JPEG
# cd /usr/ports/graphics/jpeg # make got qovluğu işləyin/jpeg-6b quraşdırmağı etməyin
Dağıtımdan JPEG
# 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 # ./konfiqurasiya # etmək

Siz zlib dəstəyini quraşdırmalısınız

Limandan
# cd /usr/ports/archivers/php4-zlib # make Kitabxanalar quraşdırılıb: /usr/ports/archivers/php4-zlib/work/php-4.4.4/ext/zlib/modules

PHP qurmaq

# cd /usr/dist/php-4.4.4 # ./configure --with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd a belirtmeden kataloq PHP-də quraşdırılmış GD kitabxanası quraşdırılıb. --with-jpeg-dir=/usr/ports/graphics/jpeg/work/jpeg-6b əgər jpeg portdandırsa və ya /usr/dist/jpeg-6b əgər jpeg paylamadandırsa --with-zlib-dir =/ usr/ports/archivers/php4-zlib/work/php-4.4.4/ext/zlib/modules # quraşdırın və təmizləyin

Test

gif.php:png.phpjpg.php:gd_info.php:
Açar VAL$val) əks-səda "
$ açar $val"; ?>



Keçmiş səhvlər

JPEG kitabxanasını quraşdırarkən, "yaratmaq"dan sonra "quraşdırmaq" əmri yeni faylların /usr/local ünvanına keçəcəyi və sonra avtomatik olaraq orada tapılacağı gözləntiləri ilə edilmişdir.

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

Amma nədənsə JPEG qoşulmadı. Mənfi diaqnoz və nəticə yox idi.

Axmaqlıqdan kor pişik balası kimi ətrafı dürtdüm, onu bu cür deməyə çalışdım. Ya quraşdırılmış hər şey vasitəsilə, sonra yüklənmiş, sonra portlardan. Bütün bu rüsvayçılıq lazımsız quraşdırmalarla müşayiət olundu, nəticədə PHP-nin quraşdırılması zamanı səhvlər yarandı:

# ./configure --with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd=/usr/local PHP-dən istifadə etdiyiniz üçün təşəkkür edirik. # make install /usr/dist/php-4.4.4/ext/gd/gd.c:1151: `gdImageRotate"-ə qeyri-müəyyən istinad, GD üçün kataloq müəyyən edilmiş kimi görünür, lakin diaqnostika daxili kataloqa istinad edir. # ./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 üçün təşəkkür edirik PHP istifadə edərək. # quraşdırın ... /usr/dist/php-4.4.4/ext/gd/gd.c:837: `gdImageColorMatch" /usr/dist/php-4.4.4/ext/gd-ə təyin olunmamış istinad /gd.c:1151 : “gdImageRotate” üçün təyin olunmamış istinad *** Xəta kodu 1

Bütün modulları ayrıca hazırlamağa və onları dəqiq göstərməyə çalışırıq.

Mən bir az PHP proqramlaşdırma dili haqqında danışmağı və xüsusi olaraq genişləndirmələr mövzusuna toxunmağı təklif edirəm CURL, yəni. PHP skriptinin özündən fərqli protokollardan istifadə edərək müxtəlif serverlərlə qarşılıqlı əlaqə qurmaq imkanı.

Curl-a baxmağa başlamazdan əvvəl xatırlatmaq istəyirəm ki, biz artıq PHP dilinə toxunmuşuq, məsələn, PHP-də Excel-ə yükləmək və ya PHP-də autentifikasiya imkanları haqqında materialda, indi isə PHP-də autentifikasiya etmək bacarığından danışaq. PHP-yə sorğu göndərin.

CURL nədir?

CURL PHP skriptindən HTTP kimi sorğular göndərmək üçün istifadə edilə bilən PHP funksiyalarının kitabxanasıdır. CURL HTTP, HTTPS, FTP və başqaları kimi protokolları dəstəkləyir. Siz GET, POST və PUT metodlarından istifadə edərək HTTP sorğuları göndərə bilərsiniz.

CURL uzaqdan bir skriptə zəng etmək və nəticəni əldə etmək və ya sadəcə çağırılan səhifənin HTML kodunu saxlamaq lazım olduğu hallarda faydalı ola bilər, ümumiyyətlə, hər kəs öz istifadəsini tapa bilər, lakin əsas odur ki, siz sorğu göndərərkən sorğu göndərə bilərsiniz. skript işləyir.

PHP-də CURL kitabxanasının qoşulması

CURL kitabxanasından istifadə etmək üçün onu müvafiq olaraq birləşdirməlisiniz.

Qeyd! Nümunə olaraq Windows 7-də PHP 5.4.39-dan, Veb server kimi isə Apache 2.2.22-dən istifadə edəcəyik.

Etməli olduğunuz ilk şey kitabxanaları kopyalamaqdır ssleay32.dll, libeay32.dll, libssh2.dll onlar PHP ilə kataloqda, Windows sistem kataloqunda, yəni C:\Windows\System32.

Sonra php_curl.dll kitabxanasını php.ini-yə birləşdirin, yəni. növbəti sətri şərhdən çıxarın

Kitabxana qoşulmayıb

;extension=php_curl.dll

Kitabxana qoşuldu

Extension=php_curl.dll

Budur, Apache-ni yenidən başladın, phpinfo() funksiyasına zəng edin və əlaqə uğurlu olarsa, sizdə curl bölməsi olmalıdır.


Əgər orada deyilsə, bu, yalnız bir şey deməkdir: kitabxana yükləmədi; bunun ən ümumi səbəbi yuxarıda göstərilən DLL-lərin Windows sistem qovluğuna kopyalanmamasıdır.

Nümunə CURL - ekranda göstərilməsi üçün uzaq səhifənin tələb edilməsi

Bu misalda biz sadəcə olaraq GET metodundan istifadə edərək HTTP vasitəsilə uzaq səhifə tələb edəcəyik və onun məzmununu ekranda göstərəcəyik.

Bizdə 2 PHP faylı olan test kataloqumuz var: test_curl.php və test.php, burada test_curl.php curl istifadə edəcəyimiz skriptdir və test.php isə zəng edəcəyimiz uzaq skriptdir. Kodu ətraflı şərh etdim.

test_curl.php kodu

Kod test.php

Başlıq 1"; fasilə; hal 2: əks-səda "<Н2>Başlıq 2"; fasilə; hal 3: əks-səda "<Н3>Başlıq 3"; fasilə; ) ) ?>

Nəticədə, test_curl.php-ni işlətsəniz, ekranda “Başlıq 1” mesajını görəcəksiniz, siz id parametrlərini keçirərək təcrübə edə bilərsiniz ( bu halda 2 və ya 3).

CURL nümunəsi - uzaq skripti çağırmaq və nəticəni əldə etmək

İndi skripti çağırmağa və nəticəni əldə etməyə çalışaq, onu daha sonra emal etmək üçün, məsələn, POST metodundan istifadə edək. Gəlin fayl adlarını eyni buraxaq.

test_curl.php kodu

Kod test.php

Və əgər test_curl.php-ni işə salsaq, o zaman ekranda 111 göstəriləcək, yəni. Uzaqdan skriptə daxil olmaq nəticəsində əldə edilən 1.11, 100-ə vurulur.

İndi funksiyalar və onların sabitləri haqqında danışaq.

Tez-tez istifadə olunan CURL funksiyaları və sabitləri

  • curl_init - sessiyanı işə salır;
  • curl_close - sessiyanı bağlayır;
  • curl_exec - sorğunu yerinə yetirir;
  • curl_errno - Səhv kodunu qaytarır;
  • curl_setopt - Sessiya üçün parametr təyin edir, məsələn:
    • CURLOPT_HEADER – 1 dəyəri başlıqların qaytarılmalı olduğunu bildirir;
    • CURLOPT_INFILESIZE - gözlənilən fayl ölçüsünü təyin etmək üçün parametr;
    • CURLOPT_VERBOSE - dəyər 1 o deməkdir ki, CURL yerinə yetirilən bütün əməliyyatlar haqqında ətraflı mesajlar göstərəcək;
    • CURLOPT_NOPROGRESS – əməliyyat tərəqqi göstəricisini söndürür, dəyər 1;
    • CURLOPT_NOBODY – sənədə ehtiyacınız yoxdursa, ancaq başlıqlara ehtiyacınız varsa, dəyəri 1-ə təyin edin;
    • CURLOPT_UPLOAD - faylı serverə yükləmək üçün;
    • CURLOPT_POST – POST metodundan istifadə etməklə sorğunu yerinə yetirmək;
    • CURLOPT_FTPLISTONLY — FTP server kataloqunda faylların siyahısını əldə etmək, dəyər 1;
    • CURLOPT_PUT — sorğunu PUT metodundan istifadə edərək yerinə yetirin, qiymət 1;
    • CURLOPT_RETURNTRANSFER - nəticəni brauzerə çıxarmadan qaytarın, qiymət 1;
    • CURLOPT_TIMEOUT – saniyələrlə maksimum icra müddəti;
    • CURLOPT_URL – əlaqə üçün ünvanın müəyyən edilməsi;
    • CURLOPT_USERPWD - istifadəçi adı və şifrə ilə sətir : şəklində;
    • CURLOPT_POSTFIELDS – POST sorğusu üçün data;
    • CURLOPT_REFERER - “Referer:” HTTP başlığının dəyərini təyin edir;
    • CURLOPT_USERAGENT - “User-Agent:” HTTP başlığının dəyərini təyin edir;
    • CURLOPT_COOKIE — HTTP sorğusu ilə göndəriləcək “Cookie:” başlığının məzmunu;
    • CURLOPT_SSLCERT - PEM formatında sertifikatı olan faylın adı;
    • CURLOPT_SSL_VERIFYPEER – uzaq server sertifikatının yoxlanmasını deaktiv etmək üçün 0 dəyəri (standart 1);
    • CURLOPT_SSLCERTPASSWD — sertifikat faylı üçün parol.
  • curl_getinfo - Əməliyyat haqqında məlumatı qaytarır, ikinci parametr tam olaraq nəyin göstərilməli olduğunu göstərmək üçün sabit ola bilər, məsələn:
    • CURLINFO_EFFECTIVE_URL - son istifadə olunan URL;
    • CURLINFO_HTTP_CODE - sonuncu qəbul edilmiş HTTP kodu;
    • CURLINFO_FILETIME — yüklənmiş sənədin dəyişdirilməsi tarixi;
    • CURLINFO_TOTAL_TIME — əməliyyatın icra müddəti saniyələrlə;
    • CURLINFO_NAMELOOKUP_TIME — saniyələrlə server adının həlli vaxtı;
    • CURLINFO_CONNECT_TIME — əlaqə yaratmağa sərf olunan vaxt, saniyələrlə;
    • CURLINFO_PRETRANSFER_TIME — əməliyyatın başlanmasından faktiki məlumat ötürülməsinə hazır olana qədər keçən vaxt, saniyələrlə;
    • CURLINFO_STARTTRANSFER_TIME — əməliyyatın başlanmasından verilənlərin birinci baytının ötürülməsinə qədər keçən vaxt, saniyələrlə;
    • CURLINFO_REDIRECT_TIME — yönləndirməyə sərf olunan vaxt, saniyələrlə;
    • CURLINFO_SIZE_UPLOAD - yükləmə zamanı baytların sayı;
    • CURLINFO_SIZE_DOWNLOAD - endirərkən baytların sayı;
    • CURLINFO_SPEED_DOWNLOAD - orta yükləmə sürəti;
    • CURLINFO_SPEED_UPLOAD - orta yükləmə sürəti;
    • CURLINFO_HEADER_SIZE - alınan bütün başlıqların ümumi ölçüsü;
    • CURLINFO_REQUEST_SIZE - bütün göndərilən sorğuların ümumi ölçüsü;
    • CURLINFO_SSL_VERIFYRESULT - CURLOPT_SSL_VERIFYPEER parametrini təyin etməklə tələb olunan SSL sertifikatının yoxlanılmasının nəticəsi;
    • CURLINFO_CONTENT_LENGTH_DOWNLOAD - Content-Length başlığından oxunan yüklənmiş sənədin ölçüsü;
    • CURLINFO_CONTENT_LENGTH_UPLOAD - yüklənmiş məlumatın ölçüsü;
    • CURLINFO_CONTENT_TYPE - alınan Məzmun tipli başlığın məzmunu və ya bu başlıq alınmayıbsa NULL.

CURL funksiyaları və onlar üçün sabitlər haqqında daha çox məlumatı PHP-nin rəsmi saytında tapa bilərsiniz -