Fabyo 66 Denunciar post Postado Abril 25, 2005 Curso de PHP online Modulo 9 Introdução o Manipulação de arquivos texto o Funções do PHP para manipulação de arquivos o Criando um mural de recados em arquivos texto o Expressões Regulares (E.R.) Manipulação de arquivos texto Muitas vezes precisamos guardar dados simples, e por isso não teria a necessidade de um SGBD Basta um arquivo de texto, sendo esse modo mais simples e rápido que um SGBD. Só lembrando que se tratando de um arquivo de texto ele torna seu sistema mais frágil e sem segurança Como por exemplo, qualquer pessoa pode abrir o arquivo de texto e examinar tudo que tem dentro dele, ou até mesmo apagar ele. Sem contar também que o arquivo de texto tem que ser usado para escrita num modo exclusivo se não fizer isso pode perder dados já que duas pessoas ou mais estiverem usando um sistema em base de texto e na hora de gravar elas não podem gravar ao mesmo tempo, por isso você terá que criar uma proteção para o arquivo na hora de gravar e liberar quando não estiver gravando, um exemplo desse tipo de falha é o banco acess antigo. Essa função de proteção do arquivo para escrita e outras vocês vão ver logo mais nesse curso. E sobre o que eu falei de segurança e fragilidade dos arquivos texto não é querendo te desencorajar a usar arquivos textos, pelo contrário. É só um aviso importante que você precisava saber antes de começar a manipular arquivos textos, muitos sistemas usam base de texto para guardar dado ou até configurações do sistema, enquetes simples, contadores de acesso ou visitas ou clicks, equipamentos como micro terminais, catracas eletrônicas, sistemas de telefonia, etc..., como você pode ver muitos sistemas ou equipamentos usam base em arquivos de texto. Eu posso citar um exemplo as catracas eletrônicas, não conheço todas as marcas mas a marca Wilbor usa base de textos e ela grava o número do cartão do funcionário, data e hora de entrada ou saída, para que o sistema do RH possa colher esses dados e controlar as faltas do funcionário e fazer o pagamento com horas extras etc..., outro sistema muito usado e conhecido em grandes empresas é um sistema de PABX que controla as ligações da empresa inteira como quem ligou e pra onde, data, horário, fazendo um relatório completo das ligações de entrada e saída da empresa, e esse sistema também usam base de textos não digo todos, mas a maioria como por exemplo, da marca Intelbras. Por isso é bom você saber manipular arquivos de texto caso algum dia precise. Eu por exemplo fiz um sistema completo para colher os dados de uma catraca eletrônica da empresa em que eu trabalho , já que o próprio sistema que vem com ela é muito simples e limitado, da pra falar de muito mais utilidades de usar arquivos de texto, mas vou parar por aqui. Obs.: Não estou falando em nenhum momento que uma base em arquivo de texto é melhor que um SGBD só estou falando as utilidades e vantagens de usar base de texto Sem comparar com SGBD. Abertura de um arquivo de texto fopen fopen Abri um arquivo ou uma URL www.php.net/fopen Descrição resource fopen ( string filename, string mode [, int use_include_path [, resource zcontext]]) mode Descrição 'r' Abre somente leitura; coloca o ponteiro do arquico no começo do arquivo. 'r+' Abre para leitura e escrita; coloca o ponteiro do arquivo no começo do arquivo. 'w' Abre para escrita somente; coloca o ponteiro do arquivo no começo do arquivo e diminui (trunca) o tamanho do arquivo para zero. Se o arquivo não existe, tenta criá-lo. 'w+' Abre o arquivo para leitura e escrita; coloca o ponteiro do arquivo no começo e diminui (trunca) o tamanho do arquivo para zero. Se o arquivo não existe, tenta criá-lo. 'a' Abre para escrita somente; coloca o ponteiro do arquivo no final. Se o arquivo não existe, tenta criá-lo. 'a+' Abre o arquivo para leitura e escrita; coloca o ponteiro do arquivo no final. Se o arquivo não existe, tenta criá-lo. 'x' Cria e abre o arquivo para escrita somente; coloca o ponteiro no início do arquivo. Se o arquivo já existe, a chamada a fopen() irá falhar, retornando FALSE e gerando um erro nível E_WARNING. Se o arquivo não existe, tenta criá-lo. Isto é o equivalente a informar as flags O_EXCL|O_CREAT numa chamada a open(2). Esta opção é suportada no PHP 4.3.2 e posteriores, e somente funciona em arquivos locais. 'x+' Cria e abre um arquivo para escrita e leitura; coloca o ponteiro do arquivo no início. Se o arquivo já existe, a chamada a fopen() irá falhar, retornando FALSE e gerando um erro nível E_WARNING. Se o arquivo não existe, tenta criá-lo. Isto é o equivalente a informar as flags O_EXCL|O_CREAT numa chamada a open(2). Esta opção é suportada no PHP 4.3.2 e posteriores, e somente funciona em arquivos locais. O Windows oferece uma flag de tradução do modo texto ('t') que traduz, transparentemente, \n para \r\n quando trabalhando no arquivo. Em contraste, você também pode utilizar 'b' para forçar o modo binário, que não irá traduzir o arquivo. Para usar essas flags, informe ou 'b' ou 't' como o último caracter no parâmetro mode. O modo do sistema de tradução default depende da versao da SAPI sob o qual você está usando o PHP, então é encorajado a sempre utilizar a flag apropriada por razões de portabilidade. Você deve usar o modo 't' se estiver trabalhando em arquivos texto simples e utilizar \n para delimitar as linhas em seu script, de forma que você pode esperar que eles sejam lidos em outras aplicações como o Notepad. Você deve usar 'b' em todos os outros casos. Se você não especificar a flag 'b' quando trabalhando com arquivos binários, você pode experimentar problemas estranhos com seus dados, incluindo arquivos de imagens danificados e problemas estranhos com os caracteres \r\n. Para portabilidade, é estremamente recomendado que você sempre utilize a flag 'b' quando abrindo arquivos com fopen(). Novamente, por portabilidade, é estremamente recomendável que você re-escreva seu código nas situações em que o modo 't' deva ser utilizado para corrigir os fim de linha, onde o modo 'b' não deva ser utilizado. A partir do PHP 4.3.2, o modo padrão é configurado para binário em todas as plataformas que distinguem entre modo texto e binário. Se você está tendo problemas em seus scripts depois de um upgrade, tente acrescentar a flag't' como um paliativo até que você tenha tornado seus scripts portáveis como mencionado acima. Você pode usar o terceiro pparâmetro opcional como "1", se você quiser procurar pelo arquivo no include_path também. Se a abertura falhar, a função retorna FALSE e um erro nível E_WARNING é gerado. Você pode utilizar @ para suprimir esse alerta. Exemplo 1. exemplo do fopen() PHP <?php $handle = fopen ("/home/rasmus/file.txt", "r"); $handle = fopen ("/home/rasmus/file.gif", "wb"); $handle = fopen ("http://www.example.com/", "r"); $handle = fopen ("ftp://user:password@example.com/somefile.txt", "w"); ?> Se você está tendo problemas com a leitura e gravação para arquivos e você está usando a versão de modulo de servidor do PHP, lembre-se de que os arquivos e diretórios que você está usando precisam ser acessíveis ao processo do servidor HTTP. Na plataforma Windows, tenha cuidado para usar uma segunda barra invertida (escape) nos caminhos de arquivos, ou usar a barra normal. <?php $handle = fopen ("c:\\data\\info.txt", "r"); ?> fclose fclose fclose -- Fecha um ponteiro de arquivo aberto Descrição bool fclose ( int handle) O arquivo apontado por handle é fechado. Retorna TRUE em caso de sucesso ou FALSE em falhas. O ponteiro para o arquivo tem que ser válido e tem que apontar para um arquivo aberto por fopen() ou fsockopen(). Exemplo 1. Exemplo fclose() PHP <?php $handle = fopen('qualquerarquivo.txt', 'r'); fclose($handle); ?> readfile readfile -- Lê e exibe o conteúdo de um arquivo Descrição int readfile ( string nomedoarquivo [, bool use_include_path [, resource context]]) Lê um arquivo e escreve o seu conteúdo para o buffer de saída (output buffer). Retorna o número de bytes lido do arquivo. Se um error ocorrer, retorna FALSE e ao menos que a função seja chamada como @readfile(), uma mensagem de erro será impressa. Dica: Você pode usar uma URL com esta função se fopen wrappers estiver habilitado. Veja fopen() para mais detalhes em como especificar o nome do arquivo e Apêndice L para uma lista de protocolos URL suportados. Você pode usar o segundo parâmetro opcional e o configurar para TRUE, se você quiser procurar o arquivo no include_path também. PHP <?php $bytes = readfile("teste.txt");// le arquivo na mesma linha echo $bytes; ?> file file -- Le um arquivo inteiro para um array Descrição array file ( string filename [, int use_include_path [, int use_include_path]]) PHP <?php $array = file ("teste.txt"); foreach ($array as $linha) echo $linha."<br>"; ?> Idêntico a readfile(), exceto que file() retorna o arquivo em um array. Cada elemento do array corresponde a uma linha no arquivo, inclusive com o caracter de nova linha. Em caso de falha, file() retorna FALSE. Você pode usar o parâmetro opcional use_include_path como "1", se você deseja procurar o arquivo no include_path também. PHP <?php // Le um arquivo em um array. Nesse exemplo você pode obter via HTTP para obter // o código fonte HTML de uma URL. $lines = file ('http://www.exemplo.com/'); // Roda através do array, mostrando o fonte HTML com numeração de linhas. foreach ($lines as $line_num => $line) { echo "Linha #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br>\n"; } // Outro exemplo, onde obtemos a página web inteira como uma string. Veja também file_get_contents(). $html = implode ('', file ('http://www.exemplo.com/')); ?> Dica: Você pode usar uma URL com esta função se fopen wrappers estiver habilitado. Veja fopen() para mais detalhes em como especificar o nome do arquivo e Apêndice L para uma lista de protocolos URL suportados. Nota: Cada linha do array resultante terá os caracteres de fim de linha, então você precisa utilizar trim() se não quiser esses caracteres presentes. Nota: Se você está tendo problemas com o PHP no reconhecimento do final de linha quando criando ou lendo arquivos num computador Macintosh, você pode habilitar a opção auto_detect_line_endings. Nota: A partir do PHP 4.3.0, você pode utilizar file_get_contents() para retornar o conteúdo de um arquivo como uma string. No PHP 4.3.0 file() se tornou segura para arquivos binários. file_get_contents file_get_contents -- Le todo o conteúdo de um arquivo para uma string Descrição string file_get_contents ( string filename [, int use_include_path [, resource context]]) Idêntico a file(), exceto que file_get_contents() retorna o arquivo em uma string. file_get_contents() é o método preferível para ser ler o conteúdo de um arquivo em uma string. Ela usa tecnicas de mapeamento de memório suportadas em seu sistema operacional para melhorar a performance. Nota: Esta função é compatível com dados binários Dica: Você pode usar uma URL com esta função se fopen wrappers estiver habilitado. Veja fopen() para mais detalhes em como especificar o nome do arquivo e Apêndice L para uma lista de protocolos URL suportados. Nota: O suporte ao contexto foi acrescentado no PHP 5.0.0. PHP <? $conteudo = file_get_contents ("teste.txt"); echo $conteudo; ?> fread fread -- Leitura binary-safe de arquivo Descrição string fread ( resource handle, int length) fread() lê até length bytes do ponteiro de arquivo informado em handle. A leitura é interrompida quando length bytes foram lidos ou o fim do arquivo (eof) foi alcançado, ou (para streams de rede) quando um pacote se torna disponível, o que ocorrer primeiro. PHP <?php $ponteiro = fopen ("teste.txt", "r"); $conteudo = fread ($ponteiro, 30); echo $conteudo; fclose ($ponteiro); ?> PHP <?php // ler o conteúdo do arquivo para uma string $filename = "/usr/local/qualquer.txt"; $handle = fopen ($filename, "r"); $conteudo = fread ($handle, filesize ($filename)); fclose ($handle); ?> Atenção Em sistemas que diferenciam entre arquivos binários e texto (por exemplo Windows) o arquivo tem que ser aberto com 'b' incluído como parametro na função fopen(). PHP <?php $filename = "c:\\files\\figura.gif"; $handle = fopen ($filename, "rb"); $conteudo = fread ($handle, filesize ($filename)); fclose ($handle); ?> Atenção Quando lendo de streams de rede ou canais (pipes), como aqueles retornados pela leitura de arquivos remotos ou de popen() e proc_open(), a leitura irá parar depois que um pacote se torna disponível. Isto significa que você deve juntar os dados em blocos como demonstrado no exemplo seguinte. PHP <?php $handle = fopen ("http://www.example.com/", "rb"); $conteudo = ""; do { $data = fread($handle, 8192); if (strlen($data) == 0) { break; } $conteudo .= $data; } while(true); fclose ($handle); ?> Nota: O exemplo acima tem uma performance melhor que o jeito comum usando while(!feof()), porque ele economiza o overhead de uma chamada de função por iteração. Nota: Se você quer apenas pegar o conteúdo de um arquivo para uma string, utilize file_get_contents() que tem uma performance ainda melhor que o código acima. fgets fgets -- Le uma linha de um ponteiro de arquivo Descrição string fgets ( resource handle [, int length]) Retorna uma string com até length - 1 bytes lidos do arquivo apontado por handle. A leitura acaba quando length - 1 bytes foram lidos, encontra-se um fim de linha (newline) (que é incluido no valor retornado) ou no fim de arquivo (EOF) (o que acontecer primeiro). Se nenhum length for informado, o default é 1Kb, ou 1024 bytes. Se um erro ocorrer, retorna FALSE. Equívocos comuns: Pessoas acostumadas a semântica do fgets em 'C' devem notar a diferenca em como o fim do arquivo (EOF) é retornado. O ponteiro para o arquivo deve ser válido e deve apontar para um arquivo aberto com sucesso por fopen(), popen() ou fsockopen(). Um simples exemplo segue: Exemplo 1. Lendo um arquivo linha a linha PHP <?php $handle = fopen ("/tmp/arquivodeentrada.txt", "r"); while (!feof ($handle)) { $buffer = fgets($handle, 4096); echo $buffer; } fclose ($handle); ?> PHP <? $ponteiro = fopen ("teste.txt", "r"); while (!feof ($ponteiro)) { $linha = fgets($ponteiro, 4096); echo $linha."<br>"; } fclose ($ponteiro); ?> Nota: O parâmetro length se tornou opcional a partir do PHP 4.2.0, e se omitido, tem default para 1024 bytes para o comprimento da linha. A partir do PHP 4.3, omitindo length fará continuar a leitura a partir do stream até encontrar o fim da linha. Se a maioria das linhas no arquivo forem todar maiores que 8 Kb, haverá mais eficiência de recursos se seus scripts informarem o comprimento máximo das linhas. Nota: Esta função é binary safe a partir do PHP 4.3. Versões anteriores não são seguras para dados binários. Nota: Se você está tendo problemas com o PHP no reconhecimento do final de linha quando criando ou lendo arquivos num computador Macintosh, você pode habilitar a opção auto_detect_line_endings. fwrite fwrite -- Gravação em arquivos binary-safe Descrição int fwrite ( resource handle, string string [, int comprimento]) fwrite() grava os conteúdos de string para o stream de arquivo apontado por handle. Se o argumento comprimento é dado, a gravação irá parar depois de que comprimento bytes foram escritos ou o fim da string é alcançada, o que ocorrer primeiro. fwrite() retorna o número de bytes gravados, ou FALSE em caso de erro. Note que se o argumento comprimento é dado, então a opção de configuração magic_quotes_runtime será ignorada e nenhuma barra será retirada do string. Nota: Em sistemas que diferenciam entre arquivos binários e texto (por exemplo Windows) o arquivo tem que ser aberto com 'b' incluído no parametro mode do fopen(). Exemplo fwrite PHP <?php $filename = 'teste.txt'; $somecontent = "Acrescentando isto no arquivo\n"; // Tendo certeza que o arquivo existe e que há permissão de escrita primeiro. if (is_writable($filename)) { // Em nosso exemplo, nós estamos abrindo $filename em modo de append (acréscimo). // O ponteiro do arquivo estará no final dele desde // que será aqui que $somecontent será escrito com fwrite(). if (!$handle = fopen($filename, 'a')) { print "Erro abrindo arquivo ($filename)"; exit; } // Escrevendo $somecontent para o arquivo aberto. if (!fwrite($handle, $somecontent)) { print "Erro escrevendo no arquivo ($filename)"; exit; } print "Sucesso: escrito ($somecontent) no arquivo ($filename)"; fclose($); } else { print "The file $filename is not writable"; } ?> fputs fputs -- Sinônimo de fwrite() flock flock -- Monitor de travamento de arquivos portátil Descrição bool flock ( int handle, int operation [, int &wouldblock] ) O PHP suporta uma maneira portável de lock arquivos inteiros em uma advisory way (que significa que todos os programas acessando tem que usar o mesmo tipo de travamento ou não irá funcionar). flock() opera em fp, que tem que ser um ponteiro de arquivo aberto com sucesso. operacao é um dos seguintes valores: Para obter um lock compartilhado (leitura), utilize operation como LOCK_SH (ou use 1 se a versão do PHP for anterior a 4.0.1). Para obter um lock exclusivo (gravação), utilize operacao como LOCK_EX (ou use 2 se a versão do PHP for anterior a 4.0.1). Para retirar um lock (compartilhado ou exclusivo), uyilize operacao como LOCK_UN (ou use 3 se a versão do PHP for anterior a 4.0.1). Se você não quer usar flock() para bloquear enquanto travando, adicione LOCK_NB (4 se a versão do PHP for anterior a 4.0.1) a operacao. flock() permite a você fazer um simples modelo leitura/gravação (reader/writer) que pode ser usado em virtualmente todas as plataformas (incluindo a maior parte dos Unixes e até mesmo Windows). O terceiro argumento opcional é usado como TRUE se a lock irá bloquear (EWOULDBLOCK errno condition). Retorna TRUE em caso de sucesso ou FALSE em falhas. Exemplo 1. flock() example PHP <?php $fp = fopen("/tmp/lock.txt", "w+"); if (flock($fp, LOCK_EX)) { // faca um lock exclusivo fwrite($fp, "escrevemos algo aqui\n"); flock($fp, LOCK_UN); // libera o lock } else { echo "Não pude travar o arquivo !"; } fclose($fp); ?> Nota: Uma vez que flock() requer um ponteiro de arquivo, você precisa utilizar um lock de arquivo especial para proteger i acessi a um arquivo ao qual você pretende truncar quando abrindo no modo de escrita (com um argumento "w" ou "w+" em fopen()). Atenção flock() não funcionará em NFS ou em qualquer outro sistema de arquivos em rede. Verifique a documentação do seu sistema operacional para mais detalhes. Na maior parte dos sistemas operacionais flock() é implementada no nível do processo. Quando utilizando um servidor com uma API de multiprocessamento (como ISAPI), você não pode confiar em flock() para proteger os arquivos contra outros scripts PHP rodando em threads paralelas da mesma instância do servidor! flock() não é suportado em sistemas de arquivos antiquados como a FAT e seus derivados, e sempre retornará FALSE sob esses ambientes (especialmente para usuários do Windows 98). Criando um mural de recados em arquivos texto vou mostrar como criar um mural de recados bem simples depois vocês podem aperfeiçoar ele como por exemplo deixar só pessoas cadastradas postar uma mensagem, nao deixar dados em branco serem gravados, limitar o tamanho maximo da mensagem, colocar a opção de editar a mensagem ,mas o usuario pode só editar a sua propria mensagem e o admin pode editar todas, é facil fazer tudo isso ,mas como o foco do curso não é fazer sistemas pra ninguem ,mas sim ensinar o caminho das pedras e mostrar os melhores caminhos ,então fica por sua conta essa incrementação do sistema, mas qualquer duvida pode perguntar no forum PHP <html> <body> <form method="post" action="gravar.php"> <table width="100px" border="0" align="center"> <tr> <td>Nome: </td> <td><input name="nome" type="text" size="20" maxlength="20"></td> </tr> <tr> <td>Mensagem:</td> <td> <textarea name="msg" cols="20" rows="3"> </textarea> </td> </tr> <tr> <td><input type="submit" value="Enviar"></td> </tr> </table> </form> </body> </html> <? echo "<hr>"; if(isset($_POST["nome"])) { $fp = fopen("arquivo.txt", "a+"); $nome = trim($_POST["nome"]); $msg = trim($_POST["msg"]); $nome = str_replace("\r\n", " ", $nome); $msg = str_replace("\r\n", " ", $msg); $data = date("d/m/Y H:i"); fwrite($fp, "$nome|$msg|$data\n"); fclose($fp); $fp = file("arquivo.txt"); for( $i = 0; $i < count($fp); $i++) { $arr = explode("|", $fp[$i]); echo "Data: $arr[2]<br />"; echo "Nome: $arr[0]<br />"; echo "Mensagem: $arr[1]<br /><hr>"; } } ?> Funções do PHP para manipulação de arquivos Índice basename -- Retorna a parte nome do arquivo do caminho/path chgrp -- Modifica o grupo do arquivo chmod -- Modifica as permissões do arquivo chown -- Modifica o dono do arquivo clearstatcache -- Limpa as informações em cache de arquivos copy -- Copia arquivo dirname -- Retorna o componente diretório de um caminho/path disk_free_space -- Retorna o espaço disponivel no diretório disk_total_space -- Retorna o tamanho total do diretório diskfreespace -- Sinônimo de disk_free_space() fclose -- Fecha um ponteiro de arquivo aberto feof -- Testa pelo fim-de-arquivo (eof) em um ponteiro de arquivo fflush -- Força a liberação do buffer para um arquivo fgetc -- Le um caracter do ponteiro de arquivo fgetcsv -- Le uma linha do ponteiro de arquivos e a interpreta por campos CSV fgets -- Le uma linha de um ponteiro de arquivo fgetss -- Ler uma linha de um ponteiro de arquivo e retira as tags HTML file_exists -- Checa se um arquivo ou diretório existe file_get_contents -- Le todo o conteúdo de um arquivo para uma string file_put_contents -- Write a string to a file file -- Le um arquivo inteiro para um array fileatime -- Obtém o último horário de acesso do arquivo filectime -- Ler o tempo de modificação do inode do arquivo filegroup -- Lê o grupo do arquivo fileinode -- Lê o inode do arquivo filemtime -- Le o tempo de modificação do arquivo fileowner -- Lê o dono (owner) do arquivo fileperms -- Lê as permissões do arquivo filesize -- Lê o tamanho do arquivo filetype -- Lê o tipo de arquivo (file type) flock -- Monitor de travamento de arquivos portátil fnmatch -- Verifica se um nome de arquivo bate com padrão (wildcards) fopen -- Abri um arquivo ou uma URL fpassthru -- Imprime todo os dados restantes de um ponteiro de arquivo fputcsv -- Format line as CSV and write to file pointer fputs -- Sinônimo de fwrite() fread -- Leitura binary-safe de arquivo fscanf -- Interpreta a leitura de um arquivo de acordo com um formato fseek -- Procura (seeks) em um ponteiro de arquivo fstat -- Lê a informação sobre um arquivo usando um ponteiro de arquivo aberto ftell -- Retorna a posição de leitura/gravação do ponteiro do arquivo ftruncate -- Corta (trunca) um arquivo para um tamanho especificado fwrite -- Gravação em arquivos binary-safe glob -- Localiza diretórios/arquivos que combinem com o padrão is_dir -- Diz se o caminho é um diretório is_executable -- Diz se um arquivo é executável is_file -- Diz se o arquivo é um arquivo comum (não é diretório) is_link -- Diz se o arquivo é um link simbólico (symbolic link) is_readable -- Diz se o arquivo é legivel (readable) is_uploaded_file -- Diz se o arquivo foi uploaded via HTTP POST is_writable -- Diz se pode-se escrever para o arquivo (writable) is_writeable -- Esta é uma função sinônima (alias) de is_writable() link -- Criando um hard link linkinfo -- Ler informações sobre um link lstat -- Obtem informações sobre um arquivo ou link simbólico mkdir -- Criar um diretório move_uploaded_file -- Move um arquivo carregado para uma nova localização parse_ini_file -- Interpreta um arquivo de configuração pathinfo -- Retorna informação sobre o path de um arquivo pclose -- Fecha um processo de um ponteiro de arquivo popen -- Abre um processo como ponteiro de arquivo readfile -- Lê e exibe o conteúdo de um arquivo readlink -- Retornar o alvo de um link simbólico realpath -- Retorna o path absoluto canonicalizado rename -- Renomear um arquivo rewind -- Reinicializa a posição do ponteiro de arquivos para o início rmdir -- Remove um diretório set_file_buffer -- Sinônimo de stream_set_write_buffer() stat -- Obtem informações sobre um arquivo symlink -- Cria um link simbólico tempnam -- Cria um nome de arquivo único tmpfile -- Cria um arquivo temporário touch -- Muda o tempo de modificação do arquivo umask -- Modificar a umask atual unlink -- Apaga um arquivo Expressões Regulares (E.R.) Você ja deve ter visto sobre regex, ER ou Expressões regulares bom pra quem não entende nada de ER e muito mesmo sabia o que era ER esse tutorial é pra você, vou tentar explicar o máximo sobre ER tirando aquela ideia que uma ER parece codigo pra indigena ou outra coisa que não da pra entender nada, meu foco não é deixar você 100% conhecedor de ER ,mas sim mostrar que não é tão complicado fazer ou ler uma er basta prestar atenção e eu vou passar o que eu sei dai você terá uma base pra se aprofundar em conhecer melhor sobre ER, muita gente não sabe usar uma ER por isso acaba fazendo coisas complexas que com uma simples ER faria, depois que você se acostumar a trabalhar com ER você vai ver que é impossivel ficar sem elas bom mas chega de papo e vamos la para o que interessa. O que são Expressões Regulares? Resumindo são simbolos ou caracteres com funções especiais para pesquisar, casar uma frase, palavra ou caracter, substituir ou modificar, por exemplo você pode procurar uma frase por uma palavra a ou você só quer aceitar só palavras minusculas, você quer uma palavra ou caracter que esteja no começo ou no fim de uma frase, você pode validar: emails,cnpj, cpf, numeros, datas, etc... tudo isso que eu falei e muito mais você pode fazer com ER, muito mais facil que tentar fazer uma função pra isso dependendo da função ela seria enorme ao contrario de uma simples ER de uma linha funções do php para manipular as ER ereg() ereg_replace() eregi() eregi_replace() split() spliti() preg_match() preg_match_all() preg_replace() preg_split() sql_regcase() Vou falar mais da próprias ER doque as funções acima caso queria estuda-las procure no manual do php \a Isto combina com o caractere ASCII da campainha (BEL, 0x07). \f Isto combina com o caractere ASCII de nova página (FF, 0x0C). \n Isto combina com o caractere ASCII de nova linha (LF, 0x0A, nova linha do Unix). \r Isto combina com o caractere ASCII de retorno de carro (CR, 0x0D). \t Isto combina com o caractere ASCII de tabulação horizontal (HT, 0x09). \v Isto combina com o caractere ASCII de tabulação vertical (VT, 0x0B). \xhhhh Isto combina com o caractere Unicode correspondente ao número hexadecimal hhhh (entre 0x0000 e 0xFFFF). \0ooo (isto é, \zero ooo) combina com o caractere ASCII/Latin-1 correspondente ao número octal ooo (entre 0 e 0377). . (ponto) Isto combina com qualquer caractere (incluindo nova linha). \d Isto combina com um dígito. É igual a [0-9] \D Isto combina com um caractere que não seja dígito. Igual a [^0-9] ou [^\d] \s Isto combina com um caractere em branco. Praticamente igual a [\t\n\r] \S Combina com o que não seja espaço em branco. Praticamente igual a [^\t\r\n], e igual a [^\s] \w Combina com quaisquer “caractere da palavra”, neste caso quaisquer letras ou dígitos. Note que o caractere de sublinhado (ou underscore - _) não combina, como é o caso com expressões regulares do Perl. Igual a [a-zA-Z0-9] \W Combina com qualquer caractere diferente de palavra - qualquer coisa menos letras ou números. Igual a [^a-zA-Z0-9] ou [^\w] [] lista - (hífen) Denota um intervalo lógico. Deve sempre ser escapado dentro de uma classe. [0-9] mesma coisa que 0123456789 [a-z] mesma coisa que abcdefghij...z ^ (circunflexo) Denota uma classe negativa, se for o primeiro caractere. Deve ser escapado para combinar literalmente, se for o primeiro caractere da classe. \ (barra invertida) O caractere de escape. ^ (circunflexo) Combina com o início da string. $ Combina com o fim da string. () (parênteses esquerdo e direito) Denota sub-padrões. {} (abre e fecha chaves) Denota quantificadores numéricos. | OR lógico. Alternativas separadas. + (sinal de mais) Quantificador, 1 ou mais. * (asterisco) Quantificador, 0 ou mais. ? (ponto de interrogação) Um caractere opcional. Pode ser interpretado como um quantificador, 0 ou 1. [[:alnum:]] Caracteres alfanuméricos. [[:alpha:]] Caracteres alfabéticos. [[:digit:]] Número Decimal (0-9). [[:lower:]] Caracteres minúsculos. [[:upper:]] Caracteres maiúsculos. [[:xdigit:]] Número Hexadecimal . [[:cntrl:]] Caracteres de Controle. [[:print:]] Caracteres imprimíveis. [[:space:]] Caracteres com espaços em branco. [a-z] caracteres do alfabeto (minúsculo). [A-Z] caracteres do alfabeto (maiúsculo). [a-zA-Z] caracteres do alfabeto (maiúsculo e minúsculo). [aeiou] apenas vogais. [^a-z] tudo menos os caracteres do alfabeto (minúsculo). [^aeiou] - apenas consoantes O caractere ^ representa fora do intervalo das vogais. Não está contido entre aeiou.. [^] quando tem um ^ dentro de uma lista[] ele quer dizer pra negar esses simbolos como você viu acima [^a-z] ele nao vai aceitar qualquer palavra minuscula de a a z [a-z] se tiver sem o ^ele vai aceitar só palavras minusculas de a a z pagar casar um caracter que é simbolo da ER você tem que escapa-la exemplo [\^] acima será o ^mesmo e não a função para negar um ^ fora de uma lista[] quer dizer começo e $ quer dizer fim por exemplo se você procura por uma palavra que começe com a se pode fazer assim (^a) exemplo: PHP <? $test = "Fabyo"; echo preg_match("/(^a)/", $test); ?> ele ira retornar falso porque a 1 letra não é a e sim F PHP <? $test = "André"; echo preg_match("/(^a)/", $test); ?> esse exemplo acima continuará retornando falso porque você ta buscando um a minusculo se quiser aceitar maiusculos e minusculos você pode fazer assim: PHP <? $test = "André"; echo preg_match("/(^[aA])/", $test); ?> ou usando um modificador i que aceita minusculas ou maiusculas PHP <? $test = "André"; echo preg_match("/(^a)/i", $test); ?> PHP <? $test = "asp"; echo preg_match(sql_regcase("#(PHP|ASP)#"), $test); ?> sql_regcase -- Cria expressões regulares insensíveis a maiúsculas e minúsculas. (PHP|ASP) o | é um or ( ou ) PHP ou ASP e o sql_regcase vai aceitar tanto minusculas como maiusculas e sobre ("#(PHP|ASP)#") é só pra escapar a ER no preg_match pode ser usado qualquer caracter de escape mas tome cuidado para não usar um muito diferente ou que pode ser usado na ER posso escapar assim: ("/(PHP|ASP)/") ou ("~(PHP|ASP)~") , bom pelo menos agora você vai olhar pra ER e não vai ficar tão confuso querendo descobrir pra que serve a /, # ou ~ outro exemplo só para entender melhor: PHP <? $test = "*? teste"; echo preg_match("#(\*\?\s)#", $test); ?> "#(\*\?\s)#" agora vamos tirar o que não interessa \*\?\s as aspas é pra delimitar a string o # é pra delimitar a ER () era só pra fazer uma sub classe entao restou só "\*\?\s ficou bem mais facil de entender não é mesmo? o \ está escapando o * e o ? mas \s faz parte da funções do ER e ele quer dizer que combina com caractere em branco. $test = "*? teste"; então a função ira retornar verdadeiro pois ela tem "*? teste"; um * e ? depois um espaço e é exatamente o que a gente procurava \*\?\s outra função $code = preg_replace(sql_regcase( "#(\?>|%>)|(<%|<\?)(php)?#") , "<span style='color: red; font-weight: bold;'>\\0</span>", $code ); essa função ira colorir as tags <??>, <%%> ou <?php ?> <?PHP ?> < = < e > = > depois de passar pela função ira colorir as tags ficando por exemplo :<??> no próximo módulo falarei mais sobre ER , explicarei mais sobre as funções da ER e darei mais exemplos pra você não ficar tão perdido como eu ficava quando olhava uma ER Compartilhar este post Link para o post Compartilhar em outros sites
tr374 0 Denunciar post Postado Abril 26, 2005 módulo 8? arruma isso no começo do post.Ótimo curso, vamos prosseguir. Compartilhar este post Link para o post Compartilhar em outros sites
fabfernandes 0 Denunciar post Postado Abril 26, 2005 Pô cara, o curso é um Ctrl+C / Ctr+V do manual do PHP em portugues...Não seria melhor simplesmente dizer pro pessoal ler o manual?? :D Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Abril 26, 2005 Nao é bem por ai nao, mas la só tem exemplos do proprio manual porque fazer outro exemplo ? por exemplo lista de funções modo de execução , pra que eu vou redigitar tudo de novo se tem no manual o intuito do curso é completar o manual e passar algo a mais se você ver eu comentei sobre txt mais de 20 linhas e isso nao ta no manual e as outras explicações que eu coloco nao conta? e sempre to colocando script que eu faço pra ajudar no entendimento e outra coisa esse curso ta seguindo uma linha de raciocinio tem coisas que sao muito claras e faceis de entender entao basta mostrar os exemplos do proprio manual para a pessoa entender em vez de eu colocar um link e ela ter que ficar trocando de paginas toda hora, agora quando o assunto é mais complexo veja se tem copia do manual do php, olha o assunto sobre cookies e outros você vai ver que tem bastante conteudo porque o simples manual nao bastaria bom nao posso agradar a todos mas to fazendo o que eu posso Compartilhar este post Link para o post Compartilhar em outros sites
Wagner Web 0 Denunciar post Postado Abril 26, 2005 Parabéns Fabyo, Eu sei um pouco de PHP, mas ler todos os módulos do seu curso, sempre temos o que aprender. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif []'s Wagner Renzi Compartilhar este post Link para o post Compartilhar em outros sites
Cerrito 0 Denunciar post Postado Abril 26, 2005 sem contar que aqui no curso que o fabyo conduziu aqui tão bem, todos tem suporte, para tirar suasduvidas que com certeza já são de grande valia...coisas que não tem no manual, não em prazo tão curto...só por isso acho que o curso já vale...abraços a todosMarcio Compartilhar este post Link para o post Compartilhar em outros sites
fsphp 0 Denunciar post Postado Abril 28, 2005 O bom disso tudo será que quando o curso terminar já estaremso familiarizados com o Manual, podendo caminhar com as próprias pernas....Sempre achei o Manual um pouco complexo para entender.... agora ele ficará mais simples.Valeu Fabyo. Compartilhar este post Link para o post Compartilhar em outros sites
elizeu 0 Denunciar post Postado Abril 29, 2005 realmente galera... esse intensivão ta ajudando muita gente (inclusive eu). Admiro muito o Fabyo pela presteza, paciencia (...).O curso ta 1000 (to um pouco atrasado... mas to correndo atraz). so tenho q agradecer... e t DEUS te abençoe em todos sentidos.valeu bacana... Compartilhar este post Link para o post Compartilhar em outros sites
diegopsi 0 Denunciar post Postado Maio 27, 2005 Este curso é joiado e tem me ajudado bastante!!! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Já havia lido várias vezes o manual(entre outros tutoriais) mas não havia compreendido nada(ou quase nada) sobre ER... Agora ficou tudo mais claro! Valeu Fabyo, você tem uma didática muito boa! =D http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites