Kıvrılma çalışmıyor. CURL, Apache ile çalışmaz. Kapı fonksiyonları

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'yi çalıştırıyor
php.ini extension=php_curl.dll uncomments, extension_dir doğru şekilde kuruluyor,
libeay32.dll ve ssleay32.dll, c:\windows\system32 dizinine kopyalanır.
Tim daha az değil, cURL modülünün phpinfo() işlevi kurulu olanlar arasında gösterilmiyor ve Apache başladığında, günlükte aşağıdakiler yazıyor:

PHP Başlangıç: "c:/php/ext/php_curl.dll" dinamik kitaplığı alınamıyor - Modül girişi bulunamadı.

php nasıl çalıştırılır Komut satırı, sonra cURL'den komutları yürütmek için kullanılan komut dosyaları iyi çalışır, ancak Apache komutunu çalıştırmak istiyorsanız, şunu görürsünüz:
Önemli hata: Tanımsız işleve çağrı: curl_init() - ayrıca, ne olursa olsun, PHP kurulumları gibi - CGI veya bir modül gibi.

İnternette, tekrar tekrar sorunun açıklamasına rastladım - cURL modülünün kendisi için, ancak orada önerdikleri gibi bunu yapmanın diğer yolları yardımcı olmuyor. Ayrıca, PHP 5.2'yi PHP 5.2.3 olarak değiştirdim - yine de yardımcı olmadı.

David Mzareulyan
Bir php.ini'm var - bir arama ile diski aradım. Bir ve aynı php.ini'yi kazananlar, yenisinde bulunanları değiştirdiğiniz, Apache komut dosyalarının başlatılmasına ve komut satırından eklediğiniz gerçeğiyle kolayca onaylanır.

Danilo Ivanov[dosya] Daha hızlı zrobіt dosyası viklikom'da

ve tarayıcı üzerinden yogayı açın.
Ardından komut satırında php-i'yi çalıştırın | grep ini ve php.ini yolunu çevirmek, diskteki bir dosya gibi görünmek yerine php çalıştırıyormuş gibi görünmesini sağlar.

Danilo Ivanov[dosya] php-i neye benziyor? Kilitleme için ikili, yapılandırmayı farklı bir alanda shukati yapabilir, derlemedeki parametreleri takip edebilir. mod_php.dll ve php.exe dosyalarının farklı dosyalara baktığı ve birinde çalışan dosyaların diğerinde çalışmadığı gerçeğine ilk kez katılmıyorum.

Vasil Sviridov[dosya]
php -i şöyle görünür:

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]
Bir modül çözümüne ne dersiniz? Örneğin, php_mysql??? Bağlı mı? cURL neden bu kadar akıllı?

Hmm, uğraşamam... Farklı bir konfigürasyonda (Zend Studio için Apache 2.2 artı PHP 5.1.6). Konu Ale değil. Apache'yi komut satırından başlatarak (daha doğrusu FAR'dan) bir ağustosböceği gösteren bir deney. Denemeden Kurl'u bağlayın - her şey bir demet halinde başlar. Kurl'u bağlamaya çalıştığınızda, bir af görürsünüz... php5ts.dll.

Merhaba!
Benimde buna benzer bir sorunum var uzun zamandır çözüm arıyordum daha fazlasını koyarak Yeni sürümРНР iyi bilinen bir forumda sonuçlanır. Burada bir çözüm yoktu, kendim de denedim.

Kendime bir zend stüdyosu kurdum ve önünde duran daha çok şey vardı. erken versiyon RNR. Muhtemelen, bazıları kendi kitaplıklarını koymuşlardır ve pis koku orada kalmıştır - modası geçmiş.

Dyakuёmo uğruna, özellikle kalan "Nehxby" türü. C:\windows\system32'ye gittim ve libeay32.dll ve ssleay32.dll kitaplıklarının orijinal kitaplıklardan kaçmadığını gördüm. Belki ondan sonra memkeshed kurdum. Böylece, system32 go'da yakscho wi chot eklendi :)

