Detaches an easy handle from a multi-handle. This guide demonstrates its use in PHP code and explains when the result or side effect needs extra checks.
What It Does
Detaches an easy handle from a multi-handle.
Syntax and Parameters
The examples below show a real call to curl_multi_remove_handle with suitable arguments. Read the function call in context: its connection, handle, input data or other prerequisites are created before use.
Requirements: cURL extension; HTTP client and transfer-handling tools.
Example 1: Core Behavior
The first case demonstrates the precise handle or result type.
<?php
$mh = curl_multi_init();
$handles = [];
foreach (['health', 'catalog'] as $path) {
$ch = curl_init('https://api.example.test/' . $path);
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 4]);
curl_multi_add_handle($mh, $ch);
$handles[] = $ch;
}
$removed = curl_multi_remove_handle($mh, $handles[0]);
echo $removed === CURLM_OK ? "Detached" : "Error";
Observe the returned value or changed resource state. A successful function call can still require additional checks before a higher-level operation is considered successful.
Example 2: Alternative or Failure Case
The second case checks behavior under a different configuration or request.
<?php
$mh = curl_multi_init();
$handles = [];
foreach (['health', 'catalog'] as $path) {
$ch = curl_init('https://api.example.test/' . $path);
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 5]);
curl_multi_add_handle($mh, $ch);
$handles[] = $ch;
}
$removed = curl_multi_remove_handle($mh, $handles[0]);
echo $removed === CURLM_OK ? "Detached" : "Error";
Compare the different inputs, environment assumptions or result checks. Do not use a transport-level success value as proof that all business-level requirements were met.
Practical Example: Applying the Rule
The practical case shows how to inspect the operation outcome instead of assuming success.
<?php
$mh = curl_multi_init();
$handles = [];
foreach (['health', 'catalog'] as $path) {
$ch = curl_init('https://api.example.test/' . $path);
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 6]);
curl_multi_add_handle($mh, $ch);
$handles[] = $ch;
}
$removed = curl_multi_remove_handle($mh, $handles[0]);
echo $removed === CURLM_OK ? "Detached" : "Error";
In an application, convert low-level failures into controlled responses and log only non-sensitive diagnostic context.
Important Behavior and Edge Cases
Call this after its result has been collected; the easy handle can be reused.
TLS validation, bounded timeouts and a destination allowlist are essential for network requests involving potentially untrusted targets.
Comparison with Related Functions or Patterns
| Approach | When it differs |
|---|---|
| curl_multi_remove_handle | Detaches an easy handle from a multi-handle. |
| Related API or pattern | curl_multi_close affects the multi-handle itself. |
Common Beginner Mistakes
| Mistake | Correct approach |
|---|---|
| Failing to advance or clean up handles in the multi-transfer event loop | Call this after its result has been collected; the easy handle can be reused. |
| Substituting a related API without checking its semantics | curl_multi_close affects the multi-handle itself. |
Key Takeaways
- Detaches an easy handle from a multi-handle.
- Call this after its result has been collected; the easy handle can be reused.
- curl_multi_close affects the multi-handle itself.
Select this API or pattern based on its documented behavior and the trust boundaries in your own application, and test all external integrations against their actual deployments.