Diseño y Realización de Sistema para Compartir Imágenes Basado en PHP

Diseño y Realización de Sistema para Compartir Imágenes Basado en PHP

Resumen
Este sistema parte principalmente del concepto de informatización en la sociedad moderna y, a través del análisis, la investigación y la disposición de los materiales existentes, determina la viabilidad, urgencia y necesidad de desarrollar un sistema para compartir imágenes basado en el modo WEB2.0 existente. En esta etapa, el sistema doméstico de intercambio de imágenes basado en WEB2.0 acaba de comenzar y todavía hay mucho espacio para la intervención en este mercado. Entre ellos, en países extranjeros, ya existen plataformas de intercambio de imágenes muy maduras. En la era WEB2.0, la información ha cambiado de la versión del servidor a la versión del usuario. Es decir, desde el modo anterior de recopilar y publicar recursos a través del servidor hasta proporcionar recursos a través del usuario, el servidor organiza, clasifica y publica el modo. Y este modelo es mucho más atractivo para los usuarios de un sitio web que el modelo tradicional.
Este documento tiene como objetivo explicar en detalle cómo usar el modelo de desarrollo MVC en un entorno basado en PHP y el marco Ajax para completar un sistema de administración de imágenes y carga de imágenes completamente funcional, y para lograr la adición, eliminación y clasificación convenientes de imágenes. es principalmente realizar la gestión de usuarios y sus imágenes, realizar la modificación de la configuración personal relevante. Además, el sistema debe tener una pantalla de progreso más intuitiva para cargar imágenes, y la presentación de imágenes utiliza un efecto de visualización más amigable.

Palabras clave: modelo-vista-controlador; uso compartido de imágenes; Ajax

Abstracto
Este sistema parte principalmente de la informatización de la sociedad moderna. Con base en el análisis de la información existente, la investigación y la reorganización, consideramos la urgencia y la necesidad de implementar un formulario de pedido que desarrolle un sistema de intercambio de imágenes basado en WEB2.0. En la etapa actual, el sistema de intercambio de imágenes doméstico basado en WEB2.0 es solo en marcha Hay mucho para participar en este campo, al mismo tiempo, el sistema maduro de intercambio de imágenes a bordo ya existe desde hace mucho tiempo. En el período WEB2.0, el estilo de publicación de información pasó de la publicación del servidor a la publicación del usuario. En otras palabras, se cambió de la publicación del servidor a la información proporcionada por el usuario y, en este caso, los servidores solo necesitan coordinar, clasificar y volver a publicar. Además, en este modelo, un sitio web es mucho más amigable para el usuario.
Esta tesis describe principalmente cómo desarrollar un sistema de carga y gestión de imágenes completamente funcional. Este sistema puede agregar, eliminar imágenes y categorías fácilmente. En la gestión entre bastidores, se trata principalmente de implementar la gestión de usuarios e imágenes y el cambio de información del usuario. En este sistema, la carga de imágenes se muestra de forma intuitiva, y la imagen debe mostrarse de manera fácil de usar.

Palabras clave: MVC; Compartir imagen; Ajax

Tabla de contenido
El número total de páginas del documento: 36 páginas

1 Introducción 1
2 Descripción general del sistema 1
3 Diseño general 2
3.1 Análisis de los requisitos del sistema 2
3.1.1 Métodos de carga de imágenes 2
3.1.2 Formatos de imagen que carga el usuario 2
3.1.3 Clasificación 2
3.1.4 Gestión de imágenes 2 3.1.5
Visualización de imágenes 3
3.1. 6 Función de consulta 3
3.1.7 Gestión de usuarios 3
3.2 Estructura general 3
3.3 Proceso del sistema de intercambio de imágenes 3
3.4 Introducción de la función del módulo del sistema de intercambio de imágenes 5
3.4.1 División del submódulo de interfaz de usuario 5
3.4.2 División del submódulo de fondo de gestión 7
4 Esquema Selección 8
4.1 Comparación del esquema 8
4.1.1 Comparación del modo del sistema 8
4.1.2 Comparación del lenguaje del programa 8
4.2 Selección del esquema 9
4.3 Plataforma tecnológica del sistema 9
4.4 Construcción del entorno de desarrollo 9
5 Tecnología de implementación y estructura de datos 12
5.1 Diseño de la arquitectura del sistema 12
5.1.1 Red arquitectura 12
5.1.2 Servidor lógico del sistema 12
5.2 Flujo de procesamiento del sistema 13
5.2.1 Arquitectura Smartemplate basada en MVC 13
5.2.2 Resumen técnico de SmartTemplate 14
5.2.3 Relación entre SmartTemplate y la plantilla html 15
5.3 Diseño de la base de datos 18
5.3.1 Diseño de la estructura de la tabla de la base de datos principal para usuarios front-end 21
5.3.2 Diseño de la estructura de la tabla de la base de datos de fondo de administración 22
6 Soluciones de problemas especiales 24
6.1 Problema de código distorsionado 24
6.2 Dinámico mostrar el progreso de carga 24
6.3 Problemas con la carga aleatoria de imágenes por lotes 25
7 Prueba de resultados y análisis de rendimiento 29
7.1 Combinación de módulos de operación 29 7.2
Interfaz de inicio de sesión del sistema 29
7.3 Ejemplo de aplicación del módulo 30
7.4 Problemas existentes en el sistema 33
7.4.1 Fuga de parámetros de URL del lote conexión de carga 33
7.4.2 El script de devolución de llamada en el código fuente de la página de carga masiva filtra el ID de usuario 33
7.4.3 No se puede regresar normalmente 33
7.5 Sugerencias de mejora 34
Conclusión 34
Referencias 34
Agradecimientos 35
Declaración 36

