ROTATION als Download-Manager mit mehreren Verbindungen und Fortschrittsanzeige in PHP

StackOverflow https://stackoverflow.com/questions/1613926

  •  06-07-2019
  •  | 
  •  

Frage

Ich wollte die CURL-Erweiterung für PHP verwenden irgendeine Art von Download-Manager zu erstellen und ich dachte, wenn ROTATION diese 2 Funktionen zu implementieren, erlaubt über ich denke:

1) Mehrere Verbindungen oder mehrteiligen Download wie ein normaler Desktop-Anwendungen Download-Manager.

2) ständig auf dem Bildschirm aktualisieren (Text oder Grafik, keine Rolle spielt), um den Download-Fortschritt.

Ist ROTATION für PHP irgendetwas davon erlaubt? Wenn ja, sorgen einige Hinweise geben?

War es hilfreich?

Lösung

Die curl_multi_xyz () -Funktionen, wie curl_multi_exec() ermöglicht es Ihnen, bearbeiten mehrere Anfragen zur gleichen Zeit. Werfen Sie auch einen Blick auf CURLOPT_RANGE , wenn Sie mehrere segements der gleichen Datei herunterladen möchten in parallel. Und die Callback-Funktionen können Sie einstellen, mit CURLOPT_READFUNCTION und CURLOPT_WRITEFUNCTION Sie erlauben würde, eine Art von Fortschritt Daten an den Client zu senden.

Andere Tipps

Um alle der "PHP ist nicht gut für Multi-Tasking" Kritiker:

Machen Sie einen Schritt zurück und betrachten, dass Sie einen fantastischen Multithreading Rahmen zur Verfügung zu haben, wenn Sie in einer LAMP-Umgebung sind. Verwenden Sie diese Basisarchitektur zu Ihrem Vorteil - das heißt Apache ist der Multi-Threading-Manager -. Und ein verdammt gutes an dem

Es ist sehr einfach PHP-Setup in diesem Umfeld zu arbeiten.

  
      
  1. Stellen Sie max_execution_time = 0, damit Skripte indefinatly auszuführen
  2.   
  3. Stellen Sie ignore_user_abort = true Skripte zu ermöglichen, selbst nachdem die laufen   Client wurde abgebrochen
  4.   

Design-Leicht Einprozesssysteme REST Web-Services. Entwerfen Sie sie in einer Weise, dass es Ihnen egal ist, wenn sie solche zurück, wie in einer Warteschlange Typsystem. Das Schreiben in die Warteschlange ist Thread-sicher und aus der Warteschlange entfernt ist Thread-sicher, wenn sie mit einiger grundlegenden OS-Ebene mutexes getan.

, um die Web-Services "Forking" ist so einfach wie das Öffnen einer Datei:

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

Nicht nur ist dieser Ansatz multi-threaded, aber es ist von Natur aus so gut verteilt. Der Web-Service kann auf der ganzen Welt vor Ort oder entfernt sein. PHP ist sicherlich nicht.

Für ein Basissystem das einzige, was Sie zurückhält, ist die Anzahl der Threads, die Apache erlaubt. Andernfalls wird Ihr Code ist bereit, die Vorteile von Load-Balancing zu nehmen und all die anderen ordentlich Tricks, die Apache-Implementierungen voran zu bieten haben.

Zu oft, wenn Entwickler denken „multi-threaded“ sie denken „OMG ich umgehen müssen Gabeln und execs und wartet und PIDs“. Und wenn Sie Ihr System-Design, das Art und Weise - du hast recht, wird es sehr, sehr schnell kompliziert. Schritt zurück und verwenden, was gegeben ist. Sie haben Zugriff auf Verzeichnisse erhalten? Boom - du hast Warteschlangen. Sie können Web-Anrufe ausgeben? Boom - Sie haben einen Multi-Threaded (verteilten) App bekommen. Jetzt nur noch die Konzepte miteinander verschmelzen, wie Ihre Anwendung diktiert.

PHP nicht multi-threaded ist und, wenn Sie versuchen, es als solches zu zwingen, durch mehrere Datei Anrufe oder Forking, sind die Ergebnisse in der Regel suboptimal. Ich würde gegen diese lassen jedoch darauf schließen, wäre es möglich, so etwas wie dies mit einer Mischung aus js zu tun, php (wahrscheinlich nicht kräuseln wenn auch nur eine benutzerdefinierte PHP Datei-Stream ) und lange Polling

Es ist möglich, einen Blick in curl_multi_init ();

Nein, das ist nicht Fall. Es ist nicht möglich, da Download-Manager die Klasse aufrufen, die Download-5-mal behandelt - die PHP-Klasseninstanz ist.

Dies ist ein Beispielklasse Aufruf:

$tr = new teConnections();
$data = $tr->downloadManager(array('http', 'host', path', 'login', 'pass', 'port'), 'file name, compression, streaming); 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top