Bagaimana untuk mengetahui perpustakaan php yang disambungkan. Prinsip memasukkan fail dalam PHP

Saya mencadangkan untuk bercakap sedikit tentang bahasa pengaturcaraan PHP, dan secara khusus menyentuh topik sambungan CURL, iaitu keupayaan untuk berinteraksi dengan pelayan yang berbeza menggunakan protokol yang berbeza daripada skrip PHP itu sendiri.

Sebelum meneruskan untuk mempertimbangkan curl, saya ingin mengingatkan anda bahawa kami telah menyentuh bahasa PHP, sebagai contoh, dalam bahan tentang memuat naik ke Excel dalam PHP atau kemungkinan pengesahan dalam PHP, dan sekarang mari kita bercakap tentang keupayaan untuk menghantar permintaan kepada PHP.

Apa itu CURL?

CURL ialah perpustakaan fungsi PHP yang dengannya anda boleh menghantar permintaan, seperti HTTP, daripada skrip PHP. CURL menyokong protokol seperti HTTP, HTTPS, FTP dan lain-lain. Anda boleh menghantar permintaan HTTP menggunakan kaedah GET, POST, PUT.

CURL boleh berguna dalam kes di mana anda perlu memanggil skrip jauh dan mendapatkan hasilnya atau hanya menyimpan kod HTML halaman yang dipanggil, secara amnya, semua orang boleh mencari kegunaan mereka sendiri, tetapi perkara utama ialah anda boleh menghantar permintaan semasa perlaksanaan skrip.

Termasuk perpustakaan CURL dalam PHP

Untuk menggunakan perpustakaan CURL, anda perlu memasukkannya dengan sewajarnya.

Catatan! Kami akan menggunakan PHP 5.4.39 pada Windows 7 sebagai contoh dan Apache 2.2.22 sebagai pelayan Web kami.

Perkara pertama yang perlu dilakukan ialah menyalin perpustakaan ssleay32.dll, libeay32.dll, libssh2.dll mereka terletak dalam direktori dengan PHP, dalam direktori sistem Windows, iaitu dalam C:\Windows\System32.

Kemudian, dalam php.ini, sambungkan perpustakaan php_curl.dll, i.e. nyahkomen baris berikut

Perpustakaan tidak disambungkan

;extension=php_curl.dll

Perpustakaan disambungkan

Extension=php_curl.dll

Itu sahaja, mulakan semula Apache, panggil fungsi phpinfo () dan sekiranya sambungan berjaya, anda harus mempunyai bahagian curl


Jika ia tidak ada, maka ini bermakna hanya satu perkara yang tidak dimuatkan oleh perpustakaan, sebab yang paling biasa untuk ini ialah DLL di atas tidak disalin ke direktori sistem Windows.

Contoh CURL - Meminta Halaman Jauh untuk Dipaparkan

Dalam contoh ini, kami hanya akan meminta halaman jauh melalui kaedah HTTP GET dan memaparkan kandungannya pada skrin.

Kami mempunyai direktori ujian di dalamnya, 2 fail PHP ialah test_curl.php dan test.php, dengan test_curl.php ialah skrip tempat kami akan menggunakan curl, dan test.php ialah skrip jauh yang akan kami panggil. Saya mengulas kod secara terperinci.

kod test_curl.php

kod test.php

Tajuk 1"; putus; kes 2: gema "<Н2>Tajuk 2"; putus; kes 3: gema "<Н3>Tajuk 3"; putus; ) ) ?>

Akibatnya, jika anda menjalankan test_curl.php, anda akan melihat tulisan "Tajuk 1" pada skrin, anda boleh mencuba dengan lulus parameter id ( dalam kes ini 2 atau 3).

Contoh CURL - panggil skrip jauh dan dapatkan hasilnya

Sekarang mari cuba panggil skrip dan dapatkan hasilnya untuk memprosesnya kemudian, sebagai contoh, mari gunakan kaedah POST. Biarkan nama fail sama.

kod test_curl.php

kod test.php

Dan jika kita menjalankan test_curl.php, maka 111 akan dipaparkan pada skrin, i.e. 1.11 terhasil daripada panggilan ke skrip jauh, didarab dengan 100.

Sekarang mari kita bercakap tentang fungsi dan pemalarnya.