1 Introducción
Con el surgimiento de WEB2.0 hace algún tiempo, toda la dirección de desarrollo de BS y el modo de operación WEB gradualmente comenzaron a cambiar en otra dirección. Con la reutilización de AJAX, la experiencia WEB del usuario mejora enormemente. Su método de actualización de página parcial reduce en gran medida el tiempo que los usuarios dedican a visitar la página. Y permite a los usuarios participar en proveedores de contenido mientras mejoran su experiencia. En el sistema WEB tradicional, siempre hay un administrador del sitio web o una persona similar para recopilar los recursos que necesita el sitio web y publicar estos recursos. Sin embargo, con el surgimiento de WEB2.0, el intercambio y la experiencia ocupan gradualmente una posición importante en el desarrollo de el sitio web. Como resultado, el sitio web ha cambiado gradualmente del modo de publicación centralizado anterior a un modo en el que los usuarios proporcionan recursos y el sitio web los organiza y publica. Los más comunes son BLOG y WIKI. Entre ellos, el intercambio de imágenes es una dirección con un gran potencial de desarrollo. En primer lugar, la cantidad de personas que poseen cámaras digitales en China está creciendo a un ritmo constante, pero actualmente, no muchos sitios web han notado el potencial de este mercado. Cuando los usuarios toman una foto, buscan un lugar donde puedan compartir fácilmente la foto que tomaron. Sin embargo, los sitios web tradicionales de hoy en día son demasiado complicados para operar o incómodos para compartir. Por ejemplo, 163 no admite imágenes conectadas externamente. Aunque esto obviamente puede reducir la carga en el servidor, reduce en gran medida la experiencia del usuario. Imagínese, cuando un usuario quiere mostrar directamente a un amigo una determinada imagen en uno de sus álbumes, también debe conectar su álbum a la otra parte, y luego la otra parte solo puede verla después de encontrar esa imagen en el álbum. Además, las imágenes de 163 no están especialmente organizadas y clasificadas para fotos digitales, es decir, hay muchas pero no precisas. conducir a un uso ineficiente de los recursos. En la actualidad, no están surgiendo muchos sitios web en esta área en China, y hay algunos relativamente conocidos en el extranjero, como: Flikre: www.flikre.com, Bababian: www.bababian.com, etc. Entre ellos, el cambio de Baba se basa básicamente en la revisión de FLIKRE. Hasta ahora, el mercado todavía tiene un espacio relativamente grande para la intervención.
Desde el punto de vista actual, el principal problema que el sistema de intercambio de imágenes debe resolver ahora es cómo permitir que los usuarios carguen imágenes más rápido. Cómo mostrar imágenes en forma más rápida. Entre ellos, los principales problemas que afectan el desarrollo del sistema son los siguientes: 1. Competencia en el mercado, 2. Usabilidad y estabilidad del software, 3. Límite de tiempo. Dado que los primeros competidores ya se han apoderado de una parte del mercado, es necesario desarrollar un sistema de sitio web utilizable en el menor tiempo posible. El sistema se divide inicialmente en dos partes, una es el extremo WEB como interfaz WEB y la otra es una herramienta de cliente para cargar imágenes locales de forma remota a través del modo C/S.
2. Descripción general del sistema
Para realizar el intercambio de imágenes mediante el envío del usuario, lo primero es mejorar la eficiencia de carga del usuario y si la experiencia de carga del usuario y la navegación del usuario son convenientes. Un sitio web general para compartir imágenes carga archivos a través de una sola página de carga, y el formulario de visualización es único, lo que es un inconveniente para que los usuarios lo usen y vean. Bajo WEB2.0, nació una gran cantidad de controles para mejorar la experiencia del usuario, haciendo que compartir imágenes sea más hermoso y humanizado que las formas tradicionales.
Y además de necesitar una buena experiencia de usuario, también necesita un buen soporte del sistema. No es solo un programa, sino una plataforma de negocios y un proceso de desarrollo que se puede expandir continuamente de acuerdo con las necesidades del usuario. Este proyecto de graduación está escrito de acuerdo con las necesidades y características de la WEB2.0 actual, utilizando el marco relativamente maduro.
La aplicación de la interfaz de marco maduro en WEB2.0 puede acelerar en gran medida el desarrollo y el diseño de las aplicaciones actuales de alta disponibilidad. Y ser capaz de diseñar una aplicación desde el punto de vista del usuario. Reduce en gran medida la presión y el riesgo de diseño. El sistema puede cargar y administrar imágenes de usuarios de varias maneras. Y utiliza el marco visual más popular para realizar la presentación de imágenes, lo que mejora enormemente la experiencia del usuario.
3 Diseño general
3.1 Análisis de los requisitos del sistema
Hay tres aspectos que se deben considerar al compartir imágenes: 1. Cómo los usuarios deben cargar imágenes, 2. Qué tipos de imágenes pueden cargar los usuarios, 3. Cómo mostrar estas imágenes. Además, también se debe realizar una organización simple y estadísticas de imágenes.
Por lo tanto, los usuarios que cargan imágenes y los usuarios que buscan imágenes son los principales objetivos de los servicios del sistema, y ​​se presentan los siguientes requisitos para las funciones del sistema: 3.1.1
Formas de admitir la carga de imágenes
La carga de imágenes debe admitir el modo de formulario de página más utilizado en presente. Y se puede procesar fácilmente.
Además, lo mejor es admitir el modo cliente. Y es necesario implementar la carga por lotes de imágenes en la WEB sin que el usuario instale el cliente.
3.1.2 Formatos admitidos para cargar imágenes por parte de los usuarios
Uno es JPEG y el otro es PNG La mayoría de las cámaras digitales ahora usan el formato JPEG para guardar imágenes, pero teniendo en cuenta los problemas de derechos de autor, también se debe proporcionar soporte para imágenes en formato PNG.
3.1.3 Clasificación Después de
cargar la imagen, la imagen se clasificará automáticamente de acuerdo con la etiqueta y la tarea de la imagen de acuerdo con la etiqueta de la imagen y la tarea donde se encuentra la imagen. Y eliminar, agregar y eliminar tareas de imagen , agregar y eliminar etiquetas de imágenes. Al mismo tiempo, en la gestión de imágenes, los usuarios pueden ver las imágenes cargadas de una forma más intuitiva. 3.1.5 Presentación de la imagen Debe poder mostrarse intuitivamente para que la vean los usuarios finales. 3.1.6 Función de consulta Los usuarios necesitan saber la cantidad total de imágenes en sus propias categorías y las imágenes en tareas, y debido a que los usuarios pueden necesitar hacer estadísticas sobre sus propias categorías e imágenes en tareas según diferentes situaciones, por lo que el sistema debería también tiene una función de consulta de combinación de múltiples condiciones para clasificación, tarea y etiqueta. 3.1.7 Dado que el sistema es un sistema multiusuario, el fondo del sistema también debe tener funciones de gestión de usuarios.La gestión de usuarios incluye las siguientes funciones: adición, eliminación y consulta de usuarios. Y ver y eliminar imágenes de usuarios; ver y eliminar categorías de usuarios; ver y eliminar etiquetas de usuarios.









3.2 Estructura general
El diagrama de la estructura de los principales módulos funcionales del sistema de intercambio de imágenes es el siguiente:
Figura 3-1 Diagrama del módulo funcional del sistema de intercambio de imágenes El
sistema de intercambio de imágenes incluye dos partes: la interfaz de usuario y la gestión de fondo. es una función disponible para los administradores.
3.3 Proceso del sistema para compartir imágenes
La idea de diseño del proceso del sistema para compartir imágenes es la siguiente:
1. Los usuarios (aquí se refiere principalmente a los usuarios finales que usan directamente el sistema, excluyendo a los usuarios con funciones de administración en segundo plano) seleccionan las imágenes apropiadas según a sus propios formatos de imagen y subirlos al lado de procesamiento del sistema.
2. Después de que el sistema recibe la imagen cargada por el usuario, debe juzgar si el archivo cargado por el usuario cumple con los requisitos del sistema de acuerdo con el tipo de imagen que el sistema permite cargar actualmente, determinar la etiqueta asignada por al usuario a la imagen cargada, y en base a la configuración de la imagen cargada Clasifique las imágenes y cambie el formato. La imagen en este momento no es la última imagen almacenada en el sistema. La imagen se almacena en un formato que se ha cortado y cambiado de acuerdo con la configuración del sistema. (Esto se hace para unificar el formato de la imagen, facilitar el procesamiento de salida y unificar la interfaz de procesamiento cuando se almacena la imagen). 3.
Una vez que la imagen se agrega correctamente, la imagen cargada se almacena directamente en la carpeta donde se encuentra el usuario y ordenados según la fecha de carga, y al mismo tiempo guardar una copia de la imagen en la base de datos.
4. Después de almacenar las imágenes, las imágenes cargadas se mostrarán en primer plano al mismo tiempo, y las imágenes se agregarán a la etiqueta establecida, y las imágenes se mostrarán en lotes según la tarea.
5. Los usuarios pueden administrar todas las imágenes actuales en la consola de administración de usuarios. Cuando los usuarios eliminan imágenes, pueden eliminar imágenes por una sola imagen, categoría, etiqueta y tarea.
6. Las imágenes que se han cargado se pueden proporcionar directamente a terceros para que las vean a través del enlace para que los usuarios vean imágenes. O envíelo directamente a un usuario externo para que lo vea a través de la conexión generada por el sistema.
7. El administrador de fondo puede agregar y cambiar directamente los usuarios de administración a través de las funciones proporcionadas por el sistema. Cuando es necesario dar a un usuario una función específica, el permiso del usuario se puede cambiar cambiando la configuración detallada del usuario en segundo plano.
8. Cuando el administrador necesite eliminar la imagen cargada de un usuario, también puede eliminar la imagen, la clasificación, la etiqueta y la tarea del usuario a través de la interfaz de administración de imágenes unificada.
El diagrama de flujo del sistema para compartir imágenes es el siguiente:

