STRIGANOV SERGEY: Software development.

Разработка программного обеспечения на: C++, T-SQL, VBS, JavaScript, PHP

Joomla 2.5: install packages from URL via proxy server ( JInstallerHelper )

Установка пакетов Joomla 2.5 через прокси-сервер.

Class JInstallerHelper.

Исправляем установку пакетов из URL - теперь она будет работать через прокси-сервер
( Когда сайт на Joomla работает во внутренней сети).

Для этого:
Добавим в файл configurations.php строки:

public $proxy_server ='192.168.0.1';  // Ваш прокси-сервер
public $proxy_port ='3128';  // порт Вашего прокси-сервера

В файле /libraries/joomla/installer/helper.php:
Добавим в начало функции downloadPackage  проверку - нужно ли работать через проси сервер.
Если указан адрес прокси сервера, то вызываем нашу новую функцию downloadPackageProxy и выходим.

public static function downloadPackage($url, $target = false)
	  {
	  $config = JFactory::getConfig();
	  $ps=$config->get('proxy_server');

	  if ( strlen($ps)>0)
	   {
	   $ret_val=JInstallerHelper::downloadPackageProxy($url, $target);
	   return $ret_val;
	   }

далее код функции без изменений 
 

В этом же файле /libraries/joomla/installer/helper.php:
Добавим в класс JInstallerHelper функцию downloadPackageProxy

public static function downloadPackageProxy($url, $target = false)
	{
		$config = JFactory::getConfig();

		// Capture PHP errors
		$php_errormsg = 'Error Unknown';
		$track_errors = ini_get('track_errors');
		ini_set('track_errors', true);

		// Set user agent
		$version = new JVersion;
		ini_set('user_agent', $version->getUserAgent('Installer'));
	
		$ps=$config->get('proxy_server');
		$pp=$config->get('proxy_port');
   
		$inputHandle = fsockopen($ps,$pp, $errno, $errstr); 
		$error = strstr($php_errormsg, 'failed to open stream:');
		if (!$inputHandle)
		{
			JError::raiseWarning(42, JText::sprintf('JLIB_INSTALLER_ERROR_DOWNLOAD_SERVER_CONNECT', $error));
			return false;
		} 
		
		$u =& JURI::getInstance( $url );  
		$h= $u->getHost();
    
		$contents = null;
		$header='';
		$header_complete = false;
		$line='';

    if (fwrite($inputHandle, "GET $url HTTP/1.0\r\nHost: $h\r\nProxy-Connection: Close\r\n\r\n")) 
    {        
        while (!feof($inputHandle)) 
        {             
             if ($header_complete==true) 
            	{
            	$contents.=fread($inputHandle, 4096); 
            	} 
            else
            	{ 
            	$line=fgets($inputHandle,128);
            	$header.=$line;
            	 if ($line=="\r\n") 
            		{
                	$header_complete = true;
            		} 
            	}                       	          
        }
    }
    
    $target=null;  
    $header_fields = explode("\r\n", $header);    
    $count_f = count($header_fields);
    
    for($fi=0;$fi<$count_f;$fi++)
        {   
      	    if(substr($header_fields[$fi], 0, strlen("Content-Disposition")) == "Content-Disposition")
		{
		$contentfilename = explode("\"", $header_fields[$fi]);
			if(count($contentfilename)>0)
			{
			$target = $contentfilename[1]; 
			$header=$header.'\r\n\r\nfile-name:'.$target;
			}
		break;
		}
	}          
		// Set the target path if not given
		if (!$target)
		{
			$target = $config->get('tmp_path') . '/' .self::getFilenameFromURL($url);
		}
		else
		{
			$target = $config->get('tmp_path') . '/' .basename($target);
		}
		
		// Write buffer to file
		JFile::write($target, $contents);				

		// Close file pointer resource
		fclose($inputHandle);

		// Restore error tracking to what it was before
		ini_set('track_errors', $track_errors);

		// bump the max execution time because not using built in php zip libs are slow
		@set_time_limit(ini_get('max_execution_time'));

		// Return the name of the downloaded package
		return basename($target);
	}

 

Add comment