Vigostruyemo ustalığı cURL ile çalışır. CURL, Apache ile çalışmıyor cURL'nin ne ile çalıştığını nereden biliyorsunuz?

cURL, URL sözdizimini kullanarak dosya ve veri aktarımı için özel bir araçtır. Verilen teknoloji HTTP, FTP, TELNET ve diğerleri gibi anonim protokolleri destekler. cURL, bir araç olması için koçanın üzerinde parçalandı Komut satırı. Neyse ki bizim için cURL kitaplığı PHP programlamam tarafından destekleniyor. Bu makalelerde, cURL işlevlerinin genişletilmesinin yanı sıra PHP araçlarıyla bilgiyi ortadan kaldırmanın pratik ihtiyacını görebiliriz.

Neden cURL?

Gerçekten, gerçekten chimalo alternatif yollar Web sayfasını değiştirmek için seçenekler. Satır boyunca ana sıra olan zengin vipadkah'da, cURL'yi değiştirmek için basit PHP işlevini yendim:

$içerik = file_get_contents("http://www.nettuts.com"); // veya $satır = dosya("http://www.nettuts.com"); // veya readfile("http://www.nettuts.com");

Bununla birlikte, bu işlevler pratik olarak tembel olamaz ve kusurların büyüklüğünün intikamını almak için af vb. Ek olarak, nasıl kurulacağını bilmeniz gerekir, ancak standart işlevlerle uğraşamazsınız: tanımlama bilgisi etkileşimi, kimlik doğrulama, form düzenleme, dosya yakalama vb.

cURL, anonim protokolleri, seçenekleri ve güvenliği destekleyen kapsamlı bir kitaplıktır. detaylı bilgi URL istekleri hakkında.

Basit yapı

  • başlatma
  • parametrelerin tanınması
  • Vikonannya ve sonucun seçimi
  • hafızanın canlanması

// 1. başlatma $ ch = curl_init(); // 2. url curl_setopt($ch, CURLOPT_URL, "http://www.nettuts.com"); dahil isteğe bağlı parametreler; curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); // 3. HTML'yi sonuç olarak alın $ output = curl_exec($ ch); // 4. günü kapat curl_close($ ch);

Krok # 2 (tobto, curl_setopt ()) bu makalede daha fazla tartışılacak, diğer tüm aşamaları azaltın, böylece bu aşamada bilmeniz gereken her şeyi göreceksiniz. cURL, URL'yi belirli bir sıra ile yapılandırabilmeniz için aşağıda listelenen çok sayıda farklı seçeneğe sahiptir. Listenin tamamına bir bütün olarak bakmayacağız, sadece ihtiyaçlar için dikkate alacaklarımdan bahsedeceğiz ve bu ders için çizeceğiz. Diğer her şeyi kendiniz yapabilirsiniz, çünkü bu konu sizi bağlayacaktır.

Perevіrka Pardon

O zamana kadar, sen de yenebilirsin akıllı operatörler işlemin başarılı olup olmadığını yeniden kontrol etmek için:

// ... $çıktı = curl_exec($ch); if ($output === YANLIŞ) (echo "cURL Hatası:".curl_error($ch);) // ...

Burada kendiniz için önemli bir noktaya değinmenizi rica ediyorum: Eşitleme için "== false" yerine "=== false" kazanmaktan suçluyuz. Bilgisi olmayanlar için, affedileceği için boş sonucu yanlış bir boolean değeri olarak revize etmemize yardımcı olun.

Bilginin geri çekilmesi

Diğer bir ek adım, bundan sonra, bir kazan-kazan olarak cURL istekleri hakkındaki verileri almaktır.

// ... curl_exec($ch); $bilgi = curl_getinfo($ch); yankı "Aldı". $Bilgi["toplam_zaman"]. "URL için saniyeler". $bilgi["url"]; // ...

Dizi, gelen bilgilerin intikamını almak için döndürülür:

  • "url"
  • "İçerik türü"
  • "http_kodu"
  • "header_size"
  • "request_size"
  • "dosya zamanı"
  • "Ssl_verify_result"
  • "Yönlendirme_sayısı"
  • "Toplam zaman"
  • "namelookup_time"
  • "Bağlan_zamanı"
  • "Ön transfer_zamanı"
  • "size_upload"
  • "Size_indirme"
  • "Hız_indirme"
  • "Hız_yükleme"
  • "İndirme_içerik_uzunluğu"
  • "Yükleme_içerik_uzunluğu"
  • "Transfer_zamanını başlat"
  • "Yönlendirme_zamanı"

Tarayıcı Yönlendirmesi Göründü

İlk kez, aşağıdakilere dayalı bir yönlendirme URL'si oluşturabilecek bir kod yazacağız. farklı ayarlar tarayıcı. Örneğin, web siteleri tarayıcıları yeniden yönlendirmek için ne yapar? tarz telefon, Aksi takdirde başka bir şey inşa edeceğim.

Kuryenin tarayıcı adı ve mevcut filmler dahil olmak üzere yerel HTTP başlıklarımızı eşleştirmek için CURLOPT_HTTPHEADER seçeneğini fitillemeyi seçiyoruz. Torbanın sonunda, sitelerin bizi diğer URL'lere nasıl yönlendirdiğini belirleyebiliriz.

// test URL'si $ urls = dizi( "http://www.cnn.com", "http://www.mozilla.com", "http://www.facebook.com"); // tarayıcıları test etme $ tarayıcılar = dizi ("standart" => dizi ("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) "," dil "=>" en-us, en; q = 0.5 ")," iphone "=> dizi ("user_agent" => "Mozilla/5.0 (iPhone; U ; Mac OS X gibi CPU; tr) AppleWebKit / 420 + (KHTML, Gecko gibi) Sürüm / 3.0 Mobil / 1A537a Safari / 419.3 "," dil "=>" tr ")," fransız "=> dizi (" user_agent " => "Mozilla / 4.0 (uyumlu; MSIE 7.0; Windows NT 5.1; GTB6; .NET CLR 2.0.5727)", "dil" => "fr, fr-FR; q = 0.5")); foreach($url as $url)(echo "URL: $url\n"; foreach($tarayıcı olarak $test_name => $tarayıcı)($ch = curl_init(); // url belirtin curl_setopt($ch, CURLOPT_URL, $ url); // isteğe bağlı tarayıcı başlıkları curl_setopt($ ch, CURLOPT_HTTPHEADER, array( "User-Agent: ($ tarayıcı [" user_agent "])", "Accept-Language: ($ tarayıcı [" dil "])" ) ); // ters tarafa ihtiyacımız yok curl_setopt($ ch, CURLOPT_NOBODY, 1); // HTTP başlıklarını kaldırmamız gerekiyor curl_setopt($ ch, CURLOPT_HEADER, 1); // sonucunu döndürebiliriz yedek curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($ch); curl_close($ch); // chi boov http yönlendirmesi? if (preg_match("!location:(.*)!",$output ,$eşleşmeler))(echo" $test_name: $eşleşmelere yönlendirmeler\n";) else (echo" $test_name: yönlendirme yok\n";)) echo "\n\n";)

İsteğe bağlı olarak sitelerin URL'lerini listeleyeceğiz, bu yüzden kontrol edeceğiz. Daha doğrusu bu sitelerin adreslerine ihtiyacımız var. Bu URL'lerin dış görünümünü protesto etmek için bize gerekli tarayıcı ayarlarını verdi. Bu nedenle, tüm sonuçlar için geçeceğimiz döngüyü hızlandıracağız.

Bu arada, cURL'yi kurmak için, sadece tarafı değil, sadece HTTP başlıklarını ($ çıktısından tasarruf ederek) kaldırmamıza izin vermek için bir şekilde kullanmak iyi bir fikirdir. Şimdi sadece regex kullanalım, başlıklarımızda "Location:" satırı olup olmadığını anlayabiliriz.

koştuğunda Danimarka kodu, O zaman yaklaşık sonucu almaktan siz sorumlu olacaksınız:

Bir şarkı URL'sine POST isteği oluşturun

Bir GET isteği oluştururken, veriler bir "istek satırı" aracılığıyla bir URL'ye aktarılabilir. Örneğin, Google'da bir arama yaparsanız, yeni URL'nin adres çubuğunda arama kriterleri görünecektir:

http://www.google.com/search?q=ruseller

Redleri kazanmak için cURL isteklerini kullanmanıza gerek yoktur. Geri kalan süre boyunca sonucu almak için "file_get_contents()" işlevini kullanın.

Ale sağda HTML formlarının POST isteklerini nasıl düzenleyebileceği konusunda. Bu form verileri, ön damlada değil, HTTP isteğinin gövdesi aracılığıyla taşınır. Örneğin, forumdaki formu doldurduysanız ve sormak için düğmeye bastıysanız, POST tüm cevaplar için şunu soracaktır:

http://codeigniter.com/forums/do_search/

URL'nin görünümünü isteğe göre değiştirebilen bir PHP betiği yazabiliriz. Öncelikle POST verilerini kabul etmek ve görüntülemek için basit bir dosya oluşturalım. Buna post_output.php diyelim:

Print_r($_POST);

Bir PHP betiği oluşturalım, böylece cURL istenecektir:

$url="http://localhost/post_output.php"; $post_data = array("foo" => "bar", "query" => "Nettuts", "action" => "Gönder"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // bir POST isteğimiz olduğunu belirtin curl_setopt ($ ch, CURLOPT_POST, 1); // curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); $çıktı = curl_exec($ch); curl_close($ch); yankı $ çıktı;

Bu betiği çalıştırdığınızda, aşağıdaki sonucu kontrol etmelisiniz:

Bu şekilde, POST, satırında $ _POST süper küresel dizisini gördükten sonra cURL'nin yardımı için aldığımız post_output.php betiğini besleyecektir.

dosya eklentisi

Öncelikle format atmak ve upload_output.php dosyasını düzenlemek için bir dosya oluşturalım:

Print_r($_FILES);

Ve i ekseni, daha işlevsel atamalara izin veren komut dosyasının kodudur:

$url="http://localhost/upload_output.php"; $ Post_data = array( "foo" => "bar", // yüklenecek dosya "upload" => "@C:/wamp/www/test.zip"); $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_data); $çıktı = curl_exec($ch); curl_close($ch); yankı $ çıktı;

Bir dosyayı yakalamak istiyorsanız, soymanız gereken her şeyi, bu yüzden bir dosya olarak iletin. değişiklik sonrası, Önüne @ işareti koyarak. Yazmış olduğunuz scripti çalıştırdığınızda aşağıdaki sonucu alınız:

çoklu cURL

cURL'nin en güçlü yönlerinden biri, "çoklu" cURL işlemcileri oluşturma yeteneğidir. Bu, bir saat ve eşzamansız olarak anonim bir URL'ye dönüştürmenize olanak tanır.

cURL isteğinin klasik versiyonunda, komut dosyası sonlandırılır ve URL isteğinin tamamlanmış işlemi alınır, ardından komut dosyası robotuna devam edilebilir. Tek bir URL ile birlikte çalışabilirseniz, aynı önemli saatlerin sonuna gelirsiniz, klasik versiyonda bir seferde yalnızca bir URL kullanabilirsiniz. Ancak özel işleyiciler ile hızlandırarak bu durumu düzeltebiliriz.

Şimdi php.net'ten aldığım örnek koda bir göz atalım:

// cURL kaynağı yaratılıyor $ ch1 = curl_init(); $ch2 = curl_init(); // URL'yi ve diğer parametreleri belirtin 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); // çoklu cURL işleyicisi oluştur $ mh = curl_multi_init(); // bir avuç tutamaç ekle curl_multi_add_handle($ mh, $ ch1); curl_multi_add_handle($mh, $ch2); $etkin=null; // vikonannya do ($mrc = curl_multi_exec($mh, $etkin);) while ($mrc == CURLM_CALL_MULTI_PERFORM); while ($active && $mrc ​​​​== CURLM_OK) (if (curl_multi_select($mh) != -1) (do ($mrc = curl_multi_exec($mh, $active);) while ($mrc == CURLM_CALL_MULTI_PERFORM) ;) ) // curl_multi_remove_handle($mh, $ch1) kapat; curl_multi_remove_handle($mh, $ch2); curl_multi_close($mh);

Buradaki fikir, birden fazla cURL yapısını hackleyebilmenizdir. Vykoristovuyuchi basit döngüsü, görebilirsiniz, yakі zapische vykonalis değil.

Bu uygulamanın iki ana döngüsü vardır. İlk do-while döngüsü curl_multi_exec() işlevini çağırır. Bu seçenek engelleme için kullanılamaz. Kazanılan vykonuetsya z tієyu shvidkіstyu, z kakoyu can ve kampı çevir. Değer 'CURLM_CALL_MULTI_PERFORM' sabiti tarafından döndürülürken, bu, işin henüz tamamlanmadığı anlamına gelir (örneğin, verilen an doğrulanacak http başlıkları URL'de); Aynı nedenle, başka bir sonuç alınana kadar döndürülen anlamı yeniden düşünmeye devam ediyoruz.

Önümüzdeki döngüde, $ active = "true" değişene kadar fikri değiştireceğiz. Won, curl_multi_exec() işlevi için başka bir parametredir. Değişiklik aktif olana kadar, değişiklik değerinin değeri şu ana kadar "true" dur. Daha sonra curl_multi_select() fonksiyonuna tıklıyoruz. Її vykonannya "engellendi", bir gün hala aktifken, köknar kadar, feragat kaldırılıncaya kadar. Gerektiğinde içmeye devam etmek için ana döngüye dönüyoruz.

Ve şimdi zastosuєmo, çok sayıda insan için gerçekten bayat olacak olan popo hakkındaki bilgileri kaldıralım.

WordPress'te Gönderiyi Gözden Geçirme

Blogunuzu çok sayıda gönderi ve özet ile, cilt bakımında, harici İnternet kaynaklarında yayınlayın. Deyakі z tsikh psilan z rіznyh nedenleri zaten "ölü" olabilir. Muhtemelen kenar çubuğu silinmiş veya site çalışmıyor.

Tüm mesajları analiz edecek ve yüklenemeyen web sitesini ve 404 tarafını öğrenecek bir komut dosyası oluşturmayı seçiyoruz, ardından bize bir rapor verilecek.

WordPress için bir eklenti oluşturmanın söz konusu olmadığını hemen şimdi söyleyeceğim. Sonuç olarak, numunelerimiz için iyi bir test alanı.

Daha fazlasını öğrenelim. Aynı zamanda, veri tabanından gelen tüm gönderileri titreştirmekten de suçluyuz:

// config $ db_host = "localhost"; $db_user="kök"; $db_pass=""; $db_name="wordpress"; $excluded_domains = array("localhost", "www.mydomain.com"); $maks_bağlantılar = 10; // değişikliklerin başlatılması $ url_list = dizi (); $working_urls = dizi(); $dead_urls = dizi(); $not_found_urls = dizi(); $etkin=null; // MySQL'e bağlan if (! mysql_connect ($ db_host, $ db_user, $ db_pass)) (die ("Bağlanamadı:". mysql_error ());) if (! mysql_select_db ($ db_name)) (die ("Olabilir" db seçmeyin: ". mysql_error ());) // yayınlanan tüm gönderileri seçin, de є gönderildi $ q =" post_content'i wp_posts'TAN SEÇİN post_content LIKE "% href =%" VE post_status = "yayınla" VE post_type = "post ""; $R = mysql_query($q) veya die(mysql_error()); while ($ d = mysql_fetch_assoc ($ r)) normal virüsler if (preg_match_all("!href=\"(.*?)\"!", $d["post_content"], $matches)) (foreach($matches as $url)($tmp = parse_url($url) ; if (in_array ($tmp["host"], $excluded_domains)) (devam;) $url_list = $url;))) // kopyaları al $url_list = array_values(array_unique($url_list)); if(!$url_list)(die("Kontrol edilecek URL yok");)

Öte yandan, veri tabanı ile etkileşim için konfigürasyon verilerini oluşturuyoruz, dönüşümde yer almamak için bir alan listesi veriyoruz ($ hariç tutulan_alanlar). Ayrıca, betiğimizde kullanacağımız maksimum bir saatlik bağlantı sayısını karakterize eden bir sayı belirledik ($ max_connections). Sonra veri tabanına geliyoruz, gönderileri seçiyoruz, çabalarımızın intikamını almaya çalışıyoruz ve onları bir dizide ($ url_list) biriktiriyoruz.

Bir sonraki kod katlanır, böylece koçanın sonuna kadar yeni bir şekilde sıralayabilirsiniz:

// 1. çoklu kıvrılma $ mh = curl_multi_init(); // 2. için anonim bir URL ekleyin ($ i = 0; $ i< $max_connections; $i++) { add_url_to_multi_handle($mh, $url_list); } // 3. инициализация выполнения do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); // 4. основной цикл while ($active && $mrc == CURLM_OK) { // 5. если всё прошло успешно if (curl_multi_select($mh) != -1) { // 6. делаем дело do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); // 7. если есть инфа? if ($mhinfo = curl_multi_info_read($mh)) { // это значит, что запрос завершился // 8. извлекаем инфу $chinfo = curl_getinfo($mhinfo["handle"]); // 9. мёртвая ссылка? if (!$chinfo["http_code"]) { $dead_urls = $chinfo["url"]; // 10. 404? } else if ($chinfo["http_code"] == 404) { $not_found_urls = $chinfo["url"]; // 11. рабочая } else { $working_urls = $chinfo["url"]; } // 12. чистим за собой curl_multi_remove_handle($mh, $mhinfo["handle"]); // в случае зацикливания, закомментируйте данный вызов curl_close($mhinfo["handle"]); // 13. добавляем новый url и продолжаем работу if (add_url_to_multi_handle($mh, $url_list)) { do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); } } } } // 14. завершение curl_multi_close($mh); echo "==Dead URLs==\n"; echo implode("\n",$dead_urls) . "\n\n"; echo "==404 URLs==\n"; echo implode("\n",$not_found_urls) . "\n\n"; echo "==Working URLs==\n"; echo implode("\n",$working_urls); function add_url_to_multi_handle($mh, $url_list) { static $index = 0; // если у нас есть ещё url, которые нужно достать if ($url_list[$index]) { // новый curl обработчик $ch = curl_init(); // указываем url curl_setopt($ch, CURLOPT_URL, $url_list[$index]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_NOBODY, 1); curl_multi_add_handle($mh, $ch); // переходим на следующий url $index++; return true; } else { // добавление новых URL завершено return false; } }

Burada sahadaki her şeyi viklasti yapmaya çalışacağım. Listedeki sayılar yorumlardaki sayılarla eşleşiyor.

  1. 1. Çok iş yaratıyoruz;
  2. 2. add_url_to_multi_handle() işlevi daha sonra üç kez yazılacaktır. Bir kez daha, bir arama olacaksa, yeni bir url tamamlanacaktır. Anlık olarak 10 ($max_connections) URL ekliyoruz;
  3. 3. Robotu başlatmak için curl_multi_exec() fonksiyonunu çalıştırmakla sorumluyuz. O zamana kadar bayram, CURLM_CALL_MULTI_PERFORM'u çevirene kadar hala çalışmamız gerekiyor. Bir gün yaratmak için bizim için, baş rütbe için gereklidir;
  4. 4. Dali'nin yanındaki ana döngü, vikonuvatysya kadar sessiz şölene kadar olacak, en az bir aktif günümüz varken;
  5. 5. curl_multi_select(), URL araması tamamlanana kadar doğrulamada asılı kalır;
  6. 6. Robotu vikonate etmek için cURL'yi öğrenme ve kendi kendime, dönen bir veri seçimi üzerinde çalışma sorumluluğumu yeniliyorum;
  7. 7. İşte bilgilerin yeniden doğrulanması. Sonuç olarak, dizi döndürülecek;
  8. 8. Döndürülen dizinin bir cURL işleyicisi vardır. Ayrıca cURL uygulaması hakkında bilgi seçmek için tweet atacağız;
  9. 9. Mesaj öldüyse veya komut dosyasının saati gittiyse, herhangi bir http kodu izine sahip değildik;
  10. 10. Kuvvet 404 tarafını bize çevirdiyse, 404 değerinin yerini http kodu alacaktır;
  11. 11. Başka bir dönüşte, önümüzde bir güç işi var. (Özür kodu 500 vb. için ek yeniden kontroller ekleyebilirsiniz ...);
  12. 12. Daha fazlasına ihtiyaç duymayan cURL oluşturucuyu görelim;
  13. 13. Şimdi bir url daha ekleyebilir ve şimdiye kadar konuşulanların hepsini çalıştırabiliriz;
  14. 14. Hangi kısa yazının çalışmasını tamamladığı. İhtiyacımız olmayan her şeyi görebilir ve bir ses oluşturabiliriz;
  15. 15. Pekala, url'yi örnekleyiciye eklemek için bir fonksiyon yazalım. Fonksiyon kurbana verilirse $ indeksinin statik değişimi skin süresini artıracaktır.

Bu betiği blogumda hackledim (bu robotu protesto etmek için bir mesaj eklemek gibi bazı pratik olmayan mesajlarla) ve aşağıdaki sonucu aldım:

Benim düşünceme göre, betiğin 40 URL'yi geçmesi için 2 saniyeden daha az bir süreye ihtiyacı vardı. Daha fazla sayıda URL adresiyle çalışırken artan üretkenlik daha maliyetlidir. Aynı anda on gün görürseniz, komut dosyası on kat daha hızlı sayılabilir.

Diğer mavi cURL seçenekleri hakkında birkaç kelime

HTTP Kimlik Doğrulaması

gibi URL adresiє HTTP kimlik doğrulaması, ardından aşağıdaki komut dosyasını kolayca kullanabilirsiniz:

$url="http://www.somesite.com/members/"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // kullanıcı adı ve şifreyi belirtin curl_setopt($ch, CURLOPT_USERPWD, "kullanıcıadım: şifrem"); // bu yönlendirmeye izin verilir curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // sonra verilerimizi cURL curl_setopt($ ch, CURLOPT_UNRESTRICTED_AUTH, 1); $çıktı = curl_exec($ch); curl_close($ch);

FTP katılımcısı

PHP ayrıca FTP ile çalışmak için temel bir kütüphaneye sahiptir, ancak hiçbir şey umursamıyorsunuz ve burada cURL kullanabilirsiniz:

// dosyayı aç $ file = fopen("/path/to/file", "r"); // url'de böyle bir değer olabilir $ url = "ftp: // kullanıcı adı: [E-posta korumalı]:21/path/to/new/file"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_UPLOAD, 1); curl_setopt($ch, CURLOPT_INFILE, $fp); curl_setopt($ch, CURLOPT_INFILESIZE, dosya boyutu("/path/to/file")); // ASCII özellikli mod curl_setopt($ch, CURLOPT_FTPASCII, 1); $output = curl_exec ($ch); curl_close($ch);

vikoristovuemo proxy'si

URL'nizi bir proxy aracılığıyla alabilirsiniz:

$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://www.example.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // adrese gelin curl_setopt($ch, CURLOPT_PROXY, "11.11.11.11:8080"); // kullanıcı adı ve şifreyi de ayarlamak gerekiyor curl_setopt($ ch, CURLOPT_PROXYUSERPWD, "user: pass"); $çıktı = curl_exec($ch); curl_close($ch);

Kapı bekçisinin işlevleri

cURL isteğinin tamamlanmasına yardımcı olacağı için bir işlev belirtmek de mümkündür. Örneğin para çekilirken yeni paranın alınmasından endişe duymadan datayı kazanmaya başlayabilirsiniz.

$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://net.tutsplus.com"); curl_setopt($ch, CURLOPT_WRITEFUNCTION, "ilerleme_fonksiyonu"); curl_exec($ch); curl_close($ch); function ilerleme_fonksiyonu($ch, $str)(echo $str; return strlen($str);)

Benzer bir işlev, dilin bağlanması olan sıranın uzunluğunu çevirmektir.

visnovok

Bugün cURL kitaplığını kendi amaçlarınız için nasıl kullanabileceğinizi öğrendik. Bu yazıyı hak ettiğinize eminim.

Teşekkürler! Uzak bir gün!

Mayıs: php 5.2.3, Windows XP, Apache 1.3.33
Sorun şu ki, cURL modülü görünmüyor, bu yüzden PHP Apache altında çalışıyor
php.ini uzantısına sahip olun = php_curl.dll Yorum yapın, extension_dir doğru şekilde kurulur,
libeay32.dll ve ssleay32.dll, c:\windows\system32 dizinine kopyalanır.
phpinfo() işlevi, kurulu olanlar arasında cURL modülünü göstermiyor ve Apache başladığında, günlükte aşağıdakiler yazıyor:

PHP Başlangıç: "c: /php/ext/php_curl.dll" dinamik kitaplığı yüklenemiyor - Chi modülü bulunamadı.

PHP'yi komut satırından çalıştırırsanız, cURL'den komut çalıştırabilen komut dosyaları iyi çalışır, ancak Apache'yi pid'den çalıştırırsanız, geldiğini göreceksiniz:
Önemli hata: Tanımsız işleve çağrı: curl_init () - üstelik, PHP kurulumlarının CGI veya modül olmasına bakılmaksızın.

İnternette, bu sorunun açıklamasına defalarca saldırıldı - cURL modülünün kendisi için, ancak orada önerildiği gibi bunu yapmanın diğer yolları yardımcı olmuyor. Ve zaten PHP 5.2'yi PHP 5.2.3'e değiştirdim - hepsi aynı şekilde yardımcı olmadı.

David Mzareulyan [dosya]
Diski bir arama ile aramış olan sadece bir php.ini'm var. Bir ve aynı php.ini'yi kazananlar, hem çalışan Apache betiklerine hem de komut satırından yeni bir değişiklik yapmanın gerekli olduğu gerçeğiyle kolayca onaylanır.

Danilo Ivanov [dosya] Wiki ile daha hızlı zrobіt dosyası

Ve tarayıcı üzerinden yogayı açın.
Ve sonra php -i | grep ini ve php.ini yolunu çevirin, böylece php çalıştırıyor ve görünüşe göre diskte bir dosya değil gibi görünüyor.

Danilo Ivanov [dosya] php -i neye benziyor? Kilitleme için ikili, derlemedeki parametrelerde nadas olarak başka bir alanda yapılandırmayı arayabilir. Bu, mod_php.dll ve php.exe'nin farklı dosyalara baktığı ve birinde çalışan dosyaların diğerinde çalışmadığı gerçeğine ilk kez takılıp kalmıyorum.

Vasil Sviridov [dosya]
php -i ileri adım:

Yapılandırma Dosyası (php.ini) Yol => C:\WINDOWS
Yüklenen Yapılandırma Dosyası => C:\PHP\php.ini

php.ini dosyasının Windows dizinine aktarılması durumu değiştirmez.

Danilo Ivanov [dosya]
Diğer modüller nasıl? Örneğin php_mysql ??? Bağlı mı? cURL neden bu kadar kötü?

Hmm, uğraşamam... Konfigürasyonun diğer tarafında (Apache 2.2 artı Zend Studio altında PHP 5.1.6). Konu Ale değil. Ağustosböceğini gösteren komut satırından (daha doğrusu FAR'dan) Apache'yi başlatma deneyi. Kurlov'u bağlamaya çalışmadan - her şey bir demet halinde başlar. Kurlov'u bağlamaya çalıştığınızda, ... php5ts.dll'de bir af görüyorsunuz.

Merhaba!
Benzer bir problemim var, uzun zamandır bir çözüm arıyordum, daha fazlasını koyarak Yeni sürümРНР, sonuç olarak, tüm forumu tanıyor. Kendim denediğim için burada bir çözüm yoktu.

Bir Zendiv stüdyosu kurdum ve önünde daha çok durdu. erken versiyon RNR. Muhtemelen, kendi kütüphanelerini onlardan koyduktan ve pis koku orada kaldı - modası geçmiş.

Özellikle "Nehxby"nin geri kalanı için teşekkürler. C:\windows\system32'ye gittim ve libeay32.dll ve ssleay32.dll kitaplıklarının orijinalleri korumadığını öğrendim. Memcashed'i kurdum, belki ondan sonra. Peki, system32 go'da ne eklediler :)

Vinyl'de de aynı sorun var, php -i komutu | grep ini
zlib1.dll kitaplıklarının kurulu olmadığını gösterdi
Apache ile papalıkta bula kazandı, PHP ile klasöre bir kopya yazdı
komutu tekrarlayarak eksik zlib.dll kitaplıklarını gösterdi, Apache ile klasöre yazdı ve her şey düzeltildi.
Ve tüm kütüphaneler ayrıca php5ts.dll'yi içeriyordu, bu yüzden ihtiyacınız olan tüm kütüphanelerin varlığını kontrol edin.

Virishiv ekleyin. Peki bu soruna nasıl takılıp kalabilirim. Danimarka forumunda, başka bir siteden bir mesaj yoluyla almış. Zagalom, önerilen tüm seçenekler polis gibi değil. Windows'ta çözümün özü. PATH'i değiştirmeniz gerekir. PHP'niz olduğunu bildiğinizi söylüyorsanız. Hallelujah curl affını göremiyorum. diğer kütüphaneler gibi...

Tі, hto cURL hack, 5.6.1'deki güncellemeden sonra, cURL modülü çalışmayı durdurduğu için 5.5.17 takıldı. Sorun henüz ortaya çıkmadı. PHP 5.6.4'ün güncel sürümüne yükseltin, sorun kaydedildi.

Hangi cURL'nin sizinle çalıştığını nereden biliyorsunuz?

oluşturmak php dosyası ve oraya kopyalayın:

Sunucudan yogayı açın. kshtalt yolunda neler var:

Dizi (=> 468736 => 3 => 3997 => 0 => 7.39.0 => x86_64-pc-win32 => OpenSSL/1.0.1j => 1.2.7.3 => Dizi (=> dict => dosya => ftp => ftps => gopher => http => https => imap => imaps => ldap => pop3 => pop3s => rtsp => scp => sftp => smtp => smtps => telnet => tftp) )

Yani cURL ile her şey yolunda, çünkü bu PHP affının yerini alıyor, yani sorun orada.

Her şeyden önce, açıkçası php.ini dosyasını çevirin, orada bir satır bulun

extension=php_curl.dll

Ve fikrini değiştir ki önünde koma zerresi kalmasın.

Her şey yolundaysa ve cURL çalışmıyorsa, durumun benzersiz olmadığını doğrulamak için bir test daha yapabilirsiniz. Aşağıdakilerle başka bir php dosyası oluşturun:

Tarayıcıda bir arama yaparak cURL'yi bulun; bu, cURL modülünün yenilmediği anlamına gelir:

Bununla ve Apache ve PHP ile bir ses gibi çalışırlar.

Üçüncü çözüm:

  1. İlk yöntem (koşer DEĞİL). PHP 5.6'ya sahip olduğunuzu varsayarsak. * Ardından PHP 5.6.0 sürümünü seçin, eski php_curl.dll dosyasını alın ve yeni sürümünüzle değiştirin, örneğin PHP 5.6.4. PHP 5.5.17 ve üzeri olanlar için aynı dosyayı PHP 5.5.16'dan alıp değiştirmek gerekir. Burada tek bir sorun var - eski sürümleri bilmek. Açıkça http://windows.php.net/downloads/snaps/php-5.6 adresini kontrol edebilirsiniz, ancak orada neye ihtiyacım olduğunu bilmiyorum. Aynı karar tam olarak koşer değil.
  2. Yöntem farklıdır (daha İsveçli, ancak koşer değil). PHP dizininden libssh2.dll dosyasını Apache24bin dizinine kopyalayın ve Apache'yi yeniden başlatın.
  3. Üçüncü yol (koşer - koşer insanlar ayakta alkışlar). PHP dizininizi PATH'e eklemeniz gerekir. Sonuç olarak, resmi belgelerde iyi yazılmıştır.

yankı:

Voila, yerinde cURL bölümü.

Neden öyle? Bir sorun gibi mi geliyor? Tedarik zinciri hakkında hiçbir kanıt yok, ancak haklı çıkarma mekanizmasını açıklamak istiyorum.

Sorun, aslında, 5.6.1'in libcurl 7.38.0 güncelleme ihmalinden sorumlu olması gerçeğiyle ilgilidir. Ale tse dostemenno görülmedi, PHP yazarları Apache'ye başını salladı, orada böcekler gibi hareket ediyor.

Sorunu doğrulama mekanizması: PHP dizini sistem PATH'ine dahil değilse, o zaman Apache servisi başlatılırsa, php_curl için bir miras olan yeni dll'yi (libssh2.dll) bilmek mümkün değildir.

Vidovidni hata raporu:

Önemli hata: tanımsız curl_multi_init() işlevine çağrı ...

Öte yandan, PHP'de cURL ile ilgili sorunlar, öyle görünüyor ki, her zaman değil, sonra oldukça sık. Sorunlarımı araştırırken, bir düzineden fazla kaderi olan kişilere rastladım.

Krym tsgogo, googling daha fazla visnovkiv çaçası verdi:

İnternette, resimlerle birlikte raporların php.ini dosyasındaki extension = php_curl.dll satırına nasıl yorum yapılacağını açıkladığı “dibilistler için talimatlar” gönderin.

PHP'nin resmi web sitesinde, cURL kurulumuna ilişkin dağıtımda, Windows sistemi için iki öneri vardır:

İçinde sim modülü olan robotlar için Windows dosyaları libeay32.dll ve ssleay32.dll, sistem PATH'ini değiştirmekten sorumludur. cURL sitesinden libcurl.dll dosyasına ihtiyacınız yoktur.

Onları onlarca kez okudum. geçiş yapmak ingilizce dili ve İngilizceyi bir kez daha okuduktan sonra. Bir kerede deriyle, bu iki önermenin yaratıklar tarafından yazıldığını ya da klavyede kıçını traş edersen - onların zmistini anlamıyorum.

Daha fazla є kіlka yakikhos ilahi, nstruktsіy sevindim (nasıl deneyeceğimi öğrenmeyi başardım).

PHP hata raporlarının web sitesinde, PHP dizinini sistem PATH değişikliğine dahil etmek için neyin gerekli olduğunu bulmaya çalıştım.

Zagalom, cURL ile sorunu olanlar ve "PHP dizinini sistem PATH değişikliğine dahil etmesi" gerekenler için, yukarıda belirtilen talimatlara gidin http://php.net/manual/ru/faq.installation.php# sss.install.addtopath. Orada her şey basit ama müstehcen, büyümek için ne gerekliyse benim insanım tarafından yazılmış.