Fungsi dan pemalar CURL yang biasa digunakan

  • curl_init - Memulakan sesi;
  • curl_close - Menutup sesi;
  • curl_exec - Melaksanakan permintaan;
  • curl_errno - Mengembalikan kod ralat;
  • curl_setopt - Menetapkan parameter untuk sesi, contohnya:
    • CURLOPT_HEADER - nilai 1 bermakna pengepala harus dikembalikan;
    • CURLOPT_INFILESIZE - parameter untuk menentukan saiz fail yang dijangkakan;
    • CURLOPT_VERBOSE - nilai 1 bermakna CURL akan memaparkan mesej terperinci tentang semua operasi yang dilakukan;
    • CURLOPT_NOPROGRESS – lumpuhkan penunjuk kemajuan operasi, nilai 1;
    • CURLOPT_NOBODY - jika anda tidak memerlukan dokumen, tetapi hanya memerlukan tajuk, kemudian tetapkan nilai kepada 1;
    • CURLOPT_UPLOAD - untuk memuat naik fail ke pelayan;
    • CURLOPT_POST - laksanakan permintaan menggunakan kaedah POST;
    • CURLOPT_FTPLISTONLY - mendapatkan senarai fail dalam direktori pelayan FTP, nilai 1;
    • CURLOPT_PUT — laksanakan permintaan menggunakan kaedah PUT, nilai 1;
    • CURLOPT_RETURNTRANSFER - kembalikan hasil tanpa memaparkannya ke penyemak imbas, nilai 1;
    • CURLOPT_TIMEOUT - masa pelaksanaan maksimum dalam beberapa saat;
    • CURLOPT_URL - menyatakan alamat untuk diakses;
    • CURLOPT_USERPWD - rentetan dengan nama pengguna dan kata laluan dalam bentuk:;
    • CURLOPT_POSTFIELDS - data untuk permintaan POST;
    • CURLOPT_REFERER - menetapkan nilai pengepala HTTP "Perujuk: ";
    • CURLOPT_USERAGENT - menetapkan nilai pengepala HTTP "User-Agent: ";
    • CURLOPT_COOKIE - kandungan pengepala "Kuki:" yang akan dihantar dengan permintaan HTTP;
    • CURLOPT_SSLCERT - nama fail dengan sijil dalam format PEM;
    • CURLOPT_SSL_VERIFYPEER - nilai 0 untuk melumpuhkan pengesahan sijil pelayan jauh (lalai 1);
    • CURLOPT_SSLCERTPASSWD ialah kata laluan untuk fail sijil.
  • curl_getinfo - Mengembalikan maklumat tentang operasi, parameter kedua boleh menjadi pemalar untuk menunjukkan perkara yang perlu ditunjukkan, contohnya:
    • CURLINFO_EFFECTIVE_URL - URL terakhir digunakan;
    • CURLINFO_HTTP_CODE - Kod HTTP yang terakhir diterima;
    • CURLINFO_FILETIME - tarikh pengubahsuaian dokumen yang dimuatkan;
    • CURLINFO_TOTAL_TIME — masa pelaksanaan operasi dalam beberapa saat;
    • CURLINFO_NAMELOOKUP_TIME - masa resolusi nama pelayan dalam beberapa saat;
    • CURLINFO_CONNECT_TIME - masa yang diambil untuk mewujudkan sambungan, dalam beberapa saat;
    • CURLINFO_PRETRANSFER_TIME - masa berlalu dari permulaan operasi hingga kesediaan untuk pemindahan data sebenar, dalam beberapa saat;
    • CURLINFO_STARTTRANSFER_TIME - masa berlalu dari permulaan operasi sehingga pemindahan bait data pertama, dalam beberapa saat;
    • CURLINFO_REDIRECT_TIME - masa yang diambil untuk mengubah hala, dalam beberapa saat;
    • CURLINFO_SIZE_UPLOAD - bilangan bait semasa memuat naik;
    • CURLINFO_SIZE_DOWNLOAD - bilangan bait semasa memuat turun;
    • CURLINFO_SPEED_DOWNLOAD - kelajuan muat turun purata;
    • CURLINFO_SPEED_UPLOAD - purata kelajuan muat naik;
    • CURLINFO_HEADER_SIZE - jumlah saiz semua pengepala yang diterima;
    • CURLINFO_REQUEST_SIZE - jumlah saiz semua permintaan yang dihantar;
    • CURLINFO_SSL_VERIFYRESULT Hasil pengesahan sijil SSL yang diminta dengan menetapkan parameter CURLOPT_SSL_VERIFYPEER;
    • CURLINFO_CONTENT_LENGTH_DOWNLOAD Saiz dokumen yang dimuat turun, dibaca daripada pengepala Panjang Kandungan;
    • CURLINFO_CONTENT_LENGTH_UPLOAD - saiz data yang dimuat naik;
    • CURLINFO_CONTENT_TYPE Kandungan pengepala jenis Kandungan diterima, atau NULL jika pengepala ini tidak diterima.

