Skip to content
Extraits de code Groupes Projets
Valider 83c330ea rédigé par cerdic's avatar cerdic
Parcourir les fichiers

On modifie la signature de la fonction lance_requete : en cas d'echec elle...

On modifie la signature de la fonction lance_requete : en cas d'echec elle renvoie l'erreur generee si connue
Cela permet de ne pas tenter fopen quand fsockopen s'est soldee par un timeout (erreur=110), car ca genere systematiquement un double timeout tres penalisant
Deprecie l'usage de la globale inc_distant_allow_fopen qu'on laisse tout de meme ici pour le moment
parent b9b9d217
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -1031,17 +1031,21 @@ function init_http($method, $url, $refuse_gz = false, $referer = '', $datas = "" ...@@ -1031,17 +1031,21 @@ function init_http($method, $url, $refuse_gz = false, $referer = '', $datas = ""
if (@$t['query']) $path .= "?" . $t['query']; if (@$t['query']) $path .= "?" . $t['query'];
$f = lance_requete($method, $scheme, $user, $host, $path, $port, $noproxy, $refuse_gz, $referer, $datas, $vers, $date); $f = lance_requete($method, $scheme, $user, $host, $path, $port, $noproxy, $refuse_gz, $referer, $datas, $vers, $date);
if (!$f){ if (!$f OR !is_resource($f)){
// fallback : fopen // fallback : fopen si on a pas fait timeout dans lance_requete
if (!need_proxy($host) // ce qui correspond a $f===110
if ($f!==110
AND !need_proxy($host)
AND !_request('tester_proxy') AND !_request('tester_proxy')
AND (!isset($GLOBALS['inc_distant_allow_fopen']) OR $GLOBALS['inc_distant_allow_fopen'])){ AND (!isset($GLOBALS['inc_distant_allow_fopen']) OR $GLOBALS['inc_distant_allow_fopen'])){
$f = @fopen($url, "rb"); $f = @fopen($url, "rb");
spip_log("connexion vers $url par simple fopen"); spip_log("connexion vers $url par simple fopen");
$fopen = true; $fopen = true;
} else }
else {
// echec total
$f = false; $f = false;
// echec total }
} }
return array($f, $fopen); return array($f, $fopen);
...@@ -1074,7 +1078,7 @@ function init_http($method, $url, $refuse_gz = false, $referer = '', $datas = "" ...@@ -1074,7 +1078,7 @@ function init_http($method, $url, $refuse_gz = false, $referer = '', $datas = ""
* @param int|string $date * @param int|string $date
* timestamp pour entente If-Modified-Since * timestamp pour entente If-Modified-Since
* @return bool|resource * @return bool|resource
* false si echec * false|int si echec
* resource socket vers l'url demandee * resource socket vers l'url demandee
*/ */
function lance_requete($method, $scheme, $user, $host, $path, $port, $noproxy, $refuse_gz = false, $referer = '', $datas = "", $vers = "HTTP/1.0", $date = ''){ function lance_requete($method, $scheme, $user, $host, $path, $port, $noproxy, $refuse_gz = false, $referer = '', $datas = "", $vers = "HTTP/1.0", $date = ''){
...@@ -1100,14 +1104,19 @@ function lance_requete($method, $scheme, $user, $host, $path, $port, $noproxy, $ ...@@ -1100,14 +1104,19 @@ function lance_requete($method, $scheme, $user, $host, $path, $port, $noproxy, $
if (!($port = $t2['port'])) $port = 80; if (!($port = $t2['port'])) $port = 80;
if ($t2['user']) if ($t2['user'])
$proxy_user = base64_encode($t2['user'] . ":" . $t2['pass']); $proxy_user = base64_encode($t2['user'] . ":" . $t2['pass']);
} else }
else {
$first_host = $noproxy . $host; $first_host = $noproxy . $host;
}
if ($connect){ if ($connect){
$streamContext = stream_context_create(array('ssl' => array('verify_peer' => false, 'allow_self_signed' => true))); $streamContext = stream_context_create(array('ssl' => array('verify_peer' => false, 'allow_self_signed' => true)));
$f = @stream_socket_client("tcp://$first_host:$port", $nError, $sError, _INC_DISTANT_CONNECT_TIMEOUT, STREAM_CLIENT_CONNECT, $streamContext); $f = @stream_socket_client("tcp://$first_host:$port", $errno, $errstr, _INC_DISTANT_CONNECT_TIMEOUT, STREAM_CLIENT_CONNECT, $streamContext);
spip_log("Recuperer $path sur $first_host:$port par $f (via CONNECT)", "connect"); spip_log("Recuperer $path sur $first_host:$port par $f (via CONNECT)", "connect");
if (!$f) return false; if (!$f) {
spip_log("Erreur connexion $errno $errstr",_LOG_ERREUR);
return $errno;
}
stream_set_timeout($f, _INC_DISTANT_CONNECT_TIMEOUT); stream_set_timeout($f, _INC_DISTANT_CONNECT_TIMEOUT);
fputs($f, $connect); fputs($f, $connect);
...@@ -1131,11 +1140,11 @@ function lance_requete($method, $scheme, $user, $host, $path, $port, $noproxy, $ ...@@ -1131,11 +1140,11 @@ function lance_requete($method, $scheme, $user, $host, $path, $port, $noproxy, $
$ntry = 3; $ntry = 3;
do { do {
$f = @fsockopen($first_host, $port, $errno, $errstr, _INC_DISTANT_CONNECT_TIMEOUT); $f = @fsockopen($first_host, $port, $errno, $errstr, _INC_DISTANT_CONNECT_TIMEOUT);
} while(!$f AND $ntry-- AND sleep(1)); } while(!$f AND $ntry-- AND $errno!==110 AND sleep(1));
spip_log("Recuperer $path sur $first_host:$port par $f"); spip_log("Recuperer $path sur $first_host:$port par $f");
if (!$f) { if (!$f) {
spip_log("Erreur connexion $errno $errstr",_LOG_ERREUR); spip_log("Erreur connexion $errno $errstr",_LOG_ERREUR);
return false; return $errno;
} }
stream_set_timeout($f, _INC_DISTANT_CONNECT_TIMEOUT); stream_set_timeout($f, _INC_DISTANT_CONNECT_TIMEOUT);
} }
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter