X-Git-Url: http://git.cyclocoop.org/?p=ptitvelo%2Fweb%2Fwww.git;a=blobdiff_plain;f=www%2Fecrire%2Finc%2Fqueue.php;h=2639568851d2c6e08a770d2c9bf0445aca3bccde;hp=3307dba4d4ea661e83727b5f1bbae9c7da87754f;hb=e847eea4a82a7396dd0abf860f9b30d654f38629;hpb=dae7b78d26d32fb23e8c524f795bbaf40e685c6a diff --git a/www/ecrire/inc/queue.php b/www/ecrire/inc/queue.php index 3307dba..2639568 100644 --- a/www/ecrire/inc/queue.php +++ b/www/ecrire/inc/queue.php @@ -3,7 +3,7 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2012 * + * Copyright (c) 2001-2014 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * @@ -268,6 +268,7 @@ function queue_start_job($row){ * * @param array $force_jobs * list of id_job to execute when provided + * @return null|false */ function queue_schedule($force_jobs = null){ $time = time(); @@ -283,6 +284,8 @@ function queue_schedule($force_jobs = null){ } include_spip('base/abstract_sql'); + // on ne peut rien faire si pas de connexion SQL + if (!spip_connect()) return false; if (!defined('_JQ_MAX_JOBS_TIME_TO_EXECUTE')){ $max_time = ini_get('max_execution_time')/2; @@ -343,6 +346,7 @@ function queue_schedule($force_jobs = null){ else queue_update_next_job_time(); + return true; } /** @@ -514,42 +518,59 @@ function queue_affichage_cron(){ $url_cron = generer_url_action('cron','',false,true); - // Si fsockopen est possible, on lance le cron via un socket - // en asynchrone - if(function_exists('fsockopen')){ - $parts=parse_url($url_cron); - - $fp = @fsockopen($parts['host'], - isset($parts['port'])?$parts['port']:80, - $errno, $errstr, 30); - - if ($fp) { - $query = $parts['path'].($parts['query']?"?".$parts['query']:""); - $out = "GET ".$query." HTTP/1.1\r\n"; - $out.= "Host: ".$parts['host']."\r\n"; - $out.= "Connection: Close\r\n\r\n"; - fwrite($fp, $out); - fclose($fp); + if (!defined('_HTML_BG_CRON_FORCE') OR !_HTML_BG_CRON_FORCE){ + + // methode la plus rapide : + // Si fsockopen est possible, on lance le cron via un socket en asynchrone + // si fsockopen echoue (disponibilite serveur, firewall) on essaye pas cURL + // car on a toutes les chances d'echouer pareil mais sans moyen de le savoir + // on passe direct a la methode background-image + if(function_exists('fsockopen')){ + $parts=parse_url($url_cron); + + switch ($parts['scheme']) { + case 'https': + $scheme = 'ssl://'; + $port = 443; + break; + case 'http': + default: + $scheme = ''; + $port = 80; + } + + $fp = @fsockopen($scheme.$parts['host'], + isset($parts['port'])?$parts['port']:$port, + $errno, $errstr, 1); + + if ($fp) { + $query = $parts['path'].($parts['query']?"?".$parts['query']:""); + $out = "GET ".$query." HTTP/1.1\r\n"; + $out.= "Host: ".$parts['host']."\r\n"; + $out.= "Connection: Close\r\n\r\n"; + fwrite($fp, $out); + fclose($fp); + return $texte; + } + } + // si fsockopen n'est pas dispo on essaye cURL : + // lancer le cron par un cURL asynchrone si cURL est present + elseif (function_exists("curl_init")){ + //setting the curl parameters. + $ch = curl_init($url_cron); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + // cf bug : http://www.php.net/manual/en/function.curl-setopt.php#104597 + curl_setopt($ch, CURLOPT_NOSIGNAL, 1); + // valeur mini pour que la requete soit lancee + curl_setopt($ch, CURLOPT_TIMEOUT_MS, 100); + // lancer + curl_exec($ch); + // fermer + curl_close($ch); return $texte; } } - // ici lancer le cron par un CURL asynchrone si CURL est present - if (function_exists("curl_init")){ - //setting the curl parameters. - $ch = curl_init($url_cron); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); - // cf bug : http://www.php.net/manual/en/function.curl-setopt.php#104597 - curl_setopt($ch, CURLOPT_NOSIGNAL, 1); - // valeur mini pour que la requete soit lancee - curl_setopt($ch, CURLOPT_TIMEOUT_MS, 100); - // lancer - curl_exec($ch); - // fermer - curl_close($ch); - return $texte; - } - // si deja force, on retourne sans rien if (defined('_DIRECT_CRON_FORCE')) return $texte;