Sorunun kendisi Vinyl, php-i komutuyla kıvranıyor | grep ini
zlib1.dll kitaplıklarının kurulu olmadığını gösterdi
apache'li baba, PCP ile klasöre bir kopya yazarak bula kazandı
komutu tekrarlayarak, eksik zlib.dll kitaplıklarını gösterdi, klasörü apache ile birlikte yazdı ve her şey düzeltildi.
ve tüm kitaplıklar aynı zamanda php5ts.dll'dir, bu nedenle gerekli tüm kitaplıkların varlığını kontrol edin.

Virishiv ekleyin. Oskіlki tezh zіshtovhnuvsya іz ієyu problem. Başka bir siteden mesaj göndererek tüm forumda. Zagale, militler arasında scho değil, zaproponovanі seçeneklerdir. Windows'ta çözümün özü. PATH'i değiştirmeniz gerekir. de belirttikten sonra PHP'yi yeniden satın almanız gerekir. ve halleluya curl af görmüyorum. diğer kütüphaneler gibi...

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 komut satırı aracı olacak şekilde bölünmüştür. Neyse ki, cURL kitaplığı benim tarafımdan destekleniyor. PHP programlama. Bu makalelerde, cURL'nin bazı genişletilmiş işlevlerinin yanı sıra PHP araçlarından bilgi almanı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. Bagatioh vipadkah'da, geceler boyunca baş rütbe, ben vikoristav basit PHP işlevleri cURL'yi değiştirin:

$içerik = file_get_contents("http://www.nettuts.com"); // veya $lines=file("http://www.nettuts.com"); // veya readfile("http://www.nettuts.com");

Bununla birlikte, bu işlevler pratik olarak yetersiz beslenemez ve af vb. ihtiyaç duyanlardaki eksikliklerin sayısının büyüklüğünün intikamını alamaz. Ek olarak, standart işlevlerin kurallarını çiğneyemezmişsiniz gibi zavdannya adlarına dayanmaktadır: çerez etkileşimi, kimlik doğrulama, form denetimi, dosya yakalama.

cURL - bu, anonim protokolleri, seçenekleri ve güvenliği destekleyen kapsamlı bir kitaplıktır. detaylı bilgi URL'yi sorun.

Basit yapı

  • başlatma
  • Parametrelerin atanması
  • Vikonannya ve vibrka sonucu
  • Şiddet hafızası

// 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. Sonuç olarak HTML'yi kabul edin $output = curl_exec($ch); // 4. günü kapat curl_close($ ch);

Krok #2 (tobto, curl_setopt() wiki) Bu aşamada, bilmeniz gereken her şeyin en iyisi olduğu bulunur. cURL, annenin URL sorgusunu daha iyi bir şekilde özelleştirebilmesi için belirtilmesi gerektiği gibi çok sayıda farklı seçeneğe sahiptir. Tüm listeyi tam olarak göremiyoruz, ancak bu ders için yalnızca ihtiyaçlar ve maliyetler için neye saygı duyduğuma odaklanacağız. Reshto bunu kendin öğrenebilirsin, çünkü bu konu seni kendine bağlayacaktır.

Perevіrka Pardon

Üstelik kazanabilirsiniz 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 önemli bir anı belirtmenizi rica ediyorum: eşitlik için “== false” yerine “=== false” kazanabiliriz. Bilgisi olmayanlar için, lütfen boş sonucu, affedilecekmişsiniz gibi, boolean değeri false olarak eski durumuna getirmemize yardım edin.

Bilginin geri çekilmesi

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

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

Dizi, aşağıdaki bilgileri almak için döndürülür:

  • "url"
  • "içerik türü"
  • "http_kodu"
  • "header_size"
  • "request_size"
  • "dosya zamanı"
  • "ssl_verify_result"
  • "yönlendirme_sayısı"
  • "toplam zaman"
  • "namelookup_time"
  • "connect_time"
  • "ön transfer_zamanı"
  • "size_upload"
  • "size_download"
  • "hız_indirme"
  • "hız_yükleme"
  • "download_content_length"
  • "yükleme_içerik_uzunluğu"
  • "starttransfer_time"
  • "yönlendirme_zamanı"

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

İlk defa farklı tarayıcı ayarlarına göre yönlendirme URL'leri oluşturabilen kod yazacağız. Örneğin, web siteleri tarayıcıları yeniden yönlendirmek için ne yapar? tarz telefon, yoksa başka bir şey inşa edeceğim.

CURLOPT_HTTPHEADER seçeneğini, el yazısı tarayıcının adı ve mevcut filmler dahil olmak üzere özel HTTP başlıklarımızla eşleşecek şekilde değiştirmeyi seçiyoruz. Bu sitelerin bizi farklı bir URL'ye yönlendirdiğinden emin olmamıza izin verilir.

// Test URL'si $urls = array("http://www.cnn.com", "http://www.mozilla.com", "http://www.facebook.com"); // tarayıcıları test etme $browsers = array("standart" => array ("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; => "Mozilla/4.0 (uyumlu; MSIE 7.0; Windows NT 5.1; GTB6; .NET CLR 2.0.50727)", "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(); // isteğe bağlı url curl_setopt($) ch, CURLOPT_URL, $url); // tarayıcı başlıklarını seç curl_setopt($ch, CURLOPT_HTTPHEADER, array("User-Agent: ($browser["user_agent"])", "Accept-Language: ($tarayıcı["dil " ])" ));// tarafı değiştirmemize gerek yok curl_setopt($ch, CURLOPT_NOBODY, 1);// HTTP başlıklarını kaldırmamız gerekiyor curl_setopt($ch, CURLOPT_HEADER, 1); ch, CURLOPT_RETURRAN 1) ; $çıktı = curl_ex ec($ch); curl_close($ch);// Chi boov HTTP yönlendirmesi? $test_name: $eşleşmelere yönlendirir\n"; ) else ( echo "$test_name: yönlendirme yok\n"; ) ) echo "\n\n"; )

Site URL'lerinin listesi isteğe bağlıdır, ancak tersine çevrilebilir. Daha doğrusu bu sitelerin adreslerine ihtiyacımız var. Bu URL'lerin dış görünümünü protesto etmek için bize tarayıcıyı düzeltme ihtiyacını verdiler. Döngüyü hızlandırırsak, tüm sonuçları gözden geçireceğiz.

Bu arada, cURL'yi kurmak için, ters tarafı değil, sadece HTTP başlıklarını kaldırmamıza izin vermek için bir şekilde kullanmak iyi bir fikirdir ($output'ta kaydedin). Şimdi regex diyelim, alt başlıklarda "Location:" satırı gibi görünmesini sağlayabiliriz.

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

Tek bir URL'ye POST oluşturun

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

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

Kazanmak için Danimarka zapiti cURL ile uğraşmanıza gerek yok. Ne kadar uzun sürse de sonucu görmek için “file_get_contents()” fonksiyonunu çalıştırın.

Ne yazık ki, bazı HTML formlarının POST isteğini geçersiz kılması. Bu form verileri, önden düşme gibi değil, HTTP isteğinin gövdesi aracılığıyla taşınır. Örneğin, forumdaki formu doldurursanız ve sor düğmesine tıklarsanız, her şey için POST istenecektir:

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

Yazabiliriz PHP betiği URL isteğinin görünümünü değiştirebilen . Öncelikle, bu POST verilerini kabul etmek 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); // POST'un isteneceğini belirtin curl_setopt($ch, CURLOPT_POST, 1); // değişiklikleri ekle 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 almalısınız:

Bu şekilde, cURL'nin yardımı için kullandığımız süper küresel $_POST dizisi olan post_output.php betiğine POST beslenecektir.

dosya eklentisi

Öncelikle yogayı oluşturmak için bir dosya oluşturalım ve upload_output.php dosyasına gönderelim:

Print_r($_FILES);

Ve komutları viscons komut dosyasına kod i ekseni daha işlevseldir:

$url = "http://localhost/upload_output.php"; $post_data = dizi ("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ı;

Dosyayı yakalamak istiyorsanız, eklemeniz gereken her şeyi, ardından önüne @ sembolünü yerleştirerek özel bir değişiklik sonrası olarak iletin. Yazdığınız betiği çalıştırdığınızda sonucu reddedeceksiniz:

Çoklu cURL

CURL'nin en güçlü yönlerinden biri, "çoklu" CURL örnekleri oluşturma yeteneğidir. Bu, birden çok URL'ye aynı anda ve eşzamansız olarak erişmenizi sağlar.

Klasik cURL varyantında, komut dosyası için istek eklenir ve istek URL'sinin tamamlanmış işlemi alınır, ardından komut dosyası robotuna devam edilebilir. Kişisel olmayan bir URL ile birlikte çalışabiliyorsanız, aynı önemli süreye kadar eklemeniz gerekecek, klasik sürümde bir seferde yalnızca bir URL kullanabilirsiniz. Prote, özel obrobnikler ile hızlandırarak bu durumu düzeltebiliriz.

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

// cURL'de bir kaynak havuzu yarat $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); //birden çok cURL işleyici oluştur $mh = curl_multi_init(); //bir avuç tutamaç ekleyerek curl_multi_add_handle($mh,$ch1); curl_multi_add_handle($mh,$ch2); $etkin = boş; //vice do ( $mrc ​​​​= curl_multi_exec($mh, $active); ) 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. Vikoristovuyuchi 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 işlev engellenmemiştir. Kazandı vykonuєtsya z 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, aynı anda 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, fikri değiştireceğiz, rıhtımlar değiştirildi $active = "true". Bu curl_multi_exec() işlevi için başka bir parametredir. Bu değişikliğin değeri "true", rıhtımlar ana değişikliklerden hala aktif. Daha sonra curl_multi_select() fonksiyonuna tıklıyoruz. Її vykonannya "engellendi", rıhtımlar bir aktif za'єdnannya'dan değil, rıhtımlar alınmayacak. Gerekirse 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 ortadan kaldıralım.

WordPress'te yayının gözden geçirilmesi

Dünyanın İnternet kaynaklarına gönderilenlerin ciltleri için çok sayıda gönderi ve tavsiyeden kendi blogunuzu ekleyin. Deyakі z tsikh psilan z rіznyh nedenleri "ölü" olabilir. Muhtemelen kenar çubuğu silinmiş veya site çalışmıyor.

Tüm mesajları analiz edecek ve web sitelerini ve 404 tarafını bilecek, kibirli olmayacak, ardından bize bir rapor gönderilecek bir komut dosyası oluşturmayı seçiyoruz.

Bunun WordPress için bir eklenti oluşturma durumu olmadığını tekrar söyleyeceğim. Bu, numunelerimiz için yalnızca iyi bir test alanıdır.

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

// Yapılandırma $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 = boş; // MySQL'e bağlan if (!mysql_connect($db_host, $db_user, $db_pass)) ( die("Bağlanamadı: " db seçilemedi: " . mysql_error()); ) // yayınlanan tüm gönderileri seç, de $ q = "wp_posts'DAN post_content SEÇİN NEREDE post_content "%href=%" VE post_status = "yayınla" VE post_type = "post ""; $r = mysql_query($q) or die(mysql_error()); while ( $d = mysql_fetch_assoc($r)) ( // yardım almaya çalışacağız normal virüsler if (preg_match_all("!href=\"(.*?)\"!", $d["post_content"], $matches)) ( foreach ($url olarak $eşleşir) ( $tmp = parse_url($url) if (in_array($tmp["host"], $excluded_domains)) ( devam; ) $url_list = $url; ) ) ) // yinelenenleri kaldırın $url_list = array_values(array_unique($url_list)); if (!$url_list) ( die("Kontrol edilecek URL yok"); )

Elimin arkasında, veri tabanıyla arayüz oluşturmak için yapılandırma verileri oluşturuyoruz, dönüşümde yer alabilmemiz için bir alan listesi veriyoruz ($excluded_domains). Ayrıca, betiğimizde kazanacağımız maksimum bir saatlik bağlantı sayısını karakterize eden bir sayı kullanıyoruz ($max_connections). Daha sonra veri tabanına geliyoruz, dizide ($ url_list) biriken intikam çabaları gibi gönderileri seçiyoruz.

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 = 0; $i) için anonim bir URL ekleyin< $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 yorumdaki sayılarla eşleşir.

  1. 1. Çok iş yaratıyoruz;
  2. 2. Add_url_to_multi_handle() fonksiyonunu yılda üç kez yazacağız. Shchoraz, bir tweet olacaksa, yeni bir URL üzerinde çalışmaya başlayacak. Öte yandan, 10 ($max_connections) URL ekleriz;
  3. 3. Robotu başlatmak için curl_multi_exec() fonksiyonunu çalıştırmakla sorumluyuz. Rıhtımlar CURLM_CALL_MULTI_PERFORM tarafından döndürülmeyecek, hala çalışmamız gerekiyor. Bir gün yaratmak için bir baş rütbeye ihtiyacımız var;
  4. 4. Ardından, döngünün sonu olacak olan ana döngüyü takip edin, rıhtımlar bir kez daha aktif olabilir;
  5. 5. curl_multi_select() doğrulamada asılı kalıyor, URL arama dock'ları tamamlanmayacak;
  6. 6. Robotu vikonate etmek için cURL'yi öğrenmekten ve kendi kendime, nasıl döneceğine dair bir dizi veri toplamaktan yine suçluyum;
  7. 7. İşte bilgilerin yeniden doğrulanması. Sonuç olarak, dizi döndürülecektir;
  8. 8. Döndürülen dizide bir cURL bulucu bulunur. Yogo mi ve cURL ile okremium hakkında bilgi seçmek için yazacağız;
  9. 9. Mesaj ölmüş olsa veya saat viish senaryosunda kaybolmuş olsa bile, o zaman doğru http kodunun izine sahip değildik;
  10. 10. Mesaj bizi 404'e geri döndürdüyse, hata değerinin http kodu 404'tür;
  11. 11. Bu arada daha güçlü olduğumuz biliniyor. (Pardon kodu 500 toshcho'ya ek revizyonlar ekleyebilirsiniz);
  12. 12. Bundan daha fazlasına ihtiyaç duymayan cURL oluşturucuyu görelim;
  13. 13. Şimdi başka bir url ekleyebilir ve daha önce söylenenlerin hepsini çalıştırabiliriz;
  14. 14. Senaryo çalışmalarını hangi aşamada tamamlıyor. İhtiyacımız olmayan her şeyi görebilir ve bir ses oluşturabiliriz;
  15. 15. Tamam, örnekleyiciye bir url eklemek gibi bir fonksiyon yazalım. Statik değişiklik $ indeksi verilen fonksiyonçağrılacaksınız.

Bu betiği bloguma kopyaladım (bazı uygunsuz mesajlarla, özellikle bu robotu protesto etmek için ekledim) ve rahatsız edici sonucu ortadan kaldırdım:

Benim düşünceme göre, komut dosyasının 40 URL'yi taraması için 2 saniyeden daha azına ihtiyacı var. Daha fazla sayıda URL ile çalışırken artan üretkenlik. Aynı anda on gün görürseniz, komut dosyası on kat daha fazla sayılabilir.

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

HTTP Kimlik Doğrulaması

URL adresi HTTP kimlik doğrulamasıysa, 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); // ardından 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 kitaplığa sahiptir, ancak hiçbir şey için endişelenmenize ve cURL ile hızlandırmanıza gerek yoktur:

