瀏覽代碼

actualize_script compatible multi-utilisateur

* Messages plus verbeux dans actualize_script
* Ajout d'un message syslog lorsque SimplePie fait une requête HTTP
* Minz_Session ne fermait pas les sessions complètement.
* Nouvelle option dans Minz_Dispatcher et Minz_FrontController  pour ne
pas utiliser ob_gzhandler.
Contribue à https://github.com/marienfressinaud/FreshRSS/issues/126
Alexandre Alapetite 12 年之前
父節點
當前提交
b4c477ca41

+ 26 - 10
app/actualize_script.php

@@ -3,24 +3,40 @@ require(dirname(__FILE__) . '/../constants.php');
 
 //TODO: check if already running
 
-$_GET['c'] = 'feed';
-$_GET['a'] = 'actualize';
-$_GET['force'] = true;
-$_SERVER['HTTP_HOST'] = '';
-
 require(LIB_PATH . '/lib_rss.php');	//Includes class autoloader
 
-$freshRSS = new FreshRSS ();
+session_cache_limiter('');
+ob_implicit_flush(false);
+ob_start();
+echo 'Results: ', "\n";	//Buffered
 
 $users = listUsers();
 shuffle($users);
 
-foreach ($users as $user) {
+foreach ($users as $myUser) {
+	syslog(LOG_INFO, 'FreshRSS actualize ' . $myUser);
+	fwrite(STDOUT, 'Actualize ' . $myUser . "...\n");	//Unbuffered
+	echo $myUser, ' ';	//Buffered
+
+	$_GET['c'] = 'feed';
+	$_GET['a'] = 'actualize';
+	$_GET['ajax'] = 1;
+	$_GET['force'] = true;
+	$_SERVER['HTTP_HOST'] = '';
+
+	$freshRSS = new FreshRSS();
+	$freshRSS->_useOb(false);
+
 	Minz_Session::init('FreshRSS');
-	Minz_Session::_param('currentUser', $user);
+	Minz_Session::_param('currentUser', $myUser);
+
 	$freshRSS->init();
 	$freshRSS->run();
-	//invalidateHttpCache();
-	touch(LOG_PATH . '/' . $user . '.log');
+
+	invalidateHttpCache();
 	Minz_Session::unset_session(true);
+	Minz_ModelPdo::clean();
 }
+syslog(LOG_INFO, 'FreshRSS actualize done.');
+ob_end_flush();
+fwrite(STDOUT, 'Done.' . "\n");

+ 1 - 1
app/views/feed/actualize.phtml

@@ -1 +1 @@
-OK
+OK

+ 17 - 6
lib/Minz/Dispatcher.php

@@ -40,19 +40,26 @@ class Minz_Dispatcher {
 	 * Remplit le body de Response à partir de la Vue
 	 * @exception Minz_Exception
 	 */
-	public function run () {
+	public function run ($ob = true) {
 		$cache = new Minz_Cache();
 		// Le ob_start est dupliqué : sans ça il y a un bug sous Firefox
 		// ici on l'appelle avec 'ob_gzhandler', après sans.
 		// Vraisemblablement la compression fonctionne mais c'est sale
 		// J'ignore les effets de bord :(
-		ob_start ('ob_gzhandler');
+		if ($ob) {
+			ob_start ('ob_gzhandler');
+		}
 
 		if (Minz_Cache::isEnabled () && !$cache->expired ()) {
-			ob_start ();
+			if ($ob) {
+				ob_start ();
+			}
 			$cache->render ();
-			$text = ob_get_clean();
+			if ($ob) {
+				$text = ob_get_clean();
+			}
 		} else {
+			$text = '';	//TODO: Clean this code
 			while (Minz_Request::$reseted) {
 				Minz_Request::$reseted = false;
 
@@ -67,9 +74,13 @@ class Minz_Dispatcher {
 					$this->controller->lastAction ();
 
 					if (!Minz_Request::$reseted) {
-						ob_start ();
+						if ($ob) {
+							ob_start ();
+						}
 						$this->controller->view ()->build ();
-						$text = ob_get_clean();
+						if ($ob) {
+							$text = ob_get_clean();
+						}
 					}
 				} catch (Minz_Exception $e) {
 					throw $e;

+ 14 - 1
lib/Minz/FrontController.php

@@ -26,6 +26,8 @@ class Minz_FrontController {
 	protected $dispatcher;
 	protected $router;
 
+	private $useOb = true;
+
 	/**
 	 * Constructeur
 	 * Initialise le router et le dispatcher
@@ -61,7 +63,7 @@ class Minz_FrontController {
 	 */
 	public function run () {
 		try {
-			$this->dispatcher->run ();
+			$this->dispatcher->run ($this->useOb);
 			Minz_Response::send ();
 		} catch (Minz_Exception $e) {
 			try {
@@ -94,4 +96,15 @@ class Minz_FrontController {
 		}
 		exit ('### Application problem ###<br />'."\n".$txt);
 	}
+
+	public function useOb() {
+		return $this->useOb;
+	}
+
+	/**
+	 * Use ob_start('ob_gzhandler') or not.
+	 */
+	public function _useOb($ob) {
+		return $this->useOb = (bool)$ob;
+	}
 }

+ 5 - 0
lib/Minz/ModelPdo.php

@@ -93,6 +93,11 @@ class Minz_ModelPdo {
 		$res = $stm->fetchAll(PDO::FETCH_COLUMN, 0);
 		return $res[0];
 	}
+
+	public static function clean() {
+		self::$sharedBd = null;
+		self::$sharedPrefix = '';
+	}
 }
 
 class FreshPDO extends PDO {

+ 1 - 1
lib/Minz/Session.php

@@ -60,7 +60,7 @@ class Minz_Session {
 	public static function unset_session ($force = false) {
 		$language = self::param ('language');
 
-		session_unset ();
+		session_destroy();
 		self::$session = array ();
 
 		if (!$force) {

+ 1 - 0
lib/SimplePie/SimplePie/File.php

@@ -77,6 +77,7 @@ class SimplePie_File
 		$this->useragent = $useragent;
 		if (preg_match('/^http(s)?:\/\//i', $url))
 		{
+			syslog(LOG_INFO, 'SimplePie GET ' . $url);	//FreshRSS
 			if ($useragent === null)
 			{
 				$useragent = ini_get('user_agent');