I want to fix errors and warnings in my error handler so that they don't get echo ed to the user. to prove that all errors were caught, I add the line $err_start to the error. this is currently a working (but simplified) snippet of my code (run it in a browser, not cli):
<?php set_error_handler('handle_errors'); test_curl(); function handle_errors($error_num, $error_str, $error_file, $error_line) { $err_start = 'caught error'; //to prove that the error has been properly caught die("$err_start $error_num, $error_str, $error_file, $error_line<br>"); } function test_curl() { $curl_multi_handle = curl_multi_init(); $curl_handle1 = curl_init('iamdooooooooooown.com'); curl_setopt($curl_handle1, CURLOPT_RETURNTRANSFER, true); curl_multi_add_handle($curl_multi_handle, $curl_handle1); $still_running = 1; while($still_running > 0) $multi_errors = curl_multi_exec($curl_multi_handle, $still_running); if($multi_errors != CURLM_OK) trigger_error("curl error [$multi_errors]: ".curl_error($curl_multi_handle), E_USER_ERROR); if(strlen(curl_error($curl_handle1))) trigger_error("curl error: [".curl_error($curl_handle1)."]", E_USER_ERROR); $curl_info = curl_getinfo($curl_handle1); //info for individual requests $content = curl_multi_getcontent($curl_handle1); curl_multi_remove_handle($curl_multi_handle, $curl_handle1); curl_close($curl_handle1); curl_multi_close($curl_multi_handle); } ?>
Please note that my complete code has several queries in parallel, however, the problem still appears in one query, as shown here. note also that the error handler shown in this code snippet is very simple - my actual error handler will not die on warning or notifications, so I donβt need to train me on this.
now, if I try and twist a host that is currently unavailable, I successfully fix the curl error and my script dies with
caught error 256, curl error: [Couldn't resolve host 'iamdooooooooooown.com'], /var/www/proj/test_curl.php, 18
however, the following warning does not fall into my error handler function and on the echo ed page:
Warning: (null)(): 3 is not a valid cURL handle resource in Unknown on line 0
I would like to fix this warning in my error handler so that I can register it for later control.
One thing I noticed is that the warning only appears when the curl code is inside the function - it does not happen when the code is at the highest level of visibility. Is it possible that one of the curved globals (for example, CURLM_OK ) is not available within the test_curl() function?
I am using PHP Version 5.3.2-1ubuntu4.19
edits
- updated the code snippet to fully demonstrate the error.
- an unprotected warning appears only if inside a function or class method