]> git.mxchange.org Git - friendica.git/blobdiff - boot.php
Set the PHP requirements to php 5.4
[friendica.git] / boot.php
index 298010dd0d36cd6060aea172d73213a4f70bcb69..dea9b8e8cd955ed361473fd83ce961f91020336e 100644 (file)
--- a/boot.php
+++ b/boot.php
@@ -38,7 +38,7 @@ define ( 'FRIENDICA_PLATFORM',     'Friendica');
 define ( 'FRIENDICA_CODENAME',     'Asparagus');
 define ( 'FRIENDICA_VERSION',      '3.5-dev' );
 define ( 'DFRN_PROTOCOL_VERSION',  '2.23'    );
-define ( 'DB_UPDATE_VERSION',      1199      );
+define ( 'DB_UPDATE_VERSION',      1200      );
 
 /**
  * @brief Constant with a HTML line break.
@@ -386,6 +386,20 @@ define ( 'GRAVITY_LIKE',         3);
 define ( 'GRAVITY_COMMENT',      6);
 /* @}*/
 
+/**
+ * @name Priority
+ *
+ * Process priority for the worker
+ * @{
+ */
+define('PRIORITY_UNDEFINED',  0);
+define('PRIORITY_CRITICAL',  10);
+define('PRIORITY_HIGH',      20);
+define('PRIORITY_MEDIUM',    30);
+define('PRIORITY_LOW',       40);
+define('PRIORITY_NEGLIGIBLE',50);
+/* @}*/
+
 
 // Normally this constant is defined - but not if "pcntl" isn't installed
 if (!defined("SIGTERM"))
@@ -560,6 +574,7 @@ class App {
 
                $this->performance["start"] = microtime(true);
                $this->performance["database"] = 0;
+               $this->performance["database_write"] = 0;
                $this->performance["network"] = 0;
                $this->performance["file"] = 0;
                $this->performance["rendering"] = 0;
@@ -1241,13 +1256,46 @@ class App {
                                        logger("killed stale process");
                                        // Calling a new instance
                                        if ($task != "")
-                                               proc_run('php', $task);
+                                               proc_run(PRIORITY_MEDIUM, $task);
                                }
                                return true;
                        }
                }
                return false;
        }
+
+       function proc_run($args) {
+
+               // Add the php path if it is a php call
+               if (count($args) && ($args[0] === 'php' OR is_int($args[0]))) {
+
+                       // If the last worker fork was less than 10 seconds before then don't fork another one.
+                       // This should prevent the forking of masses of workers.
+                       if (get_config("system", "worker")) {
+                               if ((time() - get_config("system", "proc_run_started")) < 10)
+                                       return;
+
+                               // Set the timestamp of the last proc_run
+                               set_config("system", "proc_run_started", time());
+                       }
+
+                       $args[0] = ((x($this->config,'php_path')) && (strlen($this->config['php_path'])) ? $this->config['php_path'] : 'php');
+               }
+
+               // add baseurl to args. cli scripts can't construct it
+               $args[] = $this->get_baseurl();
+
+               for($x = 0; $x < count($args); $x ++)
+                       $args[$x] = escapeshellarg($args[$x]);
+
+               $cmdline = implode($args," ");
+
+               if(get_config('system','proc_windows'))
+                       proc_close(proc_open('cmd /c start /b ' . $cmdline,array(),$foo,dirname(__FILE__)));
+               else
+                       proc_close(proc_open($cmdline." &",array(),$foo,dirname(__FILE__)));
+
+       }
 }
 
 /**
@@ -1363,7 +1411,7 @@ function check_db() {
                $build = DB_UPDATE_VERSION;
        }
        if($build != DB_UPDATE_VERSION)
-               proc_run('php', 'include/dbupdate.php');
+               proc_run(PRIORITY_CRITICAL, 'include/dbupdate.php');
 
 }
 
@@ -1651,7 +1699,9 @@ function login($register = false, $hiddens=false) {
  * @brief Used to end the current process, after saving session state.
  */
 function killme() {
-       session_write_close();
+       if (!get_app()->is_backend())
+               session_write_close();
+
        exit;
 }
 
@@ -1736,10 +1786,11 @@ function get_max_import_size() {
  * @brief Wrap calls to proc_close(proc_open()) and call hook
  *     so plugins can take part in process :)
  *
- * @param string $cmd program to run
+ * @param (string|integer) $cmd program to run or priority
  * 
  * next args are passed as $cmd command line
  * e.g.: proc_run("ls","-la","/tmp");
+ * or: proc_run(PRIORITY_HIGH, "include/notifier.php", "drop", $drop_id);
  *
  * @note $cmd and string args are surrounded with ""
  * 
