{"id":254,"date":"2013-06-23T18:18:22","date_gmt":"2013-06-23T17:18:22","guid":{"rendered":"http:\/\/www.dgcmedia.es\/blog\/?p=254"},"modified":"2013-06-23T18:18:22","modified_gmt":"2013-06-23T17:18:22","slug":"barra-de-progreso-php","status":"publish","type":"post","link":"https:\/\/www.dgcmedia.es\/blog\/barra-de-progreso-php\/","title":{"rendered":"Barra de progreso PHP"},"content":{"rendered":"<p>A continuaci\u00f3n, os voy a mostrar un c\u00f3digo muy tonto pero extremadamente \u00fatil.<\/p>\n<p>Cuando necesit\u00e9is lanzar un proceso en php de cierta duraci\u00f3n, y quer\u00e1is conocer el avance del mismo, pod\u00e9is hacer una barra de progreso f\u00e1cilmente con las siguientes l\u00edneas de c\u00f3digo.<\/p>\n<pre class=\"lang:php decode:true \">&lt;?\r\nheader( 'Content-type: text\/html; charset=utf-8' );\r\n?&gt;\r\n&lt;!DOCTYPE HTML PUBLIC \"-\/\/W3C\/\/DTD HTML 4.01 Transitional\/\/EN\" \"http:\/\/www.w3.org\/TR\/html4\/loose.dtd\"&gt;\r\n&lt;html&gt;\r\n&lt;head&gt;\r\n&lt;meta http-equiv=\"Content-Type\" content=\"text\/html; charset=utf-8\"&gt;\r\n&lt;title&gt;Documento sin t\u00edtulo&lt;\/title&gt;\r\n&lt;style&gt;\r\n\t.progreso { width: 100px; height: 20px; border:1px solid black; float:left;}\r\n\t.avance { height:20px; float:left; background: red; }\r\n&lt;\/style&gt;\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\n&lt;div class=\"progreso\"&gt;\r\n\t&lt;div class=\"barra\"&gt;\r\n\t&lt;?\r\n\t\tfor($i=0;$i&lt;10;$i++)\r\n\t\t{\r\n\t\t\techo '&lt;span style=\"width:10px;\" class=\"avance\"&gt;&lt;\/span&gt;';\r\n\t\t\tflush();\r\n\t\t\tob_flush();\r\n\t\t\tsleep(5);\r\n\t\t}\r\n\t?&gt;\r\n\t&lt;\/div&gt;\r\n&lt;\/div&gt;\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;<\/pre>\n<p>Evidentemente, el ancho del progreso (en px) habr\u00e1 que calcularlo de forma din\u00e1mica seg\u00fan el n\u00famero de instrucciones o ciclos de vuestro script, pero en esencia, con esas l\u00edneas tan est\u00fapidas todo os ser\u00e1 un poquito m\u00e1s f\u00e1cil.<\/p>\n<p>Adem\u00e1s, con ello evit\u00e1is el timeout del navegador. Si el proceso es extremadamente largo, pod\u00e9is poner otro par de l\u00edneas salvadoras en la cabecera del script y \u00e9ste se ejecutar\u00e1&#8230;s\u00ed o s\u00ed.<\/p>\n<pre class=\"lang:php decode:true \">\/\/ si el usuario cierra el navegador, el script sigue ejecut\u00e1ndose\r\nignore_user_abort(true); \r\n\/\/ cancela el l\u00edmite de tiempo de ejecuci\u00f3n de php\r\nset_time_limit(0);<\/pre>\n<p>Ya os veo a todos pensando en hacer una fant\u00e1stica newsletter&#8230;. Eso, pr\u00f3ximamente.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A continuaci\u00f3n, os voy a mostrar un c\u00f3digo muy tonto pero extremadamente \u00fatil. Cuando necesit\u00e9is lanzar un proceso en php de cierta duraci\u00f3n, y quer\u00e1is conocer el avance del mismo, pod\u00e9is hacer una barra de progreso f\u00e1cilmente con las siguientes &hellip; <a href=\"https:\/\/www.dgcmedia.es\/blog\/barra-de-progreso-php\/\">Sigue leyendo <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[23],"tags":[121,122,25],"_links":{"self":[{"href":"https:\/\/www.dgcmedia.es\/blog\/wp-json\/wp\/v2\/posts\/254"}],"collection":[{"href":"https:\/\/www.dgcmedia.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dgcmedia.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dgcmedia.es\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dgcmedia.es\/blog\/wp-json\/wp\/v2\/comments?post=254"}],"version-history":[{"count":2,"href":"https:\/\/www.dgcmedia.es\/blog\/wp-json\/wp\/v2\/posts\/254\/revisions"}],"predecessor-version":[{"id":256,"href":"https:\/\/www.dgcmedia.es\/blog\/wp-json\/wp\/v2\/posts\/254\/revisions\/256"}],"wp:attachment":[{"href":"https:\/\/www.dgcmedia.es\/blog\/wp-json\/wp\/v2\/media?parent=254"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dgcmedia.es\/blog\/wp-json\/wp\/v2\/categories?post=254"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dgcmedia.es\/blog\/wp-json\/wp\/v2\/tags?post=254"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}