70 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * @package   FOF
 | |
|  * @copyright Copyright (c)2010-2021 Nicholas K. Dionysopoulos / Akeeba Ltd
 | |
|  * @license   GNU General Public License version 2, or later
 | |
|  */
 | |
| 
 | |
| namespace FOF30\Cli\Traits;
 | |
| 
 | |
| defined('_JEXEC') || die;
 | |
| 
 | |
| /**
 | |
|  * CGI Mode detection and workaround
 | |
|  *
 | |
|  * Some hosts only give access to the PHP CGI binary, even for running CLI scripts. While problematic, it mostly works.
 | |
|  * This trait detects PHP-CGI and manipulates $_GET in such a way that we populate the $argv and $argc global variables
 | |
|  * in the same way that PHP-CLI would set them. This allows the CLI input object to work. Moreover, we unset the PHP
 | |
|  * execution time limit, if possible, to prevent accidental timeouts.
 | |
|  *
 | |
|  * @package FOF30\Cli\Traits
 | |
|  */
 | |
| trait CGIModeAware
 | |
| {
 | |
| 	/**
 | |
| 	 * Detect if we are running under CGI mode. In this case it populates the global $argv and $argc parameters off the
 | |
| 	 * CGI input ($_GET superglobal).
 | |
| 	 */
 | |
| 	private function detectAndWorkAroundCGIMode()
 | |
| 	{
 | |
| 		// This code only executes when running under CGI. So let's detect it first.
 | |
| 		$cgiMode = (!defined('STDOUT') || !defined('STDIN') || !isset($_SERVER['argv']));
 | |
| 
 | |
| 		if (!$cgiMode)
 | |
| 		{
 | |
| 			return;
 | |
| 		}
 | |
| 
 | |
| 		// CGI mode has a time limit. Unset it to prevent timeouts.
 | |
| 		if (function_exists('set_time_limit'))
 | |
| 		{
 | |
| 			set_time_limit(0);
 | |
| 		}
 | |
| 
 | |
| 		// Convert $_GET into the appropriate $argv representation. This allows Input\Cli to work under PHP-CGI.
 | |
| 		$query = "";
 | |
| 
 | |
| 		if (!empty($_GET))
 | |
| 		{
 | |
| 			foreach ($_GET as $k => $v)
 | |
| 			{
 | |
| 				$query .= " $k";
 | |
| 				if ($v != "")
 | |
| 				{
 | |
| 					$query .= "=$v";
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		$query = ltrim($query);
 | |
| 
 | |
| 		global $argv, $argc;
 | |
| 
 | |
| 		$argv = explode(' ', $query);
 | |
| 		$argc = count($argv);
 | |
| 
 | |
| 		$_SERVER['argv'] = $argv;
 | |
| 	}
 | |
| 
 | |
| }
 |