// dosyayı aç $file = fopen("/path/to/file", "r"); // url ofset 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_UPLO curl_setopt($ch) , CURLOPT_INFILE, $fp); curl_setopt($ch, CURLOPT_INFILESIZE, dosya boyutu("/path/to/file")); // ASCII önbelleğe alma modu ($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"); // ayrıca bir şifre girilmesi gerekiyor curl_setopt($ch, CURLOPT_PROXYUSERPWD,"user:pass"); $çıktı = curl_exec($ch); curl_close($ch);

Kapı fonksiyonları

İş tamamlanmadan önce cURL talebinin tamamlanmasına yardımcı olacağı için bir fonksiyon belirtmek de mümkündür. Örneğin, bundan yararlandığınız sürece, bunalmaktan endişe duymadan verileri 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ür ederim! Uzak bir gün!

cURL 5.6.1'den beri güncellendiğinden, cURL modülü çalışmayı durdurduğu için 5.5.17 takıldı. Sorun o zaman ortaya çıkmadı. PHP 5.6.4'ün bugünkü sürümünün geri kalanına geçin, sorun kaydedildi.

CURL ile ne yaptığınızı nereden biliyorsunuz?

Yaratmak php dosyası ve oraya kopyalayın:

Sunucudan açın. Çıkışta ne 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, PHP için bir af gibi, her şeyin güvenli olduğu anlamına gelir, yani sorun gerçektir.

