58 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
		
		
			
		
	
	
			58 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * This file is part of the Monolog package.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * (c) Jordi Boggiano <j.boggiano@seld.be>
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * For the full copyright and license information, please view the LICENSE
							 | 
						||
| 
								 | 
							
								 * file that was distributed with this source code.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace Monolog\Handler\Curl;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class Util
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    private static $retriableErrorCodes = array(
							 | 
						||
| 
								 | 
							
								        CURLE_COULDNT_RESOLVE_HOST,
							 | 
						||
| 
								 | 
							
								        CURLE_COULDNT_CONNECT,
							 | 
						||
| 
								 | 
							
								        CURLE_HTTP_NOT_FOUND,
							 | 
						||
| 
								 | 
							
								        CURLE_READ_ERROR,
							 | 
						||
| 
								 | 
							
								        CURLE_OPERATION_TIMEOUTED,
							 | 
						||
| 
								 | 
							
								        CURLE_HTTP_POST_ERROR,
							 | 
						||
| 
								 | 
							
								        CURLE_SSL_CONNECT_ERROR,
							 | 
						||
| 
								 | 
							
								    );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Executes a CURL request with optional retries and exception on failure
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param  resource          $ch curl handler
							 | 
						||
| 
								 | 
							
								     * @throws \RuntimeException
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function execute($ch, $retries = 5, $closeAfterDone = true)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        while ($retries--) {
							 | 
						||
| 
								 | 
							
								            if (curl_exec($ch) === false) {
							 | 
						||
| 
								 | 
							
								                $curlErrno = curl_errno($ch);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if (false === in_array($curlErrno, self::$retriableErrorCodes, true) || !$retries) {
							 | 
						||
| 
								 | 
							
								                    $curlError = curl_error($ch);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    if ($closeAfterDone) {
							 | 
						||
| 
								 | 
							
								                        curl_close($ch);
							 | 
						||
| 
								 | 
							
								                    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    throw new \RuntimeException(sprintf('Curl error (code %s): %s', $curlErrno, $curlError));
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                continue;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if ($closeAfterDone) {
							 | 
						||
| 
								 | 
							
								                curl_close($ch);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            break;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |