Mejor enfoque para la depuración rápida y eficientemente imagen grande fijación de archivos fracaso de subida

StackOverflow https://stackoverflow.com/questions/3966365

Pregunta

Considere una funcionalidad normal de PHP para subir la imagen (no usar AJAX) y no se produce este problema de la gran carga de imágenes fallar de vez en cuando - con menor frecuencia en un servidor de prueba y con mayor frecuencia en otro servidor de prueba. Suponiendo que el depurador no se ha iniciado la depuración del problema y no hay problemas de permisos de archivo / carpeta, la forma de proceder?

Estoy seguro de que tiene en file_uploads. No quiero que acaba de establecer ciegamente algunos valores seguros o incrementar los valores hasta que funcione. Básicamente, quiero que los valores sean exactamente de acuerdo a mis módulos en cuestión. Estoy listo para reemplazar la configuración de mis módulos en cuestión, si ese es el mejor enfoque.

De acuerdo con ajustes relacionados con la carga de archivos , estos son todos los ajustes pertinentes / relacionado -
* file_uploads
* upload_max_filesize
* max_input_time
* memory_limit
* max_execution_time
* post_max_size

  1. Búsqueda de parámetros / valores para la escritura en cuestión -
    Para que pueda saber a cuál de ellas es / cuántos de ellos realmente están siendo violados por mi guión y causando el fallo, necesito encontrar primero los valores correspondientes para mi guión. ¿Cómo encontrar los siguientes valores para mi script:

    • Total subido tamaño de los archivos
    • tiempo de entrada
    • Uso de memoria
    • Script tiempo de ejecución
    • Publicado tamaño de los datos

    ¿Qué herramienta (s) se puede utilizar para el mismo. El uso de código PHP, creo, puedo descubrir algunos:

    • tiempo de ejecución de secuencias de comandos -. Diferencia entre microtime(true) al inicio y al final de la escritura
    • Total Subida tamaño de archivo - bucle foreach en $_FILES para encontrar la suma de atributo ['size']

    ¿Cómo encontrar el resto como el uso de la memoria, el tiempo de entrada, etc.?

  2. ¿Dónde / Cómo anular
    Por último, cuando he encontrado el ajuste de violar (s), supongamos que necesito para aumentar los valores / override para 2 de los ajustes. ¿Dónde se solicita la anulación? Supongo que no es correcto para establecer memory_limit etc., para todos los módulos en .htaccess o en script PHP. Por el contrario, la aplicación sólo en el módulo en cuestión es mejor. ¿Estoy en lo correcto?

  3. Ajustes por menos exigentes módulos
    Además, para otros módulos, en los que no se necesitan muchos recursos, es bueno / aconsejable reemplazar la configuración de reducirlos, estudiando cuidadosamente después de las necesidades de recursos de los módulos? Va a reducir el consumo innecesario de recursos? Si es así, ¿qué hay de tener 2 o 3 combinaciones de estos parámetros (dependiendo de los requisitos del proyecto, ellos denominación normal-escritura, pesado de carga de archivos) y llamar a una sola función para cargar cualquier combinación para cada módulo?

  4. memory_limit
    En cuanto a memory_limit se menciona aquí que -

    Configuración de un valor demasiado alto puede ser muy peligroso porque si varios archivos al mismo tiempo que se están manejando toda la memoria disponible se utilizará y otras secuencias de comandos relacionados que consumen una gran cantidad de memoria podría afectar todo el servidor también.

¿Qué precauciones generales que se toman al respecto?

Gracias,
Sandeepan

¿Fue útil?

Solución

Algunas ideas para la depuración:

Para el ensayo manual, I prepararía una serie de imágenes con diferentes dimensiones cuya red tamaño (ancho x altura) aumenta en pequeños pasos: 100 x 100, 100 x 200, 100 x 300 .... y probarlas. En algún momento, podrían empezar a fallar si el problema es el límite de memoria. Se podría convertir en error_reporting() por sí mismo solamente (tal vez usando una cookie de depuración de algún tipo) para que veas lo que no exactamente.

Si eso no es una opción, me gustaría establecer un mecanismo de algún tipo de registro a largo plazo que almacena las dimensiones de la imagen en un archivo de registro o de la mesa antes de que comience el cambio de tamaño, y también los contenidos de la matriz $_FILES. Al final exitoso de la secuencia de comandos, agregue un "OK" para esa entrada. De esta manera, usted será capaz de obtener más información sobre los archivos fallidos, si lo hacen a través de la secuencia de comandos (y no dejan de antemano debido a una configuración de tiempo de espera).

Además, para otros módulos, en los que no se necesitan muchos recursos, es bueno / aconsejable sustituir la configuración de reducirlos

Creo que la respuesta es siempre "no". Por lo que yo sé, el límite de memoria es el límite máximo de la memoria que se puede asignar, pero esa cantidad no está reservado para cada petición. Nunca he oído de nadie puesta a punto el límite de memoria de esta manera.

Sin embargo, si algunas partes del sistema (por ejemplo, cambiar el tamaño de la imagen) requieren un límite de memoria enormemente alto, puede ser conveniente aplicar ajustes específicos memory_limit sólo a ellos, por ejemplo, a través un entorno .htaccess .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top