@@ -1753,7 +1804,7 @@ function proc_run($cmd){
        $args = func_get_args();
 
        $newargs = array();
-       if(! count($args))
+       if (!count($args))
                return;
 
        // expand any arrays
@@ -1763,8 +1814,7 @@ function proc_run($cmd){
                        foreach($arg as $n) {
                                $newargs[] = $n;
                        }
-               }
-               else
+               } else
                        $newargs[] = $arg;
        }
 
@@ -1773,62 +1823,55 @@ function proc_run($cmd){
        $arr = array('args' => $args, 'run_cmd' => true);
 
        call_hooks("proc_run", $arr);
-       if(! $arr['run_cmd'])
+       if (!$arr['run_cmd'] OR !count($args))
                return;
 
-       if(count($args) && $args[0] === 'php') {
-
-               if (get_config("system", "worker")) {
-                       $argv = $args;
-                       array_shift($argv);
-
-                       $parameters = json_encode($argv);
-                       $found = q("SELECT `id` FROM `workerqueue` WHERE `parameter` = '%s'",
-                                       dbesc($parameters));
-
-                       if (!$found)
-                               q("INSERT INTO `workerqueue` (`parameter`, `created`, `priority`)
-                                                       VALUES ('%s', '%s', %d)",
-                                       dbesc($parameters),
-                                       dbesc(datetime_convert()),
-                                       intval(0));
+       if (!get_config("system", "worker") OR
+               (($args[0] != 'php') AND !is_int($args[0]))) {
+               $a->proc_run($args);
+               return;
+       }
 
-                       // Should we quit and wait for the poller to be called as a cronjob?
-                       if (get_config("system", "worker_dont_fork"))
-                               return;
+       if (is_int($args[0]))
+               $priority = $args[0];
+       else
+               $priority = PRIORITY_MEDIUM;
 
-                       // Checking number of workers
-                       $workers = q("SELECT COUNT(*) AS `workers` FROM `workerqueue` WHERE `executed` != '0000-00-00 00:00:00'");
+       $argv = $args;
+       array_shift($argv);
 
-                       // Get number of allowed number of worker threads
-                       $queues = intval(get_config("system", "worker_queues"));
+       $parameters = json_encode($argv);
+       $found = q("SELECT `id` FROM `workerqueue` WHERE `parameter` = '%s'",
+               dbesc($parameters));
 
-                       if ($queues == 0)
-                               $queues = 4;
+       if (!$found)
+               q("INSERT INTO `workerqueue` (`parameter`, `created`, `priority`)
+                       VALUES ('%s', '%s', %d)",
+                       dbesc($parameters),
+                       dbesc(datetime_convert()),
+                       intval($priority));
 
-                       // If there are already enough workers running, don't fork another one
-                       if ($workers[0]["workers"] >= $queues)
-                               return;
+       // Should we quit and wait for the poller to be called as a cronjob?
+       if (get_config("system", "worker_dont_fork"))
+               return;
 
-                       // Now call the poller to execute the jobs that we just added to the queue
-                       $args = array("php", "include/poller.php", "no_cron");
-               }
+       // Checking number of workers
+       $workers = q("SELECT COUNT(*) AS `workers` FROM `workerqueue` WHERE `executed` != '0000-00-00 00:00:00'");
 
-               $args[0] = ((x($a->config,'php_path')) && (strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
-       }
+       // Get number of allowed number of worker threads
+       $queues = intval(get_config("system", "worker_queues"));
 
-       // add baseurl to args. cli scripts can't construct it
-       $args[] = $a->get_baseurl();
+       if ($queues == 0)
+               $queues = 4;
 
-       for($x = 0; $x < count($args); $x ++)
-               $args[$x] = escapeshellarg($args[$x]);
+       // If there are already enough workers running, don't fork another one
+       if ($workers[0]["workers"] >= $queues)
+               return;
 
-       $cmdline = implode($args," ");
+       // Now call the poller to execute the jobs that we just added to the queue
+       $args = array("php", "include/poller.php", "no_cron");
 
-       if(get_config('system','proc_windows'))
-               proc_close(proc_open('cmd /c start /b ' . $cmdline,array(),$foo,dirname(__FILE__)));
-       else
-               proc_close(proc_open($cmdline." &",array(),$foo,dirname(__FILE__)));
+       $a->proc_run($args);
 }
 
 function current_theme(){
@@ -2253,7 +2296,7 @@ function current_load() {
        if (!is_array($load_arr))
                return false;
 
-       return max($load_arr);
+       return max($load_arr[0], $load_arr[1]);
 }
 
 /**