Önce php.ini dosyasını değiştirin, oradaki satırı bulun

Uzantı=php_curl.dll

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

Her şey yolundaysa ve cURL çalışmıyorsa, durumun masumiyetini doğrulamak için bir test daha yapabilirsiniz. Farklı bir php dosyası oluşturun:

Tarayıcıda bir arama yaparak cURL'yi bulun; bu, yalnızca bir tane olduğu anlamına gelir, bu nedenle cURL modülü çekici değildir:

Bu ve Apache ile bu PHP bir cazibe gibi çalışır.

Üçüncü çözüm:

  1. İlk yöntem (koşer değil). PHP 5.6.* kullanıyorsanız, PHP 5.6.0'ı alın, 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 üstü olanlar için, dosyayı PHP 5.5.16'dan alıp değiştirmek gerekir. Burada tek bir sorun var - eski sürümleri bilmek. Açıkçası, http://windows.php.net/downloads/snaps/php-5.6 adresine bakabilirsiniz, 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.

Doğrulamak:

Voila, sitede cURL'yi böldüm.

Neden öyle? Bir sorun gibi mi görünüyor? Doğrulama mekanizmasının açıklamaları olmasına rağmen, beslenme kanıtı yoktur.

Sorun, 5.6.1'in libcurl 7.38.0 güncelleme ihmalinden suçlu olmasından kaynaklanmaktadır. Ale tse dostemenno görülmedi, PHP'nin yazarı Apache'ye başını salladı, orada böcekler var diyerek.

Sorun Giderme Mekanizması: Sistem PATH'i PHP dizinini içermeden önce bile, Apache hizmeti başladığında, php_curl için bir geri dönüş olan yeni bir dll (libssh2.dll) bilemezsiniz.

Vidovidni hata raporu:

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

PHP'de cURL ile ilgili sorunlar var ve görünüşe göre bu pek sık olmuyor. Kendi sorunlarını gömme süreci, bir düzineden fazla yıldır bunu yapanlarla karşılaştım.

Krіm tsgogo, google daha fazla visnovkіv çaçası verdi:

İnternette, php.ini dosyasındaki extension=php_curl.dll satırına nasıl yorum yapılacağını anlatmak için, resimlerle birlikte bildirildiği "dibilistler için talimatlar" vardır.

PHP'nin resmi web sitesinde, cURL kurulumunun dağıtımında, Windows sistemi için sadece iki öneri vardır:

Sim modüllü 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ş ingilizce dili ve İngilizceyi bir kez daha okuduktan sonra. Bu iki önermenin yaratıklar tarafından yazıldığına dair fikrimi gitgide değiştireceğim ya da klavyede kıçınızı kazırsanız - anlamlarını anlamıyorum.

Daha fazla є kіlka kakihos pozhevіlnyh sevinçler ve іnstruktsіy (deyakі ben navit vstig viprobuvat).

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

Zagalom, cURL ile sorunu olanlar ve "sistem PATH içindeki PHP dizinini değiştirmesi" gerekenler için, daha önce belirtilen talimatlara gidin http://php.net/manual/ru/faq.installation.php#faq .installation .addtopath . Orada her şey basit ama kafaya, büyümek için ne gerekli olduğu yazıyor insanım.

Sabit diskler