En el artículo anterior, presentamos el concepto de PEAR, las reglas de codificación y los métodos de uso simples. Es posible que tenga una comprensión preliminar del mismo. Esta vez, presentaremos las funciones de algunos módulos en la biblioteca PEAR existente y su uso.
1. Convención de nomenclatura Antes de comprender el módulo pear existente, primero comprendamos la clasificación organizacional y la convención de nomenclatura de PEAR. La organización de los módulos en PEAR es similar a CPAN. Los archivos relevantes de cada módulo se colocan en su propio directorio de categorías y algunos se colocan directamente en el directorio raíz de Pear (archivo único). Dado que PEAR no tiene un espacio de nombres como Java, el nombre de su clase debe reflejar la relación entre el nombre de su módulo o el nombre de su clase principal y cumplir con ciertas convenciones. Por ejemplo, el nombre de su módulo: "Mp3/common", luego su archivo php. debe estar ubicado en: Mp3/common.php, y el nombre de clase de su módulo debe ser: Mp3_common. En términos generales, si su módulo es una mejora a partir de un módulo existente, se recomienda colocar su módulo y el módulo existente en el mismo directorio. Si está diseñando una nueva clase o módulo, puede crear un nuevo directorio usted mismo o colocarlos en el mismo directorio para propósitos similares. Por ejemplo, si escribe un nuevo módulo para procesar registros, se recomienda colocarlo en Log/, lo que indica que es un módulo de aplicación para procesar registros. Si el nuevo módulo se usa para procesar MP3, entonces puede crear A; El nuevo directorio mp3 se coloca debajo del directorio mp3.
2. Módulos PEAR existentes Dado que la mayoría de los módulos de Pear aún están en desarrollo, aquí están los módulos en pear lanzados con php4.05. Cabe señalar que algunas clases abstractas o clases base (como Mail.php, Log.php, Cache. .php) no aparecen en la lista, solo nos centramos en módulos con funciones específicas. La siguiente es una lista de estos módulos:
Benchmark/Timer prueba la eficiencia de ejecución de una parte de su código PHP
Benchmark/Benchmark_Iterate prueba el rendimiento de una función cuando se ejecuta en un bucle
Caché/Salida puede almacenar en caché la salida de su script php. Puede almacenarse en caché de varias maneras (en archivos, bases de datos o memoria compartida). Si usa este módulo, puede aumentar la carga en el servidor, así que si lo desea. pasar Para mejorar la eficiencia mediante el almacenamiento en caché de scripts dinámicos, también puede utilizar Zend Optimizar. Este módulo puede no ser adecuado.
Caché/Gráficos puede almacenar en caché las imágenes que necesita generar dinámicamente
Módulo de procesamiento de parámetros de línea de comando de consola/Getopt
CMD es un shell virtual que se puede utilizar para ejecutar algunos comandos del sistema.
Crypt/CBC implementa la simulación del módulo Perl Crypt::CBC
Crypt/HCEMD5 implementa las funciones del módulo Perl Crypt::HCE_MD5
Date/Calc implementa operaciones relacionadas con fechas
Conversión de fecha/calendario humano humano
DB proporciona una capa de operación de base de datos unificada y abstracta, y el backend admite múltiples bases de datos.
Archivo/Buscar archivo
File/Passwd manipula archivos similares a contraseñas, como contraseña, httppass, cvspassword
Archivo/BuscarReemplazar Buscar y reemplazar una cadena en un archivo
HTML/Form puede crear rápidamente formularios en HTML
HTML/IT implementa la personalización de plantillas y genera páginas dinámicamente, similar a la función de plantilla en phplib, pero debe ser simple y fácil de usar.
HTML/ITX implementa funciones extendidas para TI, lo que le permite personalizar sus plantillas de manera más flexible y lograr operaciones más complejas.
Extensión de HTML/Procesador XML_Parser para que pueda aplicarse al funcionamiento de archivos html
HTTP/Compress es una clase contenedora para el mecanismo de almacenamiento en búfer de salida de PHP, que también puede comprimir y almacenar el contenido almacenado en búfer.
Image/Remote puede obtener la información de la imagen del sistema remoto sin descargar la imagen completa localmente.
Log/composite Horde es una extensión de la clase abstracta de registro que permite que múltiples objetos de procesamiento de registros obtengan el mismo evento de registro. Tenga en cuenta que todos los módulos del directorio Log son parte del proyecto Horde y la mayoría de ellos son superclases abstractas.
Registro/archivo escribe información de registro en un archivo
Log/mcal envía información a la base de datos del software de gestión de horarios local o remoto-mcal
Una superclase de observador en Log/observer Horder
Log/sql envía información de registro a la base de datos SQL
Log/syslog envía información a syslog
Mail/RFC822 Comprueba si una dirección de correo electrónico es una dirección de correo electrónico rf822 válida
Mail/sendmail Utilice sendmail para enviar cartas
Mail/smtp utiliza el servidor smtp para enviar cartas
Math/Fraction maneja cálculos matemáticos de fractales
Math/Util calcula el máximo común divisor
NET/Curl es un contenedor orientado a objetos para la extensión Curl de PHP.
NET/Dig manipula dig para realizar operaciones de consulta relacionadas con DNS
NET/SMTP utiliza NET/Socket para implementar el protocolo SMTP
NET/Socket Clase de socket universal que implementa el empaquetado de operaciones de socket de uso común
Números/Romanos Conversión entre números arábigos y números romanos
Payment/Verisign implementa interacción con la pasarela de pago Verisign
Pear proporciona dos clases básicas del módulo Pear, las clases PEAR y PEARError.
PEAR/Installer La clase de instalación pear proporciona funciones similares al módulo CPAN en Perl.
PHPDoc genera automáticamente documentación API a partir del código php
Schedule/at interactúa con el demonio AT en Unix
XML/Parser es un analizador xml basado en la extensión xml de php.
XML/Render genera documentos xml en otros formatos (html, pdf). Esta es solo una clase abstracta. Ya existe una implementación de html en el último código cvs de Pear.
XML/RPC usa php para implementar una clase abstracta de xml-rpc. En el último código cvs de Pear, ya existe una implementación de xml/RPC/Server
3. Introducción al uso de los módulos principales. de los más utilizados y sus funciones. Es relativamente completo y estable y se puede utilizar en módulos "prácticos". Varios módulos potentes como Db, phpdoc, XML_Parser, IT e ITX se presentarán por separado en artículos futuros.
1.PERA/Instalador
Este módulo es el módulo central de Pear. Completa la instalación y el mantenimiento de otros módulos de Pear. Es similar a la función del módulo cpan en Perl. Sin embargo, actualmente solo tiene la función de instalación. la verificación de dependencias, etc. no se ha completado. Pear en sí no tiene un sitio abierto como cpan, pero a medida que el número de desarrolladores que participan en pear continúa aumentando, todo estará allí.
Sintaxis de uso: PEAR_Installer::installer($file)
$file es el archivo del módulo que debe instalarse. Puede ser un archivo local o un archivo remoto, como http:// o ftp. El instalador lo descargará automáticamente de forma local. Los archivos generalmente se empaquetan usando gzip, que debe incluir un paquete. El archivo DTD de pacakage.xml se encuentra en el directorio pear y su nombre es package.dtd
<?php.
require_once "PEAR/Installer.php";
$instalador = nuevo PEAR_Installer;
//Instala el módulo especificado
$resultado = $instalador->instalar($package_file);
si (PEAR::isError($resultado)){
echo "¡Falló la instalación de $package_file!";
}demás {
echo "¡Instalación exitosa de $package_file!";
}
?>
2.CMD
Aunque la mayoría de las aplicaciones PHP rara vez llaman a los comandos del sistema, debido a que estas aplicaciones se basan en la web, desde la perspectiva de la eficiencia operativa y la carga del sistema, se deben evitar las llamadas directas a los comandos del sistema en algunas aplicaciones especiales o si está dispuesto a hacerlo. PHP se utiliza como herramienta de shell y es inevitable llamar a herramientas del sistema existentes. CMD le permite ejecutar fácilmente una serie de comandos del sistema.
Sintaxis de uso: setOption ($opción, $configuración)
Establecer el parámetro $options en $setting
$options es una constante, pueden tener los siguientes valores:
CMD_SHUTDOWN: ejecutar comandos a través de la función de apagado
CMD_SHELL: especifica la ruta del shell
CMD_OUTPUT: si se debe bloquear la salida estándar del comando
CMD_NOHUP: use nohup para ejecutar comandos en segundo plano
CMD_VERBOSE: imprime errores en
el comando de salida estándar ($comando)
Agregue el comando que debe ejecutarse $command puede ser una matriz o una cadena ordinaria
exec().
Ejecute el comando agregado
<?php
require_once "CMD.php";
$cmd = nueva CMD;
$cmd->command('tar zcvf test.tar.gz ~/test');
si ( $cmd->exec() ) {
echo "¡éxito!n";
} esle {
echo "Error:" $cmd->últimoError;
}
?>
3.Evaluación/Temporizador y Evaluación/Iteración
Estos 2 módulos le permiten probar la eficiencia con la que se ejecuta su código, lo que creo que es útil para la depuración del sistema: puede probar diferentes algoritmos, examinar cuidadosamente cuánto tiempo tarda en ejecutarse cada algoritmo y luego elegir la mejor manera. Benchmark/Timer prueba la diferencia de tiempo entre dos puntos de tiempo diferentes durante la operación. Benchmark/Iterate es una extensión de Timer para probar el tiempo necesario para ejecutar un determinado fragmento de código (función) n veces.
Sintaxis de uso: Benchmark/Timer
Timer::setMarker($name) establece el punto de tiempo actual en $name
Timer::start() comienza a probar
Timer::stop() deja de probar
Timer::timeElapsed($start = 'Start', $end = 'Stop') Calcula la diferencia horaria entre $start y $end.
Timer::getProfiling() devuelve el tiempo transcurrido entre el inicio y la parada
<?php
require_once "Benchmark/Timer.php";
$temporizador = nuevo Benchmark_Timer;
$temporizador->start();
$temporizador->setMarker('Marcador 1');
$temporizador->parar();
$perfilado = $temporizador->getProfiling();
?>
Punto de referencia/Iterar Iterar
::ejecutar()
Ejecuta la función especificada en un bucle. Este es un método con parámetros variables. El primer parámetro es el número de veces que se repite, el segundo parámetro es la función que se ejecutará y el tercer parámetro en adelante son los parámetros que se pasarán a la función de prueba.
Iterar::obtener()
Devuelve el tiempo que tarda la prueba
<?php
require_once "Benchmark/Iterate.php";
$benchmark = nueva función Benchmark_Iterate
foo($string)
{
imprimir $cadena."
";
}
$benchmark->run(100, 'foo', 'prueba');
$resultado = $punto de referencia->get();
?>
3.Archivo/Buscar
&glob ($patrón, $dirpath, $pattern_type='php')
Busque directorios y archivos que coincidan con $pattern en $dirpath y devuelva una matriz de nombres de archivos y directorios coincidentes
y busque ($pattern, $directory, $type='php')
Busque en $directory archivos que coincidan con las reglas de $pattern y devuelva una matriz de nombres de archivos coincidentes (nota, solo archivos, no subdirectorios).
una
expresión regular. $patten_type especifica qué modo de expresión regular usar. El valor predeterminado es el modo php. También puede especificar "perl" para usar la expresión regular.
buscar A diferencia de glob, glob no busca subdirectorios de forma recursiva, mientras que la búsqueda busca subdirectorios de forma recursiva.
<?php
require_once "Archivo/Buscar.php";
$buscar = nuevo Archivo_Buscar;
//Buscar en el directorio actual
$php_files = $find->glob("*php",".");
si ( PERA::isError( $php_files ) ){
morir "Error: " $php_files->getMessage() ."n" ;
}
//Buscar recursivamente en el directorio actual
$all_php_files = $buscar->buscar("*php",".");
si ( PERA::isError( $all_php_files ) ){
morir "Error: " $php_files->getMessage() ."n" ;
}
?>
4.Archivo/Contraseña
Manipule archivos en formato de contraseña, similar a la contraseña estándar de Unix, el .htppass de Apache y los archivos de contraseña del servidor pserver de cvs. A juzgar por la versión actual del código, en realidad no se puede utilizar para mantener estos archivos passwd (por ejemplo, no se admite la sombra). Pero puedes usarlo para crear un archivo de contraseña similar, por supuesto, la seguridad no será muy alta.
Cómo utilizar:
File_Passwd($file,$lock=0)----------Crea un objeto. $file es el archivo passwd que deseas operar. $lock especifica si se usa rebaño para bloquear el archivo.
addUser($user,$pass,$cvsuser)----------Agregar un usuario, $user, $pass son el nombre de usuario y la contraseña respectivamente, $cvsuser es el ID del usuario cvs
modUser($user,$pass,$cvsuser)----------Cambie la contraseña de $user a $pass, $cvsuser es la identificación del usuario cvs
delUser($usuario)----------Eliminar el usuario especificado $usuario
verificarContraseña($usuario,$contraseña)----------Verificar contraseña de usuario
close()----------Guarde los cambios que acaba de hacer en el archivo de contraseña, cierre el archivo de contraseña y desbloquee el archivo.
5.Archivo/BuscarReemplazar
Cómo
buscar y reemplazar cadenas en archivos
: File_SearchReplace($find, $replace, $files, $directories = '', $include_subdir = 1, $ignore_lines = array())genera y establece el objeto
$find
La cadena a buscar, que puede ser una cadena o una expresión regular
$replace
La cadena que se va a reemplazar, que puede ser una cadena o una expresión regular
$files
Especifique en qué archivos realizar la operación de reemplazo, una matriz o una cadena separada por ","
$directorios
Especifique el directorio para operar, opcional, una matriz o una cadena separada por ","
$include_subdir
Si opera en un directorio, especifica si se realiza la operación anterior de forma recursiva en subdirectorios, que puede tener un valor de 1 o 0.
$ignore_lines
Especifique las líneas de archivo que se ignorarán. Esta es una matriz. Se ignorarán todas las líneas de archivo que comiencen con cualquier cadena de esta matriz.
getNumOcurrencias()
Devuelve el número de veces que se ha realizado una búsqueda y reemplazo
getLastError()
Devuelve el último mensaje de error
setFind($find)
Establezca la cadena que se encontrará
setReplace($replace)
Establezca la cadena a reemplazar
setFiles($files)
Configure el archivo que se reemplazará
setDirectories($directorios)
Configure el directorio que se reemplazará
setIncludeSubdir($include_subdir)
Establezca si también se realizará búsqueda y reemplazo en subdirectorios
setIgnoreLines($ignore_lines)
setSearchFunction($search_function)
solo cuando use la función de búsqueda "normal"
Configure la función de búsqueda que se utilizará, que pueden ser los siguientes parámetros:
valor predeterminado normal, use la función de archivo para leer el contenido del archivo y luego use str_replace para reemplazarlo línea por línea.
Quick usa str_replace para reemplazar directamente todo el archivo
preg usa preg_replace() para reemplazar, puede usar expresiones regulares que cumplan con los requisitos de esta función
ereg usa ereg_replace() para reemplazar, puede usar expresiones regulares que cumplan con los requisitos de esta función
hacerBuscar()
Realizar una operación de buscar y reemplazar
<?php
require_once "Archivo/SearchReplace.php";
require_once "Archivo/Buscar"
//Buscar recursivamente en el directorio actual
$buscar = nuevo Archivo_Buscar;
$all_php_files = $buscar->buscar("*php",".");
si ( PERA::isError( $all_php_files ) ){
morir "Error: " $php_files->getMessage() ."n" ;
}
si ( !count($all_php_file) ){
die "¡NO se encontraron archivos fuente php!n";
}
//Corrige el indicador php de <? a <?php para cumplir con el estándar pear
$reemplazar = nuevo File_SearchReplace('<? ','<?php ',$all_php_files);
$reemplazar->hacerBuscar();
si ( $reemplazar->getLastError() ) {
morir "Ocurrió un error:" $replace->getLastError();
} demás {
echo "Un total de " . $replace->getNumOccurences() " ha sido reemplazado exitosamente. n";
}
?>
6.HTML/Formulario
Este módulo le permite generar rápidamente un formulario de envío sin tener que reescribir el código HTML.
Uso: Form::HTML_Form($action, $method = 'GET', $name = '', $target = '' )
El constructor de
.esta clase tiene algunos parámetros, que son básicamente los mismos que los parámetros del formulario generalmente escritos en código HTML. $action es la URL que se enviará en el formulario, $name puede especificar el nombre del formulario y $target especifica si se abre. una nueva ventana, etc.
La siguiente serie de métodos addXXX se utiliza para agregar los controles correspondientes a este formulario. Las propiedades de los controles también son consistentes con las de HTML.
addText($nombre, $título, $predeterminado, $tamaño = HTML_FORM_TEXT_SIZE)
addCheckbox($nombre, $título, $predeterminado)
addTextarea($nombre, $título, $predeterminado,$ancho = HTML_FORM_TEXTAREA_WT,$alto = HTML_FORM_TEXTAREA_HT)
addPassword($nombre, $título, $predeterminado, $tamaño = HTML_FORM_PASSWD_SIZE)
addSubmit($nombre = "enviar", $título = "Enviar cambios")
addReset($title = "Descartar cambios")
addSelect($nombre, $título, $entradas, $predeterminado = '', $tamaño = 1,$en blanco = '', $múltiple = falso, $atributos = '')
addRadio($nombre, $título, $valor, $predeterminado)
agregarImagen($nombre, $fuente)
addHidden($nombre, $valor)
Pantalla()
Mostrar este formulario
<?php
require_once "HTML/Form.php";
//Crear y mostrar el formulario de inicio de sesión
$miformulario = nuevo HTML_Form("./login.php");
$miformulario->addText('nombre de usuario','nombre de usuario','');
$myform->addPasswd('passwd','Contraseña de inicio de sesión',20);
$miformulario->addHidden('reintentar','1');
$miformulario->addSumit('iniciar sesión','iniciar sesión');
$miformulario->Display();
?>
7.Correo/RFC822
Comprobar si un correo electrónico introducido es legal no es una tarea fácil. Puede intentar utilizar algunas expresiones regulares para comprobarlo, pero no es tan conveniente ni eficaz. Ahora bien, si quieres comprobar si una serie de direcciones de correo electrónico cumplen con el estándar RFC822 y dividirlas en direcciones de correo separadas, puedes probar este módulo, que es muy sencillo y práctico.
Uso: Mail_RFC822 ($address = null, $default_domain = null, $nest_groups = null, $validate = null)
constructor de clase, $address es una serie de direcciones que desea verificar, $default_domain, especifica el nombre de dominio predeterminado o nombre de host, $nest_groups Si se debe agrupar en la salida para que $validate necesite validar cada átomo parseAddressList($address = null, $default_domain = null, $nest_groups = null, $validate = null) validación del análisis dada La lista de direcciones si la dirección es. válido, se devuelve la lista de direcciones divididas. Si se produce un error, se devuelve un mensaje de error.
<?php
require_once "Correo/RFC822.php";
$rf822 = nuevo Correo_RFC822;
$resultado=$rf822->paseAddressList('quién;quié[email protected];[email protected]');
si ($rf822->error){
echo "Error:$resultado";
}demás {
restablecer($resultado);
para ($i=0; $i< recuento($resultado);$i++){
echo "correo electrónico:$resultado[$i]n";
}
}
?>
8.Correo/Enviar correo
Sendmail es el MTA más utilizado en Unix/linux. Este módulo le permite utilizar sendmail directamente para enviar cartas.
Uso: El constructor de clase Mail_sendmail ($params)
es una matriz asociativa. Sólo 'sendmail_path' es válido, se utiliza para configurar la ruta de envío de correo send($recipients, $headers, $body) para enviar cartas. $recipients es la dirección de correo electrónico de su destinatario, que puede ser única o separada por la lista de direcciones abiertas. Se puede abrir siempre que cumpla con el estándar RFC82. $headers es el encabezado de la carta que envía. Este es un número asociativo. La clave de la matriz es el nombre del encabezado (como Asunto) y el valor de la matriz es el valor del encabezado (como ¡Hola!). . El membrete procesado será: Asunto: ¡Hola! $body es el cuerpo de la carta, incluidas todas las partes codificadas en MIME. Si tiene éxito, devuelve verdadero; de lo contrario, devuelve un objeto PEAR_Error
<?php
require_once "Correo/sendmail.php";
$enviar correo = new Mail_sendmail(array('sendmail_path=>'/usr/local/bin/sendmail'));
$encabezado = array('Asunto'=>'Hola','BCC'=>'[email protected]');
$body = 'Este es un mensaje de prueba de nightailer.com';
$resultado = $enviar correo->enviar( '[email protected]' , $encabezado, $cuerpo);
si ( PERA::isError($resultado) ){
echo "<h1> Error al enviar</h1><br>Razón: ".$resultado->getMessage()."<br>";
}demás {
echo "<h1>¡Felicitaciones! ¡Enviado exitosamente!</h1><br>";
}
?>
9.Correo/smtp
Actualmente, algunos sitios no permiten el uso de sendmail, por lo que si su programa PHP desea utilizar la función de envío de correo, debe poder completar la función correspondiente utilizando un servidor SMTP externo.
Uso: Usar este módulo es básicamente lo mismo que Mail::sendmail. Cabe señalar que este módulo requiere el uso del módulo Net::SMTP: Mail_smtp($params)
Los parámetros válidos para $params son:
Dirección del servidor SMTP 'host', el valor predeterminado es localhost
Puerto de servicio SMTP 'puerto', el valor predeterminado es 25
'auth' Si smtp requiere verificación de autorización, el valor predeterminado es falso
'usename' nombre de usuario autorizado smtp
'contraseña'
envío de contraseña autorizada smtp($destinatarios, $encabezados, $cuerpo)
enviar
<?php
require_once "Correo/sendmail.php";
$params=array('host'=>'smtp.nightsailer.com','auth'=true,
'nombre de usuario'=>'noche','contraseña'=>'123456');
$enviarcorreo = nuevo Mail_sendmail($params);
$encabezado = array('Asunto'=>'Hola','BCC'=>'[email protected]');
$body = 'Este es un mensaje de prueba de nightailer.com';
$resultado = $enviar correo->enviar( '[email protected]' , $encabezado, $cuerpo);
si ( PERA::isError($resultado) ){
echo "<h1> Error al enviar</h1><br>Razón: ".$resultado->getMessage()."<br>";
}demás {
echo "<h1>¡Felicitaciones! ¡Enviado exitosamente!</h1><br>";
}
?>
10.Horario/A las
Este módulo proporciona la interfaz
add($cmd, $timespec, $queue = false, $mail = false)
del programa at en Unix.
Al agregar un comando at,
este método generará un trabajo personalizado para el programa at:
$cmd es el programa o script que desea ejecutar
$timespec es el momento en que el trabajo comienza a ejecutarse, el formato es el mismo que requiere at
Parámetro opcional $queue, que indica el nombre de la cola del trabajo
Parámetro opcional $mail, que indica si se debe enviar un correo electrónico para informar los resultados de la ejecución una vez finalizado el trabajo
show($queue = false)
El comando que se muestra en la cola devuelve una matriz asociativa. La clave de la matriz es el número de trabajo. El valor de la clave correspondiente también es una matriz asociativa. El contenido es una matriz (tiempo de ejecución, cola $). Puedo usarlo para devolver solo la lista de trabajos en la cola cuyo nombre de cola coincida con $queue
remove($job = false).
Elimine el trabajo at especificado de la cola. $job es el número de trabajo que se eliminará. Si tiene éxito, devuelva verdadero; de lo contrario, devuelva falso
<?php.
require_once "Programación/En.php";
$en = nuevo Schedule_At();
//Generar y agregar un trabajo
$resultado = $at->add ('buscar / -escribir archivo -nombre core -exec rm -f {} ;','00:00');
si ( PERA::is_Error($resultado) ) {
echo "¡No se puede agregar trabajo!n";
echo "Razón: $resultado->getMessage() n";
salida;
}
//Mostrar el actual en la cola
$cola = $en->show();
si ( PERA::isError($cola) ) {
echo "¡Ocurrió un error!n";
echo "Razón:" . cola->getMessage() "n";
salida;
}
restablecer( $cola );
mientras (lista($trabajo, $cmd) = cada $cola){
echo "[$trabajo]" $cmd['tiempo de ejecución'] "-" .$cmd['cola'];
eco "n"
}
?>
Los anteriores son los usos de algunos módulos PEAR. Para obtener instrucciones más detalladas, debe verificar los archivos fuente de estos módulos usted mismo, o puede usar phpdoc para generar automáticamente los documentos API de estos módulos. Con respecto a phpdoc, lo discutiremos en detalle en el próximo artículo.
4. Recursos
PEAR CVS Puede obtener el último código fuente de PEAR desde aquí
proyecto hoder
Página de inicio de PHPDoc