работа с CLX

#
работа с CLX
Добрый день.
Установил код CLX`а для продажи страниц пакетами, после установки скрипта понеслись ошибки, за сутки привалило 3 тысячи.
ошибки такого типа:
--------------------------------------------------

Здравствуйте!
Только что на сайте произошло событие, информация о котором представлена ниже:
Дата: 30.04.2007 13:48:45
Событие: <strong>ЗАМЕЧАНИЕ:</strong> Undefined variable:  userdir  в файле /pub/home/ggis92/htdocs/******/clx.php
(строка 119)
Статус события: Низкий уровень критичности
Пользователь: #####
Сайт: -
Страница: http://www.ggis.ru/index_more.html?se=4c055c7bdc58a2fc0ba5fd0f148563e0&
IP-адрес: 85.141.133.205
С уважением, Система управления сайтом HostCMS,
http://www.hostcms.ru/
------------------------------------------
Модератор
#
Re: работа с CLX
azmarin,
вероятно причина в низком качестве кода файла clx.php

если предоставление кода clx.php разрешено - опубликуйте его на форуме
#
Re: работа с CLX
<?
//------------------------------------------------------------------------------
//Version 1.3 Update: 26.04.2007
//
// Пример использования
//
// Пример 1
//  define('CLX_Key','такой_то';
//  require_once($_SERVER['DOCUMENT_ROOT'].'/'.CLX_Key.'/1.php';  
//  
//  echo($clx->GetPVSCod(1000));
//  
//  где 1000 - номер сайта, необъязательный второй параметр 1 - обновить код, -1 - запретить обновление кода (тогда код необходимо обновлять в cron)
//
// Пример 2 (с указанием кодировки и текущей страницы)
//  define('CLX_Key','такой_то';
//  require_once($_SERVER['DOCUMENT_ROOT'].'/'.CLX_Key.'/1.php';  
//  $clx->Set_Charset("KOI8-r";        
//  $clx->Set_Page("/info.html";        
//  echo($clx->GetPVSCod(1000));
//------------------------------------------------------------------------------


class CLX
{
    var $charset=""; //Необходимая вам кодировка. (WINDOWS-1251, UTF8, KOI8-r)
    var $server="такой_то";
    var $life=1800;  //Период обновления кода
    var $ertime=300; //Период обновления кода после ошибки
    var $sockettimeout=10; //Ожидание кода, секунд
    var $userdir=""; //Нет необходимости изменять. Переопределение стандартной папки для кэширования
    var $password="такой_то";  //Пароль (единый на один аккаунт), используется для передачи данных с серверов CLX (в случае если на вашем сервере не удалось подобрать способов подключения)
  
    // Служебные переменные (для работы их изменение не требуется)
    var $key="";
    var $file="";
    var $n_af="";
    var $page="";
    var $error;

function CLX()
{
    $this->key=CLX_Key;
}
    
    
function Set_Charset($param)        
{
$this->charset=$param;
}

function Set_DownLoadType($param)        
{
$this->dtype=$param;
}


function Set_Life($param)        
{
$this->life=$param;
}


function Set_SocketTimeOut($param)        
{
  if ($param!="socket" $this->error.="<br>Не верный способ подключения к серверу. Возможные варианты: socket, file<br>";
  else
  $this->sockettimeout=$param;
}

function Set_Dir($param)        
{
$this->userdir=$param;
}

function Set_Page($param)        
{
if ($param==""
{
   $this->page=$_SERVER['REQUEST_URI'];
}
else
  $this->page=trim($param);
  
  $this->page=$this->UpdateMD5Url($this->page);
}

function UpdateMD5Url($s)      
{
    $m=split('\?',trim($s));
    if (count($m)>1)
    {
        $s2=$m[1];
          $m2=split('\&',$s2);
            if (count($m2)>0)
            {
              $max=count($m2);
              for ($i=0;$i<$max;$i++)
              {
               $s3=$m2[$i];
               $m3=split('=',$s3);
               if (eregi("^[a-f0-9]{32}$",$m3[1]) )
               {
                   unset($m2[$i]);
               }
               }
            }
        $s2=implode("&",$m2);      
        if ($s2!="" $s2="?".$s2;
        $s=$m[0].$s2;
    }
return $s;
}



function CreateLinkFile($file)        
{
    if ($userdir==""
      $this->file=$_SERVER['DOCUMENT_ROOT'].'/'.$this->key."/".$file;
    else
       $this->file=$this->userdir."/".$file;
}

function MySaveFile($cod)
{
  @$f=fopen($this->file,'w';
  if ($f)
  {
     @fwrite($f,$cod,strlen($cod));
     @fclose($f);
  }      
}

function MyReadFile()
{
  $cod="";
  
  if (!file_exists($this->file)) $this->error.="<br>Файл $this->file не существует! Проверьте права на запись в этот файл.<br>";
  $dir=dirname($this->file);
  if (!is_writable($dir))
  {
  $this->error.="<br>Папка $dir не доступна на запись! Установленные права: ".substr(sprintf('%o', fileperms($dir)), -4).", необходимо 0777<br>";
  }
    
  $f=@fopen($this->file,'r';
  if ($f)
  {
     $cod=fread($f,filesize($this->file));
     @fclose($f);
  }      
  return $cod;
}



function DownLoad($get)
{
  $cod="";
  if ((((@filemtime($this->file)<(time()-$this->life)) or (@filesize($this->file)==0)) and ($this->update==0)) or ($this->update==1))
  {
    if (!function_exists("fsockopen")
    {
       @ini_set("allow_url_fopen",1);
       if (ini_get("allow_url_fopen"==1) $this->Set_DownLoadType("file";
       else $this->Set_DownLoadType("";
    }
    else
      $this->Set_DownLoadType("socket";
    
    @touch($this->file,(time()-$this->life+$this->ertime));
    if ($this->dtype=="socket" $cod=$this->_Socket($get);
    elseif ($this->dtype=="file" $cod=$this->_GetFile($get);

      
    if ($cod!="" $this->MYSaveFile($cod);
  }
  
  $cod=$this->MYReadFile();
  $cod=$this->error.$cod;
  return $cod;      
}

function ShowPVSCod($cod)
{
   $cod=unserialize($cod);
   $res=$cod[$this->page];
   if (($this->charset!=""  and ($this->charset!="WINDOWS-1251") $res=iconv("WINDOWS-1251",$this->charset,$res);
   if ($res=="" $res=str_replace("%%page%%",$this->page,$cod[0]);
   return $res;
}

function GetPVSCod($n_af,$update=0)
{
$this->update=$update;
$this->CreateLinkFile("pvs_$n_af.cgi";
if ($this->page=="" $this->Set_Page($param);

$get="/pvs_data.jsp?key=$this->key&n_af=$n_af";
$s=$this->ShowPVSCod($this->DownLoad($get));
return $s;
}

function _GetFile($get)
{
   $res="";
   $url="http://$this->server$get";
   $res=implode("",file($url));
  
return $res;
}


function _Socket($get)
{
   $res="";
   $f=fsockopen($this->server,80,$errno,$errstr,$this->sockettimeout);
   if ($f)
   {
      $out="GET $get HTTP/1.0\r\n";
      $out.="Host: $this->server\r\n";
      $out.= "Connection: Close\r\n\r\n";
      fwrite($f,$out);
      while (!@feof($f)) $temp.= @fgets($f,1024);
      @fclose($f);
      $temp = explode("\r\n\r\n", $temp);
      $res=trim($temp[1]);
   }        
return $res;
}

function SavePost($a)
{
  $res=-1;
  $n_af=intval($a[n_af]);
  $this->key=str_replace(".","",$a[key]);
  $this->key=str_replace("/","",$this->key);
  $this->CreateLinkFile("pvs_$n_af.cgi";
  $p=$a[pass];
  
  $data=base64_decode($a[data]);
  $md5=md5($this->key.$n_af.$this->password."_".$a[data]);
  
  if ($md5==$p)
  {
  $this->MySaveFile($data);
  $res=1;
  }
  echo("$res";
}

}

$clx = new CLX();
if (isset($_POST[data]) and (strlen($_POST[pass])==32) and $_POST[n_af]>0 and isset($_POST[key]))
{
    $clx->SavePOST($_POST);
}
?>
Модератор
#
Re: работа с CLX
azmarin,
рассмотрим метод:

function CreateLinkFile($file)        
{
    if ($userdir=="" )
      $this->file=$_SERVER['DOCUMENT_ROOT'].'/'.$this->key."/".$file;
    else
       $this->file=$this->userdir."/".$file;
}


откуда берется $userdir и $file абсолютно неясно, вероятно имелось ввиду следующее:

function CreateLinkFile($file)        
{
    if ($this->userdir=="" )
      $this->file=$_SERVER['DOCUMENT_ROOT'].'/'.$this->key."/".$this->file;
    else
       $this->file=$this->userdir."/".$this->file;
}


ошибки в других функциях не смотрел.
#
Re: работа с CLX
пришлось отключить, так как задрали ошибками заваливать ящик...
Модератор
#
Re: работа с CLX
azmarin,
Обратитесь к разработчику CLX с просьбой предоставить валидный код
Авторизация