File manipulation in php

0

I need to find functions in .php files using the same php language ...

guys ... please .. help me ... I stayed away from the codes and got a job as a php programmer ...

I really need a force ... I'm working hard to keep on the job and to remind myself of the programming itself ...

Well .. I made the code, but this one giving error when opening the file ... follow the code

class ListaDeFuncoes{
    
private $diretorio="";

function ListaDeFuncoes($diretorio){ //construtor recebe um diretorio para acessar um arquivo
    $this->diretorio = $diretorio;
}

private function abreArquivo(){
    return fopen($this->diretorio,"r"); //abre um arquivo em modo somente leitura
}

private function leArquivo(){ //retorna um array com todas as linhas do arquivo
    $arquivo = $this->abreArquivo();
    if(!feof($arquivo)){
        echo "ERRO! Acesso negado ou arquivo inexiste.";
        die();
    }
    if($arquivo){
        while(($linha = fgets($arquivo)) != false){
            $linhas[] = $linha;

        }
        $this->fechaArquivo($arquivo);
        return $linhas;
    }
}

public function listarFuncoes(){
    $linhas = $this->leArquivo();
    $pos1 = 0; //posição do inicio da string
    $pos2 = 0; //posição do final da string
    foreach ($linhas as $linha){
        $pos1 = stripos($linha, "function");//pega o inicio da declaração da função função na string
        $pos2 = stripos($linha, "{");//pega o final da declaração da função na string

        if(($pos1 != 0)&&($pos2 != 0)){
            echo substr($linha,$pos1, $pos2).'/n'; //caso encontre os dois na mesma linha, adiciona a função ao vetor de funcoes
        }elseif($pos1!=0){
            $funcao = substr($linha,$pos1,PHP_EOL);
            $pos1=0;
        }    
        if($pos2!=0){
           $funcao = $funcao+substr($linha,0,$pos2);
           $pos2=0;
        }
        echo $funcao.'/n';
    }
}

private function fechaArquivo($arquivo){
    fclose($arquivo);
}
}

detail, I'm using the same class file to test itself!

and this is the test ...

require_once'ListaFuncoes.php';
    $diretorio = "F:\Neto\Dev\Zend_workspace\RemoteSystemsTempFiles\LOCALHOST\f\Neto\Dev\Zend_workspace\ListaFuncoes.php";
    $lista = new ListaDeFuncoes($diretorio);
    $lista->listarFuncoes();

and this is the error:

  

Warning:   fopen (F: \ Net \ Dev \ Zend_workspace \ RemoteSystemsTempFiles \ LOCALHOST \ Net \ Dev \ Zend_workspace \ ListFuncoes.php):   failed to open stream: Invalid argument in   F: \ Net \ Dev \ Zend_workspace \ RemoteSystemsTempFiles \ LOCALHOST \ f \ Net \ Dev \ Zend_workspace \ ListFunctions.php   online 25

     

Warning: feof () expects parameter 1 to be resource, boolean given in   F: \ Net \ Dev \ Zend_workspace \ RemoteSystemsTempFiles \ LOCALHOST \ f \ Net \ Dev \ Zend_workspace \ ListFunctions.php   on line 30 ERROR! Access is denied or file is missing.

    
asked by anonymous 06.06.2018 / 01:24

3 answers

0

I have changed my class tbm ... it is not picking up when the function starts with the keys on the bottom line:

class ListaDeFuncoes{

