PHP çoklu bağlantıları ve ilerleme ekranı ile bir indirme yöneticisi olarak CURL

4 Cevap php

Ben indirme yöneticisi çeşit oluşturmak için PHP CURL uzantısını kullanmak istedim ve CURL ben düşünüyorum bu 2 özelliklerini uygulamak için izin eğer ben düşünüyordum:

1) sadece normal masaüstü uygulamaları indirme yöneticisi gibi çoklu bağlantı veya çok parçalı indir.

2) Sürekli ekranda güncellemek (metin veya grafik) indirme ilerlemesini önemli değildir.

PHP CURL Bu herhangi bir izin verir mi? Eğer öyleyse, bazı ipuçları sağlamak için bakım?

4 Cevap

Tüm eleştirmenler "PHP multi-tasking için büyük değil":

Bir adım geri atın ve bir lamba bir ortamda iseniz emrinde müthiş bir Multithreading çerçeveye sahip olduğunu düşünün. Sizin yararınıza bu taban mimarisi kullanın - ve bu bir lanet iyi bir - yani Apache çoklu iş parçacığı yöneticisidir.

Bu ortamda çalışmak için kurulum PHP çok kolaydır.

  1. Komut indefinatly çalıştırmak için izin max_execution_time = 0 olarak ayarlayın
  2. Set ignore_user_abort = true to allow scripts to run even after the client has aborted

Tasarım hafif tek görev REST web hizmetleri. Böyle bir kuyruk tipi sistemi olarak döndüğünüzde umurumda değil böyle bir şekilde onları tasarlayın. Kuyruğuna yazma parçacığı güvenli ve bazı temel OS düzeyinde muteksler ile yapılırsa kuyruğundan kaldırarak parçacığı güvenlidir.

Web hizmetleri "forking" bir dosya açmak kadar basittir:

fclose(fopen("http://somewebservice....php?a1=v1&a2=v2&....")); // Launch a web service and continue...

Sadece bu yaklaşım çok dişli olduğunu, ancak doğal olarak da dağıtılır. Web hizmeti, yerel veya dünya çapında yer olabilir. PHP kesinlikle umursamıyor.

Temel bir sistem için geri tutan tek şey apache sağlar parçacığı sayısıdır. Aksi takdirde kod yük dengeleme yararlanmak için hazır olduğunu ve Apache uygulamaları gelişmiş tüm diğer temiz hileler sunmak zorunda.

Çok sık geliştirici düşünüyorum zaman "multi-threaded" onlar "OMG ben çatal ve denetmen ve beklediği ve PID'leri işlemek zorunda" düşünüyorum. Eğer bu şekilde sistem tasarımı ve eğer - Haklısın, çok çok hızlı bir şekilde karmaşık alır. Geri adım ve verilen ne kullanın. Sen dizinlere erişimi var? Boom - Eğer kuyrukları var. Bu web aramaları verebilir? Boom - Bir çok dişli (dağıtılan) uygulaması var. Şimdi sadece app dikte gibi kavramları birlikte birleştirme.

PHP çoklu dosya aramaları veya forking vasıtasıyla bu şekilde zorlamak için çalışırsanız, sonuç genellikle alt-optimal, multi-threaded değildir ve. Ben buna karşı öneririm, ANCAK, bu js bir karışımı ile böyle bir şey yapmak mümkün olacaktır, php (muhtemelen olsa kıvırmak değil ama özel bir php file stream), ve long polling

Bu mümkün, curl_multi_init içine bir göz atın ();

Hayır, bu böyle değildir. İndirme Yöneticisi 5 kez kolları sınıf çağıran çünkü mümkün değildir - bu bir PHP sınıfı örneğidir.

Bu bir örnek sınıf çağrısıdır:

$tr = new teConnections();
$data = $tr->downloadManager(array('http', 'host', path', 'login', 'pass', 'port'), 'file name, compression, streaming);