From 1b0616f38f968cd4b9f53aaf0e54742bae260820 Mon Sep 17 00:00:00 2001 From: Edmar Moretti Date: Sun, 21 Oct 2012 16:12:03 +0000 Subject: [PATCH] Otimização do uso de funções reaproveitáveis --- classesphp/classe_alteraclasse.php | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----- classesphp/classe_analise.php | 157 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------ classesphp/classe_legenda.php | 33 ++++++++++++++++++++++++++++++++- classesphp/funcoes_gerais.php | 616 ++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- classesphp/graficos.php | 230 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ classesphp/mapa_controle.php | 16 +++++++++++++--- guia_de_migracao.txt | 11 +++++++++++ ms_criamapa.php | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------- testainstal.php | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 9 files changed, 642 insertions(+), 663 deletions(-) diff --git a/classesphp/classe_alteraclasse.php b/classesphp/classe_alteraclasse.php index a81a64c..5cd3203 100644 --- a/classesphp/classe_alteraclasse.php +++ b/classesphp/classe_alteraclasse.php @@ -4,7 +4,6 @@ Title: classe_alteraclasse.php Manipulação de classes e estilos de um layer - Licenca: GPL2 @@ -241,7 +240,7 @@ $ignorar - valor que será ignorado na listagem final function intervalosiguais($item,$nclasses,$ignorar) { if(!$this->layer){return "erro";} - $valores = pegaValores($this->mapa,$this->layer,$item,true,$ignorar); + $valores = $this->pegaValores($this->mapa,$this->layer,$item,true,$ignorar); if (count($valores) > 0) { //calcula o menor valor e o maior valor @@ -306,7 +305,7 @@ Include: { if(!$this->layer){return "erro";} - $valores = pegaValores($this->mapa,$this->layer,$item,true,$ignorar); + $valores = $this->pegaValores($this->mapa,$this->layer,$item,true,$ignorar); if (count($valores) > 0) { if(file_exists($this->locaplic."/classe_estatistica.php")) @@ -383,11 +382,11 @@ $itemNome - item que será usado para definir os nomes das classes (por de if($itemNome == "" || $ignorar != "") {$itemNome = $item;} // pega valores - $vs = pegaValores($this->mapa,$this->layer,$item,false,$ignorar); + $vs = $this->pegaValores($this->mapa,$this->layer,$item,false,$ignorar); if ($item == $itemNome) {$ns = $vs;} else - {$ns = pegaValores($this->mapa,$this->layer,$itemNome,false,$ignorar);} + {$ns = $this->pegaValores($this->mapa,$this->layer,$itemNome,false,$ignorar);} $lista = array(); for ($i = 0; $i < count($vs); ++$i){ $temp[$vs[$i]] = $ns[$i]; @@ -700,5 +699,89 @@ $classe - id da classe $this->layer->setMetaData("cache",""); return("ok"); } + /* + Function: pegaValores + + Pega os valores de um item de um tema. + + Parametros: + + $layer {objeto} - Layer que será processado. + + $item {string} - Item que será processado. + + $numerico {boleano} - O item e numerico (true ou false). + + $ignorar {string} - valor que será ignorado na listagem final + + Retorno: + + {array} + */ + function pegaValores($mapa,$layer,$item,$numerico=false,$ignorar="") + { + $layer->set("template","none.htm"); + $layer->setfilter(""); + $versao = versao(); + $versao = $versao["principal"]; + $ignorararray = explode(",",$ignorar); + if (@$layer->queryByrect($mapa->extent) == MS_SUCCESS) + { + $sopen = $layer->open(); + if($sopen == MS_FAILURE){ + return "erro"; + } + $res_count = $layer->getNumresults(); + $valitem = array(); + for ($i=0;$i<$res_count;++$i) + { + if($versao == 6) + { + $shape = $layer->getShape($layer->getResult($i)); + } + else{ + $result = $layer->getResult($i); + $shp_index = $result->shapeindex; + $shape = $layer->getfeature($shp_index,-1); + } + $v = trim($shape->values[$item]); + if ($numerico) + { + if (is_numeric($v)) + { + if ($ignorar == "") + { + $valitem[] = $v; + } + else + { + //if ($v != $ignorar) + if(!in_array($v,$ignorararray)) + { + $valitem[] = $v; + } + } + } + } + else + { + if ($ignorar == "") + { + $valitem[] = $v; + } + else + { + if(!in_array($v,$ignorararray)) + { + $valitem[] = $v; + } + } + } + } + $fechou = $layer->close(); + } + $layer->close(); + return ($valitem); + } } ?> \ No newline at end of file diff --git a/classesphp/classe_analise.php b/classesphp/classe_analise.php index a4870c5..0f6ff60 100644 --- a/classesphp/classe_analise.php +++ b/classesphp/classe_analise.php @@ -102,10 +102,7 @@ $ext - Extensão geográfica do mapa { //error_reporting(E_ALL); $this->qyfile = str_replace(".map",".qy",$map_file); - if(file_exists($locaplic."/funcoes_gerais.php")) - include_once($locaplic."/funcoes_gerais.php"); - else - include_once("funcoes_gerais.php"); + include_once(__DIR__."/funcoes_gerais.php"); $this->v = versao(); $this->v = $this->v["principal"]; $this->dbaseExiste = false; @@ -254,14 +251,14 @@ Include: break; } //cria a imagem - $minmax = criaImagemR($nomearq); + $minmax = $this->criaImagemR($nomearq); //cria as cores include_once("class.palette.php"); $cori = RGB2hex(explode(",",$cori)); $corf = RGB2hex(explode(",",$corf)); $myPalette=new palette(array($cori,$corf),($numclasses + 1)); //cria os parametros das classes - $cls = classesRasterI($minmax[0],$minmax[1],$numclasses,$myPalette->colorRGB); + $cls = $this->classesRasterI($minmax[0],$minmax[1],$numclasses,$myPalette->colorRGB); if (count($cls) != $numclasses){return("erro.");} //adiciona o novo tema if (file_exists($nomearq.".png")) @@ -447,7 +444,7 @@ $locaplic - Onde fica o I3Geo. $rcode[] = 'cat("
\n", file = zz)'; $rcode[] = 'sink()'; $rcode[] = 'close(zz)'; - $r = executaR($rcode,$dir_tmp,$R_path); + $r = $this->executaR($rcode,$dir_tmp,$R_path); } /* function: mapaCluster @@ -500,7 +497,7 @@ $sigma - Bandwidth for kernel smoother in "smooth" option. $rcode[] = 'library(spatclus)'; $rcode[] = 'RES <- clus(d1,d2,limx='.$dimx.',limy='.$dimy.',eps=0.2)'; //var_dump($rcode); - $r = executaR($rcode,$dir_tmp,$R_path,$gfile_name); + $r = $this->executaR($rcode,$dir_tmp,$R_path,$gfile_name); return "ok"; } @@ -561,7 +558,7 @@ $sigma - Bandwidth for kernel smoother in "smooth" option. $rcode[] = 'cat(img$yrange,file="'.$arqpt.'h",append=TRUE,fill=TRUE)'; $rcode[] = 'cat(img$dim,file="'.$arqpt.'h",append=TRUE,fill=TRUE)'; //var_dump($rcode); - $r = executaR($rcode,$dir_tmp,$R_path,$gfile_name); + $r = $this->executaR($rcode,$dir_tmp,$R_path,$gfile_name); return "ok"; } /* @@ -614,7 +611,7 @@ $locaplic - Onde fica o I3Geo. $rcode[] = 'cat(img$xrange,file="'.$arqpt.'h",append=TRUE,fill=TRUE)'; $rcode[] = 'cat(img$yrange,file="'.$arqpt.'h",append=TRUE,fill=TRUE)'; $rcode[] = 'cat(img$dim,file="'.$arqpt.'h",append=TRUE,fill=TRUE)'; - $r = executaR($rcode,$dir_tmp,$R_path,$gfile_name); + $r = $this->executaR($rcode,$dir_tmp,$R_path,$gfile_name); return "ok"; } /* @@ -668,7 +665,7 @@ $locaplic - Onde fica o I3Geo. $rcode[] = 'cat(img$xrange,file="'.$arqpt.'h",append=TRUE,fill=TRUE)'; $rcode[] = 'cat(img$yrange,file="'.$arqpt.'h",append=TRUE,fill=TRUE)'; $rcode[] = 'cat(img$dim,file="'.$arqpt.'h",append=TRUE,fill=TRUE)'; - $r = executaR($rcode,$dir_tmp,$R_path,$gfile_name); + $r = $this->executaR($rcode,$dir_tmp,$R_path,$gfile_name); return "ok"; } /* @@ -713,7 +710,7 @@ $locaplic - Onde fica o I3Geo. $rcode[] = 'pt <- deldir(dadosx, dadosy)'; $rcode[] = 'write.csv(pt$delsgs,file="'.$arqpt.'delsgs")'; $rcode[] = 'write.csv(pt$dirsgs,file="'.$arqpt.'dirsgs")'; - $r = executaR($rcode,$dir_tmp,$R_path,$gfile_name); + $r = $this->executaR($rcode,$dir_tmp,$R_path,$gfile_name); return "ok"; } /* @@ -2733,5 +2730,141 @@ $geos - array com os dados fwrite($fp,$r); fclose($fp); } +/* +Function: classesRasterI + +Gera parâmetros para classificação de imagens. + +Gera a expressão e as cores para uso em classes com intervalos iguais para representação de imagens raster. + +Parametros: + +$minvalor {numeric} - Menor valor existente na série + +$maxvalor {numeric} - Maior valor + +$nclasses {numeric} - Número de classes + +$cores {array} - Cores. Array de array de cores cores[0] = array(r,g,b) + +Retorno: + +(start code) +array( + array( + "nomeclasse"=>, + "expressao"=>, + "cores"=> + ) +) +(end) +*/ +//error_reporting(0); + function classesRasterI($minvalor,$maxvalor,$nclasses,$cores) + { + $resultado = array(); + $intervalo = intval(250 / $nclasses); + $trans = 250 / ($maxvalor - $minvalor); + $intervalo = (($maxvalor*$trans) - ($minvalor*$trans)) / $nclasses; + $conta = 0; + for ($i=0; $i < $nclasses; ++$i) + { + $expressao = "([pixel]>=".$conta." and [pixel]<".($conta+$intervalo).")"; + $nomeclasse = ">= ".($conta/$trans)." e < que ".(($conta + $intervalo)/$trans); + $resultado[] = array("nomeclasse"=>$nomeclasse,"expressao"=>$expressao,"cores"=>$cores[$i]); + $conta = $conta + $intervalo; + } + return $resultado; + } + function executaR($rcode,$dir_tmp,$R_path,$gfile_name="") + { + $R_options = "--slave --no-save"; + $r_name = nomeRandomico(20); + $r_input = $dir_tmp."/".$r_name.".R"; + $r_output = $dir_tmp."/".$r_name.".Rout"; + gravaDados($rcode,$r_input); + $command = $R_path." $R_options < $r_input > $r_output"; + $result = ""; + $error = ""; + $exec_result = exec($command,$result,$error); + //corta a imagem final + //include_once("classe_imagem.php"); + //$m = new Imagem($dir_tmp."/".$gfile_name.".png"); + //$i = $m->cortaBorda(); + //imagepng($i,$dir_tmp."/".$gfile_name.".png"); + return($r_input); + } + /* + Function: criaImagemR + + Cria uma imagem png a partir de dados armazenados em disco. + + Utilizado para gerar uma imagem com base nos resultados de comandos R. + + O nome da imagem criada será o mesmo nome de $nomearq, porém com extensão .png + + Parametros: + + $nomearq {string} - Nome do arquivo no servidor que será utilizado para gerar a imagem. + + Retorno: + + {array($minpixel,$maxpixel)} - tamanho da imagem gerada. + */ + function criaImagemR($nomearq) + { + if (!file_exists($nomearq."img")) + {return "erro";} + //pega os parametros + $abre = fopen($nomearq."h", "r"); + while (!feof($abre)) + { + $buffer = fgets($abre); + $pararray[] = $buffer; + } + fclose($abre); + $xsize = $pararray[0]; + $ysize = $pararray[1]; + $xdim = $pararray[2]; + $ydim = $pararray[3]; + $wh = explode(" ",$pararray[4]); + // pega os valores dos pixels + $abre = fopen($nomearq."img", "r"); + $buffer = fgets($abre); + fclose($abre); + $pixelimg = explode(" ",$buffer); + $minpixel = min($pixelimg); + $maxpixel = max($pixelimg); + $trans = 250 / ($maxpixel - $minpixel); + $img = imagecreatetruecolor($wh[0],$wh[1]); + $celula = 0; + for ($x = 0; $x < $wh[0]; ++$x) + { + for ($y = ($wh[1] - 1); $y >= 0; $y--) + { + $cor = imagecolorresolve($img,$pixelimg[$celula] * $trans, $pixelimg[$celula] * $trans, $pixelimg[$celula] * $trans); + imagesetpixel($img, $x, $y,$cor); + $celula = $celula + 1; + } + } + Imagepng($img,$nomearq.".png"); + ImageDestroy($nomearq.".png"); + $dadosw[] = trim($xsize); + $dadosw[] = 0; + $dadosw[] = 0; + $dadosw[] = trim($ysize * -1); + $temp = explode(" ",$xdim); + $dadosw[] = trim($temp[0]); + $temp = explode(" ",$ydim); + $dadosw[] = trim($temp[1]); + $fp = fopen($nomearq.".wld","w"); + foreach ($dadosw as $dado) + { + fwrite($fp,$dado."\n"); + } + fclose($fp); + $retorno = array($minpixel,$maxpixel); + return $retorno; + } } ?> \ No newline at end of file diff --git a/classesphp/classe_legenda.php b/classesphp/classe_legenda.php index 04c4b6f..a8f35f6 100644 --- a/classesphp/classe_legenda.php +++ b/classesphp/classe_legenda.php @@ -710,7 +710,7 @@ $opacidade - Opacidade if ($this->layer->getmetadata("sld") != "") { $sld = $this->layer->getmetadata("sld"); - reSLD($this->arquivo,$this->nome,$sld); + $this->reSLD($this->arquivo,$this->nome,$sld); } $this->layer->setMetaData("cache",""); return "ok"; @@ -832,5 +832,36 @@ $width } return("ok"); } + /* + Function: reSLD + + Gera o SLD de um tema WMS. + + Parametros: + + $map_file {string} - arquivo map_file + + $tema {string} - código do tema + + $sld {string} - arquivo onde o sld será gravado + */ + function reSLD($map_file,$tema,$sld) + { + $map = ms_newMapObj($map_file); + $layer = $map->getlayerbyname($tema); + $layer->set("name",$layer->getmetadata("nomeoriginal")); + $tiporep = $layer->getmetadata("tipooriginal"); + $layer->set("type",MS_LAYER_POLYGON); + if ($tiporep == "linear") + {$layer->set("type",MS_LAYER_LINE);} + if ($tiporep == "pontual") + {$layer->set("type",MS_LAYER_POINT);} + $sldf = $layer->generateSLD(); + if (file_exists($sld)) + {unlink($sld);} + $fp = fopen($sld, "a"); + fputs( $fp, $sldf ); + fclose($fp); + } } ?> \ No newline at end of file diff --git a/classesphp/funcoes_gerais.php b/classesphp/funcoes_gerais.php index a2a971c..d6db601 100644 --- a/classesphp/funcoes_gerais.php +++ b/classesphp/funcoes_gerais.php @@ -32,207 +32,6 @@ Arquivo: i3geo/classesphp/funcoes_gerais.php */ /* -Section: Imagens -*/ -/* -Function: classesRasterI - -Gera parâmetros para classificação de imagens. - -Gera a expressão e as cores para uso em classes com intervalos iguais para representação de imagens raster. - -Parametros: - -$minvalor {numeric} - Menor valor existente na série - -$maxvalor {numeric} - Maior valor - -$nclasses {numeric} - Número de classes - -$cores {array} - Cores. Array de array de cores cores[0] = array(r,g,b) - -Retorno: - -(start code) -array( - array( - "nomeclasse"=>, - "expressao"=>, - "cores"=> - ) -) -(end) -*/ -//error_reporting(0); -function classesRasterI($minvalor,$maxvalor,$nclasses,$cores) -{ - $resultado = array(); - $intervalo = intval(250 / $nclasses); - $trans = 250 / ($maxvalor - $minvalor); - $intervalo = (($maxvalor*$trans) - ($minvalor*$trans)) / $nclasses; - $conta = 0; - for ($i=0; $i < $nclasses; ++$i) - { - $expressao = "([pixel]>=".$conta." and [pixel]<".($conta+$intervalo).")"; - $nomeclasse = ">= ".($conta/$trans)." e < que ".(($conta + $intervalo)/$trans); - $resultado[] = array("nomeclasse"=>$nomeclasse,"expressao"=>$expressao,"cores"=>$cores[$i]); - $conta = $conta + $intervalo; - } - return $resultado; -} -/* -Function: fusaoGrafico - -Faz a fusao de uma imagem com outra grafico+imagem. - -Globais: - -$imagem {objeto} - imagem base, caso $map_file for "" - -$grafico {objeto} - imagem do grafico - -$dir_tmp {string} - diretorio onde estao as imagens - -$cp {CPAINT} - Objeto CPAINT - -$map_file [string} - arquivo mapfile que será utilizado para gerar a imagem base. Se for "", será utilizado a imagem definida em $imagem - -Retorno: - -{string} - endereço da imagem criada - -*/ -function fusaoGrafico() -{ - global $imagem,$grafico,$dir_tmp,$map_file; - include_once("classe_imagem.php"); - if($map_file != "") - { - $mapa = ms_newMapObj($map_file); - $imgo = $mapa->draw(); - $nome = ($imgo->imagepath).nomeRandomico().".png"; - $imgo->saveImage($nome); - $imagem = ($imgo->imageurl).basename($nome); - //$imgo->free(); - } - $m = new Imagem(dirname($dir_tmp).$imagem); - $i = $m->fundeIm(dirname($dir_tmp).$grafico); - imagepng($i,dirname($dir_tmp).$imagem); - return ($imagem); -} -/* -Section: R -*/ -/* -Function: executaR - -Executa comandos do R. - -Parametros: - -$rcode {array} - Código que será executado. - -$dir_tmp {string} - Diretório temporário onde ficarão os arquivos para processamento. - -$R_path {string} - Executável do R. - -$gfile_name {string} - nome da imagem que será criada - -Retorno: - -{string} - nome do arquivo com o código R que foi executado -*/ -function executaR($rcode,$dir_tmp,$R_path,$gfile_name="") -{ - $R_options = "--slave --no-save"; - $r_name = nomeRandomico(20); - $r_input = $dir_tmp."/".$r_name.".R"; - $r_output = $dir_tmp."/".$r_name.".Rout"; - gravaDados($rcode,$r_input); - $command = $R_path." $R_options < $r_input > $r_output"; - $result = ""; - $error = ""; - $exec_result = exec($command,$result,$error); - //corta a imagem final - //include_once("classe_imagem.php"); - //$m = new Imagem($dir_tmp."/".$gfile_name.".png"); - //$i = $m->cortaBorda(); - //imagepng($i,$dir_tmp."/".$gfile_name.".png"); - return($r_input); -} -/* -Function: criaImagemR - -Cria uma imagem png a partir de dados armazenados em disco. - -Utilizado para gerar uma imagem com base nos resultados de comandos R. - -O nome da imagem criada será o mesmo nome de $nomearq, porém com extensão .png - -Parametros: - -$nomearq {string} - Nome do arquivo no servidor que será utilizado para gerar a imagem. - -Retorno: - -{array($minpixel,$maxpixel)} - tamanho da imagem gerada. -*/ -function criaImagemR($nomearq) -{ - if (!file_exists($nomearq."img")) - {return "erro";} - //pega os parametros - $abre = fopen($nomearq."h", "r"); - while (!feof($abre)) - { - $buffer = fgets($abre); - $pararray[] = $buffer; - } - fclose($abre); - $xsize = $pararray[0]; - $ysize = $pararray[1]; - $xdim = $pararray[2]; - $ydim = $pararray[3]; - $wh = explode(" ",$pararray[4]); - // pega os valores dos pixels - $abre = fopen($nomearq."img", "r"); - $buffer = fgets($abre); - fclose($abre); - $pixelimg = explode(" ",$buffer); - $minpixel = min($pixelimg); - $maxpixel = max($pixelimg); - $trans = 250 / ($maxpixel - $minpixel); - $img = imagecreatetruecolor($wh[0],$wh[1]); - $celula = 0; - for ($x = 0; $x < $wh[0]; ++$x) - { - for ($y = ($wh[1] - 1); $y >= 0; $y--) - { - $cor = imagecolorresolve($img,$pixelimg[$celula] * $trans, $pixelimg[$celula] * $trans, $pixelimg[$celula] * $trans); - imagesetpixel($img, $x, $y,$cor); - $celula = $celula + 1; - } - } - Imagepng($img,$nomearq.".png"); - ImageDestroy($nomearq.".png"); - $dadosw[] = trim($xsize); - $dadosw[] = 0; - $dadosw[] = 0; - $dadosw[] = trim($ysize * -1); - $temp = explode(" ",$xdim); - $dadosw[] = trim($temp[0]); - $temp = explode(" ",$ydim); - $dadosw[] = trim($temp[1]); - $fp = fopen($nomearq.".wld","w"); - foreach ($dadosw as $dado) - { - fwrite($fp,$dado."\n"); - } - fclose($fp); - $retorno = array($minpixel,$maxpixel); - return $retorno; -} -/* Section: cor */ /* @@ -1016,7 +815,7 @@ function desligamargem($objmapa) return $objmapa; } /* -Function: desligaTemas +Function: desligaTemas (depreciado na versao 4.7) Desliga todos os temas de um mapa. @@ -1097,281 +896,6 @@ function gravaImagemMapa($mapa) Section: atributos */ /* -Function: pegaValores - -Pega os valores de um item de um tema. - -Parametros: - -$layer {objeto} - Layer que será processado. - -$item {string} - Item que será processado. - -$numerico {boleano} - O item e numerico (true ou false). - -$ignorar {string} - valor que será ignorado na listagem final - -Retorno: - -{array} -*/ -function pegaValores($mapa,$layer,$item,$numerico=false,$ignorar="") -{ - $layer->set("template","none.htm"); - $layer->setfilter(""); - $versao = versao(); - $versao = $versao["principal"]; - $ignorararray = explode(",",$ignorar); - if (@$layer->queryByrect($mapa->extent) == MS_SUCCESS) - { - $sopen = $layer->open(); - if($sopen == MS_FAILURE){ - return "erro"; - } - $res_count = $layer->getNumresults(); - $valitem = array(); - for ($i=0;$i<$res_count;++$i) - { - if($versao == 6) - { - $shape = $layer->getShape($layer->getResult($i)); - } - else{ - $result = $layer->getResult($i); - $shp_index = $result->shapeindex; - $shape = $layer->getfeature($shp_index,-1); - } - $v = trim($shape->values[$item]); - if ($numerico) - { - if (is_numeric($v)) - { - if ($ignorar == "") - { - $valitem[] = $v; - } - else - { - //if ($v != $ignorar) - if(!in_array($v,$ignorararray)) - { - $valitem[] = $v; - } - } - } - } - else - { - if ($ignorar == "") - { - $valitem[] = $v; - } - else - { - if(!in_array($v,$ignorararray)) - { - $valitem[] = $v; - } - } - } - } - $fechou = $layer->close(); - } - $layer->close(); - return ($valitem); -} -/* -Function: pegaValoresM - -Pega os valores de múltiplos itens de um tema. - -Se for passado apenas um item, o array de retorno será unidimensional. - -Parametros: - -$layer {objeto} - Layer que será processado. - -$itens {array} - Itens que serão processados. - -$exclui {string} - O registro não será considerado se um dos valores for igual a esse valor. - -$selecionados {string} - sim|nao Utiliza apenas os selecionados ou todos - -$chaves {boolean} - inclui ou não os nomes dos itens como chave no array resultante - -$centroide {boolean} - captura ou não o WKT com o centroide do elemento - -Retorno: - -{array} -*/ -function pegaValoresM($mapa,$layer,$itens,$exclui="nulo",$selecionados="nao",$chaves=false,$centroide=false) -{ - $versao = versao(); - $versao = $versao["principal"]; - $prjMapa = $mapa->getProjection(); - $prjTema = $layer->getProjection(); - $layer->set("template","none.htm"); - $layer->setfilter(""); - - $indicesel = array(); - //pega os valores dos indices dos elementos selecionados para comparacao posterior - if ($selecionados == "sim") - { - $sopen = $layer->open(); - if($sopen == MS_FAILURE){return "erro";} - $res_count = $layer->getNumresults(); - for ($i = 0; $i < $res_count; ++$i) - { - $result = $layer->getResult($i); - $indicesel[] = $result->shapeindex; - } - $layer->close(); - } - $valores = array(); - $nclasses = $layer->numclasses; - if (@$layer->queryByrect($mapa->extent) == MS_SUCCESS) - { - //$layer->draw(); - $sopen = $layer->open(); - if($sopen == MS_FAILURE){return "erro";} - $res_count = $layer->getNumresults(); - - for ($i=0;$i<$res_count;++$i) - { - if($versao == 6){ - $shape = $layer->getShape($layer->getResult($i)); - $shp_index = $shape->index; - } - else{ - $result = $layer->getResult($i); - $shp_index = $result->shapeindex; - $shape = $layer->getfeature($shp_index,-1); - } - if (($selecionados == "sim") && (array_search($shp_index,$indicesel) === FALSE)) - {continue;} - $considera = "sim"; - //verifica se no registro deve ser considerado - if ($exclui != "nulo") - { - foreach ($itens as $item) - {if($shape->values[$item] == $exclui){$considera = "nao";}} - } - //pega os valores - $v = array(); - if ($considera == "sim") - { - foreach ($itens as $item){ - if($chaves == false) - {$v[] = $shape->values[$item];} - else - {$v[$item] = $shape->values[$item];} - } - if($centroide == true){ - $c = $shape->getCentroid(); - if (($prjTema != "") && ($prjMapa != $prjTema)) - { - $projOutObj = ms_newprojectionobj($prjTema); - $projInObj = ms_newprojectionobj($prjMapa); - $c->project($projInObj, $projOutObj); - } - $v["centroide"] = "POINT(".$c->x." ".$c->y.")"; - } - if($nclasses > 0){ - $classe = $layer->getclass($shape->classindex); - $cor = $classe->getstyle(0)->color; - $v["cores"] = $cor->red." ".$cor->green." ".$cor->blue; - } - if (count($v) == 1) - {$valores[] = $v[0];} - else - {$valores[] = $v;} - } - } - $layer->close(); - } - return ($valores); -} -/* -Function: agrupaValores - -Agrupa os valores de um array por um método de cálculo. - -No caso de soma e média, será considerado apenas um item e uma chave. - -Parametros: - -$lista {array} - Lista com os arrays contendo os dados que serão processados. - -$indiceChave {string} - Índice do array da lista que será considerado como a chave do array. - -$indiceValor {string} - Índice do array da lista que será considerado como o valor. - -$tipo {string} - Tipo de processamento soma|media|contagem|nenhum. - -Retorno: - -{array} -*/ -function agrupaValores($lista,$indiceChave,$indiceValor,$tipo) -{ - $valores = null; - foreach ($lista as $linha) - { - $c = $linha[$indiceChave]; - $v = $linha[$indiceValor]; - if ($tipo == "conta") - { - if(@$valores[$c]) - $valores[$c] = $valores[$c] + 1; - else - $valores[$c] = 1; - } - if (($tipo == "soma")) - { - if (($v != "") && (is_numeric($v))) - { - if(@$valores[$c]) - $valores[$c] = $valores[$c] + $v; - else - $valores[$c] = $v; - } - } - if ($tipo == "media") - { - if (($v != "") && (is_numeric($v))) - { - if(@$soma[$c]) - $soma[$c] = $soma[$c] + $v; - else - $soma[$c] = $v; - - if(@$conta[$c]) - $conta[$c] = $conta[$c] + 1; - else - $conta[$c] = 1; - } - } - if ($tipo == "nenhum") - { - //if (($v != "") && (is_numeric($v))) - //{ - $valoresn[] = $v; - //} - $valores = $valoresn; - } - } - if ($tipo == "media") - { - $chaves = array_keys($conta); - foreach ($chaves as $c) - { - $valores[$c] = $soma[$c] / $conta[$c]; - } - } - return ($valores); -} -/* Function: pegaItens Pega os itens da tabela de atributos de um tema. @@ -1566,7 +1090,6 @@ function imagem2xy($map_file,$xy) $y = ($e->maxy) - $xy[1] * $c; return array($x,$y); } - /* Function: xy2wkt @@ -1675,37 +1198,6 @@ function geo2utm($x,$y,$zona) Section: web services */ /* -Function: reSLD - -Gera o SLD de um tema WMS. - -Parametros: - -$map_file {string} - arquivo map_file - -$tema {string} - código do tema - -$sld {string} - arquivo onde o sld será gravado -*/ -function reSLD($map_file,$tema,$sld) -{ - $map = ms_newMapObj($map_file); - $layer = $map->getlayerbyname($tema); - $layer->set("name",$layer->getmetadata("nomeoriginal")); - $tiporep = $layer->getmetadata("tipooriginal"); - $layer->set("type",MS_LAYER_POLYGON); - if ($tiporep == "linear") - {$layer->set("type",MS_LAYER_LINE);} - if ($tiporep == "pontual") - {$layer->set("type",MS_LAYER_POINT);} - $sldf = $layer->generateSLD(); - if (file_exists($sld)) - {unlink($sld);} - $fp = fopen($sld, "a"); - fputs( $fp, $sldf ); - fclose($fp); -} -/* georssCanais (depreciado) Lista os canais de um GeoRss. @@ -2644,50 +2136,6 @@ function removeAcentos($var) return str_replace($a, $b, $var); } /* -Function: criaDirMapa - -Cria os diretórios temporários para a aplicação. - -Parametro: - -$dir_tmp {string} - Diretório temporário (no servidor) utilizado pelo mapserver. - -$$cachedir {string} - Diretório de cache temporário definido no ms_configura.php - -Retorno: - -{boleano} -*/ -function criaDirMapa($dir_tmp,$cachedir="") -{ - if(!file_exists($dir_tmp)){ - @mkdir ($dir_tmp,0777); - } - if(file_exists($dir_tmp)) - { - $tmpdirname = nomeRandomico(); - $crdir = @mkdir ($dir_tmp."/".$tmpdirname,0777); - $crdiri = @mkdir ($dir_tmp."/img".$tmpdirname,0777); - $mapfile = $dir_tmp."/".$tmpdirname."/".$tmpdirname.".map"; - $tmpimgname = "img".$tmpdirname; - @mkdir($dir_tmp."/comum",0777); - if($cachedir == ""){ - @mkdir($dir_tmp."/cache",0777); - @mkdir($dir_tmp."/cache/googlemaps",0777); - } - else{ - @mkdir($cachedir,0777); - @mkdir($cachedir."/googlemaps",0777); - } - if(file_exists($dir_tmp."/".$tmpdirname)) - return array($mapfile,$tmpdirname,$tmpimgname); - else - {return false;} - } - else - {return false;} -} -/* Function: array2json Converte um array em uma string no formato JSON. Utiliza as funções nativas do PHP para gerar o objeto. @@ -2867,6 +2315,7 @@ Return: {string} - sim|nao */ +//TODO remover function verificaEditores($editores) { if (strtolower($_SERVER['HTTP_HOST']) == "localhost") @@ -2989,67 +2438,6 @@ function retornaShapesSelecionados($objLayer,$map_file,$objMapa){ return $shapes; } /* -Function: permissoesarquivo - -Retorna as permissões de um arquivo - -Parametros: - -$arquivo -*/ -function permissoesarquivo($arquivo){ - $perms = fileperms($arquivo); - - if (($perms & 0xC000) == 0xC000) { - // Socket - $info = 's'; - } elseif (($perms & 0xA000) == 0xA000) { - // Symbolic Link - $info = 'l'; - } elseif (($perms & 0x8000) == 0x8000) { - // Regular - $info = '-'; - } elseif (($perms & 0x6000) == 0x6000) { - // Block special - $info = 'b'; - } elseif (($perms & 0x4000) == 0x4000) { - // Directory - $info = 'd'; - } elseif (($perms & 0x2000) == 0x2000) { - // Character special - $info = 'c'; - } elseif (($perms & 0x1000) == 0x1000) { - // FIFO pipe - $info = 'p'; - } else { - // Unknown - $info = 'u'; - } - - // Owner - $info .= (($perms & 0x0100) ? 'r' : '-'); - $info .= (($perms & 0x0080) ? 'w' : '-'); - $info .= (($perms & 0x0040) ? - (($perms & 0x0800) ? 's' : 'x' ) : - (($perms & 0x0800) ? 'S' : '-')); - - // Group - $info .= (($perms & 0x0020) ? 'r' : '-'); - $info .= (($perms & 0x0010) ? 'w' : '-'); - $info .= (($perms & 0x0008) ? - (($perms & 0x0400) ? 's' : 'x' ) : - (($perms & 0x0400) ? 'S' : '-')); - - // World - $info .= (($perms & 0x0004) ? 'r' : '-'); - $info .= (($perms & 0x0002) ? 'w' : '-'); - $info .= (($perms & 0x0001) ? - (($perms & 0x0200) ? 't' : 'x' ) : - (($perms & 0x0200) ? 'T' : '-')); - - return $info; -} -/* Function: validaAcessoTemas Remocao dos layers com restricoes de acesso registradas no sistema de controle de usuarios diff --git a/classesphp/graficos.php b/classesphp/graficos.php index 37d405e..35d97b2 100644 --- a/classesphp/graficos.php +++ b/classesphp/graficos.php @@ -580,4 +580,234 @@ function dadosPerfilRelevo($pontos,$opcao,$amostragem,$item="",$map_file=""){ } return $result; } +/* +Function: executaR + +Executa comandos do R. + +Parametros: + +$rcode {array} - Código que será executado. + +$dir_tmp {string} - Diretório temporário onde ficarão os arquivos para processamento. + +$R_path {string} - Executável do R. + +$gfile_name {string} - nome da imagem que será criada + +Retorno: + +{string} - nome do arquivo com o código R que foi executado +*/ + +function executaR($rcode,$dir_tmp,$R_path,$gfile_name="") +{ + $R_options = "--slave --no-save"; + $r_name = nomeRandomico(20); + $r_input = $dir_tmp."/".$r_name.".R"; + $r_output = $dir_tmp."/".$r_name.".Rout"; + gravaDados($rcode,$r_input); + $command = $R_path." $R_options < $r_input > $r_output"; + $result = ""; + $error = ""; + $exec_result = exec($command,$result,$error); + //corta a imagem final + //include_once("classe_imagem.php"); + //$m = new Imagem($dir_tmp."/".$gfile_name.".png"); + //$i = $m->cortaBorda(); + //imagepng($i,$dir_tmp."/".$gfile_name.".png"); + return($r_input); +} +/* +Function: pegaValoresM + +Pega os valores de múltiplos itens de um tema. + +Se for passado apenas um item, o array de retorno será unidimensional. + +Parametros: + +$layer {objeto} - Layer que será processado. + +$itens {array} - Itens que serão processados. + +$exclui {string} - O registro não será considerado se um dos valores for igual a esse valor. + +$selecionados {string} - sim|nao Utiliza apenas os selecionados ou todos + +$chaves {boolean} - inclui ou não os nomes dos itens como chave no array resultante + +$centroide {boolean} - captura ou não o WKT com o centroide do elemento + +Retorno: + +{array} +*/ +function pegaValoresM($mapa,$layer,$itens,$exclui="nulo",$selecionados="nao",$chaves=false,$centroide=false) +{ + $versao = versao(); + $versao = $versao["principal"]; + $prjMapa = $mapa->getProjection(); + $prjTema = $layer->getProjection(); + $layer->set("template","none.htm"); + $layer->setfilter(""); + + $indicesel = array(); + //pega os valores dos indices dos elementos selecionados para comparacao posterior + if ($selecionados == "sim") + { + $sopen = $layer->open(); + if($sopen == MS_FAILURE){return "erro";} + $res_count = $layer->getNumresults(); + for ($i = 0; $i < $res_count; ++$i) + { + $result = $layer->getResult($i); + $indicesel[] = $result->shapeindex; + } + $layer->close(); + } + $valores = array(); + $nclasses = $layer->numclasses; + if (@$layer->queryByrect($mapa->extent) == MS_SUCCESS) + { + //$layer->draw(); + $sopen = $layer->open(); + if($sopen == MS_FAILURE){return "erro";} + $res_count = $layer->getNumresults(); + + for ($i=0;$i<$res_count;++$i) + { + if($versao == 6){ + $shape = $layer->getShape($layer->getResult($i)); + $shp_index = $shape->index; + } + else{ + $result = $layer->getResult($i); + $shp_index = $result->shapeindex; + $shape = $layer->getfeature($shp_index,-1); + } + if (($selecionados == "sim") && (array_search($shp_index,$indicesel) === FALSE)) + {continue;} + $considera = "sim"; + //verifica se no registro deve ser considerado + if ($exclui != "nulo") + { + foreach ($itens as $item) + {if($shape->values[$item] == $exclui){$considera = "nao";}} + } + //pega os valores + $v = array(); + if ($considera == "sim") + { + foreach ($itens as $item){ + if($chaves == false) + {$v[] = $shape->values[$item];} + else + {$v[$item] = $shape->values[$item];} + } + if($centroide == true){ + $c = $shape->getCentroid(); + if (($prjTema != "") && ($prjMapa != $prjTema)) + { + $projOutObj = ms_newprojectionobj($prjTema); + $projInObj = ms_newprojectionobj($prjMapa); + $c->project($projInObj, $projOutObj); + } + $v["centroide"] = "POINT(".$c->x." ".$c->y.")"; + } + if($nclasses > 0){ + $classe = $layer->getclass($shape->classindex); + $cor = $classe->getstyle(0)->color; + $v["cores"] = $cor->red." ".$cor->green." ".$cor->blue; + } + if (count($v) == 1) + {$valores[] = $v[0];} + else + {$valores[] = $v;} + } + } + $layer->close(); + } + return ($valores); +} +/* +Function: agrupaValores + +Agrupa os valores de um array por um método de cálculo. + +No caso de soma e média, será considerado apenas um item e uma chave. + +Parametros: + +$lista {array} - Lista com os arrays contendo os dados que serão processados. + +$indiceChave {string} - Índice do array da lista que será considerado como a chave do array. + +$indiceValor {string} - Índice do array da lista que será considerado como o valor. + +$tipo {string} - Tipo de processamento soma|media|contagem|nenhum. + +Retorno: + +{array} +*/ +function agrupaValores($lista,$indiceChave,$indiceValor,$tipo) +{ + $valores = null; + foreach ($lista as $linha) + { + $c = $linha[$indiceChave]; + $v = $linha[$indiceValor]; + if ($tipo == "conta") + { + if(@$valores[$c]) + $valores[$c] = $valores[$c] + 1; + else + $valores[$c] = 1; + } + if (($tipo == "soma")) + { + if (($v != "") && (is_numeric($v))) + { + if(@$valores[$c]) + $valores[$c] = $valores[$c] + $v; + else + $valores[$c] = $v; + } + } + if ($tipo == "media") + { + if (($v != "") && (is_numeric($v))) + { + if(@$soma[$c]) + $soma[$c] = $soma[$c] + $v; + else + $soma[$c] = $v; + + if(@$conta[$c]) + $conta[$c] = $conta[$c] + 1; + else + $conta[$c] = 1; + } + } + if ($tipo == "nenhum") + { + //if (($v != "") && (is_numeric($v))) + //{ + $valoresn[] = $v; + //} + $valores = $valoresn; + } + } + if ($tipo == "media") + { + $chaves = array_keys($conta); + foreach ($chaves as $c) + { + $valores[$c] = $soma[$c] / $conta[$c]; + } + } + return ($valores); +} + ?> \ No newline at end of file diff --git a/classesphp/mapa_controle.php b/classesphp/mapa_controle.php index fc9dceb..a7b0c69 100644 --- a/classesphp/mapa_controle.php +++ b/classesphp/mapa_controle.php @@ -1802,10 +1802,20 @@ Faz a fusão da imagem de um gráfico com a imagem do mapa atual. */ case "FUSAOGRAFICO": include_once("graficos.php"); - //$_SESSION["utilizacgi"] = "nao"; - //$utilizacgi = "nao"; restauraCon($map_file,$postgis_mapa); - $retorno = fusaoGrafico(); + include_once("classe_imagem.php"); + if($map_file != "") + { + $mapa = ms_newMapObj($map_file); + $imgo = $mapa->draw(); + $nome = ($imgo->imagepath).nomeRandomico().".png"; + $imgo->saveImage($nome); + $imagem = ($imgo->imageurl).basename($nome); + } + $m = new Imagem(dirname($dir_tmp).$imagem); + $i = $m->fundeIm(dirname($dir_tmp).$grafico); + imagepng($i,dirname($dir_tmp).$imagem); + $retorno = $imagem; break; /* Valor: GRAFICOESTRELA diff --git a/guia_de_migracao.txt b/guia_de_migracao.txt index 7288834..6d74630 100644 --- a/guia_de_migracao.txt +++ b/guia_de_migracao.txt @@ -26,6 +26,17 @@ Para a versão 4.7 - Os layers com a ZEE e base raster do MMA foram removidos dos mapfiles de inicialização - ms_configura.php - Nova variável de configuração para indicar o local das bibliotecas adicionais do software R: R_libpath +- Funções removidas de classesphp/funcoes_gerais.php e inseridas nos respectivos programas que as chamam: + classesRasterI + fusaoGrafico + executaR + criaImagemR + pegaValores + pegaValoresM + agrupaValores + reSLD + criaDirMapa + permissoesarquivo ------------------------------------------------------------------------------------------------- Para a versão 4.6 diff --git a/ms_criamapa.php b/ms_criamapa.php index 48b356a..c45dfe7 100644 --- a/ms_criamapa.php +++ b/ms_criamapa.php @@ -83,7 +83,7 @@ interface - nome da interface que será utilizada para abrir o mapa. As in perfil - perfil utilizado para restringir os menus de temas. ms_criamapa.php?perfil=usuário1 -caminho - caminho para os programas que serão incluídos com "include". Ao chamar o programa ms_criamapa.php por meio de "include" é necessário especificar essa variável para indicar o caminho correto do i3geo. +caminho - caminho relativo que indica o local onde a interface do mapa esta localizada. pontos - lista de coordenadas x e y que serão adicionadas como pontos no mapa. @@ -130,14 +130,6 @@ gvsiggvp - endereço no servidor do arquivo de projeto gvSig (gvp) que ser gvsigview - nome da view do projeto gvSig (http://localhost/i3geo/ms_criamapa.php?gvsiggvp=c:\temp\teste.gvp&gvsigview=Untitled - 0) */ -/* -Verifica a variável $caminho - -Essa variável deve ser definida em programas que utilizam o ms_criamapa.php via include. -Indica onde está o diretório i3geo para que os includes seguintes possam ser localizados. -$caminho é sempre colocada antes do nome dos arquivos que serão incluídos, p.e., -require_once ($caminho."classesphp/carrega_ext.php"); -*/ //$_COOKIE = array(); // //quando $funcao existe, é pq o ms_criamapa.php está sendo utilizado como um include em classesphp/mapa_controle.php @@ -149,28 +141,23 @@ else {error_reporting(E_ALL);$debug="sim";} if(!isset($funcao)) {ob_end_clean();} -if (!isset($caminho)) -{$caminho = "";} -if (!file_exists($caminho."classesphp/carrega_ext.php")) -{echo " Nao foi possivel localizar o diretório classephp. Provavelmente vc precisara definir a variavel $caminho";exit;} -if (isset($parurl["caminho"])) -{$caminho = $parurl["caminho"];} /* Carrega as extensões PHP Carrega as extensões utilizadas no programa de inicialização. A carga das extensões geralmente é necessária nas instalações windows (ms4w) ou quando as mesmas não são carregadas pela própria inicialização do PHP. */ -include_once ($caminho."classesphp/carrega_ext.php"); +include_once (__DIR__."/classesphp/carrega_ext.php"); /* Include dos arquivos PHP. Inclui os programas php com funções utilizadas pelo ms_criamapa.php */ -include_once ($caminho."classesphp/pega_variaveis.php"); -include_once ($caminho."classesphp/funcoes_gerais.php"); +include_once (__DIR__."/classesphp/pega_variaveis.php"); +include_once (__DIR__."/classesphp/funcoes_gerais.php"); $versao = versao(); $versao = $versao["principal"]; + // //verifica a sessao que controla o login do usuario // @@ -191,7 +178,7 @@ if(empty($_SESSION["usuario"])){ if(isset($base)) {$tempBaseX = $base;} if(!isset($dir_tmp)) -{include_once ($caminho."ms_configura.php");} +{include_once (__DIR__."/ms_configura.php");} if(isset($tempBaseX) && $tempBaseX != "") {$base = $tempBaseX;} /* @@ -467,7 +454,7 @@ if(isset($url_wms)) adaptaLayers(); if (file_exists($locaplic."/pacotes/geoip") && file_exists($locaplic."/pacotes/geoip/GeoLiteCity.dat")) -{require_once($caminho."ms_registraip.php");} +{require_once(__DIR__."/ms_registraip.php");} //echo $tmpfname;exit; if ($interface != "mashup") {abreInterface();} @@ -518,7 +505,7 @@ function abreInterface(){ { if(file_exists($caminho."interface/".$interface)) {include_once($caminho."interface/".$interface);} - else + else {include_once($interface);} exit; } @@ -526,7 +513,7 @@ function abreInterface(){ { if(file_exists($caminho."interface/".$interface)) {$urln = $caminho."interface/".$interface."?".session_id();} - else + else {$urln = $interface."?".session_id();} if(!headers_sent()) {header("Location:".$urln);} @@ -726,7 +713,7 @@ Mostra a mensagem de aguarde */ function mostraAguarde() { - global $interface,$caminho,$mensagemInicia,$tituloInstituicao; + global $interface,$mensagemInicia,$tituloInstituicao; if (!isset($interface)) { echo ""; @@ -735,11 +722,11 @@ function mostraAguarde() echo '
'; echo '

'.$mensagemInicia.'
Aguarde...preparando o mapa

'; echo ''; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; echo "
"; echo ''; } @@ -1128,5 +1115,49 @@ function erroCriacao(){ } ms_ResetErrorList(); } +/* +Function: criaDirMapa + +Cria os diretórios temporários para a aplicação. + +Parametro: + +$dir_tmp {string} - Diretório temporário (no servidor) utilizado pelo mapserver. + +$$cachedir {string} - Diretório de cache temporário definido no ms_configura.php + +Retorno: + +{boleano} +*/ +function criaDirMapa($dir_tmp,$cachedir="") +{ + if(!file_exists($dir_tmp)){ + @mkdir ($dir_tmp,0777); + } + if(file_exists($dir_tmp)) + { + $tmpdirname = nomeRandomico(); + $crdir = @mkdir ($dir_tmp."/".$tmpdirname,0777); + $crdiri = @mkdir ($dir_tmp."/img".$tmpdirname,0777); + $mapfile = $dir_tmp."/".$tmpdirname."/".$tmpdirname.".map"; + $tmpimgname = "img".$tmpdirname; + @mkdir($dir_tmp."/comum",0777); + if($cachedir == ""){ + @mkdir($dir_tmp."/cache",0777); + @mkdir($dir_tmp."/cache/googlemaps",0777); + } + else{ + @mkdir($cachedir,0777); + @mkdir($cachedir."/googlemaps",0777); + } + if(file_exists($dir_tmp."/".$tmpdirname)) + return array($mapfile,$tmpdirname,$tmpimgname); + else + {return false;} + } + else + {return false;} +} ?> \ No newline at end of file diff --git a/testainstal.php b/testainstal.php index f03b43c..35738e5 100644 --- a/testainstal.php +++ b/testainstal.php @@ -302,6 +302,68 @@ $nome = ($imgo->imageurl).basename($nome); echo "

"; function saindo($men){echo "
Erro. Saindo...".$men;} +/* +Function: permissoesarquivo + +Retorna as permissões de um arquivo + +Parametros: + +$arquivo +*/ +function permissoesarquivo($arquivo){ + $perms = fileperms($arquivo); + + if (($perms & 0xC000) == 0xC000) { + // Socket + $info = 's'; + } elseif (($perms & 0xA000) == 0xA000) { + // Symbolic Link + $info = 'l'; + } elseif (($perms & 0x8000) == 0x8000) { + // Regular + $info = '-'; + } elseif (($perms & 0x6000) == 0x6000) { + // Block special + $info = 'b'; + } elseif (($perms & 0x4000) == 0x4000) { + // Directory + $info = 'd'; + } elseif (($perms & 0x2000) == 0x2000) { + // Character special + $info = 'c'; + } elseif (($perms & 0x1000) == 0x1000) { + // FIFO pipe + $info = 'p'; + } else { + // Unknown + $info = 'u'; + } + + // Owner + $info .= (($perms & 0x0100) ? 'r' : '-'); + $info .= (($perms & 0x0080) ? 'w' : '-'); + $info .= (($perms & 0x0040) ? + (($perms & 0x0800) ? 's' : 'x' ) : + (($perms & 0x0800) ? 'S' : '-')); + + // Group + $info .= (($perms & 0x0020) ? 'r' : '-'); + $info .= (($perms & 0x0010) ? 'w' : '-'); + $info .= (($perms & 0x0008) ? + (($perms & 0x0400) ? 's' : 'x' ) : + (($perms & 0x0400) ? 'S' : '-')); + + // World + $info .= (($perms & 0x0004) ? 'r' : '-'); + $info .= (($perms & 0x0002) ? 'w' : '-'); + $info .= (($perms & 0x0001) ? + (($perms & 0x0200) ? 't' : 'x' ) : + (($perms & 0x0200) ? 'T' : '-')); + + return $info; +} + ?>