Pregunta:
Tengo un proceso por lotes que ocasionalmente excede el memory_limit, que actualmente es de 96M. Por supuesto, conozco las formas de aumentar el límite de memoria para todo el sitio, pero prefiero aumentar el límite de memoria solo para las páginas por lotes.
Una forma en la que podría pensar es implementar hook_init en un módulo personalizado y hacer ini_set('memory_limit', '200M');
siempre que arg(0) == 'batch'
, pero no estoy seguro de si esa es la mejor solución.
¿Que recomiendas? Supongo que podría hacerlo en .htaccess, pero las expresiones regulares no son exactamente mi fuerte …
[actualización] Mientras tanto, más búsquedas me dicen ( Stack Overflow , Webmasterworld ) que no es posible agregar una directiva php_value condicional a .htaccess.
Respuesta:
Creo que la respuesta de @ kantu es lo correcto, pero voy a ofrecer una solución alternativa que es un poco pirateada.
Si no desea hacer un módulo, puede agregar la configuración a settings.php
envuelto en un condicional. Solo tenga en cuenta que esto se incluye muy temprano en el proceso de arranque, por lo que no tiene acceso a la gran mayoría de la API.
Podrías intentar agregar
if (strpos($_SERVER["REQUEST_URI"], "/batch") === 0) {
ini_set('memory_limit', '200M');
}
al archivo.
También comprobaría el documento PHP sobre memory_limit
(o publicaría una pregunta en uno de los sitios hermanos). Creo que PHP no asigna esto durante el inicio; es solo un límite de seguridad para evitar la implosión de su servidor. Estoy bastante seguro de que puede aumentar este límite a nivel mundial.
Si le preocupa que Apache se MaxMemFree
a esta memoria, puede jugar con la configuración MaxMemFree
para Apache. Hace un tiempo, hice un sitio que necesitaría grandes cantidades de memoria con muy poca frecuencia. Ajustar este parámetro, junto con MaxRequestsPerChild
, mantuvo mi servidor funcionando felizmente.