    static function listarFuncoes($diretorio){
        $linhas = file($diretorio);
        $funcoes = array();
        $funcao = "";
        $pos1 = 0; //posição do inicio da string
        $pos2 = 0; //posição do final da string
        foreach ($linhas as $linha){
            $pos1 = stripos($linha, "function");//pega o inicio da declaração da função função na string
            $pos2 = stripos($linha, "{");//pega o final da declaração da função na string

            if(($pos1 != 0)&&($pos2 != 0)){
                $funcoes[] = substr($linha,$pos1, $pos2)."\n"; //caso encontre os dois na mesma linha, adiciona a função ao vetor de funcoes
            }elseif($pos1!=0){  //ESTA PARTE NAO ESTA FUNCIONANDO
                $funcao = substr($linha,$pos1,PHP_EOL);
                $pos1=0;
            }    
            if($pos2 != 0){ //ESTA PARTE NAO ESTA FUNCIONANDO
               $funcao = $funcao."".substr($linha,0,$pos2)."\n";
               $pos2=0;
            }
            $funcoes[]=$funcao;   
        }
        echo nl2br("<h2>Lista de Funcoes</h2>\n");
        echo nl2br($funcao);
    }

}

Does anyone have any idea what I can do?

    
06.06.2018 / 16:54
0

follows:

class ListaDeFuncoes{

//    private function abreArquivo($diretorio){
//        return file($diretorio); //abre um arquivo em modo somente leitura
//    }

    static function listarFuncoes($diretorio){
        $linhas = file($diretorio);
        $funcoes = array();
        $funcao = "";
        $pos1 = 0; //posição do inicio da string
        $pos2 = 0; //posição do final da string
        foreach ($linhas as $linha){
            $pos1 = stripos($linha, "function");//pega o inicio da declaração da função função na string
            $pos2 = stripos($linha, "{");//pega o final da declaração da função na string

            if(($pos1 != 0)&&($pos2 != 0)){
                $funcoes[] = substr($linha,$pos1, $pos2)."\n"; //caso encontre os dois na mesma linha, adiciona a função ao vetor de funcoes
            }elseif($pos1!=0){
                $funcao = substr($linha,$pos1,PHP_EOL);
                $pos1=0;
            }    
            if($pos2 != 0){
               $funcao = $funcao."".substr($linha,0,$pos2)."\n";
               $pos2=0;
            }
            $funcoes[]=$funcao;   
        }
        echo nl2br($funcao);
    }

}

the file to test the class:

<?php
    require_once'ListaFuncoes.php';
    $diretorio = "G:\Programming 2018\Devs\arquivo.txt";
    ListaDeFuncoes::listarFuncoes($diretorio);
?>

The file I am testing (it's a .txt, however, it would have to be .php, which is denied access when the extension is .php), and it can not find the last function because the keys are on the line below the function declaration!

  

function test () {}

     

function test2 ($ arg = array ()) {}

     

function test3 ($ arg1 = array (), $ arg2 = array ()) {}

     

function test4 ($ arg1 = array (), $ arg2 = array ()) {}

I just need to get the last function and then read the file in php format!

Thank you !!

    
06.06.2018 / 14:08
0
<?php

class ListaDeFuncoes
{
    private $diretorio = "";

    function __construct($diretorio) 
    {
        $this->diretorio = $diretorio;
    }

    function listarFuncoes($teste=false, $aa=1)
    {
        $result = [];

        foreach (new DirectoryIterator($this->diretorio) as $fileInfo) {
            if (!$fileInfo->isFile()) continue;
            if ($fileInfo->getExtension() !== 'php') continue;
            if (!$fileInfo->isReadable()) continue;

            preg_match_all("/function (\w+)\s*\((.*?)\)/", file_get_contents($fileInfo->getPathname()), $functions);

            $resultFile = [
                'name' => $fileInfo->getFilename(),
                'functions' => []
            ];

            foreach ($functions[1] as $i => $name) {
                $resultFile['functions'][] = [
                    'name' => $name,
                    'arguments' => explode(',', preg_replace('/\s+/', '', $functions[2][$i]))
                ];
            }

            $result[] = $resultFile;
        }

        echo '<pre>';
        print_r($result);
    }

-

<?php
require_once 'ListaFuncoes.php';
$diretorio = "F:\Neto\Dev\Zend_workspace\RemoteSystemsTempFiles\LOCALHOST\f\Neto\Dev\Zend_workspace";
$lista = new ListaDeFuncoes($diretorio);
$lista->listarFuncoes();
    
06.06.2018 / 04:45