¡GUAUU! libro electrónico www.wowebook.org
P 7 Programación Cookbook
80 recetas que se llevará a sus habilidades de desarrollo P 7 al siguiente nivel!
ierer
HAM - Bombay
¡GUAUU! libro electrónico www.wowebook.org
P 7 Programación Cookbook
80 recetas que se llevará a sus habilidades de desarrollo P 7 al siguiente nivel!
ierer
HAM - Bombay
¡GUAUU! libro electrónico www.wowebook.org
2016 Packt Publishing
rechos reservados. Ninguna parte de esta publicación puede ser reproducida, almacenada en un sistema de n o transmitida en cualquier forma o por cualquier medio, sin la previa autorización por escrito del editor, excepto en el s breves incorporados en artículos de revistas. Cada esfuerzo se ha hecho en la preparación de este libro para exactitud de la información presentada. Sin embargo, la información contenida en este libro se vende sin garantía, ya o implícita. Ni el autor, ni Packt Publishing, y sus concesionarios y distribuidores serán responsables por cualquier o o presuntamente causado directa o indirectamente por este libro.
hing se ha esforzado para proporcionar información sobre marcas registradas acerca de todas las compañías y productos s en este libro por el uso apropiado de capitales. Sin embargo, Packt Publishing no puede garantizar la exactitud de esta
primera vez: August el año 2016
r eferencia: 1260816
por Packt Publishing Ltd. librea rea calle B3 2PB, Reino Unido. 78588-344-6
ub.com
[FM-2]
¡GUAUU! libro electrónico www.wowebook.org
créditos
Autor
Coordinador del proyecto
Doug Bierer
Suzanne Coutinho
Los revisores
Corrector de pruebas
safis Edición
Salvatore Pappalardo Vincenzo Provenza
indexador
Rekha Nair
Editor de puesta en marcha
Kunal Parikh Coordinador de produccion
Melwyn Dsa
Editor de adquisición
Kirk D'Costa trabajo portada
Melwyn Dsa
Editor de Desarrollo de Contenidos
Merint Thomas Mathew
Editor técnico Madhunikita Sunil Chindarkar
Editor de copia
safis Edición
[FM-3]
¡GUAUU! libro electrónico www.wowebook.org
[FM-4]
¡GUAUU! libro electrónico www.wowebook.org
Prefacio obtenemos una serie de nuevas características y mejoras, como el árbol de sintaxis abstracta, errores arrojadizos, tipo escalar, tipo de retorno declaraciones, mejoras en la velocidad, y mucho más.
ue se hacen los desarrolladores de PHP en estos días no es "¿Debo usar las nuevas características?", Sino "¿Cómo estas características para construir mejores aplicaciones más rápido?" Recuerdo la creación de aplicaciones en PHP 4. Fue ás simple para desarrolladores de PHP, ya que podría ser entremezclado con HTML y todo estaba en un archivo. En lugar s, tuvimos bibliotecas de funciones que se incluía. Aplicaciones eran básicamente sólo las aplicaciones de escritorio CRUD s cuenta de cómo la pala en la web.
e aplicaciones ha cambiado varias veces desde entonces. Nuevos marcos, como AJAX, PHPUnit, compositor y er lugar, se introdujeron. c osas, y muchos otros, han influido en la forma en PHP los desarrolladores a crear aplicaciones. Hoy en día, se l e rió sin ne una aplicación basada en paginado que mezclaba HTML y PHP. ¿Entonces que vas a hacer? ¿Cómo va a construir PHP modernas y APIs? ¿Cómo va a aprovechar todas las nuevas herramientas que PHP da a construir, mejores rápido, más fuerte? Estoy tan bueno que lo preguntas.
ug Bierer tiene la respuesta para usted. Esto no es YAUT (Sin embargo, otro Tomé inútil) de información que va a poner e y nunca utilizar. El libro que tiene en sus manos está destinado a, rápidamente, ser una parte de suc inta adhesiva biblioteca. rollador tiene unac inta adhesiva c ompone de esos libros que usted se refiere con tanta frecuencia que ahora se mantienen unidos por .)
e l tiempo para mostrarle las nuevas características que usted necesita para comprender, al igual que muchos libros de es por ahí. Cuando este libro es diferente es que el autor toma el tiempo para mostrar cómo resolver problemas del mundo real as nuevas herramientas. No sólo se aprende, pero se puede solucionar de inmediato los problemas con lo que se aprende.
[FM-5]
¡GUAUU! libro electrónico www.wowebook.org
s conceptos avanzados si alguna vez la esperanza de crecer como programador. Este libro le ayudará a bajar su convertirse en un mejor programador.
a llón para la World Wide Herd
[FM-6]
¡GUAUU! libro electrónico www.wowebook.org
Sobre el Autor rer s e ha enganchado en los ordenadores desde su primer programa, escrito en Dartmouth BASIC en un DEC 1971. En su amplio carrera, este autor ha sido un programador contrato profesional desde 1978, después de to aplicaciones en BASIC, PL / yo, ensamblador, adelante, C, C ++, dBase / Foxbase / Clipper, Pascal, Perl, . Se desplegó su primera página web en 1993 mientras vivía en San Francisco. Habla cuatro idiomas, ha cho y ha vivido en los EE.UU., Francia, Holanda, Inglaterra, Suecia, Escocia, y Tailandia. También pasó os como administrador de sistemas Linux y redes TCP / IP. Él es también un músico consumado (que ha de 60 canciones), así como un escritor, bajo el seudónimo de Douglas Alan.
añía de Doug es unlikelysource.com, que se especializa en consultoría, programación PHP, desarrollo de sitios web, n (sobre todo para Zend Technologies Ltd y Rogue Wave Software Inc.
d de e ficción ficciónpublicados publicadosen en https://www.lulu.com/ s on El Fin, ¿y después? y ciones.A lgunos de sus trabajos técnicos de O'Reilly Media son Aprender PHP y MySQL, Aprender PHP Aprendizaje MongoDB, y Aprender la doctrina.
En primer lugar, me gustaría dedicar este libro a mi madre, Betty Bierer, quien falleció en mayo de 2016. Ella me animó toda mi vida, y aplaudió mis logros (no importa lo malo!). Ella asistió a todos mis conciertos de música, compró todos mis CDs y leer todos los libros (aunque no las entendía). También me gustaría agradecer a mi sufrida esposa, Siri, que pacientemente soportó las horas que me llevó a escribir este libro sin queja. (Ella, sin embargo, hacer amenazas si yo estaba de acuerdo para asumir otro ... las negociaciones están en curso.) Por último, me gustaría dar las gracias a una serie de notables en la comunidad PHP que me permitió compartir ideas o inspiración les ofreció. Estos incluyen, Matthew Weir O'Phinney, Cal Evans, Daryl madera, Susie Pollock, Salvatore Pappalardo, Slavey Karadzhov, y Clark Everetts.
[FM-7]
¡GUAUU! libro electrónico www.wowebook.org
Acerca de los revisores appalardo, un friki de la tecnología desde su nacimiento, ha sido un ingeniero de software desde 2002. El ama "desde cero" es un amante de la tecnología, lector de ciencia ficción, entusiasta de la película, y un TED Talks adicto.
P Provenza rovenza es un desarrollador web con más de 5 años de experiencia con diferentes tecnologías y lenguajes ación (principalmente PHP y JavaScript). Le encanta viajar y leer.
[FM-8]
¡GUAUU! libro electrónico www.wowebook.org
www.PacktPub.com
ectrónicos, ofertas de descuentos, y más Packt ofrece versiones de libros electrónicos de todos los libros publicados, con archivos PDF ePub y disponible? Se puede actualizar ww.PacktPub.com y como un cliente de impresión de libros, usted tiene derecho a un descuento en la copia de e libro electrónico enw
icos. Póngase en contacto con nosotros en
@packtpub.com para más detalles. A www.PacktPub.com, también se puede leer una colección de artículos
tuitos, crea para una serie de boletines gratuitos y recibe descuentos y ofertas exclusivas en los libros y libros Packt.
2.packtpub.com/books/subscription/packtlib luciones inmediatas a sus preguntas de TI? PacktLib es la biblioteca de libros digitales en línea P ackt. Aquí, usted r, acceder y leer toda la biblioteca de los libros de Packt.
suscribi rse? se puede buscar a través de cada libro publicado por Packt
iar y pegar, imprimir y marcar el contenido demanda y accesible a través de un navegador web
[FM-9]
¡GUAUU! libro electrónico www.wowebook.org
¡GUAUU! libro electrónico www.wowebook.org
Tabla de contenido v
1
La construcción de una Fundación
n de un PHP 5 a 7 Código PHP convertidor
1 1 6 7 8 9 12 15 18
: Uso de PHP 7 características de alto rendimiento
25
ción
d irectorio recursivo
25 26 30 32 36 41 44 47
3: El traba jo con PHP Programación Funcional
53
ción
53 54 59 63 67 75
ción nsideraciones sobre la instalación
ervidor Web incorporado en PHP ión de una base de datos MySQ L de prueba
n de PHPUnit entación de la carga automática de clases
g un sitio web cción de un escáner web profunda
nder el árbol de sintaxis abstracta las diferencias en el análisis sintáctico
r las diferencias en el manejo foreach () e l rendimi ento usando PHP 7 mejoras a través de un archivo masivo
a hoja de cálculo en una base de datos
s en desarrollo a lusión a los ti pos de datos tipos de datos de valor de retorno d e iteradores
u propio iter ador utilizando generadores
yo
¡GUAUU! libro electrónico www.wowebook.org
entación de las clases anónimas
81 82 88 96 100 105 109 115 122
: Interactuar con una base de datos
129
ción
entación de las búsquedas de jQuery tablas de datos PHP
129 130 143 146 150 155 164 168
: Creación de sitios web escalables
173
ción
ación a un formulario
173 174 181 185 190 196 210 215
7: Acceso a Servicios Web
223
ción ersión entr e PHP y XML
223 223 227 237 247 250
ción llo de las clases ión de las clases
propiedades y métodos est áticos espacios de nombres d e la visibilida d las interfaces rasgos
DOP para conectarse a una base de datos cción de un generador de consultas SQL programación orientada a objetos
e la paginación ión de entidades para que coincida con las tablas de base
lases de entidad a RDBMS consultas ión de las búsquedas secundarias en resultados de la consulta
n de un gener ador elemento de forma genérica
n de un generador de radio elemento HTML e un generador de selección d e elemento HTML entación de una fábrica de forma
ndo $ _POST filtros ndo $ _POST validadores
n de un simple cliente REST e un servidor simple descanso
n de un simple cliente SOAP
de un servidor S OAP sencillo
8: Trabajo con fecha / hora y los aspectos internacionales ción emoticonos emoji o en un script de vista rsión de caracteres complejos c onfiguración regional a partir de datos del navegador
¡GUAUU! libro electrónico www.wowebook.org
257 257 258 260 263
ión de la moneda de acuerdo al lugar ormateo / hora según el entorno local
de un generador de calendario internacional HTML cción de un generador de eventos recurrentes
d e traducc ión sin gettext
270 276 280 289 297
307
9: Desarrollo de Middleware ción car con el middleware middleware p ara implementar el control de acceso
e l rendimiento mediante la caché entación de enrutamiento
amadas al sistema inter-marco e middlewar e para cruzar idiomas
0: En cuanto a los algoritmos avanzados ción
307 308 314 323 336 342 350
355
na matriz multi-dimensional y la acumulación de los totales
355 356 362 368 371 373 377 384
1: Implementación de Software Patrones de Diseño
391
ción
391 392 395 397 407 418 429
captadores y definidores entación de una lista enlazada cción de una especie de burbuja entación de una pila cción de una clase de búsqueda binaria entación de un motor de búsqueda
de una matriz de oponerse hydrator cción de un objeto a la matriz hydrator entación de un patrón de estrateg ia ión de un asignador
entación de objeto-relacional cartografía
mentación del patrón de diseño Pub / Sub
435
2: Mejora de la seguridad Web ción e datos $ _POST ión de los datos $ _POST
ardar la sesión de PHP r formas con un token cción de un generador de contraseñas seguras
n de formas con un CAPTCHA de
descifrar sin mcrypt
435 436 440 443 449 455 461 475 iii
¡GUAUU! libro electrónico www.wowebook.org
ción y utilizando Interfaces e xcepciones universal e rrores universal n ensayo sencillo b anco de pru ebas
atos de prueba falsos zación de las sesiones utilizando parámetros Session_Start
483 484 489 493 497 515 518 531
: Definir PSR-7 Clases
537
ción
537 537 557 572
entación de clases de objetos PSR-7 de valor
ollo de una clase PSR-7 Solicitud ión de una clase PSR-7 Respu esta
579
¡GUAUU! libro electrónico www.wowebook.org
Prefacio ado la comunidad de código abierto por la tormenta, rompiendo los registros de velocidad, lo que es, metafóricamente, bezas a girar. En su sentido más fundamental, el equipo de ingeniería básica ha efectuado una importante reescritura de la se las arregló para mantener la compatibilidad con versiones anteriores en un alto grado. El impacto de estos cambios internos hacia el exterior en un aumento de casi 200% en la velocidad, con ahorros significativos en el uso de memoria. Desde una e desarrollo, los cambios en la forma en que se analizan los comandos junto con una sintaxis de la variable uniforme han uevas formas de escribir código que simplemente eran imposibles en las versiones anteriores de PHP. De la misma manera, arrollador que no es consciente de cómo se interpretan los comandos en PHP 7 puede caer en las trampas invisibles, lo que ódigo no funcione correctamente. En consecuencia, el mandato de este libro es ilustrar formas nuevas y emocionantes para o y para señalar las áreas de incompatibilidad con las versiones anteriores de PHP. También es importante tener en cuenta que rda tanto PHP 7.0 y 7.1.
e este libro cubre yuda a llevar a la configuración inicial y la configuración del entorno de desarrollo de PHP 7. Construyendo un Fundación,A sentaremos algunas recetas iniciales contundentes, que demuestran de nuevas características de PHP 7.
so de PHP 7 Alta Características de rendimiento,t oma una inmersión profunda en las nuevas características de la lengua.
tó a los conceptos del árbol de sintaxis abstracta y la sintaxis de la variable uniforme, entre otros, y aprenderá cómo n afectar a la programación del día a día. Esto es seguido por las recetas que se aprovechan de las mejoras de PHP 7, incluyendo nuevos cambios significativos en elp ara cada() manejo bucle.
ace hincapié en la forma en PHP siempre ha tenido la capacidad de trabajar rabajando con PHP programación funcional,h as definidas por el programador de funciones en lugar de clases, y PHP 7 no es una excepción. En este capítulo, vamos a azo más de cerca a las mejoras en el manejo de funciones, incluyendo la capacidad de proporcionar "consejos de tipo" que de datos básicos, tales como entero, flotante, booleano, y la cadena para la entrada y salida. También proporcionaremos obertura de los iteradores de la biblioteca estándar de PHP, así como la forma de escribir sus propios iteradores tomando n mejor manejo de los generadores.
v
¡GUAUU! libro electrónico www.wowebook.org
idamente más allá de los fundamentos, usted aprenderá cómo utilizar los espacios de nombres de PHP y rasgos. consideraciones s serán cubiertos, incluyendo la mejor manera de utilizar interfaces. Por último, una nueva e interesante función de PHP 7, clases discutirá junto con ejemplos prácticos de su uso.
xplora la posibilidad de tener su aplicación leer y escribir en una base de datos, que es teractuar con una Base de datos,e tica de cualquier sitio web moderno. Lo que es ampliamente entendido mal, sin embargo, es el uso correcto de la P Data Objects (PDO). En este capítulo se presentará una cobertura completa de la DOP, que a su vez permitirá a sus para interactuar con la mayoría de las bases de datos importantes, como MySQL, Oracle, PostgreSQL, IBM DB2 y L Server, sin tener que aprender cualquier otro conjunto de comandos. Además, vamos a cubrir las técnicas avanzadas, l trabajo con entidades del modelo de dominio, realizar búsquedas secundarias integradas, y la implementación de las e jQuery DataTable utilizando PHP 7.
rofundiza en uno de los clásicos problemas que enfrentan los desarrolladores de PHP construcción de dificio escalable sitios web,p eractiva formularios HTML-hardcoding y luego tener que realizar tareas de mantenimiento. Un enfoque orientado a objetos ficiente se presenta en este capítulo, que, con una cantidad mínima de código, le permite generar formularios HTML enteras que biar fácilmente en la configuración inicial. Otro problema igualmente desconcertante es cómo filtrar y validar los datos enviados ulario. En este capítulo, aprenderá cómo desarrollar un filtrado y validación de fábrica fácilmente configurable, que luego se r a cualquier dato de entrada de correos.
cceso a Internet Servicios, abarca algo que se está volviendo cada vez más importante para el desarrollo de la web
e publicar o consumir servicios web. Este capítulo trata sobre los dos enfoques fundamentales: en SOAP y REST. Usted ómo implementar SOAP y REST servidores y clientes. Adicionalmente, en las recetas que se presentan utilizan el patrón adaptador, que permite un alto grado de personalización, lo que significa que no están encerrados en un paradigma de cífico.
Trabajando con Fecha / Hora y Aspectos internacionales, le ayuda a hacer frente a la feroz competencia debido al
de la World Wide Web (WWW), lo que lleva a más y más clientes que buscan expandir sus negocios en los ternacionales. En este capítulo se le dará al día en todos los aspectos de la internacionalización, incluyendo el ticonos, personajes complejos y traducción. Adicionalmente, se le mostrará cómo adquirir y manejar la información luyendo la configuración de idioma, el número y formato de moneda, así como la fecha y la hora. Además, recetas que muestran cómo crear calendarios internacionalizadas, que puede manejar eventos recurrentes.
esarrollando middleware, t rata el tema más candente en la comunidad de código abierto en este momento middleware.
mbre indica, el middleware es un software que puede ser roto e n su lugar, lo que añade valor a una aplicación existente e modificar el código fuente de la aplicación. En este capítulo, se le mostrará una serie de recetas, implementado como patible middleware (ver Apéndice, Definir PSR-7 clases,p ara más detalles), que realizan la autenticación, control de lmacenamiento en caché, y de enrutamiento.
¡GUAUU! libro electrónico www.wowebook.org
res y compañías que compiten por el mismo negocio, es extremadamente importante que adquiera el dominio de vanzados clave. En este capítulo, el uso de PHP 7, aprenderá la teoría y aplicación de los captadores y listas enlazadas, pilas tipo de burbujas, y la búsqueda binaria. Además, este capítulo examina cómo utilizar estas ra implementar un motor de búsqueda, y cómo manejar matrices multidimensionales.
La La implementación de patrones de diseño de software, f unciona en un aspecto importante de la programación orientada
decir, una comprensión de los patrones de diseño clave de software. Sin este conocimiento, al solicitar una nueva l intento de atraer a nuevos clientes, que, como desarrollador, estará en una grave desventaja. Este capítulo trata sobre nes de importancia crítica, incluyendo hidratación, Estrategia, Mapper, Object Relational Mapping, y Pub / Sub.
La La mejora de web Seguridad, aborda cuestiones que surgen de la naturaleza penetrante de la Internet hoy en día. Vemos
rnéticos están lanzando cada vez con mayor frecuencia, a menudo con la pérdida financiera y personal devastadora. ítulo, vamos a presentar recetas prácticas sólidas que, de aplicarse, darán a sus sitios web un impulso exponencial en seguridad y protección. Los temas cubiertos incluyen el filtrado y validación, la protección de la sesión, presentación del guro, la generación de contraseñas seguras, y el uso de letras cifradas. Además, una receta se presenta que le mo cifrar y descifrar los datos sin necesidad de utilizar la extensión PHP mcrypt, que está en desuso en PHP 7.1 (y en cia será removido de la lengua).
mejor mejor Prácticas, pruebas y depuración, cubre las mejores prácticas y la depuración de su código para producir un
escrito que funciona. En este capítulo, también aprenderá cómo configurar y crear pruebas unitarias, controlar errores s inesperadas, y generar datos de prueba. Se presentan varias nuevas características de PHP 7, incluyendo la P 7 puede "tirar" errores. Es importante observar que mejor prácticas Se identifican en todo el libro, no sólo en este
efinir PSR-7 clases,d irecciones aceptadas recientemente Normas PHP Recomendación 7, que define
tilizadas en conjunción con middleware. En este apéndice, se le mostrará implementaciones sólidas del es que incluyen objetos de valor, tales como URI, el cuerpo y la carga de archivos, así como objetos de spuesta.
e necesita para este libro necesita para implementar con éxito las recetas presentadas en este libro será una computadora, 100 MB de espacio de al, y un editor de texto o código (no es un procesador de texto!). El primer capítulo cubre cómo configurar un entorno de PHP 7. Tener un servidor Web es opcional ya que PHP 7 incluye un servidor web de desarrollo. No se requiere una nternet, pero podría ser útil para descargar código (tales como el conjunto de interfaces de PSR-7), y revisar la ión de PHP 7.x.
vii
¡GUAUU! libro electrónico www.wowebook.org
uien es este libro p ara arquitectos de software, gerentes técnicos, desarrolladores de intermedio a avanzado, o simplemente los curiosos. ita tener un conocimiento básico de programación PHP, especialmente la POO.
nes o, se encuentran varias partidas que aparecen con frecuencia (Preparación, Cómo se hace, cómo funciona, Hay ambién). ucciones claras sobre cómo completar una receta, utilizamos estas secciones de la siguiente manera:
ndose le indica lo que debe esperar en la receta, y describe cómo configurar ningún software o cualquier configuración necesarios para la receta.
acerlo… n contiene los pasos necesarios para seguir la receta.
unciona… n normalmente consiste en una explicación detallada de lo sucedido en la sección anterior.
s… ón consta de información adicional sobre la receta con el fin de hacer que el lector más es de la receta.
bién n proporciona enlaces útiles a otra información útil para la receta.
¡GUAUU! libro electrónico www.wowebook.org
nc ones e ncontrará una serie de estilos de texto que distinguen entre diferentes tipos de información. Estos son algunos ejemplos los y una explicación de su significado. Las palabras de código en el texto, nombres de tabla de base de datos, nombres de bres de archivo, extensiones de archivo, nombres de ruta, URL ficticias, la entrada del usuario, y las manijas de Twitter se o sigue: "Por último, tomar la claseL otsProps s e define en el tercer punto y colocarlo en un archivo separado,
p_using_getters_and_setters_magic_call.php ". código se establece como sigue:
ida función estática loadFile ($ file) { si (file_exists ($ archivo)) { archivo $ require_once; return TRUE; } falso retorno; }
amos llamar su atención sobre una parte específica de un bloque de código, las líneas o los artículos pertinentes se establecen en
ams = [ b' => __DIR__. '/../data/db/php7cookbook.db.sqlite']; = =sprintf sprintf('('s qlite:'. $ params [ 'db']); rada o salida de línea de comandos se escribe como sigue:
/ php recetas -S 8080
érminos y Palabras importantes se muestran en negrita. Palabras que se ven en la pantalla, por ejemplo, en los dros de diálogo, aparecen en el texto así: "Cuando el Las compras n el botón, la información de compra inicial aparece ".
Advertencias o notas importantes aparecen en un cuadro como este.
Consejos y trucos aparecen así.
ix
¡GUAUU! libro electrónico www.wowebook.org
arios de los lectores rios de nuestros lectores es siempre bienvenido. Háganos saber lo que piensa de este libro, lo que gustó o no. de los lectores es importante para nosotros, ya que nos ayuda a desarrollar títulos que usted realmente va a obtener el echo de. Para enviar comentarios generales, simplemente por e-mail
[email protected], y mencione el título del libro del mensaje.
ema que tiene experiencia en y usted está interesado en cualquiera de escritura o contribuir a r nuestra guía de Autor www.packtpub.com/authors.
ión al cliente ted es el orgulloso propietario de un libro Packt, tenemos una serie de cosas para ayudarle a obtener el máximo provecho de
arga del código de ejemplo rgar los archivos de código de ejemplo para este libro de su cuenta al http: // www. packtpub.com.S i ha adquirido este libro e puede visitar http: //www.packtpub. es / supporty registrarse para tener los archivos enviados por correo electrónico a usted. Puede descargar los archivos de código siguiendo estos pasos:
s esión o reg ístrese en nuestro sitio web utilizando su dirección de correo electrónico y la contraseña.
e el puntero del ratón sobre el APOYO pestaña en la parte superior.
a clic en Código Descargas y erratas.
oduzca el nombre del libro en el Buscar caja. ccionar el libro para el que usted está buscando para descargar los archivos de código.
a en el menú desplegable en el que adquirió este libro de. a clic en Descarga el código.
de descargar los archivos de código haciendo clic en el Los archivos de código botón en la página web del libro en la e Packt Publishing. Esta página se puede acceder introduciendo el nombre del libro en el Buscar caja. Tenga en cuenta estar conectado a su cuenta de Packt.
¡GUAUU! libro electrónico www.wowebook.org
AR / 7-Zip para Windows g / IZIP / UnRarX para Mac
d de e las lasutilidades utilidadesde de Linux Linux oo 7-Zip 7-Zip//PeaZip PeaZipEl El paquete paquete de de código código para para el el libro librotambién tambiénestá estáalojado alojado en https://github.com/ Packt Publishing / PHP-7-Programación-libro de cocina. T ambién tenemos otros e código de nuestro rico catálogo de libros y videos disponibles en https://github.com/ Packt Publishing ar a cabo!
os tomado todas las precauciones para a segurar la exactitud de nuestro contenido, los errores oc urren. Si encuentra uno de nuestros libros, tal vez un error en el texto o el código-estaríamos agradecidos si pudiera informar de esto a hacerlo, puede ahorrar otros lectores de la frustración y ayudar a mejorar las versiones posteriores de este libro. Si lguna errata, por favor informe al visitar http://www.packtpub.com/submit-errata, l a selección de su libro, hacer clic en el Formulario ción de erratas enlace, e introducir los detalles de su fe de erratas. Una vez que su fe de erratas se verifican, su n será aceptado y la fe de erratas se cargará en nuestra página web o añadir a cualquier fe de erratas existentes en la rratas de ese título. Para ver la fe de erratas presentada anteriormente, vaya a https://www.packtpub.com/books/ portey escriba el nombre del libro en el campo de búsqueda. La información requerida aparecerá bajo el Errata sección.
e material con copyright en Internet es un pr oblema constante en todos los medios. En Packt, tomamos la protección de nuestros autor y licencias muy en serio. Si se encuentra con todas las copias ilegales de nuestros trabajos en cualquier forma en Internet, proporcione la dirección de ubicación o el nombre del sitio web inmediatamente para que podamos presentar un recurso. Por e en contacto con nosotros enc
[email protected] c on un enlace a la sospecha de material pirateado.
u ayuda en la protección de nuestros autores y nuestra capacidad para lograr que el contenido valioso.
xi
¡GUAUU! libro electrónico www.wowebook.org
uun n problema problema con con cualquier cualquier aspecto aspecto de de este este libro, libro, puede puede ponerse ponerse en en contacto contacto con con nosotros nosotros en en preguntas @ packtpub.com, y tro mejor esfuerzo para resolver el problema.
¡GUAUU! libro electrónico www.wowebook.org
1 La construcción de una Fundación ítulo, vamos a cubrir los siguientes temas: 7 consideraciones sobre la instalación el servidor Web incorporado en PHP finición de una base de datos MySQL de prueba ación de PHPUnit plementación de la carga automática de clases
ering un sitio web nstrucción de un escáner web profunda ación de un PHP 5 a 7 Código PHP convertidor
ucción ítulo se ha diseñado como una Inicio rápido q ue les permite conocer y que se ejecuta en PHP 7 para que pueda plicar las recetas de inmediato. La suposición subyacente de este libro es que usted ya tiene un buen conocimiento de amación. Aunque este libro no va a entrar en detalles sobre la instalación real de PHP, ya que PHP 7 es relativamente s a hacer todo lo posible para señalar las peculiaridades y trampas q ue pueden surgir durante la instalación de PHP 7.
c onsideraciones sobre la instalación dios principales de adquisición de PHP 7:
carga e instalación directamente desde el código fuente lación pre-compilado b inarios ación de un paquete * AMP (es decir, XAMPP, WAMP, LAMP, MAMP, y así sucesivamente)
1
¡GUAUU! libro electrónico www.wowebook.org
… todos se enumeran en orden de dificultad. Sin embargo, el primer enfoque, aunque tedioso, le dará ás finita sobre extensiones y opciones.
irectamente desde la fuente ar este enfoque, se necesita tener un compilador de C disponible. Si está ejecutando Windows, MinGW es un compilador demostrado ser popular. Se basa en el Colección de compiladores de GNU (GCC) compilador proporcionada por el ÑU proyecto. no libres incluyen el clásico Turbo C compilador de Borland, y, por supuesto, el compilador que es preferido por los res de Windows es Estudio visual. Este último, sin embargo, está diseñado principalmente para el desarrollo de C ++, por lo se compila PHP, tendrá que especificar el modo C. Cuando se trabaja en un Apple Mac, la mejor solución es instalar el Herramientas de Apple.
ilizar el Xcode IDE compilar PHP 7, o correr gccd esde una ventana de terminal. En un entorno Linux, desde una erminal, ejecute gcc. esde una línea de comandos de la ventana o terminal, el procedimiento normal es el siguiente:
igurar r r la prueba
e install información sobre las opciones de configuración (es decir, cuando se ejecuta configurar),u tilizar el ayuda
-help
q ue pueden surgir durante la fase de configuración se mencionan en la siguiente tabla:
Fijar
r: No se ha encontrado xml2config: r favor, compruebe la instalación
Sólo tiene que instalar libxml2. Por este error, consulte el siguiente enlace: http://superuser.com/ preguntas / 740399 / cómo-a-fix-phpinstallation-cuando-xml2-config-IsMissing
: error: Por favor, vuelva a instalar No puedo encontrar readline.h
Instalar libreadline-dev
¡GUAUU! libro electrónico www.wowebook.org
r: ADVERTENCIA: no o opciones: e-spl, --enablereflection, ml
No es un gran trato. Estas opciones son valores por defecto y no necesitan ser incluidos. Para más detalles, consulte el siguiente enlace:
http://jcutrer.com/howto/linux/howto-compile-php7-on-ubuntu-14-04
n de PHP 7 a partir de binarios precompilados o indica, pre-compilado binarios son un conjunto de archivos binarios que alguien más ha compilado amablemente desde o fuente y ha puesto a disposición. En el caso de Windows, vaya a h ttp://wi ndows.php.net/.V a a encontrar un buen conjunto de la columna de la izquierda que se refieren a la versión para elegir, a salvo de amenazas versus de no lectura segura,
continuación, puede hacer clic en descargas y buscar el archivo ZIP que se aplica a su entorno. Una vez que IP se ha descargado, extraer los archivos en la carpeta de su elección, añadir p hp.exe a su ruta, y configurar ando el php.inia rchivo. Para instalar los binarios pre-compilados en un sistema Mac OS X, l o mejor es incluir de gestión de paquetes. Las recomendadas para PHP incluyen los siguientes:
Ports
n
ebrew de Linux, el sistema de envasado utilizado depende de la distribución de Linux que esté utilizando. La bla, organizado por la distribución de Linux, resume dónde buscar el paquete PHP 7.
ción Dónde encontrar PHP 7
notas
packages.debian.org/stable/php
Utilice este comando: sudo apt-get install php7
repos-source.zend.com/zendserver/early-access/php7/php7*DEB*
Alternativamente, se puede utilizar una herramienta de gestión de paquetes gráfico como
Sináptica. Asegúrese de seleccionar php7
(Y no php5).
3
¡GUAUU! libro electrónico www.wowebook.org
packages.ubuntu.com
Utilice este comando:
sudo apt-get install php7 repos-source.zend.com/zendserver/early-access/php7/php7*DEB* Asegúrese de elegir la versión correcta de Ubuntu. Alternativamente, se puede utilizar una herramienta de gestión de paquetes gr áfico como
Sináptica. R ed Hat
paquetes admin.fedoraproject.org/pkgdb/
Asegúrese de que usted es el usuario root:
Do
repos-source.zend.com/zendserver/early-access/php7/php7*RHEL*
Utilice este comando: DNF instalar php7 Alternativamente, se puede utilizar una herramienta gráfica de gestión de paquetes como el Administrador de GNOME paquete.
SE
php7 software.opensuse.org/package/
Utilice este comando: php7 YaST -i Como alternativa, puede ejecutar
zypper, o usar YaST como una herramienta gráfica.
ión de un paquete de AMP * e refiere a Apache, MySQL, y PHP ( además Perl y Pitón). El * se refiere a Linux, Windows, Mac, y así sucesivamente MP, WAMP, MAMP y). Este enfoque es a menudo el más fácil, pero le da menos control sobre la instalación inicial r otra parte, siempre se puede modificar el p hp.ini a rchivar e instalar extensiones adicionales para personalizar la egún sea necesario. La siguiente tabla resume una serie de paquetes populares * AMP:
rver
¿Dónde se encuentra
¿Gratis?
Soporta *
www.apachefriends.org/download. html
Y
WML
www.ampps.com/downloads
Y
WML
www.mamp.info/en
Y
WM
wampserver sourcefor ge.net/projects/
Y
W
¡GUAUU! libro electrónico www.wowebook.org
www.easyphp.org d.com/en/products/zend_ servidor Zend servidor
Y
W
norte
WML
nterior, hemos contratado los paquetes * * AMP, donde se sustituye por W para ventanas, METRO para Mac ra Linux.
s… stala un binario pre-compilado a partir de un paquete, sólo se núcleos e instalan las extensiones. extensiones PHP no ben instalarse por separado.
señalar que la instalación de PHP 7 en plataformas de computación en nube menudo seguirá el procedimiento de escrito para los binarios pre-compilados. Averiguar si su entorno de nube usa Linux, Mac o Windows máquinas uego siga el procedimiento adecuado como se menciona en esta receta.
ue PHP 7 aún no ha alcanzado su repositorio favorito para binarios pre-compilados. Siempre se puede instalar desde el , o considerar la instalación de uno de los paquetes de AMP * (ver la siguiente sección). Una alternativa para los sistemas Linux es utilizar el Personal Archivo Paquete
que. Debido a que las APP no han sido sometidos a un riguroso proceso de selección, sin embargo, la uede ser una preocupación. Una buena discusión sobre las consideraciones de seguridad para las APP se n http://askubuntu.com/questions/35629/are-ppas-safe-to-add-to-mysystem-and-what-are-some-red-flags-to-watch-out-fo.
bién nes generales de instalación, así como las instrucciones para cada una de las tres principales plataformas de sistemas indows, Mac OS X, y Linux), se pueden encontrar en http://php.net/manual/en/ install.general.php.
b de MinGW es http://www.mingw.org/. nes sobre cómo compilar un programa en C utilizando Visual Studio se pueden encontrar en
n.microsoft.com/en-us/library/bb384838. forma de probar PHP 7 es mediante el uso de una máquina virtual. Aquí hay un par de herram ientas con sus enlaces, que ltar útiles:
abundo: h ttps://github.com/rlerdorf/php7dev ( p hp7dev es un Debian 8 imagen vagabundo que está preconfigurado para probar aplicaciones PHP y el desarrollo de extensiones en mu chas versiones de PHP)
bador: https://hub.docker.com/r/coderstephen/php7/ ( q ue contiene una PHP7 acoplable contenedor)
5
¡GUAUU! libro electrónico www.wowebook.org
e serv or
e ncorpora o en
pruebas unitarias y se ejecuta PHP directamente desde la línea de comandos, la manera obvia de probar sus es el uso de un servidor web. Para proyectos a largo plazo, sería beneficioso desarrollar una definición de host virtual para eb que refleja más de cerca posible al utilizado por su cliente. La creación de estas definiciones de los diversos servidores ir, Apache, Nginx, y así sucesivamente) está más allá del alcance de este libro. Otra alternativa rápida y fácil de usar (que acio para discutir aquí) es utilizar el servidor web integrado 7 en PHP.
acerlo… ra activar el servidor web PHP, primero cambie al directorio que servirá como la base para su código.
ntinuación, deberá suministrar el nombre de host o la dirección IP y, opcionalmente, un puerto. Aquí hay un ejemplo que puede utilizar para ejecutar las recetas suministradas con este libro:
cd / ruta / a / php recetas -S localhost: 8080
Verá una salida en la pantalla que se ve algo como esto:
¡GUAUU! libro electrónico www.wowebook.org
de estado HTTP, y solicitar información. Si es necesario configurar la raíz de documentos del servidor web a un directorio distinto al actual, se puede utilizar el - t b andera. La bandera debe entonces ser seguida por una ruta de directorio válido. El servidor web integrado tratará a este directorio como si fuera la raíz de documentos web, que es útil por razones de seguridad. Por razones de seguridad, algunos marcos, como Zend Framework, requiere que la raíz de documentos web es diferente de donde reside el código fuente real. Aquí hay un ejemplo usando el - t b andera:
php -S localhost: 8080 fuente -t / Chapter01
Aquí está un ejemplo de la salida:
ición de una base de datos MySQL de prueba sitos de prueba, junto con el código fuente para el li bro, hemos proporcionado un archivo SQL con datos de https://github.com/dbierer/php7cookbook.E l nombre de la base de datos utilizada en las recetas de este libro es php7cookbook.
7
¡GUAUU! libro electrónico www.wowebook.org
acer o… nir una base de datos MySQL, php7cookbook.T ambién asignar derechos a la nueva base de datos
a un usuario llamado cocinar c on la contraseña libro.L a siguiente tabla resume estos valores:
ít.
notas
Nombre de la base de datos
php7cookbook
Base de datos de usuarios
cocinar
contraseña de usuario de base de datos
libro
ntinuación se muestra un ejemplo de SQL necesario para crear la base de datos:
CREAR BASE DE DATOS SI NO EXISTE nombredb DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE USER 'usuario' @ '%' identificado con mysql_native_password; Contraseña establecida para 'usuario' @ '%' = PASSWORD ( 'userPassword'); Conceder a todos los privilegios en nombredb * a 'usuario' @ '%'.; Conceder a todos los privilegios en nombredb * a 'usuario' @ 'localhost'.; FLUSH PRIVILEGES;
Importar los valores de la muestra en la nueva base de datos. El archivo de importación, p hp7cookbook. sql, se encuentra en https://github.com/dbierer/php7cookbook/blob/ maestro / php7cookbook.sql.
ción de PHPUnit unidad es posiblemente el medio más popular de código de prueba PHP. La mayoría de los desarrolladores estarán de acuerdo en to sólido de pruebas es un requisito para cualquier proyecto desarrollado adecuadamente. En realidad pocos desarrolladores s pruebas. Unos pocos afortunados tienen un grupo de prueba independiente que escribe las pruebas para ellos! Después de meses as con el grupo de prueba, sin embargo, los restos de los pocos afortunados tienden a quejarse y quejarse. En cualquier caso, todos re PHP no estaría completa sin al menos un movimiento de cabeza y un guiño hacia las pruebas. El lugar para encontrar la última PUnit es https://phpunit.de/.P HPUnit5.1 y por encima de PHP soporte 7. Haga clic en el enlace de la versión deseada, y va a descargar ar a rchivo. A continuación, puede ejecutar comandos utilizando el archivo, de la siguiente manera:
it.phar
los Phar comando significa Archivo PHP. La tecnología se basa en alquitrán, que a su vez se utilizó en UNIX. UN Phar archivo es una colección de archivos PHP que se embalan juntos en un solo archivo para mayor comodidad.
¡GUAUU! libro electrónico www.wowebook.org
mentación de la carga automática de clases ollo de PHP utilizando una programación or ientada a objetos (POO) enfoque, la recomendación es c olocar cada propio archivo. La ventaja de seguir esta recomendación es la facilidad de mantenimiento a largo plazo y mejorar . La desventaja es que cada archivo de definición de la clase debe ser incluido (es decir, el uso de i ncluir o sus ara abordar esta cuestión, hay un mecanismo incorporado en el lenguaje PHP que se
ualquier clase que no se haya incluido específicamente.
ndose mínimo para la carga automática de PHP es definir un mundial __ a utocarga () f unción. Esto es un magia f unción omáticamente por el motor de PHP cuando se solicita una clase, pero en la que dicha clase no se ha incluido. El la clase solicitada aparecerá como un parámetro cuando __ a utocarga () s e invoca (suponiendo que ha definido él!). Si do espacios de nombres de PHP, se pasará el nombre de espacio de nombres completo de la clase. Porque __
e es s un un función,d ebe estar en el espacio de nombres global; Sin embargo, hay limitaciones en su uso. En cia, en esta receta, vamos a hacer uso de la s pl_autoload_register ()
que nos da más flexibilidad.
acerlo… clase vamos a cubrir en esta receta es Aplicación \ carga automática \ Loader. En orden para tomar ventaja de la relación entre los espacios de nombres de PHP y de carga automática, nombramos el archivo Loader.php y colocarlo en el directorio / r uta / a / libro de cocina / archivos / Aplicación / carga automática c arpeta.
rimer método que presentaremos simplemente carga un archivo. Usamos E l archivo existe() a
comprobar antes de ejecutar requerir una vez(). La razón de esto es que si no se encuentra el archivo, requerir una vez()g enerará un error grave que no puede ser capturado con nuevas capacidades de manejo de error de PHP de 7:
protegida función estática loadFile ($ file) { si (file_exists ($ archivo)) { archivo $ require_once; return TRUE; } falso retorno; }
ntinuación, podemos probar el valor de retorno de cargar archivo() en el programa de llamada y el bucle
a través de una lista de directorios alternativos antes de lanzar una Excepcións i es en última instancia, no puede cargar el archivo.
9
¡GUAUU! libro electrónico www.wowebook.org
Usted se dará cuenta de que los métodos y propiedades de esta clase son estáticos. Esto nos da mayor flexibilidad al registrar el método de carga automática, y también nos permite tratar a la Cargador como una clase Semifallo.
ontinuación, se define el método que llama cargar archivo() y en realidad realiza la lógica para localizar el archivo basado en el nombre de clase de espacio de nombres. Este método se deriva un nombre de archivo mediante la conversión del espacio de nombres de PHP separador \ en el separador de directorios adecuada a este servidor y anexas. p hp: autoLoad función pública estática (clase $) {
$ Éxito = false; $ Fn = str_replace ( '\\', DIRECTORY_SEPARATOR, clase $) .
'.php';
foreach (self :: $ directorios como $ comenzar) {
$ File = $ inicio. DIRECTORY_SEPARATOR. $ Fn; si (self :: loadFile ($ archivo)) { $ Éxito = TRUE; descanso; }}
if (! $ éxito) { if (! self :: loadFile (__ DIR__ .
DIRECTORY_SEPARATOR. $ Fn)) {throw new \
Excepción ( self :: UNABLE_TO_LOAD. ''. clase $); }}
devolver $ éxito; }
ntinuación, el método de bucle a través de una serie de directorios que llamamos self :: $ directorios,u tilizando
cada directorio como un punto de partida para el nombre de archivo derivada. Si no tiene éxito, como último recurso, el método intenta cargar el archivo desde el directorio actual. Si aún no es exitosa, unaE xcepción es aventado. ntinuación, tenemos un método que puede añadir más directorios a nuestra lista de directorios para poner a prueba. Observe que si el valor proporcionado es una matriz, a rray_merge () s e utiliza. De lo contrario, simplemente se añade la cadena de directorio a la s elf :: $ dirsf ormación:
addDirs públicas estáticas de función () {$ dirs if ($ is_array (directorios)) { self :: $ dirs = array_merge (self :: $, $ directorios directorios); } Else {
¡GUAUU! libro electrónico www.wowebook.org
ntinuación, llegamos a la parte más importante; tenemos que dejar constancia de nuestra a utocarga ()
método como una Biblioteca estándar de PHP (SPL) cargador automático. Esto se logra utilizando
étodo: spl_autoload_register ()c on el en eso()m pública init función estática ($ dirs = array ()) { if ($) {directorios self :: $ addDirs (directorios); }
si (self :: $ == registrada 0) { spl_autoload_register (__ class__ ':: carga automática'.); self :: $ registrada ++; }}
e este ste punto, punto,podemos podemosdefinir definir__ __ c onstruir(), q ue llama self :: init (dirs $). Esto nos permite crear también una instancia de Cargador S i es deseado:
__construct función pública ($ dirs = array ()) { self :: init ($ dirs); }
unciona… u utilizar tilizar lalaclase clase cargador cargador automático automático que que acabamos acabamos de de definir, definir,que quetendrá tendráque que requerir Loader. php. S i los archivos de ombres se encuentran en un directorio distinto al actual, también debe ejecutar Cargador :: init ()y el suministro de rutas s adicionales. segurarse de que funciona el cargador automático, también necesitaremos una clase de prueba. He aquí una definición de
kbook/files/Application/Test/TestClass.php: p
io de nombres de programa \ prueba; lass clase {
getTest función pública () { volver __METHOD__; }}
11
¡GUAUU! libro electrónico www.wowebook.org
p
rir __DIR__. '/../Application/Autoload/Loader.php'; Aplicación \ carga automática \ dor :: init (__ DIR__ '/ ..'.); n, obtener una instancia de una clase que no se haya cargado:
t = nueva aplicación \ Test \ TestClass (); echo $ Test-> getTest
te de obtener una falsoc lase que no existe. Tenga en cuenta que esto generará un error:
lso nueva aplicación \ Test \ FakeClass (); echo $ fake-> st ();
ring un sitio web temente, es de interés para escanear una página web y extraer información de las etiquetas específicas. Este mecanismo ede utilizar en la red en busca de trozos de útiles de información. En otras ocasiones es necesario obtener una lista de < I MG> y ylala SRCa tributo o < A> l as etiquetas y los correspondientes HREFa tributo. Las posibilidades son infinitas.
acerlo… primer lugar, tenemos que agarrar el contenido del sitio web de destino. A primera vista parece que deberíamos hacer una solicitud cURL, o simplemente utilizar f ile_get_contents ().
El problema con estos enfoques es que vamos a llegar a tener que hacer una gran cantidad de manipulación de cadenas, lo más probable tener que hacer uso excesivo de la expresión regular temida. Para evitar todo OMDocument. Así se crea una DOMDocument esto, vamos a simplemente tomar ventaja de una clase PHP 7 ya existente D ejemplo, poniéndolo a UTF-8. No se preocupan por espacios en blanco, y el uso de la mano
étodo para cargar el contenido de la página web en el objeto: loadHTMLFile () m getContent función pública ($ url) { if (! $ this-> content) { (si stripos ($ url, 'http') == 0) { $ Url = 'http: //'. $ Url; } $ This-> content = new DOMDocument ( '1,0', 'utf-8'); $ This-> contenido-> PreserveWhitespace = false; // @ utilizado para suprimir avisos generados a partir // páginas web configurados incorrectamente @ $ this-> contenido-> loadHTMLFile ($ url); }
¡GUAUU! libro electrónico www.wowebook.org
Tenga en cuenta que preceden a la llamada a la loadHTMLFile () método con un @. Esto no se hace para ocultar la mala codificación (!) Al igual que a menudo el caso en PHP 5! Más bien, el @ suprime los avisos generados cuando el analizador encuentra HTML mal escrito. Presumiblemente, podríamos capturar los avisos y registrarlos, capaces de dar nuestra Aspiradora clase una capacidad de diagnóstico también.
ntinuación, tenemos que extraer las etiquetas que son de interés. Usamos el
getElementsByTagName () Método para este propósito. Si deseamos extraer todas etiquetas, podemos suministrar * como argumento:
getTags de función pública ($ url, $ tag) { $ recuento
= 0;
$ Resultado = array (); $ Elementos = $ this-> getContent ($ url) - > getElementsByTagName ($ tag); foreach ($ elementos como $ nodo) { $ Resultado [$ count] [ 'valor'] = trim ( preg_replace ( '/ \ s + /', '', $ node-> nodeValue)); if ($ nódulo-> hasAttributes ()) { foreach ($ node-> atributos como el nombre $ => $ attr) { $ Resultado [count $] [ 'atributos'] [$ name] = $ Attr-> valor; }}
$ Contar ++; }
return $ resultado; }
También podría ser de interés para extraer ciertos atributos en lugar de las etiquetas. De acuerdo con ello, definimos otro método para este propósito. En este caso, tenemos que analizar a través de todas las etiquetas y el uso g etAttribute (). Se dará cuenta de que hay un parámetro para el dominio DNS. Hemos añadido esto con el fin de mantener la exploración dentro del mismo dominio (si usted está construyendo un árbol web, por ejemplo):
getAttribute función pública ($ url, $ attr, $ domain = NULL) { $ Resultado = array (); $ Elementos = $ this-> getContent ($ url) - > getElementsByTagName ( '*'); foreach ($ elementos como $ nodo) { 13
¡GUAUU! libro electrónico www.wowebook.org
$ Valor = $ node-> getAttribute ($ attr); if ($ dominio) { (si stripos (valor de $, $ dominio)! == false) { $ Resultado [] = trim ($ value); }} Else {
$ Resultado [] = trim ($ value); }}}
return $ resultado; }
unciona… e ell nuevo nuevo Aspiradorac lase, inicializar el cargador automático (descrito anteriormente) y crear una instancia de la Aspiradora tinuación, puede ejecutar el H étodo para producir una serie de etiquetas desde la URL que oover :: getTags () M como argumento. Aquí es un bloque de código de chap_01_vacuuming_website.php q ue utiliza el Aspiradora
canear la página web de O'Reilly < A> t ags:
p icar según sea necesario
( 'DEFAULT_URL', 'http://oreilly.com/'); define ( 'DEFAULT_TAG', 'a');
rir __DIR__. '/../Application/Autoload/Loader.php'; Aplicación \ carga automática \ dor :: init (__ DIR__ '/ ..'.); ner la clase de "vacío"
= nuevo programa \ Web \ Hoover (); A: se utiliza el operador de PHP se unen 7 nula $ url = strip_tags ($ _ GET [ ? DEFAULT_URL); $ tag = strip_tags ($ _ GET [ 'tag'] ?? DEFAULT_TAG);
zamiento de las etiquetas:' eco. PHP_EOL; var_dump A> getTags ($ url, $ tag));
¡GUAUU! libro electrónico www.wowebook.org
bién er más información sobre DOM, consulte la página de referencia en PHP http://php.net/manual/ es / cument.php.
trucción de un escáner web profunda cesario para escanear una página web, pero ir un nivel más prof undo. Por ejemplo, usted quiere construir un diagrama de árbol io web. Esto se puede lograr mediante la búsqueda de todos los < A> l as etiquetas y después de la HREF atribuye a la siguiente na vez que haya adquirido las páginas secundarias, a continuación, puede continuar con el escaneado con el fin de completar el
15
¡GUAUU! libro electrónico www.wowebook.org
acer o… omponente central de un escáner web profunda es una condición básica Aspiradorac lase, como se describe
previamente. El procedimiento básico que se presenta en esta receta es para explorar el sitio web de destino y la REF a plicación \ Web \ Profundo c lase. Añadimos una propiedad aspiradora todo el H tributos. Para este fin, se define una A
que representa el dominio DNS: espacio de nombres de programa \ Web; Profundo clase {
protected $ dominio; ntinuación, se define un método que Hoover las etiquetas para cada sitio web representada en la lista de exploración. Con el fin de evitar que el escáner de la pesca de arrastre de la totalidad Red mundial (WWW), hemos limitado la exploración al dominio de destino. La razón por la cual d e rendimiento a partir s e ha agregado es porque necesitamos para producir toda la matriz producida por Hoover :: getTags (). l os de rendimiento a partir la sintaxis nos permite tratar la matriz como un sub-generador:
exploración de la función pública ($ url, $ tag) { $ aspiradora
= New Hoover ();
$ = $ Escanear VCA> getAttribute ($ url, 'href', $ This-> GetDomain ($ url)); $ Resultado = array (); foreach ($ escanear como $ subsitio) { de rendimiento a partir VCA $> $ getTags (subsitio, $ etiqueta); }
count ($ escaneo) de retorno; }
El uso de de rendimiento a partir convierte el escanear() método en un generador de delegante PHP 7. Normalmente, se inclinaría a almacenar los resultados de la exploración en una matriz. El problema, en este caso, es que la cantidad de información recuperada podría ser potencialmente masiva. Por lo tanto, es mejor para obtener inmediatamente los resultados con el fin de conservar la memoria y para producir resultados inmediatos. De lo contrario, no habría una espera larga, lo que probablemente sería seguido por un error de falta de memoria.
Con el fin de mantener dentro del mismo dominio, necesitamos un método que devolverá el dominio de la URL. Usamos la práctica p arse_url () funcionar para este propósito:
GetDomain función pública ($ url) { if (! $ this-> dominio) {
¡GUAUU! libro electrónico www.wowebook.org
return $ this-> dominio; }
unciona… gar, seguir adelante y definir el Aplicación \ Web \ Profundo c lase definida anteriormente, así como la Aplicación \ r c lase definida en la receta anterior. A continuación, definir un bloque de código de chap_01_deep_scan_website.php que
rcha la carga automática (como se describe anteriormente en este capítulo):
p icar según sea necesario
( 'DEFAULT_URL', unlikelysource.com '); define ( ULT_TAG', 'img'); rir __DIR__. '/../../Application/Autoload/Loader.php'; Aplicación \ carga automática \ cargador :: DIR__ '/../ ..'.); n, obtener una instancia de nuestra nueva clase:
unda = nuevo programa \ Web \ profunda ();
to, se puede recuperar URL y etiquetar la información de parámetros de URL. El PHP 7 se unen nula o perador es útil ecer los valores de retorno:
s trip_tags ($ _ GET [ 'url'] ?? DEFAULT_URL); $ tag = strip_tags ($ _ 'tag'] ?? DEFAULT_TAG); L simple mostrará los resultados:
h ($ profundas> Barrido ($ url, $ tag) como $ item) { $ Src = $ item [ 'atributos'] [ 'src'] ?? NULO; if ($ && src (stripos ($ src, 'png') || stripos ($ src, 'jpg'))) { printf ( '
', $ src); }}
bién más información sobre los generadores y de rendimiento a partir, c onsulte el artículo en
et/manual/en/language.generators.syntax.php.
17
¡GUAUU! libro electrónico www.wowebook.org
ac n e un
a
go
convert or
r parte, el código PHP 5.x puede funcionar sin cambios en PHP 7. Hay algunos cambios, sin embargo, que se mo revés incompatibles.L o que esto significa es que si su código PHP 5 está escrito de una manera determinada, o nes que han sido retirados, el código se romperá, y que tendrá un error desagradable en sus manos.
ndose ace dos cosas: 7 7 Convertidor de código PHP h
nea el archivo de código y convierte PHP 5 funcionalidad que se ha quitado a su equivalente en PHP 7 ga comentarios con // ADVERTENCIAd onde se han producido cambios en el uso del lenguaje, pero donde una re-escritura no es posible
Tenga en cuenta que después de ejecutar el convertidor, su código es no garantizado para trabajar en PHP 7. Usted todavía tendrá que revisar la // ADVERTENCIA etiquetas añadidas. Al menos, esta receta le dará una buena ventaja de convertir su código PHP 5 para trabajar en PHP 7.
eesta sta receta recetaes eslalanueva nuevaPHP PHP77 preg_replace_callback_array ()f unción. Lo que este sorprendente función le permite hacer una serie de expresiones regulares como llaves, con el valor que representa una devolución de llamada te. A continuación, puede pasar la cadena a través de una serie de transformaciones. No sólo eso, el tema de la serie nes de llamada puede una matriz.
acerlo… En una nueva clase Aplicación \ Analizar \ Convert, c omenzamos con una escanear()m étodo, que acepta un nombre de archivo como un argumento. Se comprueba si existe el archivo. Si es así, se llama al PHP archivo() f unción, que carga el archivo en una matriz, con cada elemento de la matriz que representa una línea:
exploración de la función pública ($ archivo) {
if (! file_exists ($ archivo)) { arrojar nueva Excepción ( self :: EXCEPTION_FILE_NOT_EXISTS); } $ contenidos = archivo ($ archivo); 'Procesamiento:' eco. $ Nombre de archivo. PHP_EOL; $ Resultado = preg_replace_callback_array ([
¡GUAUU! libro electrónico www.wowebook.org
la cadena. Cualquier coincidencia se pasan a la devolución de llamada, que se representa como la parte del valor del par clave / valor. Comprobamos para las etiquetas de apertura y cierre que se han eliminado de PHP 7:
// reemplazar que ya no apoyados por la apertura de las etiquetas '^ \ <\% (\ n |)!' =>
función (coincidencia $) { retorno ' php'. $ Partido [1]; },
// reemplazar que ya no apoyados por la apertura de las etiquetas '^ \ <\% = (\ n |)!' =>
función (coincidencia $) { retorno ' php echo'. $ Partido [1]; },
// reemplazar sin el apoyo de más largo etiqueta de cierre '! \% \>!' => función (coincidencia $) { retorno '?>'; },
ntinuación hay una serie de advertencias cuando se detectan ciertas operaciones y existe un potencial código-ruptura entre cómo se manejan en PHP 5 frente a PHP 7. En todos estos casos, el código no es re-escrito. En cambio, un comentario en línea con la palabraA DVERTENCIA está agregado:
// cambios en cómo se maneja $$ interpretación xxx '! (. *?) \ $ \ $!' => función (coincidencia $) { retorno '// ADVERTENCIA: la interpolación de variables .
'Ahora se produce de izquierda a derecha'. PHP_EOL
.
'// ver: http://php.net/manual/en/'
.
'// migration70.incompatible.php'
.
$ Partido [0];
}, // cambios en cómo se maneja la lista () operador de! (. *?) lista (\ s *?)? \ (! '=> función (coincidencia $) { retorno '// ADVERTENCIA: se han realizado cambios' .
'En la lista () manejo del operador.
.
A ver: http://php.net/manual/en/ '
.
'Migration70.incompatible.php'
.
$ Partido [0]; 19
¡GUAUU! libro electrónico www.wowebook.org
// instancias de \ u { '! (. *?) \\\ U \ {!' => función (coincidencia $) { retorno '// ADVERTENCIA: \\ u {xxx} ahora se considera' .
'Sintaxis de escape Unicode'. PHP_EOL
.
'// ver: http://php.net/manual/en/'
.
'Migration70.new-features.php'
.
'# Migration70.new-features.unicode-'
.
'De escape de punto de código-sintaxis'. PHP_EOL
.
$ Partido [0];
}, // confiar en set_error_handler () '! (. *?) Set_error_handler (\ s *?)?. * \ (!' => función (coincidencia $) { retorno '// ADVERTENCIA: no podría' .
'Atrapar todos los errores'
.
'// ver: http://php.net/manual/en/'
.
'// language.errors.php7.php'
.
$ Partido [0];
}, // session_set_save_handler (xxx) '! (. *?) Session_set_save_handler (\ s *?)? \ ((. *?) \)!' => función (coincidencia $) { if (isset ($ partido [3])) { retorno '// ADVERTENCIA: un error introducido en' .
'PHP 5.4 que'
.
'Afecta al controlador asignado por'
.
'Session_set_save_handler () y'
.
'Donde ignore_user_abort () es TRUE
.
'Ha sido fijado en PHP 7.'
.
'Potencialmente, esto podría romper'
.
Su código de la sección "
.
'ciertas circunstancias.' . PHP_EOL
.
A ver: http://php.net/manual/en/ '
.
'Migration70.incompatible.php'
.
$ Partido [0];
} Else { devolver $ partido [0]; }},
¡GUAUU! libro electrónico www.wowebook.org
loque, buscando una ArithmeticError p ara ser lanzado: try {xxx} catch () {} xxxb // envuelve operaciones de desplazamiento de bits en try / catch '^ (\ d + \ s * (\ <\ <| \> \>?) \ S * - \ d +)! (*.?) (.? *) $! ' => función (coincidencia $) { retorno '// ADVERTENCIA: negativo y' .
'Bit a bit de salida de rango'
.
'Operaciones de cambio a partir de ahora
.
'Lanzar una ArithmeticError'. PHP_EOL
.
A ver: http://php.net/manual/en/ '
.
'Migration70.incompatible.php'
.
'tratar {' . PHP_EOL
.
"\ T". $ Partido [0]. PHP_EOL
.
'} Catch (\\ ArithmeticError $ e) {'
.
"\ T". 'Error_log ( "Archivo:"
.
$ E-> getFile ()
.
"Mensaje:". $ E-> getMessage ());'
.
'}'. PHP_EOL;
}, PHP 7 ha cambiado cómo se manejan los errores. En algunos casos, los errores se mudaron a una clasificación similar como excepciones, y pueden ser capturados! Ambos Error y el Excepción clase implemente el throwable
interfaz. Si se desea capturar o bien una Error o un Excepción, captura Throwable. ntinuación, el convertidor vuelve a escribir cualquier uso de call_user_method * (), q ue tiene
ha eliminado en PHP 7. Estos son reemplazados con el uso del equivalente call_user_ func * (): // reemplaza "call_user_method ()" con // "call_user_func ()" 'Call_user_method \ ((*), (*) (*) \.?.?.?) (\ B |;)!' => función (coincidencia $) { $ Params = $ partido [3] ?? ''; retorno '// ADVERTENCIA: call_user_method () tiene' .
'Sido retirado de PHP 7'. PHP_EOL
.
'Call_user_func (['. Trim ($ partido [2]). ''
.
trim ($ partido [1]). ']'. $ Params. ');';
}, // reemplaza "call_user_method_array ()" // con "call_user_func_array ()" 'Call_user_method_array \ ((*), (*), (*) \.?.?.?) (\ B |;)!' => 21
¡GUAUU! libro electrónico www.wowebook.org
retorno '// ADVERTENCIA: call_user_method_array ()' .
'Ha sido retirado de PHP 7'
. PHP_EOL
.
'Call_user_func_array (['
.
trim ($ partido [2]). ''
.
trim ($ partido [1]). '],'
.
$ Partido [3]. ');';
}, ú último, ltimo, cualquier cualquierintento intentode deutilizar utilizar preg_replace ()c on el / mi m odificador se reescribe usando
un preg_replace_callback (): '! ^ (. *?) Preg_replace. *? / E (. *?) $!' => Función (coincidencia $) { $ Última strrchr = ($ partido [2], ''); $ Arg2 = substr ($ partido [2], 2, -1 * (strlen ($ última))); $ Arg1 = substr ($ partido [0], strlen ($ partido [1]) + 12, - 1 * (strlen ($ arg2) + strlen ($ última))); $ Arg1 = trim ($ arg1, '('); $ Arg1 = str_replace ( '/ E', '/', $ arg1); $ Arg3 = '// ADVERTENCIA: preg_replace () "/ e" modificador .
'Ha sido retirado de PHP 7'
. PHP_EOL
.
$ Partido [1]
.
'Preg_replace_callback ('
. $ arg1 . .
'Función ($ m) {return' str_replace ( '$ 1', '$ m', $ partido [1])
.
trim ($ arg2, '"\ ''). ';}',
.
trim ($ última, '');
str_replace ( '$ 1', '$ m', $ arg3) return; },
// array final],
// esto es el blanco de los contenidos transformaciones $ ); // devuelve el resultado como una implosión de retorno de cadena ( '', $ resultado); }
¡GUAUU! libro electrónico www.wowebook.org
unc ona… el convertidor, ejecute el código siguiente desde la línea de comandos. Tendrá que suministrar el nombre de archivo del P 5 que va a escanear como un argumento. Este bloque de código, chap_01_php5_to_php7_code_converter.php, e jecutar a de comandos, llama al convertidor:
p ner nombre de archivo para escanear desde la línea de comandos $ o = $ argv [1] ?? '';
filename) { echo 'Sin nombre proporcionado'. PHP_EOL; 'Uso:' eco. PHP_EOL; __FILE__ eco. '
a utomática de clase de instalación
rir __DIR__. '/../Application/Autoload/Loader.php'; dir directorio actual a la ruta ción \ carga automática \ cargador :: init (__ DIR__ '/ ..'.); er la clase "análisis en profundidad"
onvertir nueva aplicación \ Analizar \ Convert (); echo $ convert-> o ($ archivo); eco PHP_EOL;
bién er más información sobre los cambios hacia atrás incompatibles, consulte http: // php. net / / migration70.incompatible.php.
23
¡GUAUU! libro electrónico www.wowebook.org