Anda boleh melihat lebih lanjut tentang fungsi CURL dan pemalar untuknya di laman web rasmi PHP -

Sepasang cermin mata...

PHP tidak mempunyai rangka kerja import terbina dalam seperti python, java atau .net. Terdapat beberapa cara untuk menggunakan perpustakaan dalam PHP.

    menyusunnya ke dalam binari PHP. Ini adalah cara yang paling maju dan biasanya tidak diingini melainkan anda mempunyai keperluan khas.

    Pasangkannya sebagai modul PHP pada pelayan dan dayakannya dalam PHP.ini. Dari sudut pandangan pengaturcara PHP, sambungan ini adalah sebahagian daripada PHP - sentiasa tersedia. Ia lebih mudah untuk menambah dan mengalih keluar tanpa perlu membina semula PHP itu sendiri.

    Pasang kod PHP pada pelayan di suatu tempat dan masukkan() dalam skrip PHP anda.

    Simpan salinan perpustakaan ke projek anda dan masukkannya dalam skrip PHP anda.

Halaman Pada peringkat asas, kod itu sama ada sebahagian daripada penterjemah (statik atau dinamik) atau kod PHP lama biasa yang menyertakan() ed dalam projek anda.

Untuk tujuan anda, saya hanya boleh mencadangkan agar anda kekal dengan pengedaran PHP standard (pilih OS Linux yang baik dan gunakan PHP itu). Kemudian hampir semua perpustakaan yang anda perlukan di peringkat penterjemah tersedia sebagai pakej tambahan, dan kerumitannya diserahkan kepada mereka yang melakukannya setiap hari.

Pada RedHat/Centos anda boleh menjalankan:

yum pasang php php-memcached php-gd php-pecl

Halaman Bagi semua perpustakaan lain yang mungkin anda ingin gunakan, mungkin lebih baik menggunakan rangka kerja PHP yang baik yang akan menguruskan semua ini untuk anda.

Beberapa contoh:

  • Rangka Kerja Zend
  • CakePHP
  • pencucuh kod
  • dan lain-lain...

(bukan dalam apa-apa susunan, hanya yang terlintas di fikiran)

Dengan syarat anda telah menggunakan pendekatan standard menggunakan RPM atau serupa untuk mengurus yang disusun dalam aspek PHP dan sambungan, maka rangka kerja yang teguh yang baik akan menguruskan termasuk semua kod perpustakaan PHP tambahan anda yang anda perlukan.

Apakah hasil akhirnya: Anda menumpukan pada menyampaikan produk, bukan pada keseluruhan infrastruktur yang anda perlu pelajari dan cipta.

Halaman php.ini dihuraikan dan dijalankan pada permulaan PHP (setiap kali untuk baris arahan, sekali setiap pelayan dijalankan dalam apache). Ia mentakrifkan banyak tetapan, termasuk banyak modul, mengkonfigurasi modul tersebut, dan sebagainya.

Malah, anda boleh mengatasi beberapa tetapan dalam php.ini dengan fungsi ini_set() PHP. Walau bagaimanapun, ini hanya berfungsi untuk beberapa tetapan. Lain-lain mesti ditetapkan sebelum menjalankan skrip.

Apabila berjalan di bawah apache, anda boleh menambah baris pada arahan .htaccess dan yang menggantikan PHP.ini sepenuhnya untuk direktori/hos maya itu.

(sila betulkan sintaks saya dan alih keluar nota ini jika ia salah)

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

Halaman Sebagai tindak balas kepada soalan anda #6 tentang perpustakaan anda sendiri dan cara terbaik untuk membungkusnya, saya cadangkan anda menilai dahulu keperluan untuk perpustakaan. Dan jika anda benar-benar melakukan sesuatu, ketahui cara paling biasa orang melakukannya. Jika ia adalah perpustakaan yang mudah, maka fail .php dengan tapak web yang baik sudah memadai.

Halaman Mungkin agak bertele-tele, tetapi saya harap ini menunjukkan anda ke arah yang betul.

Igor Guzey

Ini bukan arahan yang tepat dan muktamad untuk tindakan menggunakan istilah yang betul dan pilihan terbaik. Ia lebih merupakan log masalah semasa.

Tugas: Tambahkan sokongan/modul GD2 pada PHP

Seperti biasa, kami memulakan latihan pada komputer tempatan, yang, sudah tentu, berfungsi di bawah Windows. Lebih tepat lagi Windows XP SP2. Seterusnya, kami akan menyambungkan GD2 dalam PHP yang dikonfigurasikan melalui port atau dibina secara manual di bawah FreeBSD.

Menyambungkan GD2 ke PHP pada Windows

Kami dapati dalam pengedaran:
\php-4.3.9-Win32.zip\php-4.3.9-Win32\extensions\
perpustakaan php_gd2.dll, i.e. versi 2.
dan salin php_gd2.dll ke c:\windows
dalam fail c:\windows\php.ini kita dapati sambungan baris=php_gd2.dll dan alih keluar komen.
But semula Apache. Semuanya.

Jika anda secara naif mula-mula mengalih keluar komen dalam php.ini dan berfikir bahawa ini sudah cukup, kemudian selepas memulakan semula Apache, diagnostik akan muncul:
"Tidak dapat memuatkan perpustakaan dinamik "./php_gd.dll" - Modul yang ditentukan tidak dapat ditemui."

Menyambungkan GD2 ke PHP di bawah FreeBSD

PHP sudah dipasang dari port

Lebih tepat lagi, bukan sahaja PHP, tetapi secara umum semuanya (php, MySQL, Apache, ...) telah dikonfigurasikan menggunakan port.

# cd /usr/ports/lang/php4-extensions # make config tambah tanda semak: "GD library support" # make deinstall # make reinstall # apachectl -k graceful soft restart atau # apachectl restart hard restart

PHP dibina dengan tangan

Dalam kes ini, kerja awal diperlukan untuk menyediakan JPEG dan ZLIB

Menetapkan Sokongan JPEG

Pilihan yang mungkin

JPEG dari port
# cd /usr/ports/graphics/jpeg # jadikan direktori berfungsi/jpeg-6b jangan buat pemasangan
JPEG daripada pengedaran
# 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

Perlu memasang sokongan zlib

Dari pelabuhan
# cd /usr/ports/archivers/php4-zlib # make Libraries telah dipasang dalam: /usr/ports/archivers/php4-zlib/work/php-4.4.4/ext/zlib/modules

Membina PHP

# cd /usr/dist/php-4.4.4 # ./configure --with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd tanpa pemasangan direktori Pustaka GD terbina dalam PHP. --with-jpeg-dir=/usr/ports/graphics/jpeg/work/jpeg-6b jika jpeg adalah dari port atau /usr/dist/jpeg-6b jika jpeg adalah dari pengedaran --with-zlib-dir=/ usr/ports/archivers/php4-zlib/work/php-4.4.4/ext/zlib/modules # buat pemasangan && bersihkan

Menguji

gif.php:png.phpjpg.php:gd_info.php:
kunci VAL$val) gema "
$kunci $val"; ?>



Lulus ralat

Apabila memasang perpustakaan JPEG, selepas "buat" arahan "buat pemasangan" dibuat dengan jangkaan bahawa fail baharu akan pergi ke /usr/local dan kemudian secara automatik ditemui di sana

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

Tetapi atas sebab tertentu JPEG tidak bersambung. Tiada diagnosis negatif dan tiada keputusan.

Bodohnya, saya mencucuk seperti anak kucing buta cuba untuk menyatakannya begini, begitu. Sama ada melalui semua yang terbina dalam, kemudian melalui yang dimuat turun, kemudian dari port. Semua keaiban ini disertai dengan pemasangan yang tidak perlu, yang menyebabkan tindanan kerana terdapat ralat pada masa pemasangan PHP:

# ./configure --with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd=/usr/local Terima kasih kerana menggunakan PHP. # make install /usr/dist/php-4.4.4/ext/gd/gd.c:1151: rujukan tidak ditentukan kepada `gdImageRotate" ini nampaknya menunjukkan direktori untuk GD, tetapi diagnostik merujuk kepada direktori terbina dalam. # ./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 ... /usr /dist/php-4.4.4/ext/gd/gd.c:837: rujukan tidak ditentukan kepada `gdImageColorMatch" /usr/dist/php-4.4.4/ext/gd/gd.c:1151 : rujukan tidak ditentukan kepada ` gdImageRotate" *** Kod ralat 1

Cuba sediakan semua modul secara berasingan dan tunjukkan dengan tepat.

nota itu: versi penyesuaian tapak diaktifkan, yang secara automatik melaraskan kepada saiz kecil penyemak imbas anda dan menyembunyikan beberapa butiran tapak untuk kemudahan membaca. Selamat menonton!

Salam sejahtera kepada semua pembaca blog tapak pada! Sejak 2 bulan lepas, kerja saya untuk syarikat berkait rapat dengan PHP tulen (penggunaan rangka kerja dan CMS adalah pantang larang), saya sudah lupa apa itu Joomla :) jadi lebih sesuai untuk terus menulis lebih tinggi daripada pernah.

Hari ini kita akan bercakap tentang bagaimana fail disambungkan dalam PHP. Seperti yang mungkin anda perhatikan, mana-mana enjin laman web (Joomla, Wordpress, OpenCart, DLE dan segala-galanya, segala-galanya, segala-galanya) terdiri daripada beribu-ribu fail .php (dan bukan sahaja php) dan semuanya berinteraksi antara satu sama lain, yang sebenarnya membentuk mekanisme tapak kerja.

Sekarang lupakan tentang enjin dan bayangkan contoh lain: kami mempunyai banyak halaman di tapak, setiap daripadanya mempunyai menu, pengepala dan pengaki tapak yang sama. Sememangnya, kami tidak akan menyalin perkara yang sama dari fail ke fail, jika tidak, ia akan menjadi tapak HTML kuno dari tahun 90-an. Sekurang-kurangnya, kami akan memecahkan semuanya kepada 4 fail:

  • index.php - bahagian utama halaman, fail ini akan berubah
  • menu.php - menu tapak
  • header.php - pengepala tapak
  • footer.php - pengaki tapak

Sebagai tambahan kepada halaman utama (index.php), sebagai contoh, kita juga boleh mempunyai halaman dengan senarai produk (category.php) dan halaman produk itu sendiri (product.php). Mudah untuk menyambungkan fail menu.php, header.php, footer.php ke halaman ini. Terima kasih kepada pendekatan ini, jika kita menambah item menu baru, maka kita akan menambahnya sekali sahaja (dalam menu.php), dan bukan 3 kali (dalam index.php, product.php, category.php).

Oleh itu, timbul persoalan: "Bagaimana untuk melampirkan fail dalam PHP?". Terdapat 2 arahan dalam PHP untuk tujuan ini:

Dan derivatif mereka:

Saya menarik perhatian anda kepada fakta bahawa termasuk dan memerlukan bukan fungsi, ia adalah apa yang dipanggil binaan bahasa, jadi kurungan tidak diperlukan.

Apakah perbezaan antara memasukkan dan memerlukan

termasuk Dan memerlukan- ini sama sekali, dengan satu-satunya perbezaan ialah jika ralat berlaku (contohnya, jika fail yang ditentukan tidak wujud dan ia tidak boleh disambungkan), masukkan akan mengembalikan ralat seperti Amaran, selepas itu tapak akan terus berfungsi, dan memerlukan akan mengeluarkan , yang akan menghentikan pemuatan halaman selanjutnya sepenuhnya.

Iaitu, arahan yang diperlukan adalah lebih radikal dan tegar. Terserah kepada anda untuk memutuskan mana yang lebih baik untuk digunakan, secara amnya disyorkan untuk sentiasa memilih pilihan yang lebih ketat, iaitu, memerlukan, tetapi bagi saya secara peribadi, perkataan termasuk adalah lebih menyenangkan untuk ditaip :)

include_once dan require_once melakukan perkara yang sama seperti termasuk (termasuk fail), tetapi pada masa yang sama mereka memastikan bahawa setiap fail disertakan tidak lebih daripada sekali. Mereka amat berguna jika beberapa orang sedang mengusahakan projek dan anda perlu memastikan bahawa sesetengah fail tidak ditambahkan beberapa kali.

Perhatian:

sertakan_sekali Dan memerlukan_sekali- bekerja lebih perlahan dan menggunakan lebih banyak RAM daripada yang disertakan dan diperlukan. Ini adalah logik dan disebabkan oleh fakta bahawa mereka perlu mengingati semua fail yang disambungkan dan setiap kali mereka menyambung, semak sama ada fail ini telah disambungkan.

Biar saya menggambarkan bagaimana sambungan fail berfungsi dalam PHP:

Apabila memasukkan fail (mana-mana, sebagai contoh: html, txt, php, xml, dll.) Skrip PHP, kandungannya dimasukkan secara bodoh ke dalam tempat termasuk. Dalam erti kata lain, masukkan (dan saya juga maksudkan memerlukan, kerana ia adalah perkara yang sama) adalah seperti menyalin (CTRL+C) kod dari suatu tempat dan menampal (CTRL+V) ke dalam fail (contohnya, dalam produk. php) dan kemudian disimpan dan jalankan seperti biasa: http://yoursite.net/product.php

