A diferencia de otros lenguajes de programación, PHP se detiene por completo cuando ya no procesa una determinada solicitud. Diferentes lenguajes de programación tienen una vida útil muy diferente. El sistema operativo de la computadora, por ejemplo, se ejecuta continuamente, realizando tareas, consumiendo memoria, etc., siempre que la computadora esté encendida. ¡Imagínese si su computadora ha sido diseñada para cerrar y comenzar de nuevo entre cada tecla del teclado! No importa cuán loco parezca (y sería para un sistema operativo), así es como funciona PHP. PHP ha sido especialmente diseñado para ejecutarse en servidores web, administrando solicitudes únicas de muchos clientes. Debido a que un servidor habla con más (incluso millones de) clientes simultáneamente, es mejor liberar todos los recursos del cliente cuando se complete su solicitud. Como resultado, PHP se detiene por completo cuando ya no procesa una determinada solicitud.
Por lo tanto, cada nueva solicitud hecha a una base de código PHP requiere que PHP se reconstruya desde cero, por lo que, por ejemplo, su sitio de WordPress está construido solo, desde Init, cada vez que alguien quiere ver una nueva publicación en su blog es un poco similar. Un hotel que se reconstruye cada vez que llega un visitante, pero resulta ser la mejor manera de servir tráfico web. PHP no puede funcionar para siempre que PHP resulte bastante estúpido en la gestión de procesos a largo plazo. Debido a que un proceso de PHP se ejecuta o no existe, PHP resulta bastante estúpido al administrar procesos a largo plazo. Si desea usar PHP para procesar una base de datos con un billón de filas o para comprimir y exportar un archivo de video de 100 GB o romper el genoma humano, tendrá problemas. PHP simplemente no ha concebido para vivir tanto: debería ser o proporcionar respuestas de rayos a un cliente que solicita o no existe en absoluto. No “se ejecuta en el fondo”.
Si escribe un script que tarda más de unos segundos en completarse, probablemente comenzará a encontrar los siguientes problemas: los errores de tiempo de espera establecen límites para el momento en que puede durar un solo proceso de PHP. Los servidores establecen límites para el tiempo que puede durar un solo proceso de PHP. Esto está bien: si un proceso PHP deshonesto quiere seguir llamando por sí mismo y nuevamente, por ejemplo, cinco años seguidos, este es un gran peso en el servidor. Es mejor detener el proceso antes: después, digamos, 60 o 120 segundos. Por lo tanto, un error de Tiempo de espera PHP significa que una operación PHP que solicitó también ha durado y se ha detenido. Los limitadores de memoria también limitan la cantidad de recursos del servidor que PHP procesa que pueda ocupar. Los servidores también limitan la cantidad de recursos del servidor que los procesos PHP pueden ocupar. Por ejemplo, un proceso de PHP que intenta exportar una base de datos con un billón de filas podría simplemente ocupar toda la memoria del servidor, ya que el servidor intenta almacenar detalles sobre cada fila durante su procesamiento. La ejecución del servidor sin memoria de esta manera haría que cualquier otra cosa se detenga. Por lo tanto, los servidores tienen límites de memoria: 128 MB, 256 MB u otro número, lo que limita la capacidad de PHP para almacenar mucha información simultáneamente.
Puede trabajar con ambos errores hasta cierto punto ajustando la configuración del servidor.David hizo un trabajo fabuloso cubriendo este tema en su artículo sobre Php.ini y Phpinfo ().Pero eso va tan lejos;En particular, muchos planes de sombra no incluyen control sobre la configuración de su servidor. A veces tiene que hacer grandes cosas en PHP, puede usar AJAX para bloquear un solo proceso de PHP, excesivo, en una serie de procesos individuales más pequeños, que luego se ejecutan uno a uno.El mundo web está lleno de grandes procesos que llevan mucho tiempo, y PHP debe llegar a algunos de ellos.La migración de grandes bases de datos es obvia, así como, por ejemplo, la importación de cientos de grandes imágenes en su biblioteca de medios, que podría ser una solicitud para el cliente perfectamente razonable.Si estás en WordPress, PHP es el juego principal en la ciudad en términos de crear nuevas características.¿Qué hacer?
Hoy, presentamos una solución única: use AJAX para bloquear un solo proceso de PHP demasiado grande en un procesos individuales más pequeños, que luego se ejecutan uno por uno. Código: El uso de AJAX para evitar los límites de memoria y tiempo de espera en el siguiente ejemplo, podemos usar PHP para transferir un número infinito de archivos grandes a una instalación de WordPress, sin preocuparnos por el tiempo de espera y los límites de memoria. El código de clasificación avanzado que advierte que el código a continuación se basa en el conocimiento sobre PHP, JavaScript, JQuey, AJAX en WordPress, Hooks WordPress y WP_Localiz_script (). Así que es un poco en el lado avanzado. Si tiene que mejorar cualquiera de estos temas, haga clic en el enlace apropiado, busque ese tema o contáctenos en los comentarios de este artículo y estaremos encantados de ayudarlo. ¿En qué toma el código de trabajo una gran cantidad de archivos? Otro sitio y los transfiere a la raíz de la instalación de WordPress de WPShout. Mientras hace esto, se conecta a la consola del navegador cada archivo que escribe, junto con el tamaño del archivo:
Haga clic para aumentar
Esta solución podría ser útil si, por ejemplo, tiene un cliente con 1,000 imágenes grandes (constantemente llamadas, por ejemplo, IMG001.JPG) que se exportará desde una cuenta de host que expirará pronto, y el cliente no puede encontrar las credenciales de FTP. ¡Este modo también es un poco más rápido que FTP, incluso si tiene credenciales!