Figura 3-2 Diagrama de flujo del sistema de intercambio de imágenes
3.4 Introducción de funciones del módulo del sistema de intercambio de imágenes El
sistema de intercambio de imágenes completa principalmente las funciones de agregar y eliminar imágenes y agregar y eliminar etiquetas de imágenes. Así como la gestión de múltiples usuarios y la gestión de imágenes de usuario en segundo plano. La siguiente es la división de submódulos y la introducción de funciones de cada módulo.
3.4.1 División del submódulo de la interfaz de usuario

Figura 3-3 Diagrama de estructura del submódulo de la interfaz de usuario

Submódulo de interfaz de usuario: modificación de contraseña
La modificación de contraseña, como parte del submódulo de interfaz de usuario, completa principalmente el trabajo de modificación de contraseña de usuario. El proceso de ejecución es: después de que el usuario inicie sesión en la interfaz principal, haga clic en la modificación de la contraseña en la barra de navegación y vaya a la interfaz para modificar la contraseña del usuario. Ingrese la contraseña utilizada actualmente y la contraseña modificada y repita la contraseña modificada una vez, y finalmente complete el código de verificación para esta operación (para comodidad del usuario, el código de verificación ha sido completado automáticamente por el fondo). Una vez completadas las operaciones anteriores, el usuario hace clic en Enviar para modificar la contraseña.
Cuando el usuario envía el contenido modificado, el código de la página primero verifica si las contraseñas modificadas dos veces por el usuario son consistentes. Si son inconsistentes, se le preguntará al usuario que las contraseñas son inconsistentes. Cuando se pasa la verificación, la información se envía al sistema de fondo. El sistema en segundo plano primero juzga si los códigos de verificación son iguales y, si lo son, comparará si el hash de contraseña actual ingresado por el usuario es consistente con el hash de contraseña en la base de datos. Cuando los dos hashes son consistentes, el sistema en segundo plano modificará la contraseña actual del usuario a la contraseña modificada del usuario. Si el usuario no ingresa el código de verificación o el código de verificación es incorrecto, el hash de la contraseña del usuario actual no puede corresponder al hash de la contraseña en la base de datos, y el sistema mostrará el mensaje de error correspondiente. Y pídele al usuario que lo complete de nuevo.
Submódulo de interfaz de usuario: cargar imágenes
Para cargar imágenes, después de que el usuario inicie sesión en el sistema, haga clic en Cargar imagen en la barra de navegación para ingresar a la página de la función de carga de imágenes. En este punto, el usuario puede seleccionar una sola imagen para cargar o cargar directamente varias imágenes en lotes según sus necesidades. 1) Cargar una sola página: esta carga requiere que el usuario filtre las imágenes que no cumplen con los requisitos del sistema. El sistema actual solo admite JPEG y PNG. Si el formato de la imagen no cumple con los requisitos, el sistema dará un mensaje de error. Cuando el formato de la imagen seleccionada por el usuario es correcto y hace clic en "Iniciar carga", el sistema abrirá un cuadro de diálogo para configurar la información de la imagen, requiriendo que el usuario seleccione el tipo de imagen, configure la etiqueta de la imagen y el nombre de la imagen y otra información. Cuando todo esté configurado, haga clic en "Enviar para cargar" y la imagen del usuario comenzará a cargarse en el sistema. 2) Cargue varias imágenes directamente en lotes: el usuario hace clic en la pestaña "Cargar por lotes" y el sistema indica que esta función requiere compatibilidad con el tiempo de ejecución de JAVA. Nombre, descripción, clasificación, etiquetas y otra información. A continuación, será transferido a la interfaz de carga por lotes. Los pasos de operación específicos se explican en detalle en la página de carga por lotes.
Submódulo de interfaz de usuario: administrar imágenes
Para administrar imágenes, después de que el usuario inicie sesión en el sistema, haga clic en Cargar imágenes en la barra de navegación para ingresar a la página de administración de imágenes.
La página se divide en partes superior, media e inferior, que son la lista de imágenes de usuarios clasificadas según tareas, categorías y etiquetas. En esta lista, los usuarios pueden operar imágenes en lotes según tareas, categorías o etiquetas. Al mismo tiempo, en esta página de funciones, también puede eliminar categorías, tareas y etiquetas.
3.4.2 División del submódulo de antecedentes de gestión