Untuk membezakan fail utama, seperti product.php daripada yang kami sertakan di dalamnya (menu.php, header.php, footer.php), fail yang disertakan dinamakan semula seperti berikut: menu.inc.php, header. inc.php , footer.inc.php. Terima kasih kepada ini, apabila kita masuk ke dalam folder, kita akan segera melihat di mana fail utama berada dan di mana fail tambahan berada.

Perhatian:

Teknik ini (menambah inc) digunakan hanya untuk kemudahan visual dan tidak membawa sebarang perbezaan fungsi. Tetapi kemudahan visual juga sangat penting, jadi cuba sentiasa menyusun dan melakukan segala-galanya dalam gaya yang sama.

sertakan dengan nilai pulangan

Ingat kata kunci? Jadi dalam PHP terdapat perkara yang liar seperti pengembalian di dalam include. Saya tidak pernah menggunakannya dan tidak pernah melihat orang lain menggunakannya, tetapi mungkin, simpan beberapa contoh.php:

Sertakan some.php:

// Rentetan keluaran: PHP ?>

Beberapa fakta lagi

  • Anda boleh memasukkan fail di mana-mana sahaja dalam kod PHP, termasuk di dalam ;
  • Sambungan (termasuk) dicetuskan semasa pelaksanaan skrip, tiada apa yang berlaku dalam fail yang disertakan terlebih dahulu;
  • Fail yang disertakan mempunyai sama seperti baris di mana termasuk diisytiharkan. Iaitu, jika di suatu tempat di tengah-tengah fail, maka skop global, dan jika di dalam fungsi, maka yang tempatan. Sekali lagi, saya menekankan bahawa include adalah sama jika anda mengambil dan menyalin kod ke dalam fail sebagai ganti include.

Terima kasih semua atas perhatian anda dan selamat berhujung minggu!

Secara lalai, sambungan untuk bekerja dengan MySQL (pustaka php_mysql.dll) tidak disambungkan ke PHP dan fungsi yang sepadan tidak tersedia. Untuk menyambungkan perpustakaan, anda perlu membuat perubahan pada fail konfigurasi php.ini dan menyalin perpustakaan tambahan ke direktori c:/windows/system32.

1. Beritahu PHP (Apache) di mana php.ini berada (Apache 2.x sahaja)

Jika anda menggunakan Apache versi 2 dan ke atas, maka pastikan anda menambah arahan PHPIniDir pada fail konfigurasi Apache (httpd.conf), yang membolehkan anda menentukan lokasi sebenar fail php.ini. Selepas menambah arahan, mulakan semula Apache dan sahkan bahawa permulaan itu berjaya.

PHPIniDir "c:/php"

Catatan

Ambil perhatian bahawa garis miring ke hadapan / digunakan semasa menulis laluan, yang bukan tipikal untuk Windows, yang menggunakan garis miring ke belakang \\. Hakikatnya ialah kedua-dua Apache dan PHP pada asalnya direka untuk berfungsi pada sistem unix, di mana garis miring ke hadapan digunakan. Untuk mengelakkan kemungkinan masalah sukar didiagnosis, kami amat mengesyorkan menggunakan garis miring ke hadapan dalam format unix dalam fail konfigurasi Apache dan PHP.

Ini mengandaikan bahawa fail konfigurasi php.ini disimpan dalam direktori c:/php. Untuk memastikan bahawa Apache menemui fail konfigurasi php.ini, jalankan fungsi phpinfo().

Mencetak maklumat konfigurasi PHP

echo phpinfo();
?>

Cari nilai baris dalam jadual ungu yang terhasil "Laluan Fail Konfigurasi (php.ini)". Ia harus mengandungi laluan ke fail php.ini yang digunakan, termasuk fail itu sendiri. Jika hanya direktori disenaraikan pada baris ini, ini bermakna Apache tidak dapat mencari fail php.ini.

C:/php/php.ini // Betul - php.ini ditemui dan digunakan
C:/windows/ // Salah - php.ini tidak ditemui

Catatan

Dalam versi Apache yang lebih awal, tiada arahan PHPIniDir, dan akibatnya, terdapat banyak ralat yang berkaitan dengan lokasi fail php.ini yang salah. Untuk Apache versi 1.3, php.ini mesti terletak dalam direktori sistem Windows, biasanya: c:/Windows. Menggunakan arahan PHPIniDir dalam Apache versi 2 menyelesaikan masalah ini secara radikal.

Selepas anda memastikan bahawa Apache menggunakan php.ini yang betul, anda boleh mula mengeditnya untuk menyambung sambungan MySQL.

