No artigo anterior, apresentamos o conceito de PEAR, regras de codificação e métodos simples de uso. Você pode ter uma compreensão preliminar sobre isso. Desta vez, apresentaremos as funções de alguns módulos da biblioteca PEAR existente e sua utilização.
1. Convenção de nomenclatura Antes de entender o módulo Pear existente, vamos primeiro entender a classificação organizacional e a convenção de nomenclatura do PEAR. A organização dos módulos no PEAR é semelhante ao CPAN. Os arquivos relevantes de cada módulo são colocados em seu próprio diretório de categoria, e alguns são colocados diretamente no diretório raiz do pear (arquivo único). Como o PEAR não possui um espaço de nomes como Java, o nome da sua classe deve refletir o relacionamento entre o nome do seu módulo ou o nome da classe pai e aderir a certas convenções. Por exemplo, o nome do seu módulo: "Mp3/common" e, em seguida, seu arquivo php. deve estar localizado em: Mp3/common.php, e o nome da classe do seu módulo deve ser: Mp3_common. De modo geral, se o seu módulo for melhorado a partir de um módulo existente, é recomendável colocar o seu módulo e o módulo existente no mesmo diretório. Se estiver projetando uma nova classe ou módulo, você mesmo poderá criar um novo diretório ou colocá-los no mesmo diretório para fins semelhantes. Por exemplo, se você escrever um novo módulo para processamento de logs, é recomendável colocá-lo em Log/, indicando que é um módulo de aplicação para processamento de logs, se o novo módulo for usado para processamento de MP3, então você pode criar A; novo diretório mp3 é colocado no diretório mp3.
2. Módulos PEAR existentes Como a maioria dos módulos do Pear ainda estão em desenvolvimento, aqui estão os módulos no pear lançados com php4.05. Deve-se notar que algumas classes abstratas ou classes base (como Mail.php, Log.php, Cache. .php) não estão listados, focamos apenas em módulos com funções específicas. A seguir está uma lista desses módulos:
Benchmark/Timer testa a eficiência de execução de uma parte do seu código PHP
Benchmark/Benchmark_Iterate testa o desempenho de uma função quando ela é executada em um loop
Cache/Output pode armazenar em cache a saída do seu script php. Ele pode ser armazenado em cache de várias maneiras (em arquivos, bancos de dados ou memória compartilhada, se você usar este módulo, poderá aumentar a carga no servidor, se desejar). para passar Para melhorar a eficiência armazenando scripts dinâmicos em cache, você também pode usar o Zend Optimize. Este módulo pode não ser adequado.
Cache/Gráficos podem armazenar em cache as imagens que você precisa para gerar dinamicamente
Módulo de processamento de parâmetros de linha de comando Console/Getopt
CMD é um shell virtual que pode ser usado para executar alguns comandos do sistema.
Crypt/CBC implementa simulação do módulo Perl Crypt::CBC
Crypt/HCEMD5 implementa as funções do módulo Perl Crypt::HCE_MD5
Date/Calc implementa operações relacionadas a datas
Conversão de data/calendário humano humano
O banco de dados fornece uma camada de operação de banco de dados unificada e abstrata, e o back-end oferece suporte a vários bancos de dados.
Pesquisa de arquivo/encontrar arquivo
Arquivo/Senha manipula arquivos semelhantes a senhas, como senha, httppass, cvspassword
File/SearchReplace Localizar e substituir uma string em um arquivo
HTML/Formulário pode criar formulários rapidamente em HTML
HTML/IT implementa customização de templates e gera páginas dinamicamente, semelhante à função de template no phplib, mas deve ser simples e fácil de usar
HTML/ITX implementa funções estendidas para TI, permitindo personalizar seus modelos com mais flexibilidade e realizar operações mais complexas.
Extensão do HTML/Processor XML_Parser para que possa ser aplicado ao funcionamento de arquivos html
HTTP/Compress é uma classe wrapper para o mecanismo de buffer de saída do PHP, que também pode compactar e armazenar o conteúdo em buffer.
Image/Remote pode obter as informações da imagem do sistema remoto sem baixar a imagem inteira localmente.
Log/composite Horde é uma extensão da classe abstrata de log que permite que vários objetos de processamento de log obtenham o mesmo evento de log. Observe que todos os módulos no diretório Log fazem parte do projeto Horde e a maioria deles são superclasses abstratas.
Log/arquivo grava informações de log em um arquivo
Log/mcal envia informações para o banco de dados do software de gerenciamento de agendamento local ou remoto-mcal
Uma superclasse de Observer em Log/observer Horder
Log/sql envia informações de log para o banco de dados sql
Log/syslog envia informações para o syslog
Mail/RFC822 Verifica se um endereço de e-mail é um endereço de e-mail rf822 válido
Mail/sendmail Use sendmail para enviar cartas
Mail/smtp usa servidor smtp para enviar cartas
Matemática/Fração lida com cálculos matemáticos de fractais
Math/Util calcula o máximo divisor comum
NET/Curl é um wrapper orientado a objetos para a extensão Curl do PHP.
NET/Dig manipula dig para realizar operações de consulta relacionadas ao DNS
NET/SMTP usa NET/Socket para implementar o protocolo SMTP
NET/Socket classe Socket universal que implementa o empacotamento de operações de soquete comumente usadas
Conversão de números/romanos entre algarismos arábicos e algarismos romanos
Payment/Verisign implementa interação com gateway de pagamento Verisign
Pear fornece duas classes básicas do módulo Pear, classes PEAR e PEARError
PEAR/Installer A classe de instalação pear fornece funções semelhantes ao módulo CPAN em Perl.
PHPDoc gera automaticamente documentação API a partir de código php
Schedule/at interage com o daemon AT no Unix
XML/Parser é um analisador xml baseado na extensão xml do php.
XML/Render gera documentos xml em outros formatos (html, pdf). Esta é apenas uma classe abstrata. Já existe uma implementação de html no código pear cvs mais recente.
XML/RPC usa php para implementar uma classe abstrata de xml-rpc No código pear cvs mais recente, já existe uma implementação de xml/RPC/Server
3. Introdução ao uso de módulos principais. dos mais comumente usados e suas funções É relativamente completo e estável e pode ser usado em módulos "práticos" Vários módulos poderosos como Db, phpdoc, XML_Parser, IT e ITX serão apresentados separadamente em artigos futuros.
1.PEAR/Instalador
Este módulo é o módulo principal do próprio pear. Ele completa a instalação e manutenção de outros módulos do pear. É semelhante à função do módulo cpan no perl, mas atualmente possui apenas a função de instalação. a verificação de dependências, etc. não foi concluída. Não existe um site aberto como o cpan, mas à medida que o número de desenvolvedores participantes do pear continuar a aumentar, tudo estará lá.
Sintaxe de uso: PEAR_Installer::installer($file)
$file é o arquivo do módulo que precisa ser instalado. Pode ser um arquivo local ou remoto, como http:// ou ftp. O instalador fará o download localmente. Os arquivos geralmente são empacotados usando gzip, que deve incluir um pacote. O arquivo DTD de pacakage.xml está no diretório pear e seu nome é package.dtd
.
require_once "PEAR/Installer.php";
$instalador = novo PEAR_Installer;
//Instala o módulo especificado
$resultado = $instalador->instalar($arquivo_pacote);
if (PEAR::isError($resultado)){
echo "Falha na instalação de $package_file!";
}outro {
echo "Instalação de $package_file com sucesso!";
}
?>
2.CMD
Embora a maioria dos aplicativos PHP raramente chamem comandos do sistema, porque esses aplicativos são baseados na web, do ponto de vista da eficiência operacional e da carga do sistema, as chamadas diretas aos comandos do sistema devem ser evitadas. No entanto, em alguns aplicativos especiais ou se você estiver disposto a fazê-lo. PHP é usado como uma ferramenta shell, é inevitável chamar ferramentas de sistema existentes. O CMD permite executar facilmente uma série de comandos do sistema.
Sintaxe de uso: setOption ($option, $setting)
Definir o parâmetro $options como $setting
$options é uma constante, pode ter os seguintes valores:
CMD_SHUTDOWN: Executa comandos através da função de desligamento
CMD_SHELL: Especifique o caminho do shell
CMD_OUTPUT: Se deseja bloquear a saída padrão do comando
CMD_NOHUP: Use nohup para executar comandos em segundo plano
CMD_VERBOSE: Imprimir erros no comando de saída padrão
($command)
Adicione o comando que precisa ser executado. $command pode ser um array ou uma string comum
exec().
Execute o comando adicionado
<?php
require_once "CMD.php";
$cmd = novo CMD;
$cmd->command('tar zcvf test.tar.gz ~/test');
if ($cmd->exec()) {
echo "sucesso!n";
} ou {
echo "Erro:" $cmd->lastError;
}
?>
3.Benchmark/Timer e Benchmark/Iterar
Esses 2 módulos permitem testar a eficiência com que seu código é executado, o que considero útil para depuração do sistema: você pode tentar algoritmos diferentes, examinar cuidadosamente quanto tempo cada algoritmo leva para ser executado e então escolher a melhor maneira. Benchmark/Timer testa a diferença de tempo entre dois pontos de tempo diferentes durante a operação. Benchmark/Iterate é uma extensão do Timer para testar o tempo necessário para executar um determinado trecho de código (função) n vezes.
Sintaxe de uso: Benchmark/Timer
Timer::setMarker($name) define o ponto de tempo atual para $name
Timer::start() inicia o teste
Timer::stop() para de testar
Timer::timeElapsed($start = 'Start', $end = 'Stop') Calcule a diferença de tempo entre $start e $end.
Timer::getProfiling() retorna o tempo decorrido entre o início e o fim
<?php
require_once "Benchmark/Timer.php";
$timer = novo Benchmark_Timer;
$timer->start();
$timer->setMarker('Marcador 1');
$timer->stop();
$profiling = $timer->getProfiling();
?>
Benchmark/Iterar
Iterate::run()
Executa a função especificada em um loop. Este é um método com parâmetros variáveis. O primeiro parâmetro é o número de vezes para fazer o loop, o segundo parâmetro é a função a ser executada e o terceiro parâmetro em diante são os parâmetros a serem passados para a função de teste.
Iterar::get()
Retorna o tempo gasto no teste
<?php
require_once "Benchmark/Iterate.php";
$benchmark = nova
função
Benchmark_Iterate;
{
imprimir $string."
";
}
$benchmark->run(100, 'foo', 'teste');
$resultado = $benchmark->get();
?>
3.Arquivo/Localizar
&glob ($pattern, $dirpath, $pattern_type='php')
Pesquise diretórios e arquivos correspondentes a $pattern em $dirpath e retorne uma matriz de nomes de arquivos e diretórios correspondentes
&search ($pattern, $directory, $type='php')
Pesquise $directory por arquivos que correspondam às regras $pattern e retorne uma matriz de nomes de arquivos correspondentes (observe, apenas arquivos, não subdiretórios).
modo
de expressão regular usar. O padrão é o modo php.
search Ao contrário de glob, glob não pesquisa subdiretórios recursivamente, enquanto search pesquisa subdiretórios recursivamente.
<?php
require_once "Arquivo/Find.php";
$encontrar = novo Arquivo_Encontrar;
//Pesquisa no diretório atual
$php_files = $find->glob("*php",".");
if ( PEAR::isError( $php_files ) ){
morrer "Erro: " $php_files->getMessage() ."n" ;
}
//Pesquisa recursivamente no diretório atual
$all_php_files = $find->search("*php",".");
if ( PEAR::isError( $all_php_files ) ){
morrer "Erro: " $php_files->getMessage() ."n" ;
}
?>
4.Arquivo/Senha
Manipule arquivos no formato de senha, semelhante à senha unix padrão, .htppass do apache e arquivos de senha pserver do cvs. A julgar pela versão atual do código, ele realmente não pode ser usado para manter esses arquivos passwd (por exemplo, shadow não é compatível). Mas você pode usá-lo para criar um arquivo de senha semelhante, é claro, a segurança não será muito alta.
Como usar:
File_Passwd($file,$lock=0)----------Crie um objeto. $file é o arquivo passwd que você deseja operar. $lock especifica se deve usar o rebanho para bloquear o arquivo.
addUser($user,$pass,$cvsuser)----------Adicione um usuário, $user, $pass são o nome de usuário e a senha respectivamente, $cvsuser é o ID do usuário cvs
modUser($user,$pass,$cvsuser)----------Altere a senha de $user para $pass, $cvsuser é o id do usuário cvs
delUser($user)----------Exclui o usuário especificado $user
verifyPassword($user,$pass)----------Verifique a senha do usuário
close()----------Salve as alterações agora no arquivo de senha, feche o arquivo de senha e desbloqueie o arquivo.
5.Arquivo/PesquisaSubstituir
Como
encontrar e substituir strings em arquivos
: File_SearchReplace($find, $replace, $files, $directories = '', $include_subdir = 1, $ignore_lines = array())gera e define o objeto
$find
A string a ser encontrada, que pode ser uma string ou uma expressão regular
$replace
A string a ser substituída, que pode ser uma string ou uma expressão regular
$files
Especifique em quais arquivos realizar a operação de substituição, um array ou uma string separada por ","
$directories
Especifique o diretório para operar, opcionalmente, um array ou uma string separada por ","
$include_subdir
Se estiver operando em um diretório, especifica se a operação acima deve ser executada recursivamente em subdiretórios, que pode ter um valor 1 ou 0.
$ignore_lines
Especifique as linhas do arquivo a serem ignoradas. Esta é uma matriz. Quaisquer linhas de arquivo que comecem com qualquer string nesta matriz serão ignoradas.
getNumOcorrências()
Retorna o número de vezes que uma pesquisa e substituição foi realizada
getLastError()
Retornar a última mensagem de erro
setFind($find)
Defina a string a ser encontrada
setReplace($replace)
Defina a string a ser substituída
setFiles($files)
Defina o arquivo a ser substituído
setDirectories($directories)
Defina o diretório a ser substituído
setIncludeSubdir($include_subdir)
Defina se também deseja realizar pesquisa e substituição em subdiretórios
setIgnoreLines($ignore_lines)
setSearchFunction($search_function)
somente ao usar a função de pesquisa "normal"
Defina a função de pesquisa a ser usada, que pode ser os seguintes parâmetros:
normal Valor padrão, use a função de arquivo para ler o conteúdo do arquivo e, em seguida, use str_replace para substituí-lo linha por linha.
quick usa str_replace para substituir diretamente o arquivo inteiro
preg usa preg_replace() para substituir, você pode usar expressões regulares que atendam aos requisitos desta função
ereg usa ereg_replace() para substituir, você pode usar expressões regulares que atendam aos requisitos desta função
doSearch()
Execute uma operação de localização e substituição
<?php
require_once "Arquivo/SearchReplace.php";
require_once "Arquivo/Localizar";
//Pesquisa recursivamente no diretório atual
$encontrar = novo Arquivo_Encontrar;
$all_php_files = $find->search("*php",".");
if ( PEAR::isError( $all_php_files ) ){
morrer "Erro: " $php_files->getMessage() ."n" ;
}
if ( !count($all_php_file) ){
die "Nenhum arquivo fonte php encontrado!n";
}
//Corrige o flag php de <? para <?php para ficar em conformidade com o padrão pear
$replace = new File_SearchReplace('<? ','<?php ',$all_php_files);
$replace->doSearch();
if ($replace->getLastError()) {
morrer "Ocorreu um erro:" $replace->getLastError();
} outro {
echo "Um total de " . $replace->getNumOccurences() " foi substituído com sucesso. n";
}
?>
6.HTML/Formulário
Este módulo permite que você gere rapidamente um formulário de envio sem ter que reescrever o código HTML.
Uso: Form::HTML_Form($action, $method = 'GET', $name = '', $target = '' )
O construtor de. esta classe possui alguns parâmetros, que são basicamente os mesmos que os parâmetros do formulário geralmente escritos no código HTML. $action é o URL a ser enviado no formulário, $name pode especificar o nome do formulário e $target Especifica se deseja abrir. uma nova janela, etc.
A seguinte série de métodos addXXX é usada para adicionar controles correspondentes a este formulário. As propriedades dos controles também são consistentes com aquelas em HTML.
addText($nome, $título, $default, $tamanho = HTML_FORM_TEXT_SIZE)
addCheckbox($nome, $título, $default)
addTextarea($nome, $título, $default,$largura = HTML_FORM_TEXTAREA_WT,$altura = HTML_FORM_TEXTAREA_HT)
addPassword($nome, $título, $default, $tamanho = HTML_FORM_PASSWD_SIZE)
addSubmit($name = "enviar", $title = "Enviar alterações")
addReset($title = "Descartar alterações")
addSelect($nome, $título, $entradas, $default = '', $tamanho = 1,$blank = '', $múltiplo = falso, $atributos = '')
addRadio($nome, $título, $valor, $default)
addImage($nome, $src)
addHidden($nome, $valor)
Display()
Mostrar este formulário
<?php
require_once "HTML/Form.php";
//Cria e exibe o formulário de login
$meuformulário = new HTML_Form("./login.php");
$meuformulário->addText('nomedeusuário','nomedeusuário','');
$meuform->addPasswd('passwd','Senha de login',20);
$meuformulário->addHidden('repetir','1');
$meuform->addSumit('login','login');
$meuformulário->Display();
?>
7.Correio/RFC822
Verificar se um e-mail inserido é legal não é uma tarefa fácil. Você pode tentar usar algumas expressões regulares para verificar, mas não é tão conveniente e eficaz. Agora, se você deseja verificar se uma série de endereços de e-mail está em conformidade com o padrão RFC822 e dividi-los em endereços de e-mail separados, experimente este módulo, que é muito simples e prático.
Uso: Mail_RFC822 ($address = null, $default_domain = null, $nest_groups = null, $validate = null)
construtor de classe, $address é uma série de endereços que você deseja verificar, $default_domain, especifica o nome de domínio padrão ou nome de host, $nest_groups Se deve ser agrupado na saída para que $validate precise validar cada átomo parseAddressList($address = null, $default_domain = null, $nest_groups = null, $validate = null) análise de validação fornecida A lista de endereços é Se o endereço for. válido, a lista de endereços dividida será retornada. Se ocorrer um erro, uma mensagem de erro será retornada.
<?php
require_once "Mail/RFC822.php";
$rf822 = novo Mail_RFC822;
$resultado=$rf822->paseAddressList('who;[email protected];[email protected]');
if ($rf822->erro){
echo "Erro:$resultado";
}outro {
redefinir($resultado);
for ($i=0; $i< contagem($resultado);$i++){
echo "e-mail:$resultado[$i]n";
}
}
?>
8.Correio/Enviar e-mail
Sendmail é o MTA mais comumente usado em unix/linux. Este módulo permite que você use o sendmail diretamente para enviar cartas.
Atualmente
, você pode definir os parâmetros do sendmail. Apenas 'sendmail_path' é válido, usado para definir o caminho do sendmail send($recipients, $headers, $body) para enviar cartas. $recipients é o endereço de e-mail do seu destinatário, que pode ser único ou separado por; pode ser aberto desde que atenda ao padrão RFC82. $headers é o cabeçalho da carta que você envia. Este é um número associativo. A chave do array é o nome do cabeçalho (como Assunto) e o valor do array é o valor do cabeçalho (como Olá!). . O papel timbrado processado será: Assunto:Olá! $body é o corpo da carta, incluindo todas as partes codificadas em MIME. Se for bem sucedido, retorna verdadeiro, caso contrário retorna um objeto PEAR_Error
<?php
require_once "Mail/sendmail.php";
$sendmail = new Mail_sendmail(array('sendmail_path=>'/usr/local/bin/sendmail'));
$header = array('Assunto'=>'Olá','BCC'=>'[email protected]');
$body = 'Esta é uma mensagem de teste de nightsailer.com';
$resultado = $sendmail->send( '[email protected]' , $header, $body);
if ( PEAR::isError($resultado) ){
echo "<h1> Falha no envio</h1><br>Motivo: ".$result->getMessage()."<br>";
}outro {
echo "<h1>Parabéns! Enviado com sucesso!</h1><br>";
}
?>
9.Correio/smtp
Alguns sites atualmente não permitem o uso do sendmail, portanto, se o seu programa PHP quiser usar a função de envio de e-mail, ele precisará ser capaz de completar a função correspondente usando um servidor SMTP externo.
Uso: Usar este módulo é basicamente o mesmo que Mail::sendmail. Deve-se notar que este módulo requer o uso do módulo Net::SMTP: Mail_smtp($params)
Os parâmetros válidos para $params são:
Endereço do servidor SMTP 'host', o padrão é localhost
'porta' porta de serviço smtp, o padrão é 25
'auth' Se o smtp requer verificação de autorização, o padrão é falso
'usename' nome de usuário autorizado smtp
'senha'
envio de senha autorizada smtp ($ destinatários, $ cabeçalhos, $ corpo)
enviar
<?php
require_once "Mail/sendmail.php";
$params=array('host'=>'smtp.nightsailer.com','auth'=true,
'nome de usuário'=>'noite','senha'=>'123456');
$sendmail = new Mail_sendmail($params);
$header = array('Assunto'=>'Olá','BCC'=>'[email protected]');
$body = 'Esta é uma mensagem de teste de nightsailer.com';
$resultado = $sendmail->send( '[email protected]' , $header, $body);
if ( PEAR::isError($resultado) ){
echo "<h1> Falha no envio</h1><br>Motivo: ".$result->getMessage()."<br>";
}outro {
echo "<h1>Parabéns! Enviado com sucesso!</h1><br>";
}
?>
10.Agendar/Às
Este módulo fornece a interface
add($cmd, $timespec, $queue = false, $mail = false)
do programa at no unix.
Anexar um comando at a
este método gerará um trabalho personalizado para o programa at:
$cmd é o programa ou script que você deseja executar
$timespec é o momento em que o trabalho inicia a execução, o formato é o mesmo exigido por at
Parâmetro opcional $queue, indicando o nome da fila do trabalho
Parâmetro opcional $mail, indicando se deve ser enviado um e-mail para relatar os resultados da execução após o término do trabalho
show($queue = false)
O comando exibido na fila at retorna uma matriz associativa. A chave da matriz é o número do trabalho. O valor da chave correspondente também é uma matriz associativa. pode usá-lo. Limit para retornar apenas a lista de trabalhos na fila cujo nome da fila corresponde a $queue
remove($job = false)
Exclua o trabalho at especificado da fila at $job é o número do trabalho a ser excluído. Se for bem-sucedido, retorne verdadeiro, caso contrário, retorne falso
<?php.
require_once "Agendar/At.php";
$at = new Schedule_At();
//Gera e anexa um job
$resultado = $at->add ('encontrar / -type file -name core -exec rm -f {} ;','00:00');
if ( PEAR::is_Error($resultado) ) {
echo "Não é possível adicionar trabalho!n";
echo "Motivo: $resultado->getMessage() n";
saída;
}
//Mostra o atual na fila
$fila = $at->show();
if ( PEAR::isError($queue) ) {
echo "Ocorreu um erro!n";
echo "Motivo:" fila->getMessage().
saída;
}
reset($fila);
while (lista($job, $cmd) = cada $fila){
echo "[$job]" .$cmd['runtime'] "-" .$cmd['queue'];
eco "n"
}
?>
Os itens acima são os usos de alguns módulos PEAR. Para obter instruções mais detalhadas, você mesmo precisa verificar os arquivos de origem desses módulos ou pode usar o phpdoc para gerar automaticamente os documentos API desses módulos. Em relação ao phpdoc, discutiremos isso em detalhes no próximo artigo.
4. Recursos
PEAR CVS Você pode obter o código-fonte PEAR mais recente aqui
Projeto Hoder
Página inicial do PHPDoc