concurrent-downloads.php
34 lines
| 1 | <?php |
| 2 | |
| 3 | use WordPress\HttpClient\Client; |
| 4 | use WordPress\HttpClient\ClientEvent; |
| 5 | use WordPress\HttpClient\Request; |
| 6 | |
| 7 | require __DIR__ . '/vendor/autoload.php'; |
| 8 | |
| 9 | $requests = array( |
| 10 | new Request( 'https://wordpress.org/latest.zip' ), |
| 11 | new Request( 'https://raw.githubusercontent.com/wpaccessibility/a11y-theme-unit-test/master/a11y-theme-unit-test-data.xml' ), |
| 12 | ); |
| 13 | |
| 14 | $client = new Client(); |
| 15 | $client->enqueue( $requests ); |
| 16 | |
| 17 | while ( $client->await_next_event() ) { |
| 18 | $request = $client->get_request(); |
| 19 | echo 'Request ' . $request->id . ': ' . $client->get_event() . ' '; |
| 20 | switch ( $client->get_event() ) { |
| 21 | case Client::EVENT_BODY_CHUNK_AVAILABLE: |
| 22 | echo $request->response->received_bytes . '/' . $request->response->total_bytes . ' bytes received'; |
| 23 | file_put_contents( 'downloads/' . $request->id, $client->get_response_body_chunk(), FILE_APPEND ); |
| 24 | break; |
| 25 | case Client::EVENT_GOT_HEADERS: |
| 26 | case Client::EVENT_FINISHED: |
| 27 | break; |
| 28 | case Client::EVENT_FAILED: |
| 29 | echo '– ❌ Failed request to ' . $request->url . ' – ' . $request->error; |
| 30 | break; |
| 31 | } |
| 32 | echo "\n"; |
| 33 | } |
| 34 |