public function testCurlCallbackAddedAfter() { $delete_before_send_called = false; $delete_success_called = false; $delete_error_called = false; $delete_complete_called = false; $multi_curl = new MultiCurl(); $multi_curl->addDelete(Test::TEST_URL); $multi_curl->beforeSend(function ($instance) use(&$delete_before_send_called) { $delete_before_send_called = true; }); $multi_curl->success(function ($instance) use(&$delete_success_called) { $delete_success_called = true; }); $multi_curl->error(function ($instance) use(&$delete_error_called) { $delete_error_called = true; }); $multi_curl->complete(function ($instance) use(&$delete_complete_called) { $delete_complete_called = true; }); $multi_curl->start(); $this->assertTrue($delete_before_send_called); $this->assertTrue($delete_success_called); $this->assertFalse($delete_error_called); $this->assertTrue($delete_complete_called); $download_before_send_called = false; $download_success_called = false; $download_error_called = false; $download_complete_called = false; $download_file_path = tempnam('/tmp', 'php-curl-class.'); $multi_curl = new MultiCurl(); $multi_curl->addDownload(Test::TEST_URL, $download_file_path); $multi_curl->beforeSend(function ($instance) use(&$download_before_send_called) { $download_before_send_called = true; }); $multi_curl->success(function ($instance) use(&$download_success_called) { $download_success_called = true; }); $multi_curl->error(function ($instance) use(&$download_error_called) { $download_error_called = true; }); $multi_curl->complete(function ($instance) use(&$download_complete_called) { $download_complete_called = true; }); $multi_curl->start(); $this->assertTrue($download_before_send_called); $this->assertTrue($download_success_called); $this->assertFalse($download_error_called); $this->assertTrue($download_complete_called); $this->assertTrue(unlink($download_file_path)); $get_before_send_called = false; $get_success_called = false; $get_error_called = false; $get_complete_called = false; $multi_curl = new MultiCurl(); $multi_curl->addGet(Test::TEST_URL); $multi_curl->beforeSend(function ($instance) use(&$get_before_send_called) { $get_before_send_called = true; }); $multi_curl->success(function ($instance) use(&$get_success_called) { $get_success_called = true; }); $multi_curl->error(function ($instance) use(&$get_error_called) { $get_error_called = true; }); $multi_curl->complete(function ($instance) use(&$get_complete_called) { $get_complete_called = true; }); $multi_curl->start(); $this->assertTrue($get_before_send_called); $this->assertTrue($get_success_called); $this->assertFalse($get_error_called); $this->assertTrue($get_complete_called); $head_before_send_called = false; $head_success_called = false; $head_error_called = false; $head_complete_called = false; $multi_curl = new MultiCurl(); $multi_curl->addHead(Test::TEST_URL); $multi_curl->beforeSend(function ($instance) use(&$head_before_send_called) { $head_before_send_called = true; }); $multi_curl->success(function ($instance) use(&$head_success_called) { $head_success_called = true; }); $multi_curl->error(function ($instance) use(&$head_error_called) { $head_error_called = true; }); $multi_curl->complete(function ($instance) use(&$head_complete_called) { $head_complete_called = true; }); $multi_curl->start(); $this->assertTrue($head_before_send_called); $this->assertTrue($head_success_called); $this->assertFalse($head_error_called); $this->assertTrue($head_complete_called); $options_before_send_called = false; $options_success_called = false; $options_error_called = false; $options_complete_called = false; $multi_curl = new MultiCurl(); $multi_curl->addOptions(Test::TEST_URL); $multi_curl->beforeSend(function ($instance) use(&$options_before_send_called) { $options_before_send_called = true; }); $multi_curl->success(function ($instance) use(&$options_success_called) { $options_success_called = true; }); $multi_curl->error(function ($instance) use(&$options_error_called) { $options_error_called = true; }); $multi_curl->complete(function ($instance) use(&$options_complete_called) { $options_complete_called = true; }); $multi_curl->start(); $this->assertTrue($options_before_send_called); $this->assertTrue($options_success_called); $this->assertFalse($options_error_called); $this->assertTrue($options_complete_called); $patch_before_send_called = false; $patch_success_called = false; $patch_error_called = false; $patch_complete_called = false; $multi_curl = new MultiCurl(); $multi_curl->addPatch(Test::TEST_URL); $multi_curl->beforeSend(function ($instance) use(&$patch_before_send_called) { $patch_before_send_called = true; }); $multi_curl->success(function ($instance) use(&$patch_success_called) { $patch_success_called = true; }); $multi_curl->error(function ($instance) use(&$patch_error_called) { $patch_error_called = true; }); $multi_curl->complete(function ($instance) use(&$patch_complete_called) { $patch_complete_called = true; }); $multi_curl->start(); $this->assertTrue($patch_before_send_called); $this->assertTrue($patch_success_called); $this->assertFalse($patch_error_called); $this->assertTrue($patch_complete_called); $post_before_send_called = false; $post_success_called = false; $post_error_called = false; $post_complete_called = false; $multi_curl = new MultiCurl(); $multi_curl->addPost(Test::TEST_URL); $multi_curl->beforeSend(function ($instance) use(&$post_before_send_called) { $post_before_send_called = true; }); $multi_curl->success(function ($instance) use(&$post_success_called) { $post_success_called = true; }); $multi_curl->error(function ($instance) use(&$post_error_called) { $post_error_called = true; }); $multi_curl->complete(function ($instance) use(&$post_complete_called) { $post_complete_called = true; }); $multi_curl->start(); $this->assertTrue($post_before_send_called); $this->assertTrue($post_success_called); $this->assertFalse($post_error_called); $this->assertTrue($post_complete_called); $put_before_send_called = false; $put_success_called = false; $put_error_called = false; $put_complete_called = false; $multi_curl = new MultiCurl(); $multi_curl->addPut(Test::TEST_URL); $multi_curl->beforeSend(function ($instance) use(&$put_before_send_called) { $put_before_send_called = true; }); $multi_curl->success(function ($instance) use(&$put_success_called) { $put_success_called = true; }); $multi_curl->error(function ($instance) use(&$put_error_called) { $put_error_called = true; }); $multi_curl->complete(function ($instance) use(&$put_complete_called) { $put_complete_called = true; }); $multi_curl->start(); $this->assertTrue($put_before_send_called); $this->assertTrue($put_success_called); $this->assertFalse($put_error_called); $this->assertTrue($put_complete_called); }
use Curl\MultiCurl; $server_count = 10; $urls = array(); $port = 8000; for ($i = 0; $i < $server_count; $i++) { $port += 1; $urls[] = 'http://localhost:' . $port . '/'; } $multi_curl = new MultiCurl(); $success = 0; $error = 0; $complete = 0; $multi_curl->success(function ($instance) use(&$success) { $success += 1; }); $multi_curl->error(function ($instance) use(&$error) { $error += 1; }); $multi_curl->complete(function ($instance) use(&$complete) { $complete += 1; }); $limit = 1000; for ($i = 0; $i < $limit; $i++) { $url = $urls[mt_rand(0, count($urls) - 1)]; $multi_curl->addGet($url); } $multi_curl->start(); echo 'complete: ' . $complete . "\n"; echo 'success: ' . $success . "\n"; echo 'error: ' . $error . "\n"; echo 'done' . "\n";
<?php require __DIR__ . '/vendor/autoload.php'; use Curl\Curl; use Curl\MultiCurl; $multi_curl = new MultiCurl(); $multi_curl->success(function ($instance) { echo 'call to "' . $instance->url . '" was successful.' . "\n"; echo 'response: ' . $instance->response . "\n"; }); $multi_curl->error(function ($instance) { echo 'call to "' . $instance->url . '" was unsuccessful.' . "\n"; echo 'error code: ' . $instance->errorCode . "\n"; echo 'error message: ' . $instance->errorMessage . "\n"; }); $multi_curl->complete(function ($instance) { echo 'call completed' . "\n"; }); $multi_curl->addGet('https://www.google.com/search', array('q' => 'hello world')); $multi_curl->addGet('https://duckduckgo.com/', array('q' => 'hello world')); $multi_curl->addGet('https://www.bing.com/search', array('q' => 'hello world')); $multi_curl->start();
public function testCurlCallbackOverride() { $this->markTestSkipped('Callbacks not permitted at this time. SugarCRM disallows the use of call_user_func[_array]'); $multi_curl = new MultiCurl(); $multi_curl->beforeSend(function () { PHPUnit_Framework_Assert::assertFalse(true); }); $multi_curl->success(function () { PHPUnit_Framework_Assert::assertFalse(true); }); $multi_curl->error(function () { PHPUnit_Framework_Assert::assertFalse(true); }); $multi_curl->complete(function () { PHPUnit_Framework_Assert::assertFalse(true); }); $delete_before_send_called = false; $delete_success_called = false; $delete_error_called = false; $delete_complete_called = false; $delete = $multi_curl->addDelete(Test::TEST_URL); $delete->beforeSend(function ($instance) use(&$delete_before_send_called) { $delete_before_send_called = true; }); $delete->success(function ($instance) use(&$delete_success_called) { $delete_success_called = true; }); $delete->error(function ($instance) use(&$delete_error_called) { $delete_error_called = true; }); $delete->complete(function ($instance) use(&$delete_complete_called) { $delete_complete_called = true; }); $download_before_send_called = false; $download_success_called = false; $download_error_called = false; $download_complete_called = false; $download_file_path = tempnam('/tmp', 'php-curl-class.'); $download = $multi_curl->addDownload(Test::TEST_URL, $download_file_path); $download->beforeSend(function ($instance) use(&$download_before_send_called) { $download_before_send_called = true; }); $download->success(function ($instance) use(&$download_success_called) { $download_success_called = true; }); $download->error(function ($instance) use(&$download_error_called) { $download_error_called = true; }); $download->complete(function ($instance) use(&$download_complete_called) { $download_complete_called = true; }); $get_before_send_called = false; $get_success_called = false; $get_error_called = false; $get_complete_called = false; $get = $multi_curl->addGet(Test::TEST_URL); $get->beforeSend(function ($instance) use(&$get_before_send_called) { $get_before_send_called = true; }); $get->success(function ($instance) use(&$get_success_called) { $get_success_called = true; }); $get->error(function ($instance) use(&$get_error_called) { $get_error_called = true; }); $get->complete(function ($instance) use(&$get_complete_called) { $get_complete_called = true; }); $head_before_send_called = false; $head_success_called = false; $head_error_called = false; $head_complete_called = false; $head = $multi_curl->addHead(Test::TEST_URL); $head->beforeSend(function ($instance) use(&$head_before_send_called) { $head_before_send_called = true; }); $head->success(function ($instance) use(&$head_success_called) { $head_success_called = true; }); $head->error(function ($instance) use(&$head_error_called) { $head_error_called = true; }); $head->complete(function ($instance) use(&$head_complete_called) { $head_complete_called = true; }); $options_before_send_called = false; $options_success_called = false; $options_error_called = false; $options_complete_called = false; $options = $multi_curl->addOptions(Test::TEST_URL); $options->beforeSend(function ($instance) use(&$options_before_send_called) { $options_before_send_called = true; }); $options->success(function ($instance) use(&$options_success_called) { $options_success_called = true; }); $options->error(function ($instance) use(&$options_error_called) { $options_error_called = true; }); $options->complete(function ($instance) use(&$options_complete_called) { $options_complete_called = true; }); $patch_before_send_called = false; $patch_success_called = false; $patch_error_called = false; $patch_complete_called = false; $patch = $multi_curl->addPatch(Test::TEST_URL); $patch->beforeSend(function ($instance) use(&$patch_before_send_called) { $patch_before_send_called = true; }); $patch->success(function ($instance) use(&$patch_success_called) { $patch_success_called = true; }); $patch->error(function ($instance) use(&$patch_error_called) { $patch_error_called = true; }); $patch->complete(function ($instance) use(&$patch_complete_called) { $patch_complete_called = true; }); $post_before_send_called = false; $post_success_called = false; $post_error_called = false; $post_complete_called = false; $post = $multi_curl->addPost(Test::TEST_URL); $post->beforeSend(function ($instance) use(&$post_before_send_called) { $post_before_send_called = true; }); $post->success(function ($instance) use(&$post_success_called) { $post_success_called = true; }); $post->error(function ($instance) use(&$post_error_called) { $post_error_called = true; }); $post->complete(function ($instance) use(&$post_complete_called) { $post_complete_called = true; }); $put_before_send_called = false; $put_success_called = false; $put_error_called = false; $put_complete_called = false; $put = $multi_curl->addPut(Test::TEST_URL); $put->beforeSend(function ($instance) use(&$put_before_send_called) { $put_before_send_called = true; }); $put->success(function ($instance) use(&$put_success_called) { $put_success_called = true; }); $put->error(function ($instance) use(&$put_error_called) { $put_error_called = true; }); $put->complete(function ($instance) use(&$put_complete_called) { $put_complete_called = true; }); $multi_curl->start(); $this->assertTrue($delete_before_send_called); $this->assertTrue($delete_success_called); $this->assertFalse($delete_error_called); $this->assertTrue($delete_complete_called); $this->assertTrue($download_before_send_called); $this->assertTrue($download_success_called); $this->assertFalse($download_error_called); $this->assertTrue($download_complete_called); $this->assertTrue(unlink($download_file_path)); $this->assertTrue($get_before_send_called); $this->assertTrue($get_success_called); $this->assertFalse($get_error_called); $this->assertTrue($get_complete_called); $this->assertTrue($head_before_send_called); $this->assertTrue($head_success_called); $this->assertFalse($head_error_called); $this->assertTrue($head_complete_called); $this->assertTrue($options_before_send_called); $this->assertTrue($options_success_called); $this->assertFalse($options_error_called); $this->assertTrue($options_complete_called); $this->assertTrue($patch_before_send_called); $this->assertTrue($patch_success_called); $this->assertFalse($patch_error_called); $this->assertTrue($patch_complete_called); $this->assertTrue($post_before_send_called); $this->assertTrue($post_success_called); $this->assertFalse($post_error_called); $this->assertTrue($post_complete_called); $this->assertTrue($put_before_send_called); $this->assertTrue($put_success_called); $this->assertFalse($put_error_called); $this->assertTrue($put_complete_called); }