PHP CURL - funksiyalar va foydalanishga misollar. PHP Curl buyruq qatori parametrlarida cURL dan kengaytirilgan foydalanish
(PHP 4 >= 4.0.2, PHP 5, PHP 7)
curl_setopt — CURL sessiyasi uchun parametrni o'rnatadi
Parametrlar ro'yxati
cURL dastagidan olingan curl_init().
O'rnatilishi kerak bo'lgan parametr CURLOPT_XXX.
Variant parametrining qiymati.
bool:
Parametr | Eslatmalar | |
---|---|---|
CURLOPT_AUTOREFERER | TO'G'RI maydonni avtomatik sozlash uchun Yo'naltiruvchi: sarlavha tomonidan qayta yo'naltirilgan so'rovlarda Manzil:. | |
CURLOPT_BINARYTRANSFER | TO'G'RI doimiydan foydalanganda xom javobni qaytarish uchun CURLOPT_RETURNTRANSFER. | PHP 5.1.3 dan boshlab bu parametr endi talab qilinmaydi: opsiyadan foydalanganda xom mahsulot har doim qaytariladi CURLOPT_RETURNTRANSFER. |
CURLOPT_COOKIESESSION | TO'G'RI joriy sessiyaga cookie-fayllarning yangi "sessiyasi" ni boshlashga ko'rsatma berish. Bu libcurl oldingi seansdan yuklangan har qanday "sessiya" cookie-fayllarini e'tiborsiz qoldirishiga olib keladi. Odatiy bo'lib, libcurl "sessiya" bo'ladimi yoki yo'qmi, har doim barcha cookie-fayllarni saqlaydi va yuklaydi. "Session" cookie-fayllari muddati tugamaydigan va faqat joriy "sessiya" uchun mavjud bo'lishi kerak bo'lgan cookie-fayllardir. | |
CURLOPT_CERTINFO | TO'G'RI oqim uchun SSL sertifikat ma'lumotlarini chiqarish uchun STDERR xavfsiz ulanishlar bilan. | cURL 7.19.1 da qo'shilgan. PHP 5.3.2 dan boshlab mavjud. To'g'ri ishlashi uchun ushbu parametr yoqilishini talab qiladi CURLOPT_VERBOSE. |
CURLOPT_CONNECT_ONLY | TO'G'RI kutubxonaga kerakli proksi autentifikatsiya va ulanishni sozlashni amalga oshirishni aytadi, lekin ma'lumotlarni uzatmaydi. Ushbu parametr HTTP, SMTP va POP3 uchun amalga oshiriladi. | 7.15.2 da qo'shilgan. PHP 5.5.0 dan mavjud. |
CURLOPT_CRLF | TO'G'RI Unix satr oxirlarini CRLF ga aylantirish uchun. | |
CURLOPT_DNS_USE_GLOBAL_CACHE | TO'G'RI global DNS keshini ishlatish uchun. Ushbu parametr tarmoq uchun xavfsiz emas va sukut bo'yicha yoqilgan. | |
CURLOPT_FAILONERROR | TO'G'RI Agar qabul qilingan HTTP kodi 400 dan katta yoki unga teng bo'lsa, muvaffaqiyatsizlik haqida batafsil hisobot uchun. Standart xatti-harakatlar kodni e'tiborsiz qoldirib, sahifani normal holatga qaytaradi. | |
CURLOPT_FILETIME | TO'G'RI masofaviy hujjatning o'zgartirish sanasini olishga harakat qilish. Bu qiymatni funksiyadan CURLINFO_FILETIME parametri yordamida olish mumkin curl_getinfo(). | |
CURLOPT_FOLLOWLOCATION | TO'G'RI har qanday sarlavhaga amal qilish "Manzil: " server tomonidan o'z javobida yuborilgan (bu rekursiv ravishda sodir bo'lishini unutmang, PHP yuborilgan har qanday sarlavhalarni kuzatib boradi. "Manzil: ", doimiy o'rnatilgandan tashqari CURLOPT_MAXREDIRS). | |
CURLOPT_FORBID_REUSE | TO'G'RI ulanishni qayta ishlashni tugatgandan so'ng uni qayta ishlatib bo'lmasligi uchun yopishga majburlash. | |
CURLOPT_FRESH_CONNECT | TO'G'RI keshlangan ulanish o'rniga yangi ulanishdan foydalanishga majburlash. | |
CURLOPT_FTP_USE_EPRT | TO'G'RI faol FTP yuklash uchun EPRT (va LPRT) dan foydalanish. Foydalanish FALSE EPRT va LPRT ni o'chirish va faqat PORT dan foydalanish uchun. | |
CURLOPT_FTP_USE_EPSV | TO'G'RI FTP uzatish paytida EPSV buyrug'ini dastlabki sinovdan o'tkazish uchun. Agar buyruq bajarilmasa, u PASV-ga qaytadi. O'rnatish FALSE EPSVni o'chirish uchun. | |
CURLOPT_FTP_CREATE_MISSING_DIRS | TO'G'RI Agar FTP operatsiyasi mavjud bo'lmagan yo'lga duch kelsa, etishmayotgan kataloglarni yaratish. | |
CURLOPT_FTPAPPEND | TO'G'RI masofaviy faylni mavjud fayl ustiga yozish o'rniga oxirigacha yozish uchun. | |
CURLOPT_TCP_NODELAY | TCP_NODELAY opsiyasi o'rnatilishi yoki tozalanishi kerakligini doimiy ravishda belgilaydi (1 = o'rnatilgan, 0 = tozalangan). Odatiy bo'lib, parametr o'chiriladi. | PHP 5.2.1 dan libcurl 7.11.2 yoki undan keyingi versiyalari bilan tuzilgan versiyalar uchun mavjud. |
CURLOPT_FTPASCII | Taxallus CURLOPT_TRANSFERTEXT. Buning o'rniga foydalaning. | |
CURLOPT_FTPLISTONLY | TO'G'RI FTP katalogidan faqat nomlar ro'yxatini qaytarish uchun. | |
CURLOPT_HEADER | TO'G'RI sarlavhalarni chiqishga kiritish uchun. | |
CURLINFO_HEADER_OUT | TO'G'RI dastagi so'rovlar qatorini kuzatish uchun. | PHP 5.1.3 dan boshlab mavjud. Prefiks CURLINFO_ maxsus ishlatiladi. |
CURLOPT_HTTPGET | TO'G'RI HTTP so'rov usulini GET usuliga qaytarish uchun. GET standart bo'lgani uchun, bu parametr faqat so'rov usuli ilgari o'zgartirilgan bo'lsa kerak bo'ladi. | |
CURLOPT_HTTPPROXYTUNNEL | TO'G'RI belgilangan HTTP proksi-server orqali tunnel qilish. | |
CURLOPT_MUTE | TO'G'RI cURL funktsiyasi xabarlarini butunlay o'chirish uchun. | cURL 7.15.5 da olib tashlangan (CURLOPT_RETURNTRANSFER opsiyasidan foydalanish mumkin) |
CURLOPT_NETRC | TO'G'RI ulanish o'rnatilayotgan masofaviy sayt uchun login va parol uchun ~/.netrc faylini o'qish uchun. | |
CURLOPT_NOBODY | TO'G'RI javob tanasini chiqishdan chiqarib tashlash. So‘rov usuli HEAD ga o‘rnatilgan. Bu sozlamaga oʻzgartirish FALSE uni GET ga qaytarmaydi. | |
CURLOPT_NOPROGRESS | TO'G'RI cURL o'tkazmalarida progress indikatorini o'chirish uchun.
|
|
CURLOPT_NOSIGNAL | TO'G'RI PHP jarayoniga signal yuboradigan har qanday cURL funksiyasini e'tiborsiz qoldirish. Vaqt tugashi parametrlarining to'g'ri ishlashiga ruxsat berish uchun bu parametr ko'p tarmoqli SAPI'larda sukut bo'yicha yoqilgan. | |
CURLOPT_POST | TO'G'RI muntazam HTTP POST dan foydalanish. Ushbu POST usuli odatdagidan foydalanadi , odatda HTML shakllarida qo'llaniladi. | |
CURLOPT_PUT | TO'G'RI HTTP PUT usuli yordamida faylni yuklab olish uchun. Amaldagi fayl parametrlar yordamida o'rnatilishi kerak CURLOPT_INFILE Va CURLOPT_INFILESIZE. | |
CURLOPT_RETURNTRANSFER | TO'G'RI dan satr sifatida uzatish natijasini qaytarish uchun curl_exec() brauzerga to'g'ridan-to'g'ri chiqish o'rniga. | |
CURLOPT_SAFE_UPLOAD | TO'G'RI prefiksni qo'llab-quvvatlashni o'chirish uchun @ Yuklab olingan fayllar uchun CURLOPT_POSTFIELDS, bu qiymatlar bilan o'tganligini anglatadi @ maydonlar sifatida xavfsiz tarzda uzatilishi mumkin. Prefiks o'rniga siz variantdan foydalanishingiz mumkin CURLFile d. | Standart qiymat bilan PHP 5.5.0 da qo'shilgan FALSE. PHP 5.6.0 da u sukut bo'yicha teng bo'ldi TO'G'RI. |
CURLOPT_SSL_VERIFYPEER | FALSE cURL xost sertifikatini tekshirishni to'xtatish uchun. Tekshiriladigan muqobil sertifikatlar parametr yordamida belgilanishi mumkin CURLOPT_CAINFO yoki parametr tomonidan belgilangan sertifikatlarga ega katalog CURLOPT_CAPATH. | Standart TO'G'RI cURL 7.10 versiyasidan beri. Standart tarqatish cURL 7.10 versiyasidan boshlab o'rnatiladi. |
CURLOPT_TRANSFERTEXT | TO'G'RI FTP uzatish uchun ASCII rejimidan foydalanish. LDAP dan foydalanganda ma'lumotlar HTML o'rniga oddiy matnda qaytariladi. Windows tizimlarida ip STDOUT ikkilik rejimga o'rnatilmaydi. | |
CURLOPT_UNRESTRICTED_AUTH | TO'G'RI qayta yo'naltirish paytida login va parolni yuborishni davom ettirish uchun ( CURLOPT_FOLLOWLOCATION), xost nomi o'zgargan bo'lsa ham. | |
CURLOPT_UPLOAD | TO'G'RI faylni serverga yuklashga tayyorlanish. | |
CURLOPT_VERBOSE | TO'G'RI qo'shimcha ma'lumotlarni ko'rsatish uchun. Chiqishni oqimga yozadi STDERR, yoki parametr tomonidan belgilangan fayl CURLOPT_STDERR. |
Quyidagi parametr parametrlari qiymatlari uchun qiymat parametri turdagi bo'lishi kerak butun son:
Parametr | Qiymat qiymatini o'rnating | Eslatmalar |
---|---|---|
CURLOPT_BUFFERSIZE | Har bir o'qish uchun ishlatiladigan bufer hajmi. Biroq, bu so'rovning bajarilishiga kafolat yo'q. | cURL 7.10 da qo'shilgan. |
CURLOPT_CLOSEPOLICY | Konstantalardan biri CURLCLOSEPOLICY_*.
|
PHP 5.6.0 da olib tashlangan. |
CURLOPT_CONNECTTIMEOUT | Ulanishga urinayotganda kutish uchun soniyalar soni. Cheksiz kutish uchun 0 dan foydalaning. | |
CURLOPT_CONNECTTIMEOUT_MS | Ulanishga urinayotganda kutish uchun millisekundlar soni. Cheksiz kutish uchun 0 dan foydalaning. Agar libcurl tizimning standart nom echuvchisi yordamida kompilyatsiya qilingan bo'lsa, u holda ulanish hali ham taym-aut sifatida to'liq soniya kutishdan foydalanadi, minimal ruxsat etilgan vaqt 1 soniya. | cURL 7.16.2 versiyasiga qo'shilgan. PHP 5.2.3 dan boshlab mavjud. |
CURLOPT_DNS_CACHE_TIMEOUT | DNS yozuvlari xotirada saqlanadigan soniyalar soni. Odatiy bo'lib, bu parametr 120 (2 daqiqa). | |
CURLOPT_FTPSSLAUTH | FTP autentifikatsiya usuli (faol rejimda): CURLFTPAUTH_SSL(SSL avval tekshiriladi), CURLFTPAUTH_TLS(TLS avval tekshiriladi) yoki CURLFTPAUTH_DEFAULT(cURL o'zi uchun qaror qiladi). | cURL 7.12.2 versiyasiga qo'shilgan. |
CURLOPT_HTTP_VERSION | CURL_HTTP_VERSION_NONE (sukut boʻyicha, CURL qaysi versiyadan foydalanishni tanlaydi), CURL_HTTP_VERSION_1_0 (majburiy HTTP/1.0) yoki CURL_HTTP_VERSION_1_1 (majburiy HTTP/1.1). | |
CURLOPT_HTTPAUTH |
Bitwise operatoridan foydalanishingiz mumkin | (yoki) bir nechta usullarni birlashtirish. Bunday holda, cURL qo'llab-quvvatlanadigan avtorizatsiya usullari uchun serverni so'raydi va eng yaxshisini tanlaydi. CURLAUTH_ANY taxallus CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM. CURLAUTH_ANYSAFE taxallus CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM. |
|
CURLOPT_INFILESIZE | Faylni masofaviy serverga yuklashda kutilgan fayl hajmi, baytlarda. Shuni esda tutingki, ushbu parametrdan foydalanish boshqa ma'lumotlarning ushbu qiymatdan oshib ketishini to'xtatmaydi, chunki yuborilgan ma'lumotlar natijaga bog'liq CURLOPT_READFUNCTION. | |
CURLOPT_LOW_SPEED_LIMIT | Ma'lumot uzatish tezligining yuqori chegarasi, soniyada baytlarda. Tekshiruv ichida amalga oshiriladi CURLOPT_LOW_SPEED_TIME soniya, shundan so'ng PHP uzatishni juda sekin deb hisoblaydi va uni bekor qiladi. | |
CURLOPT_LOW_SPEED_TIME | O'tkazish tezligi oshmasligi kerak bo'lgan maksimal soniyalar soni CURLOPT_LOW_SPEED_LIMIT, aks holda PHP uzatishni juda sekin deb belgilaydi va uni to'xtatadi. | |
CURLOPT_MAXCONNECTS | Doimiy ulanishlarning maksimal soni. Cheklovga erishilganda, parametr qaysi ulanishni yopish kerakligini aniqlash uchun ishlatiladi. CURLOPT_CLOSEPOLICY. | |
CURLOPT_MAXREDIRS | Qabul qilingan qayta yo'naltirishlarning maksimal soni. Ushbu parametrdan opsiya bilan birga foydalaning CURLOPT_FOLLOWLOCATION. | |
CURLOPT_PORT | Muqobil ulanish porti. | |
CURLOPT_POSTREDIR | Variant yoqilganda HTTP POST usuli qayta ishlanishi kerakmi yoki yoʻqligini koʻrsatish uchun 1 (301 doimiy koʻchirildi), 2 (302 topildi) va 4 (303 boshqasiga qarang) ni oʻz ichiga olgan bit niqobi CURLOPT_FOLLOWLOCATION agar ko'rsatilgan qayta yo'naltirish turi sodir bo'lsa. | cURL 7.19.1 da qo'shilgan. PHP 5.3.2 dan beri mavjud. |
CURLOPT_PROTOCOLS |
Qiymatlarning bit niqobi CURLPROTO_*. Ushbu niqob libcurl tomonidan ishlatiladigan protokollarni cheklaydi. Bu sizga libcurl-ning ko'p sonli protokollar bilan ishlashiga imkon beradi va ma'lum o'tkazmalarning ishlashini faqat ularning kichik to'plami bilan cheklaydi. Odatiy bo'lib, libcurl barcha qo'llab-quvvatlanadigan protokollardan foydalanadi. Shuningdek, parametrga qarang CURLOPT_REDIR_PROTOCOLS. To'g'ri protokol qiymatlari: CURLPROTO_HTTP , CURLPROTO_HTTPS , CURLPROTO_FTP , CURLPROTO_FTPS , CURLPROTO_SCP , CURLPROTO_SFTP , CURLPROTO_TELNET , CURLPROTO_LDAP , CURLPROTO_LDAP , CURLPROTO_LDAP , CURLPROTO_HTTPS , CURLPROTO_HTTPS , CURLPROTO_FTP , LP ROTO_TFTP, CURLPROTO_ALL |
|
CURLOPT_PROXYAUTH | Proksi-serverga ulanishda ishlatiladigan HTTP avtorizatsiya usullari. Parametr uchun tavsiflangan bir xil bit niqoblaridan foydalaning CURLOPT_HTTPAUTH. Hozirda proksi avtorizatsiya uchun faqat CURLAUTH_BASIC va CURLAUTH_NTLM qo‘llab-quvvatlanadi. | cURL 7.10.7 versiyasiga qo'shilgan. |
CURLOPT_PROXYPORT | Ulanish amalga oshirilgan proksi-serverning port raqami. Ushbu raqam parametr yordamida ham o'rnatilishi mumkin CURLOPT_PROXY. | |
CURLOPT_PROXYTYPE | CURLPROXY_HTTP (standart) yoki CURLPROXY_SOCKS5 . | cURL 7.10 da qo'shilgan. |
CURLOPT_REDIR_PROTOCOLS | Qiymatlarning bit niqobi CURLPROTO_*. Ushbu bit maskasi libcurl tomonidan qayta yoʻnaltirishda foydalaniladigan protokollarni cheklaydi (parametr yoqilgan holda) CURLOPT_FOLLOWLOCATION). Bu sizga ba'zi uzatishlar uchun qayta yo'naltirishda foydalaniladigan protokollar to'plamini cheklash imkonini beradi. Odatiy bo'lib, libcurl FILE va SCPdan tashqari barcha protokollarni qo'llab-quvvatlaydi. 7.19.4 dan oldingi versiyalarda qayta yo'naltirish istisnosiz barcha protokollar uchun ishlatilgan. Shuningdek, parametr tavsifiga qarang CURLOPT_PROTOCOLS protokol qiymatlari bilan doimiylar ro'yxati uchun. | cURL 7.19.4 versiyasiga qo'shilgan. |
CURLOPT_RESUME_FROM | Etkazish boshlanishi ofset, baytlarda. | |
CURLOPT_SSL_VERIFYHOST | SSL sertifikatida umumiy nom mavjudligini tekshirish uchun 1 dan foydalaning. Umumiy nom mavjudligini va belgilangan xostga mos kelishini tekshirish uchun 2 dan foydalaning. Jangovar muhitda ushbu parametrning qiymati 2 bo'lishi kerak (sukut bo'yicha o'rnatiladi). | cURL 7.28.1 da 1 qiymatini qo‘llab-quvvatlash olib tashlandi |
CURLOPT_SSLVERSION | Konstantalardan biri CURL_SSLVERSION_DEFAULT (0), CURL_SSLVERSION_TLSv1 (1), CURL_SSLVERSION_SSLv2 (2), CURL_SSLVERSION_SSLv3 (3), CURL_SSLVERSION_TLSv1_0 (4), CURL_SSLVERSION_TLSv1_1(5) yoki CURL_SSLVERSION_TLSv1_2 (6). | |
CURLOPT_TIMECONDITION | Parametrlarni talqin qilish usuli CURLOPT_TIMEVALUE. CURL_TIMECOND_IFMODSINCE sahifani faqat parametrda ko'rsatilgan vaqtdan beri o'zgargan bo'lsa qaytarish uchun foydalaning CURLOPT_TIMEVALUE. Agar sahifa o'zgartirilmagan bo'lsa, sarlavha qaytariladi "304 o'zgartirilmagan", bu parametrni nazarda tutadi CURLOPT_HEADER ichida o'rnatilgan TO'G'RI. Qarama-qarshi effekt uchun CURL_TIMECOND_IFUNMODSINCE dan foydalaning. Standart CURL_TIMECOND_IFMODSINCE. | |
CURLOPT_TIMEOUT | cURL funksiyalarini bajarish uchun ruxsat etilgan maksimal soniyalar soni. | |
CURLOPT_TIMEOUT_MS | cURL funksiyalarini bajarish uchun ruxsat etilgan maksimal millisekundlar soni. Agar libcurl oddiy tizim nomini hal qiluvchi yordamida qurilgan bo'lsa, u holda bu ulanish oralig'i baribir ikkinchi yaxlitlash taym-autlaridan foydalanadi, minimal vaqt tugashi bir soniyadan iborat bo'ladi. | cURL 7.16.2 versiyasiga qo'shilgan. PHP 5.2.3 dan boshlab mavjud. |
CURLOPT_TIMEVALUE | 1970 yil 1 yanvardan boshlab soniyalar soni. Bu vaqt parametr tomonidan ishlatiladi CURLOPT_TIMECONDITION. Odatiy bo'lib, CURL_TIMECOND_IFMODSINCE parametri ishlatiladi. | |
CURLOPT_MAX_RECV_SPEED_LARGE | Agar yuklab olish tezligi butun uzatish bo'yicha o'rtacha bu qiymatdan (sekundiga baytlarda ko'rsatilgan) oshsa, yuklab olish o'rtacha tezlikni ushbu parametrdan kamroq yoki unga teng saqlash uchun to'xtatiladi. Odatiy bo'lib, tezlik cheklanmagan. | |
CURLOPT_MAX_SEND_SPEED_LARGE | Agar serverga yuklash butun uzatish davomida o'rtacha bu qiymatdan (sekundiga baytlarda ko'rsatilgan) oshib ketsa, yuklash ushbu parametrdan kamroq yoki unga teng bo'lgan o'rtacha tezlikni saqlash uchun to'xtatiladi. Odatiy bo'lib, tezlik cheklanmagan. | cURL 7.15.5 da qo'shilgan. PHP 5.4.0 dan boshlab mavjud. |
CURLOPT_SSH_AUTH_TYPES | Bitmask bir yoki bir nechta konstantalardan iborat: CURLSSH_AUTH_PUBLICKEY, CURLSSH_AUTH_PASSWORD, CURLSSH_AUTH_HOST, CURLSSH_AUTH_KEYBOARD. O'rnatish CURLSSH_AUTH_ANY libcurl ulardan birini mustaqil tanlashi uchun. | cURL 7.16.1 da qo'shilgan. |
CURLOPT_IPRESOLVE | Ilovaga xost nomi aniqlanadigan IP manzil turini tanlashga ruxsat beradi. Agar siz IP manzilining bir nechta versiyasidan olingan xost nomidan foydalansangiz, bu zarur. Mumkin qiymatlar bo'lishi mumkin CURL_IPRESOLVE_NIMA, CURL_IPRESOLVE_V4, CURL_IPRESOLVE_V6, va sukut bo'yicha CURL_IPRESOLVE_NIMA. | cURL 7.10.8 da qo'shilgan. |
Quyidagi parametr parametrlari qiymatlari uchun qiymat parametri turdagi bo'lishi kerak ip:
Parametr | Qiymat qiymatini o'rnating | Eslatmalar |
---|---|---|
CURLOPT_CAINFO | Tugunlar tekshiriladigan bir yoki bir nechta sertifikatdan iborat fayl nomi. Ushbu parametr faqat bilan birgalikda ishlatilganda mantiqiy bo'ladi CURLOPT_SSL_VERIFYPEER. | Mutlaq yo'lni talab qiladi. |
CURLOPT_CAPATH | Bir nechta CA sertifikatlarini o'z ichiga olgan katalog. bilan birgalikda ushbu parametrdan foydalaning CURLOPT_SSL_VERIFYPEER. | |
CURLOPT_COOKIE | Sarlavha tarkibi "Cookie:", HTTP so'rovida ishlatiladi. Esda tutingki, bir nechta cookie fayllari nuqta-vergul va keyin bo'sh joy bilan ajratiladi (masalan, " meva = olma; rang = qizil") | |
CURLOPT_COOKIEFILE | Cookie-fayllarni o'z ichiga olgan fayl nomi. Bu fayl Netscape formatida yoki faylga yozilgan oddiy HTTP sarlavhalarida bo'lishi kerak. Agar fayl nomi sifatida bo'sh satr uzatilsa, cookie fayllari saqlanmaydi, lekin ularni qayta ishlash hali ham faol bo'ladi. | |
CURLOPT_COOKIEJAR | Joriy uzatishning barcha ichki cookie-fayllari tutqich yopilgandan keyin saqlanadigan fayl nomi, masalan, curl_close chaqirilgandan keyin. | |
CURLOPT_CUSTOMREQUEST | Buning oʻrniga maxsus soʻrov usuli ishlatilgan "OLING" yoki "BOSH" HTTP so'rovini yuborishda. Bu so'rovlar uchun foydalidir "O'chirish" yoki boshqa kam uchraydigan HTTP so'rovlari. To'g'ri ma'nolar kabi so'zlar bo'ladi "OLING", "POST", "ULANMOQ" va hokazo; bular. Bu yerga butun HTTP so'rov qatorini kiritmang. Masalan, ko'rsatma "Olish /index.html HTTP/1.0\r\n\r\n" noto'g'ri bo'ladi.
|
|
CURLOPT_EGDSOCKET | Kabi CURLOPT_RANDOM_FILE, bundan tashqari fayl nomi Entropy Gathering Daemon soketiga o'rnatilgan. | |
CURLOPT_ENCODING | Sarlavha tarkibi "Qabul qilish-kodlash:". Bu so'rovni dekodlash imkonini beradi. Qo'llab-quvvatlanadigan kodlashlar "identifikatsiya", "deflyatsiya" Va "gzip". Agar bo'sh satr uzatilsa, "" , barcha qo'llab-quvvatlanadigan kodlash turlarini o'z ichiga olgan sarlavha yuboriladi. | cURL 7.10 da qo'shilgan. |
CURLOPT_FTPPORT | FTP "PORT" buyrug'i uchun IP-manzilni aniqlash uchun foydalaniladigan qiymat. "PORT" buyrug'i serverga qaysi IP-manzilga ulanishi kerakligini aytadi. Bu IP manzili, xost nomi, tarmoq interfeysi nomi (Unix ostida) yoki standart tizim IP manzilidan foydalanish uchun oddiygina "-" bo'lishi mumkin. | |
CURLOPT_INTERFACE | Foydalanadigan tarmoq interfeysi nomi. Interfeys nomi, IP manzili yoki xost nomi bo'lishi mumkin. | |
CURLOPT_KEYPASSWD | Shaxsiy kalitdan foydalanish uchun parol kerak CURLOPT_SSLKEY yoki CURLOPT_SSH_PRIVATE_KEYFILE. | cURL 7.16.1 da qo'shilgan. |
CURLOPT_KRB4LEVEL | Xavfsizlik darajasi KRB4 (Kerberos 4). Quyidagi qiymatlardan har biri (eng kuchsizdan kuchliga qarab) to'g'ri: "aniq", "xavfsiz", "maxfiy", "xususiy".. Belgilangan satr berilgan qiymatlardan farq qilsa, qiymat ishlatiladi "xususiy". Ushbu parametrni sozlash NULL KRB4 xavfsizligini butunlay o'chirib qo'yadi. Hozirda KRB4 xavfsizligi faqat FTP tranzaksiyalari bilan ishlaydi. | |
CURLOPT_POSTFIELDS | HTTP POST so'rovida uzatiladigan barcha ma'lumotlar. Faylni uzatish uchun fayl nomidan oldin belgilang @ , va shuningdek, faylning to'liq yo'lidan foydalaning. Fayl turini format yordamida ham belgilash mumkin " ;type=mimetype" fayl nomidan keyin. Bu parametr url kodlangan qator sifatida uzatilishi mumkin, masalan " para1=val1¶2=val2&...", va massiv ko'rinishida, uning kalitlari maydonlarning nomlari va qiymatlari ularning mazmuni bo'ladi. Agar qiymat massiv bo'lsa, sarlavha Kontent turi ga o'rnatiladi ko'p qismli/shakl-ma'lumotlar. PHP 5.2.0 dan boshlab, prefiksli fayllarni uzatishda @ , qiymat massiv bo'lishi kerak. PHP 5.5.0 dan boshlab, prefiks @ eskirgan va fayllar yordamida yuborilishi mumkin CURLFile. Prefiks @ bilan boshlanadigan qiymatlarga ruxsat berish uchun o'chirib qo'yish mumkin @ variantni o'rnatish orqali CURLOPT_SAFE_UPLOAD ma'nosida TO'G'RI. | |
CURLOPT_PROXY | HTTP proksi-server orqali so'rovlar yo'naltiriladi. | |
CURLOPT_PROXYUSERPWD | Shaklda yozilgan login va parol ":" , proksi-server orqali ulanishda ishlatiladi. | |
CURLOPT_RANDOM_FILE | SSL uchun tasodifiy sonlar generatorini ishga tushirish uchun foydalaniladigan fayl nomi. | |
CURLOPT_RANGE | Yuklab olinadigan ma'lumotlar diapazoni, formatda "X-Y", va X yoki Y qoldirilishi mumkin. HTTP protokoli shuningdek vergul bilan ajratilgan bir nechta diapazonlarni uzatishni qo'llab-quvvatlaydi, ular formatda ko'rsatilgan. "X-Y, N-M". | |
CURLOPT_REFERER | Sarlavha tarkibi "Yo'naltiruvchi:", bu HTTP so'rovida ishlatiladi. | |
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 | 32 oʻn oltilik raqamdan iborat qator. Satr masofaviy kompyuterning umumiy kalitining MD5 nazorat summasi bo'lishi kerak va libcurl nazorat yig'indisi umumiy kalitga mos kelguncha masofaviy xost bilan ulanishni tiklaydi. Ushbu parametr faqat SCP va SFTP yordamida ma'lumotlarni uzatish uchun mo'ljallangan. | cURL 7.17.1 da qo'shilgan. |
CURLOPT_SSH_PUBLIC_KEYFILE | Ochiq kalitingiz uchun fayl nomi. Agar ko'rsatilmagan bo'lsa, HOME muhit o'zgaruvchisi o'rnatilgan bo'lsa, libcurl sukut bo'yicha $HOME/.ssh/id_dsa.pub fayliga va HOME muhit o'zgaruvchisi o'rnatilmagan bo'lsa, joriy katalogdagi "id_dsa.pub" fayliga o'rnatiladi. | cURL 7.16.1 da qo'shilgan. |
CURLOPT_SSH_PRIVATE_KEYFILE | Shaxsiy kalitingiz uchun fayl nomi. Agar ko'rsatilmagan bo'lsa, HOME muhit o'zgaruvchisi o'rnatilgan bo'lsa, libcurl sukut bo'yicha $HOME/.ssh/id_dsa fayliga va HOME muhit o'zgaruvchisi o'rnatilmagan bo'lsa, joriy katalogdagi "id_dsa" fayliga o'rnatiladi. Agar fayl parol bilan himoyalangan bo'lsa, parolni foydalanib o'rnating CURLOPT_KEYPASSWD. | cURL 7.16.1 da qo'shilgan. |
CURLOPT_SSL_CIPHER_LIST | SSL uzatishda ishlatiladigan shifrlar ro'yxati. Masalan, RC4-SHA Va TLSv1 to'g'ri shifrlangan ro'yxatlardir. | |
CURLOPT_SSLCERT | To'g'ri formatlangan PEM sertifikatiga ega fayl nomi. | |
CURLOPT_SSLCERTPASSWD | Sertifikatdan foydalanish uchun parol kerak CURLOPT_SSLCERT. | |
CURLOPT_SSLCERTTYPE | Sertifikat formati. Qo'llab-quvvatlanadigan formatlar "PEM"(standart), "DER" Va "ENG". | cURL 7.9.3 versiyasiga qo'shilgan. |
CURLOPT_SSLENGINE | Parametrda ko'rsatilgan SSL shaxsiy kaliti uchun shifrlash mexanizmi identifikatori CURLOPT_SSLKEY. | |
CURLOPT_SSLENGINE_DEFAULT | Assimetrik shifrlash operatsiyalari uchun ishlatiladigan shifrlash mexanizmining identifikatori. | |
CURLOPT_SSLKEY | SSL shaxsiy kalit faylining nomi. | |
CURLOPT_SSLKEYPASSWD | Parametr tomonidan ko'rsatilgan SSL shaxsiy kalitidan foydalanish uchun zarur bo'lgan maxfiy parol CURLOPT_SSLKEY.
|
|
CURLOPT_SSLKEYTYPE | Parametrda ko'rsatilgan SSL shaxsiy kaliti turi CURLOPT_SSLKEY. Quyidagi asosiy turlar qo'llab-quvvatlanadi: "PEM"(standart), "DER" Va "ENG". | |
CURLOPT_URL | Yuklab olinadigan URL. Ushbu parametr seansni ishga tushirishda ham o'rnatilishi mumkin curl_init(). | |
CURLOPT_USERAGENT | Sarlavha tarkibi "Foydalanuvchi-agent:", HTTP so'rovida yuborilgan. | |
CURLOPT_USERPWD | Ulanish vaqtida ishlatiladigan login va parol formatda ko'rsatilgan ":" . |
Quyidagi parametr parametrlari uchun qiymat parametri massiv bo'lishi kerak:
Parametr | Qiymat qiymatini o'rnating | Eslatmalar |
---|---|---|
CURLOPT_HTTP200ALIASES | Noto'g'ri javoblar emas, balki to'g'ri javob sifatida ko'rib chiqiladigan HTTP 200 javoblar to'plami. | cURL 7.10.3 versiyasiga qo'shilgan. |
CURLOPT_HTTPHEADER | Format massividagi HTTP sarlavhalari majmuasi ("Tarkib turi: matn/tozalik", "Kontent uzunligi: 100") | |
CURLOPT_POSTQUOTE | FTP so'rovi bajarilgandan so'ng serverda bajariladigan FTP buyruqlar majmuasi. | |
CURLOPT_QUOTE | FTP so'rovini yuborishdan oldin serverda bajariladigan FTP buyruqlar majmuasi. |
Quyidagi parametr parametrlari qiymatlari uchun qiymat parametri oqim tutqichi bo‘lishi kerak (masalan, funksiya tomonidan qaytariladi) fopen()):
Parametr | Qiymat qiymatini o'rnating |
---|---|
CURLOPT_FILE | O'tkazish natijasi yoziladigan fayl. Standart chiqish oqimi STDOUT(brauzer oynasi). |
CURLOPT_INFILE | Serverga yuklanganda ma'lumotlar o'qilishi kerak bo'lgan fayl. |
CURLOPT_STDERR | Xato oqimi oʻrniga ishlatiladigan muqobil xato chiqish fayli STDERR. |
CURLOPT_WRITEHEADER | Joriy operatsiya sarlavhalari yoziladigan fayl. |
Quyidagi parametr parametrlari qiymatlari uchun qiymat parametri yaroqli funksiya nomi yoki yopilishi boʻlishi kerak:
Parametr | Qiymat qiymatini o'rnating |
---|---|
CURLOPT_HEADERFUNCTION | Qayta qo'ng'iroq qilish funktsiyasi ikkita parametrni oladi. Birinchi parametr - cURL tutqichi, ikkinchi parametr - yoziladigan sarlavhalarni o'z ichiga olgan satr. Sarlavhalar ushbu qayta qo'ng'iroq funksiyasidan foydalanib yozilishi kerak. Yozilgan baytlar sonini qaytarish kerak. |
CURLOPT_PASSWDFUNCTION | Qayta qo'ng'iroq qilish funktsiyasi uchta parametrni oladi. Birinchi parametr - cURL tutqichi, ikkinchi parametr - parol so'rash qatori va uchinchi parametr - maksimal parol uzunligi. Parolni o'z ichiga olgan qatorni qaytarish kerak. |
CURLOPT_PROGRESSFUNCTION |
Qayta qo'ng'iroq qilish funktsiyasi beshta parametrni oladi. Birinchisi - cURL identifikatori, ikkinchisi - serverdan yuklab olinishi kutilayotgan baytlarning umumiy soni, uchinchisi - allaqachon yuklab olingan baytlar soni, to'rtinchisi - serverga yuborilishi kutilayotgan baytlarning umumiy soni va beshinchisi - allaqachon yuborilgan baytlar soni.
Transferni bekor qilish uchun nolga teng bo'lmagan qiymatni qaytarishingiz mumkin. Bunday holda xato ko'rsatiladi CURLE_ABORTED_BY_CALL BACK. |
CURLOPT_READFUNCTION | Qayta qo'ng'iroq qilish funktsiyasi uchta parametrni oladi. Birinchi parametr cURL tutqichi, ikkinchi parametr opsiya orqali cURL ga uzatiladigan oqim resursidir. CURLOPT_INFILE, va uchinchi parametr - o'qish uchun ruxsat etilgan maksimal ma'lumotlar miqdori. Qayta qo'ng'iroq qilish funktsiyasi so'ralgan ma'lumotlar miqdoridan ko'p bo'lmagan uzunlikdagi satrni qaytarishi kerak, odatda uzatilgan oqim manbasidan o'qish orqali. Fayl tugashini bildirish uchun bo'sh satrni qaytarish kerak EOF. |
CURLOPT_WRITEFUNCTION | Qayta qo'ng'iroq qilish funktsiyasi ikkita parametrni oladi. Birinchi parametr cURL tutqichi, ikkinchi parametr esa yozilishi kerak bo'lgan ma'lumotlarni o'z ichiga olgan satrdir. Ushbu funktsiya yordamida ma'lumotlarni saqlash kerak. U yozilgan baytlarning aniq sonini qaytarishi kerak, aks holda yuklab olish xatolik bilan to'xtatiladi. |
Boshqa ma'nolari:
Qaytish qiymatlari
Qaytadi TO'G'RI muvaffaqiyatli tugatilgandan so'ng yoki FALSE xato bo'lgan taqdirda.
O'zgarishlar ro'yxati
Versiya | Tavsif |
---|---|
5.6.0 | Variant CURL_SAFE_UPLOAD endi standart qiymatga ega TO'G'RI. |
5.6.0 | O'chirilgan variant CURLOPT_CLOSEPOLICY va unga bog'liq ma'nolar. |
5.5.0 | cURL resursi qayta qo'ng'iroq qilish funktsiyasiga birinchi argument sifatida qo'shiladi CURLOPT_PROGRESSFUNCTION. |
5.5.0 | Qo'shilgan variant CURLOPT_SHARE. |
5.3.0 | Qo'shilgan variant CURLOPT_PROGRESSFUNCTION. |
5.2.10 | Qo'shilgan variantlar CURLOPT_PROTOCOLS Va CURLOPT_REDIR_PROTOCOLS. |
5.1.0 | Qo'shilgan variantlar CURLOPT_AUTOREFERER, CURLOPT_BINARYTRANSFER, CURLOPT_FTPSSLAUTH, CURLOPT_PROXYAUTH Va CURLOPT_TIMECONDITION. |
5.0.0 | Qo'shilgan variantlar CURLOPT_FTP_USE_EPRT, CURLOPT_NOSIGNAL, CURLOPT_UNRESTRICTED_AUTH, CURLOPT_BUFFERSIZE, CURLOPT_HTTPAUTH, CURLOPT_PROXYPORT, CURLOPT_PROXYTYPE, CURLOPT_SSLCERTTYPE Va CURLOPT_HTTP200ALIASES. |
Misollar
1-misol CURL seansini ishga tushirish va veb-sahifani yuklash
// yangi cURL resursini yarating /* http://localhost/upload.php: $ch = curl_init(); $data = massiv("name" => "Foo" , "fayl" => "@/home/user/test.png" ); Curl_setopt($ch, CURLOPT_URL, "http://localhost/upload.php"); Curl_exec($ch); Ushbu misolni ishga tushirish natijasi: Massiv ( => Foo) Massiv ( => Massiv ( => test.png => image/png => /tmp/phpcpjNeQ => 0 => 279)) Izoh: Massivni o'tkazish CURLOPT_POSTFIELDS sifatida ma'lumotlarni kodlaydi ko'p qismli/shakl-ma'lumotlar, holbuki URL-kodlangan satrni o'tkazish ma'lumotlarni shunday kodlaydi ilova/x-www-form-urlencoded. cURL - bu turli serverlar bilan ishlash imkonini beruvchi va ko'plab protokollarni qo'llab-quvvatlaydigan vositadir: HTTP, FTP, TELNET va boshqalar. cURL dastlab buyruq qatori yordam dasturidir. Ammo, baxtimizga, PHP cURL kutubxonasi bilan ishlashni qo'llab-quvvatlaydi. Ushbu maqolada biz cURL bilan ishlashning ahamiyatsiz bo'lmagan misollarini ko'rib chiqamiz. Aslida, masalan, sahifa mazmunini olish uchun boshqa serverga so'rov yuborishning ko'plab boshqa usullari mavjud. Ko'p odamlar, asosan, dangasalik tufayli, cURL o'rniga oddiy PHP funktsiyalaridan foydalanadilar: $content = file_get_contents("http://www.example.com"); // yoki $lines = file("http://www.example.com"); // yoki readfile("http://www.example.com"); Biroq, ular xatolarni samarali hal qilishga imkon bermaydi. Shuningdek, ular umuman qila olmaydigan bir qator vazifalar mavjud - masalan, cookie-fayllar bilan ishlash, avtorizatsiya, so'rovlarni yuborish, fayllarni yuklab olish. cUrl bir nechta protokollarni qo'llab-quvvatlaydigan va to'liq so'rov ma'lumotlarini taqdim etadigan kuchli vositadir. Murakkab misollarga o'tishdan oldin PHP da cURL so'rovining asosiy tuzilishini ko'rib chiqamiz. PHP da cURL so'rovini bajarish uchun siz 4 ta asosiy qadamni bajarishingiz kerak: Biz asosan ushbu maqoladagi №2-bosqichni ko'rib chiqamiz, chunki bu erda sehr sodir bo'ladi. CURL variantlari ro'yxati juda katta, shuning uchun biz bugungi kunda barcha variantlarni ko'rib chiqmaymiz, lekin aniq muammolarni hal qilish uchun foydali bo'lganlardan foydalanamiz. Agar kerak bo'lsa, xatolarni kuzatish uchun quyidagi qatorlarni qo'shishingiz mumkin: // ... $output = curl_exec($ch); if ($output === FALSE) ( echo "cURL xatosi: " . curl_error($ch); ) // ... E'tibor bering, biz "==" o'rniga "===" dan foydalanamiz, chunki Bo'sh server javobini va xatolik yuz berganda qaytariladigan FALSE mantiqiy qiymatini farqlash kerak. Yana bir ixtiyoriy qadam - bajarilgandan so'ng cURL so'rovi haqida ma'lumot olishdir. // ... curl_exec($ch); $info = curl_getinfo($ch); echo "Oldi". $info["total_time"] . "url uchun soniyalar". $info["url"]; // ... Natijada siz quyidagi ma'lumotlarga ega massivni olasiz: Ushbu misolda biz turli xil brauzer sozlamalari asosida qayta yo'naltirishni aniqlaydigan skript yozamiz. Misol uchun, ba'zi saytlar tashrif buyuruvchilarni mobil qurilmalardan boshqa mamlakatlardan tashrif buyuruvchilarga yo'naltiradi. Biz CURLOPT_HTTPHEADER parametridan foydalanib, o‘z sarlavhalarimizni, jumladan, User-Agent va Language kabilarni o‘rnatamiz va saytlar bizni qayerga yo‘naltirayotganini ko‘ramiz. // URL manzillar $urls = massiv("http://www.cnn.com", "http://www.mozilla.com", "http://www.facebook.com"); // brauzerlar $brauzerlar = massiv("standart" => massiv ("user_agent" => "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5. 6 (.NET CLR 3.5.30729)", "til" => "en-us,en;q=0.5"), "iphone" => massiv ("user_agent" => "Mozilla/5.0 (iPhone; U; Mac OS X kabi protsessor; en) AppleWebKit/420+ (KHTML, Gecko kabi) Versiya/3.0 Mobile/1A537a Safari/419.3", "til" => "en"), "fransuzcha" => massiv ("user_agent" = > "Mozilla/4.0 (mos keladi; MSIE 7.0; Windows NT 5.1; GTB6; .NET CLR 2.0.50727)", "til" => "fr,fr-FR;q=0.5")); foreach ($urllar $url) ( echo "URL: $url\n"; foreach ($test_name sifatida $brauzerlar => $brauzer) ( $ch = curl_init(); // curl_setopt($ch, CURLOPT_URL) manzilini o'rnating , $url); // ishlatiladigan brauzer va tilni ko'rsating curl_setopt($ch, CURLOPT_HTTPHEADER, massiv("User-Agent: ($browser["user_agent"])), "Qabul qilish-Language: ($brauzer["language" ]) ")); // bizga curl_setopt($ch, CURLOPT_NOBODY, 1) sahifa mazmuni kerak emas; // bizga faqat curl_setopt($ch, CURLOPT_HEADER, 1); sarlavhalari kerak; // o‘rniga natijani qaytaring uning chiqishi curl_setopt($ch, CURLOPT_RETURNTRANSFER , 1); $output = curl_exec($ch); curl_close($ch); // HTTP sarlavhalarida qayta yoʻnaltirishni aniqlang? agar (preg_match("!Location: (.*)!" , $output, $matches)) ( echo "$test_name: qayta yoʻnaltiradi $matches\n"; ) else ( echo "$test_name: qayta yoʻnaltirish yoʻq\n"; ) ) echo "\n\n"; ) Bir tsiklda biz har bir URL uchun brauzerlarni tekshiramiz. Avval biz so'rovimiz uchun variantlarni o'rnatamiz: URL va brauzer va sinovdan o'tadigan til. Chunki Biz maxsus variantni o'rnatdik; so'rov natijasi faqat HTTP sarlavhalarini o'z ichiga oladi. Oddiy oddiy iboradan foydalanib, javobda "Joylashuv:" qatori mavjudligini tekshirishimiz mumkin. Skriptni bajarish natijasi: URL: http://www.cnn.com standarti: http://edition.cnn.com/ ga yo‘naltiradi iphone: http://edition.cnn.com/ ga yo‘naltiradi fransuzcha: http://edition.cnn ga yo‘naltiradi .com/ URL: http://www.mozilla.com standarti: https://www.mozilla.org/firefox/ ga yo‘naltiradi iphone: https://www.mozilla.org/firefox/ fransuzchaga yo‘naltiradi: https://www.mozilla.org/firefox/ URL: http://www.facebook.com standarti: https://www.facebook.com/ ga yo'naltiradi iphone: http://m.facebook.com saytiga yo'naltiradi /?refsrc=http%3A%2F%2Fwww.facebook.com%2F&_rdr frantsuzcha: qayta yo'naltirish yo'q GET so'rovlarini bajarishda ma'lumotlar so'rovlar qatorida uzatilishi mumkin. Misol uchun, Google-da qidirganingizda, so'rovingiz URL manziliga tarjima qilinadi: http://www.google.com/search?q=google Ushbu so'rov natijasini olish uchun sizga cURL ham kerak emas, siz dangasa bo'lishingiz va "file_get_contents()" dan foydalanishingiz mumkin. Ammo ba'zi HTML shakllari POST usulidan foydalanadi. Bunday holda, ma'lumotlar URL manzilida emas, balki so'rov xabarining asosiy qismida yuboriladi. Keling, POST so'rovlarini yuboradigan skript yozaylik. Birinchidan, ushbu so'rovlarni qabul qiladigan va unga yuborilgan ma'lumotlarni qaytaradigan oddiy PHP faylini yarataylik. Keling, uni post_output.php deb ataymiz: $url = "http://localhost/post_output.php"; $post_data = massiv ("foo" => "bar", "so'rov" => "FooBar", "action" => "Yuborish"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // POST so'rovini yaratish curl_setopt($ch, CURLOPT_POST, 1); // ma'lumotlarni qo'shing curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); $output = curl_exec($ch); curl_close($ch); echo $output; Ushbu skript chiqadi: Massiv ( => bar => FooBar => Yuborish) Ushbu skript post_output.php fayliga POST so'rovini yubordi. $_POST massivining mazmunini chiqardi va biz bu javobni cURL yordamida oldik. Oldingi misoldagi kabi, keling, so'rovlarni qabul qiladigan fayl yarataylik, upload_output.php : Print_r($_FILES); Va fayllarni yuklab oladigan skriptning o'zi: $url = "http://localhost/upload_output.php"; $post_data = massiv ("foo" => "bar", // yuklash uchun fayl "yuklash" => "@/tmp/desert.jpg"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_ma'lumotlar); $output = curl_exec($ch); curl_close($ch); echo $output; Agar siz faylni yuklamoqchi bo'lsangiz, oddiy POST so'rovi parametri kabi "@" prefiksi bilan unga yo'lni o'tkazish kifoya. Skriptning natijasi: Massiv ( => Array ( => desert.jpg => application/octet-stream => /tmp/phpAhEvXy => 0 => 845941)) PHPdagi cURL ning ilg'or xususiyatlaridan biri bir vaqtning o'zida va asinxron ravishda bir nechta so'rovlarni bajarish qobiliyatidir. Oddiy sharoitlarda skript to'xtaydi va so'rovning bajarilishini kutadi. Va agar siz ko'p so'rovlarni bajarishingiz kerak bo'lsa, bu juda ko'p vaqtni olishi mumkin, chunki... ketma-ket bajarasiz. Ushbu cheklovni chetlab o'tish mumkin: // ishlov beruvchilarni yaratish $ch1 = curl_init(); $ch2 = curl_init(); // parametrlarni o'rnatish curl_setopt($ch1, CURLOPT_URL, "http://lxr.php.net/"); curl_setopt($ch1, CURLOPT_HEADER, 0); curl_setopt($ch2, CURLOPT_URL, "http://www.php.net/"); curl_setopt($ch2, CURLOPT_HEADER, 0); //bir nechta cURL tutqichini yaratish $mh = curl_multi_init(); // ishlov beruvchilarni qo'shish curl_multi_add_handle($mh,$ch1); curl_multi_add_handle($mh,$ch2); $running = null; // so'rovlarni bajarish ( curl_multi_exec($mh, $running); ) while ($running > 0); // resurslarni bo'shatish curl_multi_remove_handle($mh, $ch1); curl_multi_remove_handle($mh, $ch2); curl_multi_close($mh); G'oya shundan iboratki, siz bir nechta cURL tutqichlarini yaratishingiz, ularni bitta ko'p tutqich ostida birlashtirishingiz va ularni asinxron tarzda bajarishingiz mumkin. Birinchidan, hamma narsa oddiy cURL so'rovi bilan bir xil - deskriptor yaratiladi ( curl_init()
), parametrlar o'rnatilgan ( curl_setopt()
). Keyinchalik, multi-deskriptor yaratiladi ( curl_multi_init()
) va avval yaratilgan oddiy identifikatorlar qo'shiladi ( curl_multi_add_handle()
). Odatda curl_exec() ni chaqirish o'rniga biz qo'ng'iroq qilamiz curl_multi_exec()
bu funksiya bizga ikkinchi parametr - $running yordamida faol ulanishlar soni haqida ma'lumot beradi. Shuning uchun tsikl $running 0 ga teng bo'lguncha ishlaydi. Va, albatta, ishni tugatgandan so'ng, resurslarni bo'shatish kerak. Ushbu misolda biz so'rovlar natijasini STDOUT ga chiqaramiz. Multi cURL dan foydalanishning ahamiyatsiz bo'lmagan holatini ko'rib chiqaylik. Tashqi saytlarga havolalarni o'z ichiga olgan juda ko'p postlarga ega blogni tasavvur qiling. Ushbu havolalarning ba'zilari ishlamasligi mumkin. Keling, barcha buzilgan havolalarni topadigan va ularni bizga ko'rsatadigan skript yozaylik. Birinchidan, biz barcha tashqi havolalarni ma'lumotlar bazasidan tortib olishimiz kerak: // CONFIG $db_host = "localhost"; $db_user = "root"; $db_pass = ""; $db_name = "wordpress"; $excluded_domains = massiv("localhost", "sayt"); $max_connections = 10; $url_list = massiv(); $working_urls = massiv(); $dead_urls = massiv(); $not_found_urls = massiv(); $active = null; // agar (!mysql_connect($db_host, $db_user, $db_pass)) ( die("Ulanib bo‘lmadi: " . mysql_error()); ) agar (!mysql_select_db($db_name)) ( die("Mumkin) dbni tanlamaslik: " . mysql_error()); ) // matndagi havolalar bilan barcha xabarlarni oling $q = "post_content FROM wp_posts QAYERDA post_content "%href=%" VA post_status = "publish" VA post_type = "post ""; $r = mysql_query($q) yoki o'lim(mysql_error()); while ($d = mysql_fetch_assoc($r)) ( // if (preg_match_all("/href=\"(.*?)\"/", $d["post_content"], $matches oddiy ifoda yordamida barcha havolalarni yig'ish )) ( foreach ($url sifatida mos keladi) ( // keraksiz domenlarni filtrlang $tmp = parse_url($url); if (isset($tmp["host"]) && in_array($tmp["host"], $ excluded_domains)) (davom etish; ) // jamlash $url_list = $url; ) ) ) // takrorlashlarni olib tashlash $url_list = array_values(array_unique($url_list)); if (!$url_list) ( die("Tekshirish uchun URL yo'q"); ) Skriptning ushbu qismida biz ma'lumotlar bazasidan barcha tashqi havolalarni olib tashlaymiz. Keling, ularni tekshiramiz: $mh = curl_multi_init(); // 1. uchun havolalar qo'shing ($i = 0; $i< $max_connections; $i++) {
add_url_to_multi_handle($mh, $url_list);
}
// основной цикл
do {
curl_multi_exec($mh, $curRunning);
// 2. один из потоков завершил работу
if ($curRunning != $running) {
$mhinfo = curl_multi_info_read($mh);
if (is_array($mhinfo) && ($ch = $mhinfo["handle"])) {
// 3. один из запросов выполнен, можно получить информацию о нем
$info = curl_getinfo($ch);
// 4. нерабочая ссылка
if (!$info["http_code"]) {
$dead_urls = $info["url"];
// 5. 404?
} else if ($info["http_code"] == 404) {
$not_found_urls = $info["url"];
// 6. верная ссылка
} else {
$working_urls = $info["url"];
}
// 7. удаляем отработавший дескриптор
curl_multi_remove_handle($mh, $mhinfo["handle"]);
curl_close($mhinfo["handle"]);
// 8. добавим новый урл
add_url_to_multi_handle($mh, $url_list);
$running = $curRunning;
}
}
} while ($curRunning >0); curl_multi_close($mh); echo "==O'lik URL manzillar==\n"; echo implode("\n", $dead_urls) . "\n\n"; echo "==404 URL==\n"; echo implode("\n", $not_found_urls) . "\n\n"; echo "==Ishchi URL manzillar==\n"; echo implode("\n", $working_urls); echo "\n\n"; // 9. berilgan URL funksiyasi bilan tutqichni qoʻshadi add_url_to_multi_handle($mh, $url_list) ( statik $index = 0; // agar havolalar hali ham mavjud boʻlsa if (isset($url_list[$index])) ( // hammasi odatdagidek $ ch = curl_init(); // parametrlarni o'rnatish curl_setopt($ch, CURLOPT_URL, $url_list[$index]); // natijani ko'rsatish o'rniga curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // ruxsat berish redirects curl_setopt($ ch, CURLOPT_FOLLOWLOCATION, 1); // vaqtni tejash uchun faqat sarlavhalarni oling curl_setopt($ch, CURLOPT_NOBODY, 1); // ko'p tutqichli curl_multi_add_handle($mh, $ch); $index++;) ) Keling, kodni batafsil ko'rib chiqaylik (raqamlash koddagi izohlarga mos keladi): Skriptni ishga tushiramiz: O'lik URL'lar== xample1234.com/ ==404 URL== www.google.com/dsfasdfafd ==Ishchi URL'lar== ru.php.net/manual/ru/function.time.php www.cssbuttongenerator.com/ csslint. net/ codex.wordpress.org/Plugin_API/Action_Reference fortawesome.github.io/Font-Awesome/ fortawesome.github.io/Font-Awesome/ www.oracle.com/technetwork/java/javafx/downloads/index.html kodeksi. wordpress.org/Plugin_API/Filter_Reference codex.wordpress.org/Roles_and_Capabilities code.google.com/p/google-api-php-client/wiki/OAuth2#Google_APIs_Console jplayer.org/ code.google.com/p/google-api -php-client/ developers.google.com/+/ accounts.google.com/ServiceLogin?service=devconsole&passive=1209600&continue=https%3A%2F%2Fcode.google.com%2Fapis%2Fconsole%2F&followup=https%3A%2F %2Fcode.google.com%2Fapis%2Fconsole%2F daneden.github.io/animate.css/ github.com/daneden/animate.css ru2.php.net/manual/ru/function.autoload.php www.google. com/recaptcha/api/verify phpunit.de/phpunit.de/manual/current/en/phpunit-book.html Tekshirish taxminan 2 soniya davom etdi. Bir vaqtning o'zida 10 ta ipni ishga tushirish orqali unumdorlik odatdagi cURL so'rovlariga nisbatan 10 barobar ortadi. Server javobining mazmunini olish uchun funksiyadan foydalaning curl_multi_getcontent($ch)
, bu yerda $ch dan olingan deskriptordir curl_multi_info_read()
. Agar HTTP so'rovi autentifikatsiyani talab qilsa, quyidagi koddan foydalaning: $url = "http://www.somesite.com/members/"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // foydalanuvchi nomi va parolni jo'natish curl_setopt($ch, CURLOPT_USERPWD, "myusername: mypassword"); // agar qayta yoʻnaltirishga ruxsat berilsa curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // cURL qayta yo'naltirishdan keyin parolni yuboradi curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1); $output = curl_exec($ch); curl_close($ch); PHP FTP bilan ishlash uchun o'z kutubxonasiga ega, ammo siz cURL dan ham foydalanishingiz mumkin: // faylni o'qing $file = fopen("/path/to/file", "r"); // url allaqachon kerakli ma'lumotlarni o'z ichiga oladi $url = "ftp://username: [elektron pochta himoyalangan]:21/path/to/new/file"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // imkoniyatlari curl_setopt($ch, CURLOPT_UPLOAD, 1); curl_setopt($ch, CURLOPT_INFILE, $fp); curl_setopt($ch, CURLOPT_INFILESIZE, fayl hajmi("/path/to/file")); curl_setopt($ch, CURLOPT_FTPASCII, 1); $output = curl_exec($) ch); curl_close($ch); So'rovlar ma'lum bir proksi-server orqali amalga oshirilishi mumkin: $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,"http://www.example.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // proksi-manzil curl_setopt($ch, CURLOPT_PROXY, "11.11.11.11:8080"); // avtorizatsiya zarur bo'lsa curl_setopt($ch, CURLOPT_PROXYUSERPWD,"user:pass"); $output = curl_exec($ch); curl_close($ch); So'rov bajarilayotganda, uning tugashini kutmasdan, qayta qo'ng'iroqlardan foydalanish mumkin. Misol uchun, server javobi yuklab olinayotganda, biz to'liq yuklab olishni kutmasdan allaqachon olingan ma'lumotlardan foydalanishimiz mumkin. $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,"http://example.com"); curl_setopt($ch, CURLOPT_WRITEFUNCTION, "progress_funksiya"); curl_exec($ch); curl_close($ch); progress_funksiyasi($ch,$str) ( echo $str; return strlen($str); ) Qayta qo'ng'iroq qilish funktsiyasi so'rovning to'g'ri ishlashi uchun satr uzunligini qaytarishi kerak. Har safar server javobining keyingi qismi qabul qilinganda, qayta qo'ng'iroq qilinadi. Ushbu maqolada biz PHP da cURL ning ilg'or xususiyatlarini ko'rib chiqdik. Keyingi safar URL so'rovlarini yuborishingiz kerak bo'lsa, cURL dan foydalaning. Biz ko'pincha Internetdan turli xil fayllarni yuklab olishimiz kerak, masalan, bajariladigan dastur fayllari, skript fayllari, manba arxivlari. Lekin buni har doim ham brauzer orqali qilish shart emas. Ko'pgina hollarda terminal orqali barcha amallarni bajarish ancha oson. Chunki shu tarzda siz jarayonni avtomatlashtirishingiz mumkin. Boshqa tomondan, veb-ustalar vaqti-vaqti bilan veb-saytga kirish imkoniyatini sinab ko'rishlari, yuborilgan va qabul qilingan sarlavhalarni tekshirishlari va yana ko'p narsalarni qilishlari kerak. Bunday muammolarni va shunga o'xshash diapazondagi muammolarni hal qilish uchun siz curl yordam dasturidan foydalanishingiz mumkin. Bu sizga juda kengroq muammolarni hal qilish imkonini beradi, jumladan, hatto saytdagi foydalanuvchi harakatlarini simulyatsiya qilish. Ushbu maqolada biz curldan qanday foydalanishni, nima ekanligini va bu dastur nima uchun kerakligini ko'rib chiqamiz. Aslida, curl Linux yoki Windows uchun buyruq qatori yordam dasturidan ko'proq narsadir. Bu URL sahifalari bilan ishlash va fayllarni uzatishning asosiy imkoniyatlarini amalga oshiradigan kutubxonalar to'plami. Kutubxona protokollar bilan ishlashni qo'llab-quvvatlaydi: FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, LDAP, shuningdek POP3, IMAP va SMTP. Bu sahifalardagi foydalanuvchi harakatlarini va URL manzillari bilan boshqa operatsiyalarni simulyatsiya qilish uchun juda yaxshi. Curl kutubxonasini qo'llab-quvvatlash ko'plab dasturlash tillari va platformalariga qo'shildi. Curl yordam dasturi ushbu kutubxona uchun mustaqil o'ram hisoblanadi. Aynan shu yordamchi dasturga biz ushbu maqolada e'tibor qaratamiz. Curl linux buyrug'idan qanday foydalanish mumkinligi tavsifiga o'tishdan oldin, keling, yordamchi dasturning o'zi va uning bizga kerak bo'lgan asosiy variantlarini ko'rib chiqaylik. Yordamchi dasturning sintaksisi juda oddiy: $ curl variantlari havolasi Endi asosiy variantlarni ko'rib chiqamiz: Bu hech qanday tarzda curl linux uchun barcha variantlar emas, lekin unda siz foydalanishingiz kerak bo'lgan asoslar ro'yxati keltirilgan. Biz curl yordam dasturi bilan ishlash nazariyasi bilan bog'liq hamma narsani ko'rib chiqdik, endi amaliyotga o'tish va curl buyrug'ining misollarini ko'rib chiqish vaqti keldi. Eng keng tarqalgan vazifa bu. Faylni yuklab olish juda oddiy. Buni amalga oshirish uchun faqat fayl nomini yoki html sahifasini parametrlardagi yordamchi dasturga o'tkazing: curl https://raw.githubusercontent.com/curl/curl/master/README.md Ammo bu erda sizni bitta ajablanib kutmoqda: faylning barcha mazmuni standart chiqishga yuboriladi. Uni istalgan faylga yozish uchun: curl -o readme.txt https://raw.githubusercontent.com/curl/curl/master/README.md Agar natijada olingan fayl serverdagi fayl bilan bir xil nomlanishini istasangiz, -O variantidan foydalaning: curl -O https://raw.githubusercontent.com/curl/curl/master/README.md curl -# -C - -O https://cdn.kernel.org/pub/linux/kernel/v4.x/testing/linux-4.11-rc7.tar.xz Agar kerak bo'lsa, bitta buyruq bilan bir nechta fayllarni yuklab olishingiz mumkin: curl -O https://raw.githubusercontent.com/curl/curl/master/README.md -O https://raw.githubusercontent.com/curl/curl/master/README Administrator uchun foydali bo'lishi mumkin bo'lgan yana bir narsa, agar fayl o'zgartirilgan bo'lsa, uni yuklab olishdir: curl -z 21-dekabr-17 https://raw.githubusercontent.com/curl/curl/master/README.md -O https://raw.githubusercontent.com/curl/curl/master/README -Y opsiyasi yordamida tarmoqni ortiqcha yuklamaslik uchun yuklab olish tezligini kerakli chegaraga cheklashingiz mumkin: curl --limit-rate 50K -O https://cdn.kernel.org/pub/linux/kernel/v4.x/testing/linux-4.11-rc7.tar.xz Bu erda siz yuklab olish mumkin bo'lgan soniyada kilobayt sonini ko'rsatishingiz kerak. Agar tezlik etarli bo'lmasa, ulanishni to'xtatishingiz mumkin, buning uchun -Y opsiyasidan foydalaning: curl -Y 100 -O https://raw.githubusercontent.com/curl/curl/master/README.md curl -T login.txt ftp://speedtest.tele2.net/upload/ Yoki fayl HTTP orqali yuborilganligini tekshirib ko'raylik, buning uchun maxsus xizmat mavjud: curl -T ~/login.txt http://posttestserver.com/post.php Javobda yordamchi dastur yuklab olingan faylni qaerdan topishingiz mumkinligini aytadi. POST usuli yordamida nafaqat fayllarni, balki har qanday ma'lumotlarni ham yuborishingiz mumkin. Eslatib o'taman, bu usul turli shakllardagi ma'lumotlarni jo'natish uchun ishlatiladi. Bunday so'rovni yuborish uchun -d opsiyasidan foydalaning. Sinov uchun biz bir xil xizmatdan foydalanamiz: curl -d "field1=val&fileld2=val1"http://posttestserver.com/post.php Agar siz ushbu yuborish opsiyasidan mamnun bo'lmasangiz, shaklni yuborgandek ko'rsatishingiz mumkin. Buning uchun variant bor -F: curl -F "password=@pass;type=text/plain" http://posttestserver.com/post.php Bu erda biz forma bilan parol maydonini oddiy matn sifatida o'tkazamiz, xuddi shu tarzda siz bir nechta parametrlarni o'tkazishingiz mumkin. Cookie-fayllar veb-saytlar tomonidan foydalanuvchi tomonida ma'lum ma'lumotlarni saqlash uchun ishlatiladi. Bu, masalan, autentifikatsiya qilish uchun kerak bo'lishi mumkin. Curl yordamida kukilarni yuborishingiz va qabul qilishingiz mumkin. Qabul qilingan cookie-fayllarni faylga saqlash uchun -c opsiyasidan foydalaning: curl -c cookie.txt http://posttestserver.com/post.php Keyin curl cookie faylini qaytarib yuborishingiz mumkin: curl -b cookie.txt http://posttestserver.com/post.php Bizga har doim ham sahifa mazmuni kerak emas. Ba'zan faqat sarlavhalar qiziqarli bo'lishi mumkin. Faqat ularni ko'rsatish uchun -I varianti mavjud: curl -I https://sayt Va -H opsiyasi serverga bir nechta yoki undan ko'p yuborish imkonini beradi, masalan, If-Modified-Since sarlavhasini o'tkazishingiz mumkin, shunda sahifa o'zgartirilgan bo'lsagina qaytariladi: Agar server HTTP Basic yoki FTP kabi keng tarqalgan autentifikatsiya turlaridan birini talab qilsa, curl bu vazifani juda oson bajara oladi. Autentifikatsiya tafsilotlarini belgilash uchun ularni -u opsiyasida ikki nuqta bilan ajratib ko'rsatish kifoya: curl -u ftpuser:ftppass -T - ftp://ftp.testserver.com/myfile_1.txt HTTP serverlarida autentifikatsiya xuddi shu tarzda amalga oshiriladi. Agar siz fayllarni yuklab olish uchun proksi-serverdan foydalanishingiz kerak bo'lsa, bu ham juda oddiy. -x variantida proksi-server manzilini ko'rsatish kifoya: curl -x proxysever.test.com:3128 http://google.co.in Ushbu maqolada biz curldan qanday foydalanishni, nima uchun bu yordamchi dastur kerakligini va uning asosiy imkoniyatlarini ko'rib chiqdik. Ularning o'xshashligiga qaramay, ular juda farq qiladi. Curl linux buyrug'i ko'proq serverdagi turli harakatlarni tahlil qilish va simulyatsiya qilish uchun mo'ljallangan, wget esa fayllarni yuklab olish va saytlarni skanerlash uchun ko'proq mos keladi. Ushbu maqolada cURL kabi kuchli vosita, shuningdek, ushbu vositaga kirishni ta'minlaydigan PHP kutubxonasi - libcurl haqida so'z boradi. Bularning barchasi nima uchun? Ma'lumot uzatish protokollaridan foydalangan holda server bilan bog'lanish uchun, masalan, http yoki ftp. Qolgan protokollar biz uchun unchalik qiziq emas, agar kimdir ushbu mavzuni chuqurroq o'rganmoqchi bo'lsa, ular ingliz tilidagi manbalarni qazib olishlari kerak bo'ladi va ushbu maqolada foydalanish asoslari va misollari mavjud. Shunday qilib, libcurl kutubxonasi bizga ma'lumotlarni serverga uzatish va undan javob olish imkoniyatini beradi. Bu bizga nima beradi? Foydalanuvchi xatti-harakatlariga taqlid qilish qobiliyati yoki ! Siz keyingi tahlil qilish uchun sahifalar mazmunini olishingiz mumkin, siz xizmatga javob sarlavhalarini olishingiz va saytlarga dasturiy ravishda kirishingiz, xabarlarni (masalan, Twitter yoki forumlarda) yoki ma'lumotni joylashtirish uchun skriptlarni yaratishingiz mumkin. Hamma narsa faqat sizning tasavvuringiz bilan cheklangan! Biz qilishimiz kerak bo'lgan birinchi narsa kutubxonani o'rnatishdir. Mahalliy kompyuterimda men Denwer tuzilmasidan foydalanaman, masalan, maqola uchun mo'ljallangan yangi veb-masterlarning aksariyati. php+apache+mysql kombinatsiyasini mustaqil ravishda o'rnatgan tajribali foydalanuvchilar cURL ni o'rnatishlari mumkin, buning qanday amalga oshirilishini ularga tushuntirish men uchun emas;) Va biz, yangi boshlanuvchilar, buni osonlashtirish uchun tayyor echimlardan foydalanamiz. Shuning uchun, libcurl-ni quyidagi tarzda o'rnating: va shartlar boshida nuqtali vergulni olib tashlang: ;extension=php_curl.dll Tayyor. Kutubxonaning funksionalligini tekshirish uchun siz phpinfo() funksiyasiga qo'ng'iroq qilishingiz va u erda qatorni topishingiz mumkin: cURL qo'llab-quvvatlashi yoqilgan. Birinchi g'alaba bilan tabriklayman. Asbob bilan ishlashni boshlash uchun uni ishga tushirish kerak. Bu quyidagicha amalga oshiriladi: $ch = curl_init(); Biz cURL seansini ishga tushirish funksiyasidan foydalandik. Bunday holda, URL manzilini darhol o'rnatishingiz mumkin, masalan: $ch = curl_init("https://sayt"); Va buni keyinroq, variantlarda qilishingiz mumkin. Variantlarni o'rnatish tartibi muhim emas. Bu boshqa funktsiya tomonidan amalga oshiriladi: Curl_setopt (resurs ch, string varianti, aralash qiymat) Biz allaqachon yuqorida ushbu funktsiyaning birinchi parametrini, ya'ni ch resursini yaratdik, lekin juda ko'p variant va qiymat parametrlari mavjud. O'ylaymanki, siz ularning barchasini bu erda nusxa ko'chirmasligingiz kerak, faqat funktsiyaning batafsil tavsifiga havola bering, umid qilamanki, hech kim xafa bo'lmaydi: curl_setopt. Misol sifatida URL manzilidan foydalanib parametrlarni sozlash misolini keltiraman: $url = "https://sayt"; curl_setopt($ch, CURLOPT_URL,$url); Variantlarni sozlashning yana bir nechta misollari: keling, sahifaning o'zini olmagan holda serverning javob sarlavhasini olaylik: Curl_setopt($ch, CURLOPT_HEADER, 1); // sarlavhani o'qing curl_setopt($ch, CURLOPT_NOBODY, 1); // FAQAT sarlavhani korpussiz o'qing Shunday qilib, biz sessiyani ishga tushirdik, kerakli parametrlarni o'rnatdik, endi biz olingan so'rovni bajaramiz, sessiyani yopamiz va natijani ko'rsatamiz: $natija = curl_exec($ch); curl_close($ch); echo $natija; Natijada, biz libcurl kutubxonasidan foydalanishning birinchi to'liq ishlaydigan misolini olamiz: $ch = curl_init(); $url = "https://sayt"; curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_HEADER, 1); // sarlavhani o'qing curl_setopt($ch, CURLOPT_NOBODY, 1); // FAQAT sarlavhani korpussiz o'qing $result = curl_exec($ch); curl_close($ch); echo $natija; Bu qanday ishlaydi, umid qilamanki, tushunarli, chunki biz har bir qadamni alohida ko'rib chiqdik :) Natijada, biz serverdan HTTP javob sarlavhasini olamiz, biz o'rtasidagi o'zaro ta'sirning barcha bosqichlarini yaxshiroq tushunish uchun quyida albatta tahlil qilamiz. brauzer va server: HTTP/1.1 200 OK Server: nginx/1.2..php 1 Ajoyib! Biz serverdan javob sarlavhasini oldik va kutubxonani amalda sinab ko'rdik. Bu biz uchun qanchalik foydali? Chunki endi siz cURL bilan ishlashda harakatlar ketma-ketligini taxminan tasavvur qilishingiz mumkin: Misol uchun, men ya.ru sahifasiga o'girilib, yaratilgan brauzer so'roviga va serverdan olingan javobga qaradim. Mana ular: Ishonamanki, ba'zi umumiy fikrlar allaqachon aniq bo'lgandan so'ng va hamma narsa aniq bo'lib tuyulgandan so'ng, amaliyotga o'tish va misol yordamida o'z mahoratingizni oshirish vaqti keldi. Shaxsan mening qo'llarim har doim hamma narsani amalda sinab ko'rish uchun qichishadi :) cURL parserlar uchun juda yaxshi bo'lgani uchun sahifa kodini uning manzili bo'yicha olish funksiyasini ko'rib chiqaylik. Bunday holda, agar biror narsa noto'g'ri bo'lsa, chiqish sarlavha, sahifa mazmuni va hatto xato kodlari bilan massiv bo'ladi. Funktsiya get_web_page($url) ( $uagent = "Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Versiya/12.14"; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURN1); // veb-sahifani qaytaradi curl_setopt($ch, CURLOPT_HEADER, 0); // sarlavhalarni qaytarmaydi curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // curl_setopt($ch, CURLOPT_ENCODING, ""); // jarayonlarni qayta yo'naltiradi barcha kodlashlar curl_setopt($ch, CURLOPT_USERAGENT, $uagent); // useragent curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); // ulanish vaqti tugaydi curl_setopt($ch, CURLOPT_TIMEOUT, 120); //javob vaqti tugashi curl_MALOPT , 10); // 10-yo'naltirishdan keyin to'xtating $content = curl_exec($ch); $err = curl_errno($ch); $errmsg = curl_error($ch); $header = curl_getinfo($ch); curl_close( $ ch); $header["errno"] = $err; $header["errmsg"] = $errmsg; $header["content"] = $content; return $header; ) Kirish parametrlari: Biz funktsiyadan foydalanamiz, masalan: $natija = get_web_page("https://ya.ru"); if (($result["errno"] != 0)||($result["http_code"] != 200)) ( echo $result["errmsg"]; ) else ( $page = $result["content "]; echo $page; ) Har bir narsa xatosiz o'tishi kerak va siz $page o'zgaruvchisida sahifa kodini olasiz. Agar biz mavjud bo'lmagan yaaaaaaaaaaaa.ru sahifasini olishga harakat qilsak, biz xatoga duch kelamiz: Xostni hal qilib bo'lmadi: yaaaaaaaaaaaa.ru; Xost topilmadi Hammasi to'g'ri va chiroyli tarzda ishlangan :) JavaScript brauzeringizda bloklangan. Sayt ishlashi uchun JavaScript-ni yoqing! PHP Daniel Stenberg tomonidan yaratilgan libcurl kutubxonasini qo'llab-quvvatlaydi, bu turli turdagi serverlarga ulanish va turli protokollardan foydalanish imkonini beradi. Bu funksiyalar PHP 4.0.2 da kiritilgan. curl_init - CURL seansini ishga tushiradi. manba curl_init() Funktsiya curl_init() yangi seansni ishga tushiradi va , va funksiyalarida foydalanish uchun CURL dastagini qaytaradi. Agar ixtiyoriy parametr bo'lsa url taqdim etilsa, CURLOPT_URL opsiyasi ushbu parametr qiymatini oladi. yordamida uni qo'lda o'rnatishingiz mumkin. curl_setopt - CURL uzatish/o'tkazish uchun variantlarni o'rnatadi. bool curl_setopt(resurs ch, string varianti, aralash qiymat) Funktsiya curl_setopt() parametr bilan aniqlangan CURL seansi uchun variantlarni o'rnatadi ch. Parametr variant siz o'rnatmoqchi bo'lgan variant va qiymat bu variant qiymati variant . Parametr qiymat quyidagi variantlar uchun uzun bo'lishi kerak (parametr bilan ko'rsatilgan variant): Parametr qiymat quyidagi parametr qiymatlari uchun satr bo'lishi kerak variant : Quyidagi variantlar funksiya yordamida olinadigan fayl deskriptorini kutadi fopen() : Parametr qiymat long write_callback (resurs ch, string ma'lumotlari)( ... return strlen($data);) variant : Parametr qiymat quyidagi shaklning funktsiyasi bo'lishi kerak string read_callback (resurs ch, resurs fd, uzun uzunlik)() quyidagi parametr qiymatlari uchun variant : curl_exec - CURL seansini bajaradi. bool curl_exec(resurs ch) Bu funksiya CURL seansini ishga tushirgandan so'ng va ushbu seans uchun barcha variantlar allaqachon o'rnatilgandan so'ng chaqirilishi kerak. Uning maqsadi shunchaki oldindan belgilangan CURL seansini bajarishdir (parametrda ko'rsatilgan ch). curl_close - CURL sessiyasini yopadi. bekor curl_close(resurs ch) Bu funksiya CURL seansini yopadi va barcha resurslarni chiqaradi. CURL tutqichi ch ham o'chiriladi. curl_errno - oxirgi xato raqamini o'z ichiga olgan butun sonni qaytaradi. Agar siz POST so'rovida ko'p o'lchovli massiv va faylni yuborishingiz kerak bo'lsa, siz hal qilib bo'lmaydigan muammoga duch kelasiz. Agar siz ko'p o'lchovli massivni CURLOPT_POSTFIELDS ga uzatsangiz, ikkinchi daraja "Masiv" qatori sifatida uzatiladi. Agar siz http_build_query yordamida o'zgartirsangiz, faylni o'tkaza olmaysiz. Quyida PHP 5.3, PHP 5.4 va PHP 5.6 ning ikkala eski versiyalarida ham ishlaydigan Curl uchun fayl yuklash bilan ikki oʻlchovli massivni kodlash funksiyasi mavjud. /** murakkab indekslar yordamida ko'p o'lchovli massivni bir o'lchovli massivga aylantiradi va Curl da foydalanish uchun prefiksdagi @ ni CurlFile bilan almashtiradi * @param $inputArray * @param string $inputKey * @return array $requestVars = massiv ("id" => massiv( 1, 2,"id"=>1234), "name" => "log", "logfile" => "@/tmp/test.log"); biz olamiz: ["id"]=> int(1) ["id"]=> int(2) ["id"]=> int(1234) ["name"]=> string(3) "log" [ "logfile"]=> string(13) "/tmp/test.log" ) */ function convertToStringArray($inputArray, $inputKey="") ( $resultArray=; foreach ($inputArray as $key => $value) ) ( $tmpKey = (bool)$inputKey ? $inputKey."[$key]" : $key; if (is_array($value)) ( $resultArray+=convertToStringArray($value, $tmpKey); ) elseif ($value) = = "@")( $resultArray[$tmpKey] = (class_exists(" CURLFile ", false)) ? new CurlFile(ltrim($value, "@")) : $value; ) else ( $resultArray[$tmpKey ] = $value; ) ) return $resultArray; ) // tekshiring $requestVars = array("id" => array(1, 2,"id"=>1234), "name" => "log", "logfile" " => "@/tmp/test.log"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "sayt"); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, convertToStringArray($requestVars)); $res = curl_exec($ch); curl_close($ch); Curl-dan foydalanishning amaliy misollari
$ch = curl_init();
print_r($_POST);
print_r($_FILES);
*/
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $ma'lumotlar);
?>
Eslatmalar
Nima uchun cURL?
cUrl asoslari
// 1. ishga tushirish $ch = curl_init(); // 2. parametrlarni belgilash, jumladan URL curl_setopt($ch, CURLOPT_URL, "http://www.google.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); // 3. so'rovni bajarish va javobni olish $output = curl_exec($ch); // 4. tozalash resurslari curl_close($ch); Xatolarni kuzatish
So'rov haqida ma'lumot olish
Brauzerga qarab qayta yo'naltirish kuzatuvi
POST so'rovlarini yuborish
Fayllar yuklanmoqda
Ko'p CURL
WordPress-da tashqi havolalarni tekshirish
PHP-dagi boshqa cURL xususiyatlari
HTTP autentifikatsiyasi
FTP orqali yuklash
Proksi-serverdan foydalanish
Qayta qo'ng'iroq qilish funktsiyalari
Xulosa
curl buyrug'i
Curldan qanday foydalanish kerak?
Tezlik chegarasi
Fayllarni uzatish
POST ma'lumotlari yuborilmoqda
Cookie-fayllarni yuborish va qabul qilish
Sarlavhani uzatish va tahlil qilish
curl autentifikatsiyasi
Proksi-serverdan foydalanish
xulosalar
CURL va libcurl aniq nima? Umumiy fikrlar
Denverda (Denver) cURL o'rnatish. libcurl dan qanday foydalanishni boshlash kerak?
CURL tavsifi va birinchi qadamlar
HTTP so'rovi sarlavhasi tuzilishi
So'rov
GET / HTTP/1.1 - Biz sahifani /, ya'ni papkaning ildizida joylashgan asosiy sahifani olishga harakat qilmoqdamiz. Biz protokolning 1.1 versiyasidan foydalanamiz.
Foydalanuvchi agenti: Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Versiya/12.14— Biz o'zimizni server bilan tanishtiramiz, biz Opera brauzerimiz.
Xost: ya.ru — Soʻralgan resursning domen nomi.
Qabul qiling: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1— Qabul qilinadigan manba formatlari ro'yxati.
Qabul qilish tili: ru-RU,ru;q=0,9,en;q=0,8— Qoʻllab-quvvatlanadigan tillar roʻyxati.
Qabul qilish-kodlash: gzip, deflate— Qo'llab-quvvatlanadigan kodlash usullari.
Cookie: yandexuid=XXXXX - Agar kerak bo'lsa, cookie-fayllar.
Connection: Keep-Alive - Iltimos, aloqani buzmang va aloqada qoling.
Javob
HTTP/1.1 200 Ok - Biz 200 kodi bilan javob olamiz, ya'ni hamma narsa yaxshi.
Server: nginx - Server o'zini tanishtirdi - bu nginx.
Sana: Yakshanba, 10-mart 2013 yil 14:10:50 GMT— Serverdagi joriy sana va vaqt.
Kontent turi: matn/html; charset=UTF-8— Kontent turi va kodlash.
Ulanish: yopish - Server biz bilan doimiy aloqani saqlab qolishni istamaydi, shuning uchun uni darhol yopadi. Keyingi so'rov uchun yangi ulanish o'rnatiladi.
Kesh-nazorat: kesh yo'q, do'kon yo'q, maksimal yosh = 0, qayta tekshirilishi kerak- Keshni boshqarish. Bunday holda, u o'chirilgan.
Muddati tugaydi: Yakshanba, 2013 yil 10-mart 14:10:50 GMT— Sessiyaning kutilayotgan tugash sanasi. Bizning holatda, bu ochilish vaqtiga to'g'ri keladi, chunki server uni qayta ishlashdan so'ng darhol yopadi.
Oxirgi tahrirlangan: Yakshanba, 10-mart 2013-yil 14:10:50 GMT- Oxirgi o'zgartirish vaqti.
Content-Encoding: gzip - Ma'lumotni kodlash usuli.
HTTP so'rovi sarlavhasida topilishi mumkin bo'lgan barcha parametrlarning to'liq ro'yxatini Vikipediyada topish mumkin.
Endi siz brauzeringiz va veb-serveringiz bir-biri bilan qanday bog'lanishi haqida taxminiy tasavvurga egasiz. Buni bilish va tushunish juda foydali, chunki biz libcurl kutubxonasi yordamida brauzer harakatlarini taqlid qilishga harakat qilamiz. Davom etishga ruxsat.Kutubxona bilan ishlashga misol
url - sahifa yoki sayt manzili.
Chiqish parametrlari qiymatlari (uch elementli massiv):
header['errno'] - agar biror narsa noto'g'ri bo'lsa, bu erda xato kodi bo'ladi.
header[‘errmsg’] – xato matni shu yerda paydo bo‘ladi.
header['content'] - haqiqiy sahifa\fayl\tasvir va boshqalar.
Keyin sahifa kodi bilan xohlagan narsani qilishingiz mumkin, masalan, uni oddiy iboralar bilan tahlil qiling. Ammo bularning barchasi keyingi darslarda, ammo hozircha bu bilan to'xtalib o'tamiz.Jingalak
libcurl hozirda http, https, ftp, gopher, telnet, dict, file va ldap protokollarini qo'llab-quvvatlaydi.
libcurl shuningdek, HTTPS sertifikatlari, HTTP POST, HTTP PUT, FTP yuklash (bu ftp PHP kengaytmasi bilan ham amalga oshirilishi mumkin), HTTP shaklga asoslangan yuklash, proksi-serverlar, cookie fayllari va foydalanuvchi+parol autentifikatsiyasini qoʻllab-quvvatlaydi.curl_init
Tavsif
curl_setopt
Tavsif
curl_exec
Tavsif
curl_close
Tavsif
curl_errno
Tavsif
1-misol: Yangi CURL seansini ishga tushirish va veb-sahifani olish.
2-misol: example.com ni olish uchun PHP ning CURL modulidan foydalanish
3-misol: PHP ning CURL yordamida URL manziliga kirish imkoniyatini tekshirish
4-misol: PHP ning CURL yordamida olingan sarlavhani korpusdan ajratish
5-misol: PHP ning CURL yordamida yo'naltiruvchi URL manzilini aniqlash
muammo: curl_setopt($ch,FOLLOW_LOCATION,1); xato: open_basedir va safe_mode bilan bog'liq muammo yechim: kimdir tomonidan allaqachon ishlab chiqilgan funksiya n 2 yechim: bir xil funktsiya, o'zgartirilgan, men uchun juda yaxshi ishlaydi.= $curl_max_loops) ( $curl_loops = 0; qaytish FALSE; ) curl_setopt($ch, CURLOPT_HEADER, rost); curl_setopt($ch, CURLOPT_RETURNTRANSFER, rost); $ma'lumotlar = curl_exec($ch); list($header, $data) = portlash ("\n\n", $ma'lumotlar, 2); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); agar ($http_code == 301 || $http_code == 302) ( $matches = ; preg_match("/Location:(.*?)\n/", $header, $matches); $url = @parse_url(qirqish) (array_pop($matches))); if (!$url) ( //$curl_loops = 0 ga yo‘naltirish uchun urlni qayta ishlab bo‘lmadi; $data qaytaring; ) $last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL)) ; agar (!$url["sxema"]) $url["sxema"] = $last_url["sxema"]; agar (!$url["host"]) $url["host"] = $last_url[ "host"]; agar (!$url["yo'l"]) $url["yo'l"] = $last_url["yo'l"]; $new_url = $url["sxema"]. "://" . $ url["host"] . $url["path"] .($url["query"]?"?".$url["query"]:""); curl_setopt($ch, CURLOPT_URL, $new_url) ; debug("qayta yo'naltirilmoqda", $new_url); return curl_redir_exec($ch); ) else ( $curl_loops=0; return $data; ) ) ?>
bu funksiyadan faqat FOLLOW_LOCATIONsiz foydalaning va ishlashi kerak. Muammo shundaki, agar siz http_code 301 oe 302 dan farqli bo'lsa, ma'lumotlarni qaytaradigan qatorga kirganingizda, $data ma'lumotlari eskirgan yoki yo'q. shuning uchun $debbbb ishni bajaradi. 6-misol: CURL PHP yordamida sarlavhadan cookie-faylni tahlil qilish
Ba'zan siz CURLOPT_COOKIEJAR va CURLOPT_COOKIEFILE dan serverning php-sozlamalari tufayli foydalana olmaysiz (Ular bu opsiyalardan foydalanib serverdan istalgan faylni olishingiz mumkinligini aytishadi). Mana bu yechim 1)CURLOPT_FOLLOWLOCATION dan foydalanmang 2) curl_setopt($ch, CURLOPT_HEADER, 1) 3) Sarlavhadagi cookie-fayllarni quyidagicha oling: preg_match_all("|Set-Cookie: (.*);|U", $content, $results); $cookies = implode(";", $natijalar); 4) curl_setopt ($ch, CURLOPT_COOKIE, $cookie) yordamida ularni o'rnating; 7-misol: CURL PHP yordamida sarlavhadan cookie-faylni tahlil qilish
Yevgen yuqorida aytib o'tganidek, ba'zida biz CURLOPT_COOKIEJAR va CURLOPT_COOKIEFILE dan foydalana olmaymiz. Quyida men yanvar oyida yozgan sarlavhali qayta qo'ng'iroq funksiyasi mavjud bo'lib, u sizga cURL so'rovlari o'rtasida cookie-fayllarni saqlash imkonini beradi. Cookie-fayllar barcha so'rovlar davomida, hatto qayta yo'naltirish paytida ham $ch ga qo'shiladi, shuning uchun uni CURLOPT_FOLLOWLOCATION bilan birga ishlating. Mana kod: funktsiya read_header($ch, $string) ( global $location; #keep track of location/redirects global $cookiearr; #cookie fayllarni global $ch; # ^funksiya parametrini bekor qiladi $ch # bu yaxshi, chunki biz global $ch ni # yangi cookie-fayllar bilan yangilashimiz kerak $length = strlen($string); if(!strncmp($string, "Location:", 9)) ( #keep oxirgi qayta yo'naltirish $location = trim(substr($string, 9, -1)); ) if(!strncmp($string, "Set-Cookie:", 11)) ( #cookie faylini oling $cookiestr = trim(substr() $string, 11, -1)); $cookie = portlash(";", $cookiestr); $cookie = portlash("=", $cookie); $cookiename = trim(array_shift($cookie)); $cookiearr [$cookiename] = trim(implode("=", $cookie)); ) $cookie = ""; if(trim($string) == "") ( #foreach sarlavhasi oxirida faqat bajariladi ($cookiearr as $key=>$value) ($cookie .= "$key=$value; "; ) curl_setopt ($ ch, CURLOPT_COOKIE, $cookie); ) qaytarish $length; ) curl_setopt($ch, CURLOPT_HEADERFUNCTION, "read_header"); Ushbu kod har safar ishga tushirmasdan $ch dan qayta foydalanasiz deb taxmin qiladi (boshida curl_init ga faqat bir marta qo'ng'iroq qiling). Agar siz kodingizning istalgan nuqtasida $ch-ni qayta ishga tushirishingiz kerak bo'lsa, siz $cookiearr-da saqlangan cookie-fayllarga kirishingiz va ularni yangi $ch-ga qo'shishingiz mumkin. Men bu funktsiyani oddiy iboralar bilan yetarlicha tajribaga ega bo'lmasdan oldin yozgan edim, shuning uchun siz bu erda preg_match qo'ng'iroqlarini topa olmaysiz. Men bu koddan ancha vaqtdan beri foydalandim va gmail, yahoo, hotmail, aol va boshqalarga hech qanday muammosiz kirishim kerak edi. Men izlayotgan narsaga kirishdan oldin login va bir nechta sahifalarni ko'rib chiqing. 8-misol: CURL PHP yordamida sarlavhalarni yuklash moslamasini sozlash
CURL-dan foydalanib, olingan ma'lumotlarni yana biriktirma sifatida uzatish uchun ikkilik ma'lumotlarni biriktiruvchi sifatida qaytaradigan uchinchi tomon skriptiga qo'ng'iroq qilishim kerak edi. Muammo shundaki, uchinchi tomon skripti vaqti-vaqti bilan HTTP xatolarini qaytardi va men bunday hollarda nol uzunlikdagi qo'shimchani o'tkazmaslikni xohlardim. CURLOPT_FAILONERROR va CURLOPT_HEADERFUNCTION qayta qo'ng'iroq qilish kombinatsiyasi uchinchi tomon skripti HTTP xatolarini aniq qayta ishlashga yordam berdi: funktsiya curlHeaderCallback($resURL, $strHeader) ( if (preg_match("/^HTTP/i", $strHeader($strHeader)str) (header) ); header("Content-Disposition: attachment; filename="file-name.zip""); ) return strlen($strHeader); ) $resURL = curl_init("http://site/"); curl_setopt($resURL, CURLOPT_BINARYTRANSFER, 1); curl_setopt($resURL, CURLOPT_HEADERFUNCTION, "curlHeaderCallback"); curl_setopt($resURL, CURLOPT_FAILONERROR, 1); curl_exec($resURL); $intReturnCode = curl_getinfo($resURL, CURLINFO_HTTP_CODE); curl_close($resURL); agar ($intReturnCode != 200) ( "Kod bilan xato: " . $intReturnCode; ni chop eting) Misol 9. CURL PHP yordamida sahifani faylga saqlash va uzatish tezligini hisoblash
WritePageToFile("http://es.php.net", "es.php.net.txt"); funksiya WritePageToFile($sHTMLpage, $sTxtfile) ( $sh = curl_init($sHTMLpage); $hFile = FOpen($sTxtfile, "w"); curl_setopt($sh, CURLOPT_FILE, $hFile); curl_setopt($sh, CURLOPT_ 0); curl_exec ($sh); $sAverageSpeedDownload = curl_getInfo($sh, CURLINFO_SPEED_DOWNLOAD); $sAverageSpeedUpload = curl_getInfo($sh, CURLINFO_SPEED_UPLOAD); echo " "; echo "Yuklab olishning o'rtacha tezligi == " . $sAverageSpeedDownload. "
"; curl_close($sh); FClose ($hFile); echo "( “.$sTxtfile.”” faylini hostingning bir xil yoʻlida koʻring.” “Bu skript PHP qayerga).
"; echo "Yuklashning oʻrtacha tezligi == " . $sAverageSpeedUpload ."
"; aks-sado "
"; $aCURLinfo = curl_getInfo($sh); print_r($aCURLinfo); echo "
";
}
Misol 9. SSL ulanishi orqali sahifani olish (https)
$ch=curl_init("https://sayt"); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // "SSL sertifikati muammosi, CA sertifikati yaxshi ekanligini tekshiring" xatosini o'chirib qo'ying curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Xatoni o'chirib qo'ying "SSL: sertifikat mavzusi nomi "hostname.ru" maqsadli xost nomi "123.123" bilan mos kelmaydi" curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); $out=curl_exec($ch); //$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); //echo "http_code=".$http_code,", err=".curl_error($ch); curl_close($ch); 10-misol: Curl-da seanslar va cookie-fayllardan foydalanish
$cookie_filename=sys_get_temp_dir()+"/cookie.tmp"; $curl=curl_init("http://sayt"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_filename);//qabul qilingan COOKIE-larni faylga saqlash curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_filename); //serverga avtorizatsiya paytida undan olingan COOKIE-larni jo'natish $out=curl_exec($curl); 11-misol: Curl-da faylni yuklash va ko'p o'lchovli massiv. CURLOPT_POSTFIELDS + CurlFile