2. Sediakan arahan extension_dir dalam PHP.INI

Arahan extension_dir menentukan direktori di mana perpustakaan sambungan php berada, termasuk perpustakaan php_mysql.dll. Jika anda memasang php dalam direktori c:/php, maka perpustakaan sambungan biasanya terletak dalam subdirektori ext (c:/php/ext). Semak sama ada ini berlaku dan tetapkan nilai arahan extension_dir yang betul.

extension_dir = "c:/php/ext"

3. Sambungkan sambungan untuk berfungsi dengan MySQL

Untuk melakukan ini, cari baris dalam php.ini:

;extension=php_mysql.dll

Dan alih keluar simbol ulasan daripadanya - koma bertitik.

Sambungan=php_mysql.dll

4. Salin perpustakaan tambahan libmysql.dll ke c:/windows

Jika anda mempunyai PHP yang disambungkan ke Apache sebagai modul, maka untuk menyambungkan sambungan MySQL, anda perlu menyalin perpustakaan tambahan libmysql.dll daripada direktori c:/php ke direktori c:/windows/system32. Jika php disambungkan ke Apache sebagai aplikasi CGI, maka tiada perpustakaan tambahan perlu disalin.

5. Muat semula Apache

Muat semula Apache untuk semua perubahan berkuat kuasa.

6. Semak pemasangan sambungan

Untuk mengesahkan bahawa perpustakaan MySQL telah berjaya disambungkan ke PHP, jalankan fungsi phpinfo(). Lihat melalui "jadual ungu" dan cari bahagian bernama MySQL. Jika bahagian sedemikian wujud, ini bermakna sambungan telah berjaya disambungkan.

Menyemak interaksi PHP dengan MySQL

1. Semak sama ada pelayan MySQL anda sedang berjalan.

Sebelum anda mula menyemak interaksi antara PHP dan MySQL, pastikan pelayan MySQL berjalan untuk anda. Ini boleh dilakukan dengan membuka senarai perkhidmatan Windows: "Mula" | "Panel Kawalan" | "Pentadbiran" | "Perkhidmatan". Cari perkhidmatan bernama MySQL dan pastikan ia berada dalam keadaan berjalan (lajur ketiga jadual).

Cara kedua untuk memastikan pelayan MySQL sedang berjalan adalah dengan menekan butang "Crtl" + "Alt" + "Del" dan dalam tab "Proses", cari proses bernama mysqld.exe. Daripada proses mysqld.exe, proses berikut juga boleh dijalankan: mysqld-nt.exe, mysqld-max-nt.exe, mysqld-debug.exe.

2. Jalankan skrip php ujian

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

$dbcnx = mysql_connect ($dblocation , $dbuser , $dbpasswd );
jika (! $dbcnx )
{
bergema "" ;
keluar();
}
jika (!

{
bergema "" ;
keluar();
}

jika(! $ver )
{
bergema "

Ralat permintaan

" ;
keluar();
}
bergema
mysql_result($ver , 0 );
?>

Jika ujian berjaya, maka nombor versi pelayan MySQL akan dipaparkan. Jika tidak, penerangan tentang ralat yang berlaku akan dipaparkan pada skrin.

Ralat semasa menyambungkan sambungan untuk berfungsi dengan MySQL

Ralat seperti: Panggilan ke fungsi yang tidak ditentukan

Semua ralat yang mengandungi frasa "Panggilan ke fungsi tidak ditentukan" menghala ke sambungan PHP yang tidak disambungkan. Jika ralat sedemikian berlaku semasa bekerja dengan fungsi MySQL, maka ini bermakna perpustakaan PHP untuk bekerja dengan MySQL tidak disambungkan - php_mysql.dll

Contoh mesej ralat:

Ralat maut: Panggilan ke fungsi yang tidak ditentukan mysql_connect()

Untuk penyelesaian kepada masalah ini, lihat permulaan artikel.

Tiada blok MySQL dalam phpinfo()

Jika semuanya dilakukan dengan betul, tetapi sambungan MySQL tidak bersambung malah blok MySQL tiada dalam output fungsi phpinfo(), kemudian semak versi perpustakaan libmysql.dll yang terletak di c:/windows/system32.

  1. Bandingkan saiz pustaka libmysql.dll yang terletak di c:/windows/system32 dengan saiz pustaka dengan nama yang sama yang telah dipasang dengan PHP. Mereka mesti sama.
  2. Alihkan perpustakaan libmysql.dll ke direktori c:/windows dan semua subdirektori. Padamkan semua pendua yang ditemui dan tinggalkan hanya satu perpustakaan yang diperlukan - perpustakaan yang telah disalin daripada direktori c:/php.

Catatan

Pustaka libmysql.dll dengan nama yang sama juga dibekalkan dengan pelayan MySQL. Walau bagaimanapun, ini adalah perpustakaan yang berbeza, dan jika pustaka MySQL terletak dalam direktori c:/windows/system32, maka PHP tidak akan dapat menyambungkan sambungan. Pustaka libmysql.dll boleh disalin secara automatik ke c:/windows/system32 apabila pelayan MySQL dipasang. Kehadiran dalam direktori sistem perpustakaan daripada versi lama PHP juga boleh menjadi penghalang.

Bersihkan halaman skrip ujian

Skrip yang ditunjukkan dalam penyenaraian di bawah sering digunakan sebagai skrip untuk menyemak interaksi antara PHP dan MySQL di laman web kami. Perbezaannya daripada skrip php serupa yang diberikan pada permulaan artikel ialah simbol @ sebelum memanggil fungsi mysql_connect() dan mysql_select_db(). Aksara ini digunakan untuk menyekat output ralat ke penyemak imbas. Ia berguna untuk menggunakannya pada tapak langsung di Internet untuk menghalang maklumat sulit daripada dipaparkan dalam penyemak imbas, tetapi apabila menyahpepijat skrip, tidak perlu melumpuhkan output ralat, kerana. ia boleh menyukarkan untuk mendiagnosis masalah tersebut.

Skrip PHP yang menyemak komunikasi PHP dengan pelayan MySQL

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

$dbcnx = @ mysql_connect ($dblocation , $dbuser , $dbpasswd );
jika (! $dbcnx )
{
bergema "

Maaf, pelayan mySQL tidak tersedia

" ;
keluar();
}
jika ( [e-mel dilindungi]
mysql_select_db ($dbname , $dbcnx ))
{
bergema "

Malangnya pangkalan data tidak tersedia.

"
;
keluar();
}
$ver = mysql_query("PILIH VERSI()");
jika(! $ver )
{
bergema "

Ralat permintaan

"
;
keluar();
}
bergema
mysql_result($ver , 0 );
?>

Jika halaman kosong dipaparkan hasil daripada pelaksanaan skrip ini, maka, sebagai peraturan, ini bermakna perpustakaan php_mysql.dll tidak disambungkan ke PHP. Untuk mendiagnosis masalah dengan lebih tepat, lakukan urutan tindakan berikut.

  1. Pastikan anda menjalankan skrip PHP lain yang tidak menggunakan pangkalan data MySQL.
  2. Alih keluar aksara @ sebelum memanggil mysql_connect dan mysql_select, yang digunakan untuk menyekat output ralat ke penyemak imbas. Selepas itu, maklumat ralat yang lebih lengkap akan dipaparkan dalam penyemak imbas, yang akan membantu menyelesaikan masalah.

Ralat: Tidak dapat menyambung ke pelayan MySQL pada "127.0.0.1" (10061)

Jika, semasa melaksanakan skrip php ujian, ralat yang serupa dengan yang berikut dihasilkan:


Tidak dapat menyambung ke pelayan MySQL pada "127.0.0.1" (10061)
dalam C:\www\panel\htdocs\test.php pada baris 7

Ini menunjukkan bahawa pelayan pangkalan data MySQL tidak berjalan. Diagnosis yang lebih tepat bagi masalah ini diberikan di atas dalam perenggan 1 subseksyen "Menyemak interaksi antara PHP dan MySQL".

Ralat: Akses ditolak untuk pengguna "root"@"localhost" (menggunakan kata laluan: YA)

Kehadiran ralat berikut:

Amaran: mysql_connect() :
Akses ditolak untuk pengguna "root"@"localhost" (menggunakan kata laluan: YA)
dalam C:\www\panel\htdocs\test.php pada baris 7

Menunjukkan bahawa anda cuba menyambung ke pangkalan data MySQL dengan kata laluan yang salah. Semak nilai pembolehubah $dbpasswd dalam skrip ujian. Secara lalai, pelayan MySQL dipasang dengan kata laluan pengguna root kosong. Jika anda menetapkan sendiri kata laluan untuk pengguna root, kemudian tambahkannya pada $dbpasswd pembolehubah skrip semak.

Sebarang soalan yang anda ada tentang menyambung ke sambungan PHP untuk digunakan, anda boleh bertanya di forum kami yang khusus untuk memasang dan mengkonfigurasi perpustakaan Apache, PHP dan sambungan.

Apa lagi yang perlu dibaca