Figura 3-4 Diagrama estructural del submódulo de administración en segundo plano
Submódulo de administración en segundo plano:
administración del sistema Como parte importante de la administración en segundo plano, la administración del sistema se utiliza principalmente para configurar las variables de entorno del sistema actual y cierta información descriptiva. Estas configuraciones se determinan principalmente cuando el administrador en segundo plano mantiene el sistema e inicializa el sistema. Una vez completada la configuración, si no se trata de un problema de rendimiento del sistema o de una migración del sistema, se puede conservar la información configurada.
Esta función proporciona una forma más conveniente para que el sistema expanda las variables de entorno del sistema. Es conveniente modificar la configuración general del sistema en una etapa posterior y facilitar la migración simple del sistema, como cambiar el nombre de dominio del sistema o cambiar otra información del entorno del sistema.
Cada configuración del sistema se registra en la tabla de información del sistema, y ​​la modificación de este módulo se retroalimentará a la tabla de información del sistema.
Submódulo de gestión en segundo plano: gestión del administrador La
gestión del administrador se utiliza principalmente para establecer los usuarios que pueden operar las funciones en segundo plano del sistema actual y establecer qué funciones pueden usar estos usuarios en segundo plano. Esta función hace que la administración en segundo plano sea más flexible y puede administrar los permisos de manera conveniente. Además, es posible establecer gerentes que se especialicen en la operación de una determinada función, lo que simplifica la complejidad de la gestión.
Esta función proporciona una manera conveniente para que el sistema amplíe el equipo de administración del sistema. Con el fin de facilitar la gestión de una determinada función para cumplir con ciertos requisitos en las etapas media y tardía, la función se puede asignar a una persona dedicada.
Al mismo tiempo, este módulo también proporciona la función de modificar la información del administrador. Es conveniente que el administrador cambie entre varias funciones y cambie los permisos existentes.
Submódulo de fondo de administración—administración de usuarios
La administración de usuarios se usa para administrar a los usuarios que se han registrado normalmente en el sistema actual y usan la función de compartir imágenes de este sistema. Para registrar el sistema, los usuarios no solo pueden registrarse en la página de registro proporcionada por el primer plano, sino que también pueden ser agregados en segundo plano por un administrador en segundo plano con autoridad de administración de usuarios. Además de que los usuarios puedan modificar su propia información en su propio panel de administración, los administradores pueden modificar la información del usuario a través de la función de edición de usuarios de este módulo. Al mismo tiempo, los usuarios con nombres de usuario específicos se pueden ubicar a través de la función de búsqueda, de modo que los usuarios que necesitan ser operados se pueden encontrar más rápidamente.
Administrar submódulo de fondo: administración de imágenes La
administración de imágenes se utiliza para administrar las imágenes cargadas por los usuarios que se han registrado normalmente en el sistema actual y utilizan la función para compartir imágenes de este sistema.
En este módulo, el administrador en segundo plano puede administrar las imágenes cargadas por el usuario de acuerdo con un solo usuario. La interfaz para administrar imágenes de usuario es la misma que la interfaz de administración de la interfaz de usuario. Además, al igual que la administración de usuarios, el administrador en segundo plano también puede ubicar rápidamente a un usuario buscando un nombre de usuario específico y administrar las imágenes cargadas por él.
Durante el proceso de carga de imágenes por parte de los usuarios, es posible que las imágenes cargadas por los usuarios no se clasifiquen o etiqueten debido a una operación incorrecta del usuario. En este caso, el administrador puede usar la función de limpieza de imágenes para limpiar estas imágenes. Evite la inestabilidad del sistema o errores de datos estadísticos causados ​​por redundancia y datos incorrectos.
4 Selección de esquemas
4.1 Comparación de esquemas
4.1.1 Comparación de modos de sistema
En la actualidad, los modos de desarrollo incluyen principalmente la estructura C/S y la estructura B/S: la estructura
C/S, es decir, la estructura Cliente/Servidor (cliente/servidor), es una sistema de software bien conocido La estructura del sistema reduce la sobrecarga de comunicación del sistema mediante la asignación razonable de tareas al Cliente y al Servidor, y puede aprovechar al máximo las ventajas del entorno de hardware en ambos extremos.
La estructura B/S, es decir, la estructura Navegador/Servidor (navegador/servidor), es un cambio o una estructura mejorada de la estructura C/S con el auge de la tecnología de Internet. Bajo esta estructura, la interfaz de usuario se realiza completamente a través del navegador WWW, parte de la lógica comercial se realiza en el front-end, pero la lógica comercial principal se realiza en el lado del servidor. La estructura B/S utiliza la tecnología de navegador cada vez más madura y popular para realizar funciones poderosas que originalmente requerían un software especial complejo y ahorra costos de desarrollo.Es una tecnología de construcción de sistemas de software completamente nueva.
4.1.2 Comparación de lenguajes de programación
Los lenguajes de programación más populares actualmente son ASP, JSP y PHP:
El nombre completo de ASP es Active Server Pages, que es un entorno de desarrollo del lado del servidor WEB, que puede generar y ejecutar aplicaciones de servicios WEB dinámicas, interactivas y de alto rendimiento. ASP utiliza el lenguaje de secuencias de comandos VBScript (Java script) como su propio lenguaje de desarrollo.
JSP es una nueva generación de lenguaje de desarrollo de sitios web, Java Server Page, lanzado por Sun. Con el soporte de Serverlet y JavaBean, JSP puede completar potentes programas de sitio.
PHP, o "PHP: preprocesador de hipertexto", es un lenguaje de secuencias de comandos multipropósito de código abierto ampliamente utilizado, especialmente adecuado para el desarrollo web y se puede incrustar en HTML.
Los tres brindan la capacidad de mezclar ciertos códigos de programa en códigos HTML y hacer que el motor de lenguaje interprete y ejecute los códigos de programa. Pero el código JSP es compilado en un Servlet e interpretado y ejecutado por la máquina virtual Java.Esta operación de compilación solo ocurre cuando se solicita la página JSP por primera vez. En el entorno de PHP, ASP y JSP, el código HTML es el principal responsable de describir el estilo de visualización de la información, mientras que el código del programa se utiliza para describir la lógica de procesamiento. Las páginas HTML ordinarias solo dependen del servidor web, mientras que las páginas PHP, ASP y JSP requieren motores de lenguaje adicionales para analizar y ejecutar códigos de programa. El resultado de la ejecución del código del programa se vuelve a incrustar en el código HTML y luego se envía al navegador juntos. Tanto PHP como ASP y JSP son tecnologías orientadas a servidores web y los navegadores de los clientes no requieren soporte de software adicional.
Sin embargo, en comparación con ASP y JSP, PHP tiene las características de fácil implementación, rápido desarrollo y uso flexible. Es más adecuado para el desarrollo rápido de sistemas pequeños y medianos Comparado con JSP, PHP tiene un procesamiento menos complicado, por lo que su velocidad de ejecución es mejor que JSP hasta cierto punto.
4.2 Selección de programas
En resumen, las opciones de desarrollo del sistema son las siguientes:
Este sistema para compartir imágenes utiliza PHP y JavaScript como el principal lenguaje de desarrollo del programa, adopta el marco de smarttemplate + plantilla de administración de fondo independiente y base de datos mysql. Adoptar la estructura B/S. La interfaz del sistema es hermosa y rica en contenido, lo que permite muy bien la interacción con los usuarios.
4.3 Plataforma tecnológica del sistema
Entorno de desarrollo: WindowsServer2013 Datacenter Edition SP1, MySql 4.2, Apache2;
herramientas de desarrollo: ZendStudio, DreamweaverMX, PhotoShop, Notepad;
arquitectura del sistema: PHP+Smarttemplate+JavaScript+MySql4.2;
lenguaje de desarrollo: PHP5.
4.4 Configuración del entorno de desarrollo
 Configure PHP 5
para descomprimir los archivos descargados de Internet y luego necesite las siguientes operaciones:
abra el archivo php.ini y modifique el siguiente contenido:
max_execution_time = 600;
max_input_time = 600;
memory_limit = 16M
post_max_size = 20M
file_uploads = On
upload_max_filesize = 20M
default_socket_timeout =
más de 60 opciones para evitar el tiempo de espera de procesamiento de PHP debido a que los usuarios cargan imágenes demasiado grandes.
register_globals = Desactivado
magic_quotes_gpc = Activado
Las opciones anteriores son para evitar que los usuarios realicen envíos maliciosos.
extension_dir = "D:\PHP\PHP\ext"
Las opciones anteriores se utilizan para establecer la carpeta donde se encuentra la extensión de PHP.
extension=php_mbstring.dll
Esta extensión se usa para admitir el conjunto de caracteres largos
extension=php_exif.dll
Esta extensión se usa para admitir PHP para leer información EXIF ​​​​de imágenes.
extension=php_gd2.dll
Esta extensión se usa para PHP para operar imágenes y generar códigos de verificación.
extension=php_mysql.dll
extension=php_mysqli.dll Los dos elementos anteriores se utilizan para la compatibilidad de PHP con MYSQL
extension=php_sockets.dll
Esta extensión se utiliza para la compatibilidad de PHP con SOCKET, principalmente para admitir la biblioteca UPU que muestra el progreso de carga durante la carga
Apache 2.0
Descomprima el archivo descargado de la red y luego necesite las siguientes operaciones:
1) Modifique el archivo de configuración de Apache:
ingrese al directorio conf debajo del directorio raíz del desempaquetado. Abra el archivo httpd.conf y modifique el siguiente contenido:
Establezca el tiempo de espera de ejecución: Timeout 300
Establezca el puerto de escucha 80: Listen 80
Habilite APACHE para admitir PHP:
LoadModule php5_module d:/php/php/php5apache2.dll
Habilite la función de reescritura de URL: LoadModule rewrite_module modules/mod_rewrite.so
Establezca el directorio raíz del servicio WEB: DocumentRoot "E:\web"
Establezca el alcance efectivo de la reescritura de URL:
Opciones FollowSymLinks
AllowOverride ALL

Establezca compatibilidad con chino:
AddLanguage zh-CN . zh-cn
AddLanguage zh-TW .zh-tw
AddLanguage zh-cn .cn
Establecer idioma predeterminado
AddDefaultCharset GB2312
Establecer página de índice predeterminada:
DirectoryIndex index.html index.html.var index.htm index.php
Establecer APACHE para analizar archivos PHP:
AddType application/x-httpd-php .php
2) Instale APACHE como un servicio:
ingrese la línea de comando, vaya a la carpeta BIN debajo de la carpeta APACHE y ejecute el siguiente comando:
apache -k install
3) Inicie el servidor APACHE
Ejecute el siguiente comando:
net start apache2
mysql installation
1) Descomprima el MYSQL descargado de Internet y luego modifique su archivo de configuración de la siguiente manera:
default-character-set=utf8 //Debido a que todo el sistema usa UTF-8, la base de datos también está codificada de manera uniforme key_buffer_size
=20M
max_allowed_packet=15M //La configuración anterior se usa para procesar una gran cantidad de datos almacenados en la base de datos .
2) Ejecute MySQLInstanceConfig.exe para inicializar MYSQL.
3) Instale el servicio MYSQL
Ejecute mysql d-nt.exe –install para ejecutar el proceso MYSQL como un servicio del sistema.
4) Use MYSQLADMIN para administrar los administradores de MYSQL
Configuración de PHPMYADMIN
Busque el archivo de configuración de phpmysdmin y modifique los siguientes lugares.
cfg ['Servidores'] [cfg['Servidores'][cfg [ _ _ Servidores__ ][i]['host'] = 'localhost';//Establecido en localhost (solo para depuración)
cfg [ ′ Servidores ′ ] [ cfg['Servidores'][cfg [ _ _ Servidores__ ][i]['puerto'] = '3306';//Puerto MySQL
cfg ['Servidores'] [cfg['Servidores'][cfg [ _ _ Servidores__ ][i]['connect_type'] = 'tcp';//Establecer la forma de conectarse con MySQL
cfg ['Servers'] [cfg['Servers'][cfg [ _ _ Servidores__ ][i]['comprimir'] = FALSO;//Usar protocolo de compresión para la transmisión
cfg [ ′ Servidores ′ ] [ cfg['Servidores'][cfg [ _ _ Servidores__ ][i]['auth_type'] = 'config';//Si el modo de instalación de PHP es Apache, se pueden usar http y cookies; si el modo de instalación de PHP es CGI, se pueden usar cookies; el valor predeterminado es config cfg [ ′ Servidores
′ ] [cfg['Servidores'][cfg [ _ _ Servidores__ ][i]['usuario'] = 'raíz';//Usuario de conexión MySQL
cfg ['Servidores'] [cfg['Servidores'][cfg [ _ _ Servidores__ ][i]['password'] = '';//contraseña de conexión MySQL
5 Tecnología de implementación y estructura de datos
5.1 Diseño de la arquitectura del sistema
5.1.1 Arquitectura de red
Todo el sistema de arquitectura de red es el siguiente:

Figura 5-1 Diagrama de arquitectura de red del sistema para compartir imágenes
5.1.2 Servidor lógico del sistema
Lógicamente, los servidores utilizados se pueden dividir en tres tipos, y cada tipo de servidor tiene diferentes funciones:
Servidor web: este servidor realiza la publicación web y proporciona la interfaz de operación (página web) del trabajo comercial de los usuarios comunes también pasa los parámetros de operación del usuario al servidor de la base de datos a través de la consulta de la base de datos generada después del procesamiento, y al mismo tiempo devuelve los datos generados por el resultado después de analizar y recodificar al usuario a través de la página web Interfaz. Al mismo tiempo, el servidor WEB también es responsable de analizar las solicitudes de los usuarios y generar dinámicamente páginas web que los usuarios puedan ver.
Servidor de base de datos: el sistema de base de datos MySQL está instalado en este servidor y el diseño del sistema de base de datos es principalmente para este servidor. Todos los datos originales y otros datos estructurales utilizados en el sistema se almacenan aquí, y todas las adiciones, modificaciones y eliminaciones de información por parte de los usuarios y administradores finalmente se reflejarán en el servidor. Al mismo tiempo, el servidor necesita procesar la solicitud de consulta transmitida a través del servidor WEB y devolver el resultado de la consulta al servidor de aplicaciones.
5.2 Flujo de procesamiento del sistema
Este sistema adopta el modo B/S y la estructura Smartemplate Cuando los usuarios usan este sistema, solo necesitan instalar un navegador de Internet y no necesitan instalar ningún otro software. El flujo de procesamiento del sistema se muestra en la siguiente figura:

Figura 5-2 Flujo de procesamiento del sistema
5.2.1 Arquitectura Smartemplate basada en MVC
Este sistema se implementa utilizando una arquitectura basada en MVC. El modelo se compone de scripts de análisis de PHP que implementan la lógica empresarial, el controlador se realiza mediante SmartTemplate y la vista se compone de un conjunto de archivos HTML que contienen etiquetas de formato SmartTemplate. La siguiente figura describe brevemente el flujo de trabajo.

Figura 5-3 Flujo de trabajo en respuesta a las solicitudes de los usuarios
MVC es un patrón de diseño que impone la separación de la entrada, el procesamiento y la salida de la aplicación. MVC divide la aplicación en tres módulos principales: modelo, vista y controlador, la relación entre ellos se muestra en la siguiente figura:

图5-4 MVC设计模式
5.2.2SmartTemplate技术概述
在这个系统制作过程中,大量采用了SmartTemplate技术,现就自己对SmartTemplate技术的理解表述如下:
SmartTemplate是一个支持大型WEB应用程序的模板引擎,是由服务器端调用和执行的PHP库。SmartTemplate本身与协议无关。
要理解SmartTemplate,首先需要理解模板引擎的工作方式。
普通模板引擎工作方式: 你的PHP脚本指定一个HTML模板,指定动态内容并显示。模板分析器使用指派的内容替换模板内所有的占位符,然后显示给用户。
SmartTemplate 的工作方式类似模板编译,他把模板转换为可执行的PHP脚本,并且保存起来以备以后重用。当一个新的模板在第一次被使用时,模板内所有的占位符被替换为简单的可输出指定内容的PHP代码元素。举个例子,模板片断

{TITLE}

,将被转换为

<?php echo $TITLE; ?>

. 如果你指定内容给正确的变量, 将再也不需要进行模板分析了. 程序要做的仅仅是自己包含并执行编译后的模板. 这种缓存方式能大大减少模板引擎的运行时间。
5.2.3SmartTemplate与html模版之间的关系
为了增强系统的移植性,使系统能在Windows 、NT、UNIX及Linux环境下运行而不进行源代码的修改,采用PHP技术。开发基于WEB的软件系统,采用PHP脚本 工具,用PHP的动态库连接访问数据库,将一些对象的属性和方法封装在PHP类库中,客户端界面可用HTML与JavaScript配合完成,服务器端的应用处理可用PHP脚本+SmartTemplate引擎来具体实现。
html模版主要用来定义最终的表现页面,而PHP脚本主要用来完成大量的逻辑处理,SmartTemplate用于将处理后的数据动态的封装到html模版中,最终显示的页面有PHP解析后发送到客户端。也就是说,经过封装以及解析的html模版主要用来发送给前端的用户,而PHP脚本主要来响应用户的请求,完成请求的逻辑处理,同时,充当着控制者的角色,用来负责响应的事务处理。
SmartTemplate本身没有任何的业务处理逻辑,它只是简单地检索PHP脚本定义的对象,再将动态的内容插入到预定义的html模版中。
PHP脚本创建SmartTemplate需要的变量和对象,再根据用户的行为,决定处理哪个html模版并发送给用户。
在实际开发过程中,往往是先把html模版开发出来,然后再将html模版中需要动态生成的部分用SmartTemplate预定义的标签代替。这样做的好处是充分利用了HTML的页面表现能力,避免了PHP脚本在页面表现方面的不足,大大缩短了开发周期,各尽所能。
以下是节选程序代码中的HTML模版转换为最终的页面对象:
1.首先,用HTML编辑工具开发出HTML页面
… …. …. ….

搜索图片: 

图5-5 图片共享系统数据库设计结构图
上图是根据需求设计出十二个数据表,分别是:系统设定表(setting),管理员操作记录表(adminlog),管理员信息表(admin_info),图片缓存记录表(hash_cache),缩略图表(photothumbs),图片表(photo),用户组表(group_setting),用户信息表(member_info),用户登陆记录表(loginlog),图片分类表(sort_setting),用户上传相册表(job)以及标签表(tags_setting)。
该表主要分为以下几个部分:

管理员相关表:
图5-6 管理员相关表
系统设置表:
图5-7 系统设置表

用户组设置表
图5-8 用户组设置表
图片信息表
图5-9 图片信息表
相册以及标签分类表
图5-10 相册分类以及标签表

5.3.1 Diseño de la estructura de la tabla de la base de datos principal para usuarios front-end
La tabla de álbumes cargados por el usuario (trabajo) se usa para almacenar la información básica de un lote de imágenes cargadas por el usuario.Tabla
5-1 tabla de trabajos
Nombre Tipo Descripción
job_id BIGINT( 11) número
Artículo MEDIUMTEXT Descripción del contenido del álbum
article_title TINYTEXT Título del álbum
article_info TINYTEXT Introducción del álbum
Autor varchar(40) Autor
del autor BIGINT(11) ID de autor
sort_id BIGINT(11) ID de categoría
album_id BIGINT(11) ID de álbum
Hits mediumint(7) Clics
Respuestas mediumint(7) Respuestas
replies_ page mediumint(7) Número de página de respuesta
Lastpost BIGINT(11) Última respuesta
Lastposter varchar(30) Última respuesta
Lastposterid BIGINT(11) ID de usuario de última respuesta
Posttime BIGINT(11) Hora de publicación
Hidden int(2) ) Si ocultar
Isparseurl int(2 ) Si citar
Ipaddress varchar(16) para publicar la IP del usuario
La tabla de información del usuario (member_info) se utiliza para la información detallada del usuario que sube la imagen; es una relación de uno a varios con la tabla de imágenes:
Tabla 5-2 tabla member_info
Nombre Tipo Descripción
Id BIGINT(11) Usuario número
reg_time BIGINT(11) Hora de registro
Nombre varchar(32) Nombre de usuario
photo_album_name varchar(32) Nombre de imagen
Blog_album_describe BLOB(100) Descripción
Gander char(1) Género
Pwd varchar(64) Contraseña de usuario
Gid mediumint(6) ID de grupo de usuarios
Correo electrónico varchar(64) Buzón de usuario
5.3 .2 Diseño de la estructura de la tabla de la base de datos de fondo de administración La tabla de configuración del sistema
(configuración) se utiliza para almacenar la información de configuración básica del sistema ) Descripción de configuración Valor TEXTO Valor de configuración Tipo varchar(20) Tipo de configuración






La tabla de registro de operaciones del administrador (adminlog) se usa para almacenar los registros de operaciones del administrador en segundo plano
Tabla 5-4 tabla de registro de administración
Nombre Tipo Descripción
Adminlogid int(5) número de registro
Uid BIGINT(11) número de administrador
nombre_usuario varchar(32) administrador Nombre
Acción varchar(50) El nombre de la operación
Script varchar(255) El script llamado por la operación
Fecha int(10) La hora en que se realizó la operación
Ipaddress varchar(16) La dirección IP del administrador que realizó la operación
Tabla de información del administrador ( admin_info), que se utiliza para almacenar la información básica del administrador (para reducir la complejidad del sistema, la autoridad del administrador y la información del administrador se escriben directamente en la misma tabla y no se dividen en dos tablas de forma independiente) Tabla 5-5
Tabla admin_info
Nombre Tipo Descripción
Aid BIGINT(11) Número de administrador
admin_name varchar(32) Nombre de administrador
Pwd varchar(64) Contraseña de administrador
Gid mediumint(6) ID de grupo de administradores (reservado)
can_admin int(1) Permiso para realizar la administración del sistema
can_user int(1) Permiso para realizar la administración de usuarios
can_category int(1) Permiso para realizar la administración de categorías
can_setting int(1) Permiso para realizar la gestión de configuración

6 Soluciones a problemas especiales
Durante el diseño y desarrollo de este sistema, también se han encontrado muchos problemas. El análisis y las soluciones de los problemas más especiales se describen a continuación: 6.1
Problemas con caracteres ilegibles
Al diseñar, encontré un problema con caracteres ilegibles . Los caracteres chinos se distorsionarán al pasar de una página a otra. Si agrega datos directamente desde la base de datos, no habrá caracteres distorsionados, pero si agrega datos desde la administración en segundo plano, los caracteres distorsionados aparecerán en la página de visualización después de que la adición sea exitosa. Para este problema, la razón es que la plataforma de desarrollo está bajo WINDOWS, y el formato de codificación predeterminado de WINDOWS es GB2312, pero el entorno operativo es un entorno UTF-8.Para evitar caracteres ilegibles, la codificación de caracteres de todo el entorno de desarrollo debe ser unificado: 1
. Primero, unifique la codificación en la base de datos:
al crear la base de datos y consultarla, primero establezca la codificación en UTF-8
SET CHARACTER_SET_CLIENT = utf8,
CHARACTER_SET_CONNECTION = utf8,
CHARACTER_SET_DATABASE
= utf8, CHARACTER_SET_RESULTS = utf8,
CHARACTER_SET_SERVER = utf8,
COLLATION_ CONNECTION = utf8_general_ci,
COLLATION_DATABASE = utf8_general_ci,
COLLATION_SERVER = utf8_general_ci,
AUTOCOMMIT=1";
2. Indique el estándar de codificación en la parte HEADER de la plantilla HTML:

3. Declare la codificación de flujo de caracteres utilizada en el contenido HEADER antes de la salida de PHP:
header('Content-Type: text/html; charset=utf-8');
6.2 Visualización dinámica del progreso de carga
Hay una falla al cargar a través del formulario, es decir, no puede mostrar dinámicamente cuánto se ha cargado el archivo actual . De esta forma, cuando el usuario sube una imagen relativamente grande, es muy inconveniente para el usuario juzgar el tiempo empleado en la carga y si el navegador se agota. Solución: después de buscar, encontré una biblioteca PHP que genera dinámicamente el progreso de la carga a través de la biblioteca JAVASCRIPT y PHP SOCKET: UGiA PHP UPLOADER. El método de uso de esta biblioteca es muy simple y su método de llamada se explica en detalle a continuación:
Método de llamada:
1. Para upu/misc/upu.js, modifique var basePath = "/upload/upu/" para que sea la ruta de upu relativo al directorio raíz del sitio web
2. Luego agréguelo a la página que contiene el formulario de carga

,aquí


upu/misc/upu.js es la ruta de upu.js, y luego agregue onsubmit="return upuInit(this)" a la etiqueta 3. Use POST para obtener los datos del formulario
en la página procesada después de cargar su archivo 4. upu /temp Es el directorio de almacenamiento para cargar archivos temporales, y upu /files es el directorio de almacenamiento para archivos.Estos dos directorios se pueden especificar en upu.class.php. 5. <formulario> debe tener el atributo enctype = "multipart / form − data", y la acción es la página de procesamiento después de que el archivo se cargue con éxito, es decir, su <formulario> se puede escribir completamente de acuerdo con el pensamiento normal , la única diferencia es que debe agregar onsubmit = "returnupu I nit (this)" 6. Después de que la carga sea exitosa, puede usar _POST para obtener los datos del formulario 4. upu/temp es el directorio de almacenamiento para la carga temporal archivos, y upu/files es el directorio de almacenamiento para archivos.Se pueden especificar dos directorios en upu.class.php. 5. Debe haber un atributo de enctype="multipart/form-data" en el <form>, y la acción es la página de procesamiento después de que el archivo se carga correctamente, lo que significa que su <form> se puede escribir completamente de acuerdo con el pensamiento normal, la única diferencia es que debe agregar onsubmit="return upuInit(this)" 6. Después de cargar con éxito, puede usarpagOST来获取表单数据4.upu/temp为上传临时文件存放目录,upu/files为文件存放目录,这两个目录可以在upu.class.php中指定。5.<form>中要有enctype="multipart/formd a t a " Este atributo, a c c i o n es la página de procesamiento después de que el archivo se cargue con éxito, es decir, su<para m _>Es suficiente escribir de acuerdo con el pensamiento normal, la única diferencia es que necesita agregar o n s u bmi t=" re t u r n u p u I ni t ( t hi s ) "6. Después de que la carga sea exitosa, puede usar _POST para obtener los datos del formulario. Si es un formulario normal, puede
obtenerlo directamente con $ El valor _POST['form name'], si es un archivo, devuelve una matriz como esta
POST [ ′ nombre del formulario ′ ] = Una matriz ( [ nombre de archivo ] = > [ ruta del cliente ] = > [ ruta de guardado ] = > [ tipo de archivo ] = > [ tamaño de archivo ] = > [ extensión ] = > ) 6.3 Cargar imágenes en lotes a voluntad General problemas En el modo de carga de formularios, aunque el formulario que proporciona la carga de archivos puede generarse dinámicamente y agregarse a voluntad, traerá muchos inconvenientes para el usuario y hará que el procesamiento en segundo plano sea más complicado. Por lo tanto, la mejor manera es usar el objeto existente en el fondo La interfaz de procesamiento de un solo archivo se utiliza para realizar el problema de la carga por lotes a voluntad. Después de una comparación específica, finalmente se seleccionó la biblioteca Applet de juupload como procesamiento intermedio para la carga por lotes de imágenes. Al mismo tiempo, para procesar los archivos cargados en lotes, es necesario escribir manualmente un script de devolución de llamada para procesar los archivos cargados. El principio de implementación específico es el siguiente: primero, después de cargar un archivo, jupload llamará automáticamente a un secuencia de comandos de devolución de llamada para procesar la carga de archivos posteriores. A través de este script de devolución de llamada, la imagen cargada se puede construir manualmente para cumplir con _POST['form name'] = Array ([filename] => [clientpath] => [savepath] => [filetype] => [filesize] => [extensión] => ) 6. 3 El problema de la carga aleatoria de imágenes por lotes En el modo de carga de formulario general, aunque el formulario para la carga de archivos puede generarse dinámicamente y agregarse a voluntad, traerá muchos inconvenientes para el usuario y hará que el procesamiento en segundo plano se vuelva más complicado. , por lo que el mejor método es usar la interfaz existente para el procesamiento de un solo archivo en segundo plano para darse cuenta del problema de la carga aleatoria por lotes. Después de una comparación específica, finalmente se seleccionó la biblioteca Applet de juupload como un proceso intermedio para cargar imágenes en lotes. Al mismo tiempo, para procesar los archivos cargados en lotes, es necesario escribir manualmente un script de devolución de llamada para procesar los archivos cargados. El principio de implementación específico es el siguiente: primero, después de cargar un archivo, jupload llamará automáticamente a un secuencia de comandos de devolución de llamada para procesar la carga de archivos posteriores. A través de este script de devolución de llamada, la imagen cargada se puede construir manualmente para cumplir con los requisitos de la Sección 5.2.POST[表单名]=Array([filename]=>[clientpath]=>[savepath]=>[filetype]=>[filesize]=>[ extensión ] _ _ _ _ _ _ _ _=>) 6.3 Carga aleatoria de imágenes por lotes En el modo de carga de formulario general, aunque el formulario para cargar archivos puede generarse dinámicamente y agregarse a voluntad, traerá muchos inconvenientes para el usuario y hará que el procesamiento en segundo plano se vuelva más complicado, por lo que es mejor El mejor método es usar la interfaz existente para el procesamiento de un solo archivo en segundo plano para darse cuenta del problema de la carga aleatoria por lotes. Después de una comparación específica, finalmente se seleccionó la biblioteca Applet de jupload como el procesamiento intermedio para cargar imágenes en lotes . Al mismo tiempo , para procesar los archivos cargados en lotes, es necesario escribir manualmente un script de devolución de llamada para procesar los archivos cargados. El principio de implementación específico es el siguiente: primero, j u pl o a d llamará automáticamente a una devolución de llamada secuencia de comandos para procesar los archivos cargados. A través de este script de devolución de llamada, la imagen cargada se puede construir manualmente para ajustarse a la variable _POST[nombre del formulario] en la Sección 5.2 .
El código específico es el siguiente:

<?php include_once('../sys.php'); function message_sender($can_save){ // envía la respuesta de error a jupload // el formato depende de la versión de la API switch(php_sapi_name()) { case 'cgi': case 'cgi-fcgi': $sz_htstatus = 'Status: '; romper; predeterminado: $sz_htstatus = 'HTTP/1.0: '; romper; } // mensaje de error falso // si jupload obtiene el código de estado != 200, imprime el mensaje de error if (!$can_save) { $sz_message='406 No es aceptable guardar este archivo'; } else { $sz_message='200 JUpload subido ok'; } encabezado($sz_htstatus.$sz_message); } //未登陆的直接退出 $resultado = $_GET['jid']; si (! is_numeric($resultado) || $resultado <= 0) { mensaje_remitente(falso); salir(0); } $_SESSION['job_title'] = $_GET['job_title']; $_SESSION['job_cat'] = $_GET['job_cat']; $_SESSION['job_content'] = $_GET['job_content']; $_SESSION['job_tags'] = $_GET['job_tags']; $_SESION['jid'] = $_GET['jid']; $_SESSION['uid'] = $_GET['uid']; $uptp = $_SESSION['job_title'] . '|' . $_SESSION['trabajo_gato'] . "|" . $_SESSION['job_content'] . "|" . $_SESSION['etiquetas_de_trabajo']; //处理APPlet字符集编码问题 $uptp = auto_decoding($uptp); $jid = $_SESION['jid']; //$hash_path = $_GET['hashdir']; //$i = 0; foreach($_FILES as $tagname=>$objekt) { //构造UPU数组 $save_path = ROOT_PATH . 'sys/upu/archivos/'; $_POST['FileUp']['clientpath'] = $objekt['name']; $_POST['FileUp']['filesize'] = $objekt['size']; $_POST['FileUp']['filename'] = basename($objekt['name']); $_POST['FileUp']['filetype'] = $objekt['type']; $ext = explotar('.',nombrebase($objeto['nombre'])); $ext = $ext[(count($ext) - 1)]; $_POST['FileUp']['extension'] = $ext; $_POST['FileUp']['savepath'] = $save_path . sha1(nombrebase($objeto['nombre']) . tiempo()) . mt_rand(100,999) . '.' . $ext; // moverlos al directorio upu if (!file_exists($_POST['FileUp']['savepath'])) { move_uploaded_file($objekt['tmp_name'],

Entre ellos, la construcción del segmento de matriz UPU es el código para construir el archivo cargado. A través de este código, el procesamiento en segundo plano puede realizar directamente el procesamiento posterior, sin tener que volver a escribir el script para procesar el contenido por separado.
El siguiente es el script para procesar la imagen cargada (todo el procesamiento de la imagen se abstrae en una clase separada, que se omite debido a demasiados códigos)
$pic_info = $_POST['uptp'];
picinfo = explotar ( ′ ∣ ′ , pic_info = explotar ('|',pic _ _yon f o=e x plo d e ( _ ,pic_info,4);
pictitle = recortar ( pic_title = recortar(pic _ _tYo soy _=recortar ( pic_info [ 0 ] );
piccat = recortar ( pic_cat = recortar(pic _ _douna t=recortar ( pic_info[1 ] ) ;
picdes = recorte ( pic_des = recorte(pic _ _rees=t r im ( pic_info[2]);
//Tenga en cuenta que la ETIQUETA aquí es una matriz
pictags = explotar ( ′ , ′ , recortar (pic_tags = explotar(',',trim(pic _ _tun g s=e x plo d e ( _ ,,t r im ( pic_info[3]));
//El ID de usuario es el ID del álbum
$album_id =SESSION [ ′uid ′ ′ ] ​​; if ( _SESSION['uid']; if (SESS EN [ _tu yod_ ];i f ( album_id == '') { $album_id = $_GET['uid'];}//Procesar la carga del archivophoto = getphotoobj ( photo = get_photo_obj(



foto _ _ _ _=obtener _ _pagcaliente _ _ _obj ( _POST['FileUp'],$db_settings,'DGBN_B6.TTF',80,80);
//Obtener la ruta física del archivo subido
$resultado =foto − > savepic (foto->save_pic(foto - _ _ _ _>ahorrar _ _ _pagic(db_settings, p i c c a t , pic_cat, piccat,jid, a l b u m i d , ′ ′ , album_id,'', albumid,′′,pic_title, p i c d e s , t r u e , t r u e ) ; i f ( pic_des,true,true); if ( picdes,true,true);i f ( result < 0) { if ($with_error_exit) { show_normal_mesR('Imagen ilegalSu tipo de imagen es:' . $_POST['FileUp']['filetype'],'Illegal image','Image upload') ;}elsereturn;}Entre ellos, la parte en negrita es el código para extraer información válida del arreglo previamente construido. 7 Prueba de resultados y análisis de rendimiento7.1 El sistema de combinación del módulo de operaciónasigna la autoridad de operación del módulo correspondiente y la autoridad de operación de la base de datos, es decir, roles relacionados de acuerdo con los requisitos comerciales, y la autoridad de operación del módulo y la base de datos otorgada forman una plataforma de operación del usuario a través de la estructura del marco del menú y la página combinación e interfaz de operación. 7.2 Interfaz de inicio de sesión del sistema











Figura 7-1 Interfaz de inicio de sesión del sistema Figura
7.3 Ejemplo de aplicación del módulo

Figura 7-2 Página de inicio del usuario

Figura 7-3 Página de resultados de búsqueda

Figura 7-4 Interfaz de gestión de imágenes

Figura 7-5 Interfaz de modificación de información de usuario

Figura 7-6 Interfaz de carga de imágenes

Figura 7-7 Interfaz de carga por lotes de imágenes

Figura 7-8 Interfaz de configuración de carga de información de imagen

Figura 7-9 Interfaz del proceso de carga de imágenes
7.4 Problemas existentes en el sistema
Debido al tiempo y la experiencia limitados, aún existen algunos problemas en el sistema que deben ser criticados y corregidos por el docente.
7.4.1 Fuga de los parámetros de URL de la conexión de carga por lotes La
conexión de carga de imágenes por lotes expone la ID del álbum, y el usuario puede crear un álbum inexistente a través de medios ilegales o usar esta URL para probar el punto de inyección e
intentar limitar la seguridad El JID enviado aquí debe ser un número.
7.4.2 La secuencia de comandos de devolución de llamada en el código fuente de la página de carga por lotes filtra el ID de usuario
En la página de carga por lotes, el control de carga por lotes llamará a una secuencia de comandos PHP de devolución de llamada, URL: http://192.168.0.43/DOJO_pic_share/sys /jupload/jupload .php?jid=11805460158693&job_title=asdf&job_cat=20060810&job_content=sdfas&job_tags=asdfa&uid=1
Puede obtener directamente la información confidencial de ID de usuario de esta conexión.
Intente pasar esta información a través de SESSION.
7.4.3 No se puede volver normalmente
Cuando el usuario gestiona fotos, al eliminar la última foto de una determinada categoría o álbum, no puede volver a la página legal correctamente. Cuando el usuario elimina la imagen, volverá automáticamente a la página anterior, pero debido a que no hay imágenes en la categoría o álbum, la categoría o álbum no existe (porque si el usuario elimina la última imagen durante el diseño, será eliminado al mismo tiempo Las categorías o los álbumes)
intentan modificar este enfoque permitiendo que el usuario elija a qué página regresar o ir directamente a la página de inicio.
7.5 Sugerencias de mejora
Por los diversos problemas existentes en el sistema actual, algunos de ellos necesitan cambiar el diseño de la arquitectura actual para satisfacer las necesidades futuras. Al mismo tiempo, también es necesario rediseñar la interfaz del sistema. Dado que la página actual se basa en la estructura de capas activas, algunas capas utilizan posiciones fijas, lo que hace que la generación del programa sea menos flexible y requiera la modificación de la plantilla de la interfaz.
Al mismo tiempo, el tiempo de generación de la página de inicio del sistema es demasiado largo y se puede usar el almacenamiento en búfer de archivos en lugar de leer de la base de datos.
Conclusión
En la actualidad, después de un intenso y ordenado proyecto de graduación, las funciones principales del sistema de imágenes se han realizado plenamente. La interfaz del sistema es simple, fácil de operar y tiene funciones completas. Realiza las funciones de registro automático del usuario, carga de imágenes, gestión de imágenes, clasificación de imágenes, etiquetas de imágenes, clasificación de gestión, gestión de etiquetas, gestión de usuarios en segundo plano y gestión del sistema. , y se da cuenta de las funciones de intercambio de imágenes.habilidades básicas. Sin embargo, todavía hay algunas áreas que necesitan mejoras adicionales, como: al cargar imágenes en lotes, debido al límite del paquete HTTP máximo, no se pueden transmitir todas las imágenes a la vez, y la eliminación de etiquetas y categorías durante la gestión de imágenes. no es muy claro para el usuario. Además, este sistema no ha proporcionado una función estadística más conveniente para los administradores de fondo.
El diseño y desarrollo de este sistema se refieren al modo de diseño y desarrollo de la empresa de desarrollo de software bajo la dirección del profesor. A través del análisis de la demanda de este sistema, el estudio y la práctica de cada parte, como el diseño del esquema, el diseño detallado, la codificación y las pruebas. Me hizo darme cuenta de que la etapa de diseño del sistema juega un papel decisivo. La calidad de la etapa de diseño afectará directamente la calidad del sistema en el futuro. Si los requisitos son precisos afectará si el sistema final puede cumplir con los requisitos del usuario, y el diseño de la estructura de datos del esquema de diseño afectará si el diseño de la base de datos es superior.Si el diseño es razonable, será relativamente fácil implementar en la etapa de codificación. El diseño de clases relacionadas y la definición de funciones en el diseño detallado allanan el camino para la etapa de codificación, haciendo que la codificación sea una cuestión de rutina.
Durante la realización de este sistema, me doy cuenta plenamente de que todavía hay muchas deficiencias en lo que he aprendido, y he ganado muchas habilidades que debo tener para proyectos específicos del proceso de realización del sistema, y ​​creo que esto debería ser útil para trabajos futuros Relativamente gran ayuda.
Referencias
[1] Chen Hao. Programación PHP [M]. Beijing: Electronics Industry Press, 2012.
[2] Shao Yu. PHP y MYSQL WEB Development [M]. Beijing: Mechanical Industry Press, 2012.
[3] DAVID LANE [EE. UU.]. PHP & MYSQL WEB Database Application Development Guide [M]. Nanjing: Southwest University Press, 2006.
[4] MIHAI BUCICA [EE. UU.]. AJAX y PHP WEB Development [M]. Beijing: People's Posts and Telecommunications Press, 2011.
[5] PETER MOLDING [inglés]. PHP Technology Insider [M]. Beijing: China Water Conservancy and Hydropower Press, 2013.
[6] NARAMORE [EE. UU.]. Desarrollo de redes PHP5, APACHE, MYSQL [M]. Beijing: Electronic Industry Press, 2012.

Agradecimientos
Este artículo se completó bajo el cuidado y la guía entusiasta de los maestros. Su profundo conocimiento y estilo académico riguroso me han beneficiado mucho y jugaron un papel importante para completar con éxito este proyecto. Aquí me gustaría expresar mi más sincero agradecimiento a él!
Gracias al maestro Chen por su ayuda a largo plazo. El maestro nos ha guiado con paciencia y meticulosidad durante mucho tiempo y nos ha ayudado a complementar puntos de conocimiento importantes. Al mismo tiempo, el maestro también nos ayudó a analizar la relación lógica del sistema en detalle, el maestro Gao nos brindó mucha ayuda en el diseño del programa, lo que me benefició mucho para analizar y resolver problemas. Durante el proceso de realización de la tesis, también recibí la ayuda entusiasta de otros profesores y muchos compañeros de clase, ¡y me gustaría expresarles mi profunda gratitud!
Gracias a los líderes escolares por proporcionar un buen ambiente de aprendizaje para este grupo.Con la cooperación mutua y la ayuda de los miembros de este grupo, el proyecto de graduación se completó con éxito.

Supongo que te gusta

Origin blog.csdn.net/ambiguous__/article/details/130919447
Recomendado
Clasificación