Enfoque general e intuición JavaScript puede ejecutarse continuamente incluso si PHP no puede, por lo que podemos escribir un JavaScript en curso que realice una serie de solicitudes individuales a PHP usando AJAX.
La intucción aquí es que JavaScript puede ejecutarse continuamente incluso si PHP no puede.Podemos usar este conocimiento para escribir un JavaScript en curso que realice una serie de solicitudes individuales a PHP usando AJAX.Incluso si el proceso de transferencia completo lleva 72 horas, ningún proceso de PHP individual se ejecuta más de unos pocos segundos.Dado que este es un proceso “Ejecutar solo hasta que todo termine”, usaremos la apelación: nuestra función AJAX se auto-opera nuevamente, como verá en el código a continuación. El código está envuelto en un complemento con dos archivos:
Wpshout-sajax-file-copier.php, que pone a JavaScript en línea y proporciona el punto final AJAX que procesa el archivo

WPShout-Ajax-File-Copier.js, que hace que la solicitud recursiva de AJAX y registra las respuestas en la consola del navegador
El complemento completo está disponible para descargar aquí: WPShout-Ajax-File-Copier.zip PHP Código: WPShout-Ajax-Copier.php Add_action (‘WP_ENQUEUE_SCRIPTS’, ‘WPSHOUT_AJAX_COPIER_SCRIPT’); Function wpshout_ajax_copier_script () {if (is_single (‘arriba y más allá: evitando el tiempo de espera de php y los errores de límite de memoria con ajax’)) {return; } wp_enqueue_script (‘wpShout-Ajax-File-Copier’, plugin_dir_url (__file__). ‘wpShout-Ajax-copier.js’, array (‘jquey’)); $ target_files = array (‘ebook.mobi’, ‘podcast.mp3’, ‘video.mp4’); wp_localise_script (‘wpShout-Ajax-Fiile-Child’, ‘AJAX_VARS’, Array (‘Ajax_url’ => Admin_url (‘admin-AJAX.PHP’), ‘Target_Files’ => $ Target_Files)); } add_action (‘wp_ajax_wpshout_copy_file_over’, ‘wpshout_php_file_copier’); add_action (‘WP_AJAX_NOPRIV_WPSHOUT_COPY_FILE_OVER’, ‘WPSHOUT_PHP_FILE_COPIER’); Function wpshout_php_file_copier () {$ file = $ _post [‘file’]; $ base = ‘https://pressupinc.com/’; $ filestring = file_get_contins ($ base. $ archivo); $ bytes = file_put_contents (get_home_patch (). $ archivo, $ fileString); if ($ bytes === false) {echo ‘-1’; } else {echo $ bytes; } morir; } Los comentarios anteriores hacen dos cosas. WPShout_AJAX_COPIER_cript () coloca el archivo JavaScript en nuestra cola, wpShout-Ajax-File-Copier.js. También usamos wp_localise_cript () para transmitir una serie de variables clave al archivo JS que creamos, incluidos los nombres de archivo que queremos copiar.
En segundo lugar, tenemos wpshout_php_file_copier (), que se ocupa de la solicitud AJAX. Use file_get_contents () para tomar (como una cadena) el nombre del archivo que ha dado por $ _post, luego use file_put_contents () para escribir esa cadena en un nuevo archivo, con el mismo nombre de archivo, en el director principal de la instalación actual de WordPress . Luego vuelva a colocar un código de error o el número de bytes del archivo copiado. Como nota, la verificación IS_Single () en la parte superior significa que este código solo se ejecuta en una determinada publicación en el sitio, ¡porque no queremos copiar archivos de 200 MB cada vez que hay un visitante del sitio! (Antes de preguntar, el complemento está deshabilitado; no derrita nuestro servidor). Para usar realmente esta verificación, crearía una página que nadie más podría encontrar (“Mi página de copiadores de Ajax”) y establecer una página IS_Page () Compruebe Esto, o, mejor, haga algo menos vago/hacky para asegurarse de que el código se ejecute solo cuando presiona un botón en algún lugar del administrador de WordPress.
Código JavaScript: WPShout-Ajax-File-Copier.js jQuery (documento) .Ready (function ($) {var i = 0; function ProcessFile () {if ((typeof ajax_vars.target_files [i] == ‘nofinado’) ) {return;} $ .post (ajax_vars.AJAX_URL, {‘Action’: ‘wpshout_file_over’, ‘file’: ajax_vars.target_files [i]}, function (respuesta) {if (respuestas {console.log (‘fallado para escribir el archivo ‘ + ajaax_vars.target_files [i] +’. ‘);} else {console.log (‘ escribió archivo ‘ + ajaax_vars.target_files [i] +’, ‘ + respuesta +’ bytes en total ‘); } i ++; processFile ();});} processFile ();});Comentarios para cada archivo dado por wp_localise_cript (), este archivo JavaScript crea una solicitud AJAX a WP_AJAX_WPSHOUT_COPY_FILE_OVER (), pasando el nombre del archivo como propiedad de $ _post.Luego espera una respuesta exitosa, algo en el proceso de PHP al que apeló.Si este es un “-1”
Más allá: evitar los errores de PHP de tiempo de espera y el límite de memoria con AJAX
Tags Más allá: evitar los errores de PHP de tiempo de espera y el límite de memoria con AJAX
homefinance blog