<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>php archivos - Frexus</title>
	<atom:link href="https://www.frexus.dev/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.frexus.dev/tag/php/</link>
	<description>Generando Valor Agreado</description>
	<lastBuildDate>Tue, 21 Oct 2025 17:46:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://www.frexus.dev/wp-content/uploads/2024/03/cropped-Captura-de-Pantalla-2022-12-26-a-las-15.52.42-32x32.png</url>
	<title>php archivos - Frexus</title>
	<link>https://www.frexus.dev/tag/php/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">215529362</site>	<item>
		<title>Programación Web y el Acceso a Bases de Datos</title>
		<link>https://www.frexus.dev/post/programacion-web-bases-de-datos/</link>
					<comments>https://www.frexus.dev/post/programacion-web-bases-de-datos/#respond</comments>
		
		<dc:creator><![CDATA[Alfredo de Jesús Gutiérrez]]></dc:creator>
		<pubDate>Tue, 21 Oct 2025 17:45:59 +0000</pubDate>
				<category><![CDATA[post]]></category>
		<category><![CDATA[aprendizaje activo]]></category>
		<category><![CDATA[Base de datos]]></category>
		<category><![CDATA[concurso de programación]]></category>
		<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[ejercicios prácticos]]></category>
		<category><![CDATA[Mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[práctica guiada]]></category>
		<category><![CDATA[Programación web]]></category>
		<category><![CDATA[retos tecnológicos]]></category>
		<guid isPermaLink="false">https://www.frexus.dev/?p=4201</guid>

					<description><![CDATA[<p>La programación web se ha convertido en una de las habilidades más demandadas en el mundo digital. En este concurso te proponemos dos ejercicios prácticos que pondrán a prueba tu dominio de la conexión con bases de datos, el diseño de interfaces y la implementación de soluciones seguras y eficientes. Estos retos están diseñados para que desarrolles tus competencias en desarrollo web full stack, desde la planificación del modelo de datos hasta la presentación visual del sistema. Objetivo Aplicar los principios del desarrollo web para crear aplicaciones dinámicas con conexión a base de datos, incorporando seguridad, validación, diseño responsivo y funcionalidad completa de CRUD (crear, leer, actualizar y eliminar). Sobre los Ejercicios Los ejercicios propuestos buscan fortalecer el pensamiento lógico y la estructura técnica detrás de una aplicación web. Criterio Ponderación Correcta conexión y manejo de la base de datos 25% Cumplimiento de roles y permisos 25% Validación y seguridad de datos 20% Claridad y estética de la interfaz 15% Eficiencia y claridad del código 15% Criterio Ponderación Correcto diseño de base de datos relacional 25% Funcionamiento completo del CRUD 25% Generación correcta del PDF 20% Interfaz intuitiva y responsiva 15% Limpieza y organización del código 15% Ambos retos simulan escenarios reales de trabajo en el desarrollo web profesional. Estos ejercicios te preparan para enfrentar los desafíos reales del desarrollo web profesional. Combina la creatividad con la lógica, experimenta con nuevas herramientas y demuestra tu talento. Participa, aprende y reta tus límites. El conocimiento se fortalece con la práctica y la curiosidad.</p>
<p>La entrada <a href="https://www.frexus.dev/post/programacion-web-bases-de-datos/">Programación Web y el Acceso a Bases de Datos</a> se publicó primero en <a href="https://www.frexus.dev">Frexus</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img fetchpriority="high" decoding="async" width="1024" height="683" src="https://www.frexus.dev/wp-content/uploads/2025/10/uno_-1-1024x683.png" alt="Programación Web y el acceso a base de datos" class="wp-image-4202" style="width:426px;height:auto" srcset="https://www.frexus.dev/wp-content/uploads/2025/10/uno_-1-1024x683.png 1024w, https://www.frexus.dev/wp-content/uploads/2025/10/uno_-1-300x200.png 300w, https://www.frexus.dev/wp-content/uploads/2025/10/uno_-1-768x512.png 768w, https://www.frexus.dev/wp-content/uploads/2025/10/uno_-1-1140x760.png 1140w, https://www.frexus.dev/wp-content/uploads/2025/10/uno_-1.png 1536w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>La programación web se ha convertido en una de las habilidades más demandadas en el mundo digital. En este concurso te proponemos dos ejercicios prácticos que pondrán a prueba tu dominio de la conexión con bases de datos, el diseño de interfaces y la implementación de soluciones seguras y eficientes.</p>



<p>Estos retos están diseñados para que desarrolles tus competencias en desarrollo web <strong>full stack</strong>, desde la planificación del modelo de datos hasta la presentación visual del sistema.</p>



<h3 class="wp-block-heading"><strong>Objetivo</strong></h3>



<p>Aplicar los principios del desarrollo web para crear aplicaciones dinámicas con conexión a base de datos, incorporando seguridad, validación, diseño responsivo y funcionalidad completa de CRUD (crear, leer, actualizar y eliminar).</p>



<h3 class="wp-block-heading"><strong>Sobre los Ejercicios</strong></h3>



<p>Los ejercicios propuestos buscan fortalecer el pensamiento lógico y la estructura técnica detrás de una aplicación web.</p>



<ul class="wp-block-list">
<li>En el <strong><a href="https://steemit.com/programacionweb/@frexus/gestor-de-comentarios-con-moderacion">Gestor de Comentarios</a></strong>, pondrás en práctica la autenticación, los permisos y el manejo de datos. Se recomienda la siguiente lista de criterio para este ejercicio:</li>
</ul>



<figure class="wp-block-table aligncenter"><table class="has-fixed-layout"><tbody><tr><td><strong>Criterio</strong></td><td><strong>Ponderación</strong></td></tr><tr><td>Correcta conexión y manejo de la base de datos</td><td>25%</td></tr><tr><td>Cumplimiento de roles y permisos</td><td>25%</td></tr><tr><td>Validación y seguridad de datos</td><td>20%</td></tr><tr><td>Claridad y estética de la interfaz</td><td>15%</td></tr><tr><td>Eficiencia y claridad del código</td><td>15%</td></tr></tbody></table></figure>



<ul class="wp-block-list">
<li>En el <strong><a href="https://steemit.com/desarrolloweb/@frexus/mini-cotizador-web-dinamico">Mini Cotizador</a></strong>, aprenderás a trabajar con relaciones entre tablas, formularios interactivos y generación de documentos. Se recomienda los siguientes criterios para este ejercicio:</li>
</ul>



<figure class="wp-block-table aligncenter"><table class="has-fixed-layout"><tbody><tr><td class="has-text-align-left" data-align="left"><strong>Criterio</strong></td><td><strong>Ponderación</strong></td></tr><tr><td class="has-text-align-left" data-align="left">Correcto diseño de base de datos relacional</td><td>25%</td></tr><tr><td class="has-text-align-left" data-align="left">Funcionamiento completo del CRUD</td><td>25%</td></tr><tr><td class="has-text-align-left" data-align="left">Generación correcta del PDF</td><td>20%</td></tr><tr><td class="has-text-align-left" data-align="left">Interfaz intuitiva y responsiva</td><td>15%</td></tr><tr><td class="has-text-align-left" data-align="left">Limpieza y organización del código</td><td>15%</td></tr></tbody></table></figure>



<p>Ambos retos simulan escenarios reales de trabajo en el desarrollo web profesional.</p>



<p>Estos ejercicios te preparan para enfrentar los desafíos reales del desarrollo web profesional. Combina la creatividad con la lógica, experimenta con nuevas herramientas y demuestra tu talento.</p>



<p><strong>Participa, aprende y reta tus límites</strong>. El conocimiento se fortalece con la práctica y la curiosidad.</p>



<p></p>
<p>La entrada <a href="https://www.frexus.dev/post/programacion-web-bases-de-datos/">Programación Web y el Acceso a Bases de Datos</a> se publicó primero en <a href="https://www.frexus.dev">Frexus</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.frexus.dev/post/programacion-web-bases-de-datos/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4201</post-id>	</item>
		<item>
		<title>Convertir números a letras</title>
		<link>https://www.frexus.dev/post/convertir-numeros-a-letras/</link>
					<comments>https://www.frexus.dev/post/convertir-numeros-a-letras/#respond</comments>
		
		<dc:creator><![CDATA[Alfredo de Jesús Gutiérrez]]></dc:creator>
		<pubDate>Mon, 25 Sep 2023 18:37:00 +0000</pubDate>
				<category><![CDATA[post]]></category>
		<category><![CDATA[numeros a letras]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[script]]></category>
		<guid isPermaLink="false">https://www.frexus.dev/?p=2667</guid>

					<description><![CDATA[<p>Convertir números a letras, suele ser un ejercicio muy peculiar en el tema de la programación, el detalle esta en los primeros 19 números de la numeración ya que a partir del 20 hasta el infinito no es más que la conjugación de estos. A continuación se describe la función que se desarrollo: Código fuente Explicando la función Primero hay que tener en cuenta que la se creo tres grupos de arreglos donde se encuentren los que no son compuestos, las decenas y centenas; el resto de los números son el resultado de la composición o mezcla de estos tres arreglos. Los arreglos son: Cuando se recibe una cantidad la función la procesa, identificando todos los números menores a 20 (los que se encuentran en el primer arreglo). Si esta condición se cumple ( if ($number &#60; 20) ) se valida que la cantidad que se envía no sea igual a cero, de ser así se envía el contenido que tiene el arreglo en la posición de la cantidad dada; así al recibir la cantidad 11, 10, 1 o cualquiera que sea menor a veinte escribirá once, diez, uno o lo que contenga la casilla en esa posición. Luego se usa la condición $numero &#60; 100 para descomponer las decenas y si el número llega a ser menor de 20 se concatena con el llamado a la función usando la recursividad para los unidades y así componer la descripción de la cantidad. Para el caso de las centenas se sigue la misma regla solo que ahora la condición es para cuando $numero &#60; 1000, se tiene el caso de que las cantidades sea 101, 201, que debe escribir un y no uno, para ello se agrego en la posición cero del arreglo numerosHastaDiecinueve, la notación un, que también se utilizará cuando se este en el rango de los millones, se escribirá un millón. Sin esta variante se escribiría uno millón o ciento uno mil. Ejecución del script Se puede apreciar en la imagen 1, el resultado que se tiene al ejecutar el script en el rango de los millones. Mientras en el vídeo 1, se observa como el script puede ser modificado para convertir diferentes tipos de cantidades. Este script permite convertir números a letras hasta el orden de los millones, faltaría agregar las correspondientes líneas para billones, trillones y demás. Si se utilizar en algún sistema de presupuestos o facturación solo hay que cambiar en el contenido uno del array numerosHastaDiesinueve por un, y posteriormente concatenarlo con las palabras &#8220;Pesos M.N.&#8221;. Versión en ingles Código fuente disponible en el github</p>
<p>La entrada <a href="https://www.frexus.dev/post/convertir-numeros-a-letras/">Convertir números a letras</a> se publicó primero en <a href="https://www.frexus.dev">Frexus</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" width="1880" height="1058" src="https://www.frexus.dev/wp-content/uploads/2023/09/pexels-photo-977931.jpeg" alt="convertir números a letras black typewriter" class="wp-image-2671" style="width:579px;height:auto" srcset="https://www.frexus.dev/wp-content/uploads/2023/09/pexels-photo-977931.jpeg 1880w, https://www.frexus.dev/wp-content/uploads/2023/09/pexels-photo-977931-300x169.jpeg 300w, https://www.frexus.dev/wp-content/uploads/2023/09/pexels-photo-977931-1024x576.jpeg 1024w, https://www.frexus.dev/wp-content/uploads/2023/09/pexels-photo-977931-768x432.jpeg 768w, https://www.frexus.dev/wp-content/uploads/2023/09/pexels-photo-977931-1536x864.jpeg 1536w, https://www.frexus.dev/wp-content/uploads/2023/09/pexels-photo-977931-1140x642.jpeg 1140w" sizes="(max-width: 1880px) 100vw, 1880px" /><figcaption class="wp-element-caption">Photo by Dominika Roseclay on <a href="https://www.pexels.com/photo/black-typewriter-977931/">Pexels.com</a></figcaption></figure>
</div>


<p>Convertir números a letras,  suele ser un ejercicio muy peculiar en el tema de la programación, el detalle esta en los primeros 19 números de la numeración ya que a partir del 20 hasta el infinito no es  más que la conjugación de estos. A continuación se describe la función que se desarrollo:</p>



<h3 class="wp-block-heading">Código fuente</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>function convertirNumeroALetras($numero) {
    # arreglo con los nombres de los números del 0 al 19
    $numerosHastaDiecinueve = array(
        0 =&gt; &#39;un&#39;, 1 =&gt; &#39;uno&#39;, 2 =&gt; &#39;dos&#39;, 3 =&gt; &#39;tres&#39;, 4 =&gt; &#39;cuatro&#39;, 5 =&gt; &#39;cinco&#39;,
        6 =&gt; &#39;seis&#39;, 7 =&gt; &#39;siete&#39;, 8 =&gt; &#39;ocho&#39;, 9 =&gt; &#39;nueve&#39;, 10 =&gt; &#39;diez&#39;, 11 =&gt; &#39;once&#39;,
        12 =&gt; &#39;doce&#39;, 13 =&gt; &#39;trece&#39;, 14 =&gt; &#39;catorce&#39;, 15 =&gt; &#39;quince&#39;, 16 =&gt; &#39;dieciséis&#39;,
        17 =&gt; &#39;diecisiete&#39;, 18 =&gt; &#39;dieciocho&#39;, 19 =&gt; &#39;diecinueve&#39;
    );

    # arreglo con los nombres de las decenas
    $decenas = array(
        20 =&gt; &#39;veinte&#39;, 30 =&gt; &#39;treinta&#39;, 40 =&gt; &#39;cuarenta&#39;, 50 =&gt; &#39;cincuenta&#39;,
        60 =&gt; &#39;sesenta&#39;, 70 =&gt; &#39;setenta&#39;, 80 =&gt; &#39;ochenta&#39;, 90 =&gt; &#39;noventa&#39;
    );

    # arreglo con los nombres de las centenas
    $centenas_letras = array(
        100 =&gt; &#39;cien&#39;, 200=&gt; &#39;docientos&#39;, 300=&gt;&#39;trecientos&#39;, 400=&gt;&#39;cuatrocientos&#39;, 500=&gt;&#39;quinientos&#39;,
        600=&gt;&#39;seicientos&#39;, 700=&gt;&#39;setecientos&#39;, 800=&gt;&#39;ochocientos&#39;, 900=&gt;&#39;novecientos&#39;, 1000 =&gt; &#39;mil&#39;
    );


    if ($numero &lt; 20) {
        # Si el número es menor que 20, se busca en el array de números hasta diecinueve
        if($numero == 00){
            #break;
        }else{
            return $numerosHastaDiecinueve[$numero];
        }
    }elseif ($numero &lt; 100 ) {
        # Si el número es menor que 100, se descompone en decenas y unidades
        $decena = floor($numero / 10) * 10;
        $unidad = $numero % 10;
        $letra = $decenas[$decena];
        if ($unidad &gt; 0) {
            $letra .= &#39; y &#39; . $numerosHastaDiecinueve[$unidad];
        }
        return $letra;
    } elseif ($numero &lt; 1000) {
        # Si el número es menor que 1000, se descompone en centenas, decenas y unidades
        $centena = floor($numero / 100);
        $resto = $numero % 100;
        $centena = floor($numero / 100)*100;
        $decena = $numero - $centena;
        $letra = ($numero &lt; 200 && $numero &gt; 100) ? $centenas_letras[$centena].&#39;to &#39;.convertirNumeroALetras($decena) : $centenas_letras[$centena].&#39; &#39;.convertirNumeroALetras($decena);
        return $letra;
    } else {
        # Si el número es mayor o igual a 1000, se descompone en miles, centenas, decenas y unidades
        $millar = floor($numero / 1000);
        $resto = $numero % 1000;
        $letra = $millar == 1 ? $centenas_letras[1000] : convertirNumeroALetras($millar) . &#39; mil&#39;;
        # si el número es mayor de 100 y menor a los 102, ciento un mil ... y no ciento uno mil...
        if( ($millar &gt;100 && $millar &lt;102)){
            $letra = $centenas_letras[$millar-1].&#39;to &#39;.$numerosHastaDiecinueve[0].&#39; mil &#39;;
        }
        # validaciones para los 201, 301, 401, ... 901 los docientos ... un mil 
        if(($millar &gt; 200 && $millar &lt; 202) || ($millar &gt; 300 && $millar &lt; 302) || ($millar &gt; 400 && $millar &lt; 402) || ($millar &gt; 500 && $millar &lt; 502) || ($millar &gt; 600 && $millar &lt; 602) || ($millar &gt; 700 && $millar &lt; 702) || ($millar &gt; 800 && $millar &lt; 802) || ($millar &gt; 900 && $millar &lt; 902)){
            $letra = $centenas_letras[$millar-1].&#39; &#39;.$numerosHastaDiecinueve[0].&#39; mil &#39;;
        }
        if ($resto &gt; 0) {
            $letra .= &#39; &#39; . convertirNumeroALetras($resto);
        }
       # si el número es menor o igual a 1&#39;000,000, se descompone en los millares, miles, centenas, decenas y unidades.
        if ($numero == 1000000){
            $letra =  $numerosHastaDiecinueve[0].&#39; millón&#39;;
        }elseif ($numero &gt; 1000000){
            $millon = floor($numero / 1000000);
            $centimas = $numero - (1000000*$millon);
            if ($millon == 1){
                $letra = $numerosHastaDiecinueve[0].&#39; millón &#39;.convertirNumeroALetras($centimas);
            }else{
                $letra = convertirNumeroALetras($millon).&#39; millones &#39;.convertirNumeroALetras($centimas);
                #$letra = $centimas;
            }
        }
        return $letra;
    } 
}</code></pre></div>



<h3 class="wp-block-heading">Explicando la función</h3>



<p>Primero hay que tener en cuenta que la  se creo tres grupos de arreglos donde se encuentren los que no son compuestos, las decenas y centenas; el resto de los números son el resultado de la composición o mezcla de estos tres arreglos. Los arreglos son:</p>



<ul class="wp-block-list">
<li><strong>numerosHastaDiecinueve</strong>: Este arreglo contiene todos los números desde el uno hasta el 19, también cuenta con una posición donde esta la palabra &#8220;<strong>un</strong>&#8221; este es usado para referirse a las cantidades del millón, es decir, no suele escribirse <strong>uno millón</strong>, sino <strong>un millón</strong>.</li>



<li><strong>decenas</strong>: Este arreglo contiene todas las descripciones que se pueda tener en el orden de las decenas.</li>



<li><strong>centenas_letras</strong>: Este arreglo contiene las descripciones que se puede tener en el orden de las centenas.</li>
</ul>



<p>Cuando se recibe una cantidad la función la procesa, identificando todos los números menores a 20 (los que se encuentran en el primer arreglo). Si esta condición se cumple ( <code>if ($number &lt; 20)</code> ) se valida que la cantidad que se envía no sea igual a cero, de ser así se envía el contenido que tiene el arreglo en la posición de la cantidad dada; así al recibir la cantidad 11, 10, 1 o cualquiera que sea menor a veinte escribirá once, diez, uno o lo que contenga la casilla en esa posición. </p>



<p>Luego se usa la condición <code>$numero &lt; 100</code> para descomponer las decenas y si el número llega a ser menor de 20 se concatena con el llamado a la función usando la recursividad para los unidades y así componer la descripción de la cantidad.</p>



<p>Para el caso de las centenas se sigue la misma regla solo que ahora la condición es para cuando <code>$numero &lt; 1000</code>,  se tiene el caso de que las cantidades sea 101, 201, que debe escribir un y no uno, para ello se agrego en la posición cero del arreglo <strong>numerosHastaDiecinueve</strong>, la notación un, que también se utilizará cuando se este en el rango de los millones, se escribirá un millón. Sin esta variante se escribiría uno millón o ciento uno mil.</p>



<h3 class="wp-block-heading">Ejecución del script</h3>



<figure class="wp-block-embed is-type-rich is-provider-tumblr wp-block-embed-tumblr"><div class="wp-block-embed__wrapper">
<div class="tumblr-post" data-href="https://embed.tumblr.com/embed/post/t:d0KmrxJkElKB8EsGh2qW4w/748577693187129344/v2" data-did="ef9e1bb251c3b993895a116e6b6c7d0d05bf414b"  ><a href="https://www.tumblr.com/ajgutierr3z/748577693187129344/convirtiendo-n%C3%BAmeros-a-letras">https://www.tumblr.com/ajgutierr3z/748577693187129344/convirtiendo-n%C3%BAmeros-a-letras</a></div><script async src="https://assets.tumblr.com/post.js?_v=38df9a6ca7436e6ca1b851b0543b9f51"></script>
</div><figcaption class="wp-element-caption">Imagen 1. Conversión de números a letras. Fuente: tumblr.com</figcaption></figure>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Convertir Números a letras" width="960" height="720" src="https://www.youtube.com/embed/kRDpKJnR_sY?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div><figcaption class="wp-element-caption">Vídeo 1. Se muestra la ejecución del script. Fuente: youtube.com</figcaption></figure>



<p>Se puede apreciar en la imagen 1, el resultado que se tiene al ejecutar el script en el rango de los millones. Mientras en el vídeo 1, se observa como el script puede ser modificado para convertir diferentes tipos de cantidades.</p>



<p>Este script permite convertir números a letras hasta el orden de los millones, faltaría agregar las correspondientes líneas para billones, trillones y demás. Si se utilizar en algún sistema de presupuestos o facturación solo hay que cambiar en el contenido <strong>uno</strong> del array <strong>numerosHastaDiesinueve</strong> por <strong>un</strong>, y posteriormente concatenarlo con las palabras &#8220;Pesos M.N.&#8221;.</p>



<p><strong>Versión en <a href="https://medium.com/@ajgutierrez/convert-numbers-to-letters-dd7dc8b433fc" target="_blank" rel="noreferrer noopener">ingles</a></strong> </p>



<p><strong>Código fuente disponible en</strong> el <a href="https://github.com/ajgutierr3z/Numeros_Letras" target="_blank" rel="noreferrer noopener">github</a></p>
<p>La entrada <a href="https://www.frexus.dev/post/convertir-numeros-a-letras/">Convertir números a letras</a> se publicó primero en <a href="https://www.frexus.dev">Frexus</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.frexus.dev/post/convertir-numeros-a-letras/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2667</post-id>	</item>
		<item>
		<title>Y un buen día se olvida</title>
		<link>https://www.frexus.dev/articulo/y-un-buen-dia-se-olvida/</link>
					<comments>https://www.frexus.dev/articulo/y-un-buen-dia-se-olvida/#respond</comments>
		
		<dc:creator><![CDATA[Alfredo de Jesús Gutiérrez]]></dc:creator>
		<pubDate>Tue, 28 Jun 2022 12:03:00 +0000</pubDate>
				<category><![CDATA[articulo]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[MariaDB]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Servidor FTP]]></category>
		<category><![CDATA[Servidor Web]]></category>
		<guid isPermaLink="false">https://ajgutierrez.com.mx/?p=1125</guid>

					<description><![CDATA[<p>Un buen día se olvida las partes básica de la instalación de un servidor web un clásico de un servidor web con apache, con php y mariadb; claro no deja de faltar el phpmyadmin. Y sin el servicio ftp que eso requiere. Y resulta que al querer enseñar unas instalaciones básicas se me han olvidado los comandos, y veo que en mi bitácora de apuntes no tengo nada al respecto por lo que bajo el contexto de que se tiene acceso a una terminal se dejaran los comandos para la creación de un servidor web clásico. Servidor web apache. Para su instalación se escribe el siguiente comando: Para comprobar la instalación de apache, hay que obtener la ip del equipo en el que se ha instalado y esa ip colocarlo en el navegador. Si fue en tu propio equipo solo con escribir localhost se mostrará una página, esta se encuentra en la ruta /etc/var/www/html en el se podrá observar un fichero index.html que es el que se visualiza en el navegador. En caso que lo hayas instalado en un equipo o una raspberry y se este accediendo vía ssh. Con la dirección ip en el navegador se mostrará el index de apache. Instalar PHP Para la instalación de php no hace mas que escribir el siguiente comando: Instalará la última versión estable que se encuentre en los repositorios. Para validar que se ha instalado correctamente el lenguaje de scripting php, con que se escriba un archivo con nombre phpinfo.php en la ruta /etc/var/www/html/ y debe de contener el siguiente código: Para visualizar el script con que se escriba en el navegador localhost/phpinfo.php se mostrará todos los detalles de la instalación de php. Se debe de sustituir el localhost por la dirección ip del servidor en que se ha instalado. Es posible que se presente algún detalle de permisos en el momento de escribir el archivo phpinfo.php, y es porque el único que puede escribir en esa ruta (/etc/var/www/html) es el super usuario, por lo que se tiene dos opciones Crear el archivo como super usuario, esto se logra colocando la palabra sudo al fichero que se va a crear. Brindar los privilegios de lectura, escritura y ejecución a todos los usuarios o al usuario en particular para que pueda escribir y ejecutar sin detalles, eso se solventa con la ejecución del comando: sudo chmod -R 777 html/ no es lo ideal estos permisos en producción. Instalar MariaDB Esto se logra con ejecutar el comando: Posteriormente hay que ejecutar el comando de configuración de mysql con la siguiente instrucción Se sigue el asistente y se responde a las preguntas y listo Instalar phpmyadmin Con la ejecución del siguiente comando se logra: Pedirá la contraseña de root, la que se coloco en la instalación de mariadb, y preguntará si se usara apache2 como servidor web, para esta guía se deja marcado apache2. Instalar servicio ftp Esta parte super fácil se debe de ejecutar lo siguiente: Después de que se ejecute la instalación hay que ir al fichero de configuración y validar que este activo (sin que este comentado) las siguientes lineas: El fichero de configuración del servicio ftp se encuentra en la siguiente ruta: /etc/vsftpd.conf no olvidar que debe de abrirse con el comando sudo quedando la orden de la siguiente manera: Finalmente para que se puedan enviar ficheros al servidor web pues simple al cliente ftp que se use se le proporciona la dirección ip, el usuario y la contraseña, regularmente estas credenciales son con los que se autentica en el equipo en donde se ha realizado la instalación.</p>
<p>La entrada <a href="https://www.frexus.dev/articulo/y-un-buen-dia-se-olvida/">Y un buen día se olvida</a> se publicó primero en <a href="https://www.frexus.dev">Frexus</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Un buen día se olvida las partes básica de la instalación de un servidor web un clásico de un servidor web con apache, con php y mariadb; claro no deja de faltar el phpmyadmin. Y sin el servicio ftp que eso requiere. </p>



<p>Y resulta que al querer enseñar unas instalaciones básicas se me han olvidado los comandos, y veo que en mi bitácora de apuntes no tengo nada al respecto por lo que bajo el contexto de que se tiene acceso a una terminal se dejaran los comandos para la creación de un servidor web clásico.</p>



<h2 class="wp-block-heading">Servidor web apache.</h2>



<p>Para su instalación se escribe el siguiente comando:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
sudo apt install apache2 -y
</pre></div>


<p>Para comprobar la instalación de apache, hay que obtener la ip del equipo en el que se ha instalado y esa ip colocarlo en el navegador. Si fue en tu propio equipo solo con escribir <strong>localhost</strong> se mostrará una página, esta se encuentra en la ruta <strong>/etc/var/www/html</strong> en el se podrá observar un fichero index.html que es el que se visualiza en el navegador. En caso que lo hayas instalado en un equipo o una raspberry y se este accediendo vía ssh. Con la dirección ip en el navegador se mostrará el index de apache.</p>



<h2 class="wp-block-heading">Instalar PHP</h2>



<p>Para la instalación de php no hace mas que escribir el siguiente comando:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
sudo apt install php
</pre></div>


<p>Instalará la última versión estable que se encuentre en los repositorios. Para validar que se ha instalado correctamente el lenguaje de scripting php, con que se escriba un archivo con nombre <strong>phpinfo.php</strong> en la ruta <strong>/etc/var/www/html/</strong> y debe de contener el siguiente código:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: php; title: ; notranslate">
&lt;?php
    phpinfo();
?&gt;
</pre></div>


<p>Para visualizar el script con que se escriba en el navegador <strong>localhost/phpinfo.php</strong> se mostrará todos los detalles de la instalación de php. Se debe de sustituir el <strong>localhost</strong> por la dirección <strong>ip</strong> del servidor en que se ha instalado.</p>



<p>Es posible que se presente algún detalle de permisos en el momento de escribir el archivo <strong>phpinfo.php</strong>, y es porque el único que puede escribir en esa ruta (/etc/var/www/html) es el super usuario, por lo que se tiene dos opciones</p>



<ol class="wp-block-list"><li>Crear el archivo como super usuario, esto se logra colocando la palabra <strong>sudo</strong> al fichero que se va a crear.</li><li>Brindar los privilegios de lectura, escritura y ejecución a todos los usuarios o al usuario en particular para que pueda escribir y ejecutar sin detalles, eso se solventa con la ejecución del comando: <strong> sudo chmod -R 777 html/</strong> no es lo ideal estos permisos en producción. </li></ol>



<h2 class="wp-block-heading">Instalar MariaDB</h2>



<p>Esto se logra con ejecutar el comando:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
sudo apt install mariadb-server php-mysql
</pre></div>


<p>Posteriormente hay que ejecutar el comando de configuración de mysql con la siguiente instrucción</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
sudo mysql_secure_installation
</pre></div>


<p>Se sigue el asistente y se responde a las preguntas y listo</p>



<h2 class="wp-block-heading">Instalar phpmyadmin</h2>



<p>Con la ejecución del siguiente comando se logra:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
sudo apt install phpmyadmin
</pre></div>


<p>Pedirá la contraseña de root, la que se coloco en la instalación de mariadb, y preguntará si se usara apache2 como servidor web, para esta guía se deja marcado apache2.</p>



<h2 class="wp-block-heading">Instalar servicio ftp</h2>



<p>Esta parte super fácil se debe de ejecutar lo siguiente:</p>



<p></p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
sudo apt install vsftpd
</pre></div>


<p>Después de que se ejecute la instalación hay que ir al fichero de configuración y validar que este activo (sin que este comentado) las siguientes lineas:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
local_enable=YES
write_enable=YES
</pre></div>


<p>El fichero de configuración del servicio ftp se encuentra en la siguiente ruta: <strong>/etc/vsftpd.conf</strong> no olvidar que debe de abrirse con el comando <strong>sudo</strong> quedando la orden de la siguiente manera:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
sudo nano /etc/vsftpd.conf
</pre></div>


<p>Finalmente para que se puedan enviar ficheros al servidor web pues simple al cliente ftp que se use se le proporciona la dirección ip, el usuario y la contraseña, regularmente estas credenciales son con los que se autentica en el equipo en donde se ha realizado la instalación.</p>



<p></p>
<p>La entrada <a href="https://www.frexus.dev/articulo/y-un-buen-dia-se-olvida/">Y un buen día se olvida</a> se publicó primero en <a href="https://www.frexus.dev">Frexus</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.frexus.dev/articulo/y-un-buen-dia-se-olvida/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1125</post-id>	</item>
		<item>
		<title>Docker, sus manías y encantos.</title>
		<link>https://www.frexus.dev/post/docker-sus-manias-y-encantos/</link>
					<comments>https://www.frexus.dev/post/docker-sus-manias-y-encantos/#respond</comments>
		
		<dc:creator><![CDATA[Alfredo de Jesús Gutiérrez]]></dc:creator>
		<pubDate>Fri, 03 Jun 2022 04:54:30 +0000</pubDate>
				<category><![CDATA[post]]></category>
		<category><![CDATA[Ambiente]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[MariaDB]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[PhpMyAdmin]]></category>
		<category><![CDATA[Web]]></category>
		<guid isPermaLink="false">https://ajgutierrez.com.mx/?p=999</guid>

					<description><![CDATA[<p>Esta entrada será dedicada a docker uno de los contenedores más utilizados en el mercado. Tiene sus ventajas, en una ocasión alguien me había comentado sobre los contenedores y lo maravilloso que había permitido crear un ambiente de desarrollo. La verdad siempre me abstuve de usarlo hasta ahora. Regularmente siempre se es partidario de instalar todo directamente en el equipo, a lo mucho virtualizar un window por cuestiones de ofimática en donde no exista alguna compatibilidad con las diversas alternativas. Sin embargo cuando un cliente te solicita crear el ambiente clásico de desarrollo en una macbook air con chip M1 y su actualización 12 del sistema operativo, te sueles topar en que muchas cosas cambian y que lo mejor en todo caso es correr o emular (en el mejor de los términos) el ambiente dentro de la M1. Y es ahí donde entra docker. Después de varias horas invertidas en el aprendizaje de conceptos y demás utilidades. Se pudo montar un ambiente clásico web. Lo que se puede apreciar es que cuenta con una aplicación de escritorio para poder descargar imágenes, montar los contenedores y hacer uso de microservicios (claro en la aplicación que se vaya a crear). Y lo que más agrado, fue que se puede hacer lo mismo desde una terminal, me gusto que se puede emular las partes básicas de un sistema operativo (alpine, debian, ubuntu entre otros). Otra cosa cosa que encanto fue la fácil que llega ser montar, crear tu propia imagen, usarla, eliminarla; y como en su momento me lo comentaron &#8220;el consumo de recurso&#8221; es mínimo. Al calce dejo el script con el que se monto el ambiente clásico, (claro por clásico se hace referencia a un servidor web -apache- un lenguaje de programación -php- el gestor de base de datos -mariadb- y no puede faltar la interfaz gráfica -phpmyadmin-). ¿Qué es lo que hace? Bueno, pues crea tres contenedores uno web, donde esta apache y php, llamado www. Otro contenedor llamado db donde estará la instancia de mariadb y la contraseña del root estará vacía. El contenedor número tres tiene de nombre phpmyadmin y si en él se encuentra solamente la interfaz gráfica que gestiona todo en maria db, esté estará disponible desde el puerto 81 del localhost y esta vinculado con el contenedor db. Y se crea un volumen llamada db-data donde todos los contenedores estarán convergiendo. ¿Cómo funciona? Primero el código anterior debe de estar guardado en un fichero con nombre &#8220;docker-compose.yml&#8220;, se copia tal cual y luego se debe de ejecutar el comando: Después ya solo escribes en el navegador localhost:81 y se mostrará la página de acceso de phpmyadmin. Si escribes localhost se mostrará la página de apache. Y lo interesante es que se crea una carpeta con el nombre de public y dentro de ella es donde se colocarán todos los proyectos que se quieran hacer usando la tecnología clásica apache + php + mariadb + docker. ¿Qué se puede hacer? Aún no se si pueda ser posible emular de tal grado una ofimática de Microsoft en docker aunque solo sería para los que usamos distribuciones basadas en linux. Aun falta por aprender más cosas. como construir tu propia imagen de docker, la ventaja es que si formateas llevas esa misma imagen a otro equipo la &#8220;instalas&#8221; y se tiene de nuevo el ambiente creado para desarrollar.</p>
<p>La entrada <a href="https://www.frexus.dev/post/docker-sus-manias-y-encantos/">Docker, sus manías y encantos.</a> se publicó primero en <a href="https://www.frexus.dev">Frexus</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Esta entrada será dedicada a docker uno de los contenedores más utilizados en el mercado. Tiene sus ventajas, en una ocasión alguien me había comentado sobre los contenedores y lo maravilloso que había permitido crear un ambiente de desarrollo. La verdad siempre me abstuve de usarlo hasta ahora.</p>



<p>Regularmente siempre se es partidario de instalar todo directamente en el equipo, a lo mucho virtualizar un window por cuestiones de ofimática en donde no exista alguna compatibilidad con las diversas alternativas.</p>



<p>Sin embargo cuando un cliente te solicita crear el ambiente clásico de desarrollo en una macbook air con chip M1 y su actualización 12 del sistema operativo, te sueles topar en que muchas cosas cambian y que lo mejor en todo caso es correr o emular (en el mejor de los términos) el ambiente dentro de la M1. Y es ahí donde entra docker.</p>



<p>Después de varias horas invertidas en el aprendizaje de conceptos y demás utilidades. Se pudo montar un ambiente clásico web. Lo que se puede apreciar es que cuenta con una aplicación de escritorio para poder descargar imágenes, montar los contenedores y hacer uso de microservicios (claro en la aplicación que se vaya a crear).</p>



<p>Y lo que más agrado, fue que se puede hacer lo mismo desde una terminal, me gusto que se puede emular las partes básicas de un sistema operativo (alpine, debian, ubuntu entre otros). Otra cosa cosa que encanto fue la fácil que llega ser montar, crear tu propia imagen, usarla, eliminarla; y como en su momento me lo comentaron &#8220;el consumo de recurso&#8221; es mínimo. </p>



<p>Al calce dejo el script con el que se monto el ambiente clásico, (claro por clásico se hace referencia a un servidor web -apache- un lenguaje de programación -php- el gestor de base de datos -mariadb- y no puede faltar la interfaz gráfica -phpmyadmin-). </p>



<p></p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
version: &quot;2&quot;
services:
    www:
        container_name: www
        image: php:7.2-apache
        restart: always
        ports:
            - &quot;80:80&quot;
        volumes:
            - ../public/:/var/www/html
        links:
            - db:db
        networks:
            - default
    db:
        container_name: db
        image: mariadb:latest
        restart: always
        ports:
            - &quot;3307:3306&quot;
        volumes:
           - db-data:/var/lib/mysql
        environment:
            MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
            
    phpmyadmin:
        container_name: phpmyadmin
        image: phpmyadmin/phpmyadmin
        restart: always
        links:
            - db:db
        ports:
            - 81:80
volumes:
    db-data:
</pre></div>


<h2 class="wp-block-heading">¿Qué es lo que hace?</h2>



<p>Bueno, pues crea tres contenedores uno web, donde esta apache y php, llamado www. Otro contenedor llamado db donde estará la instancia de mariadb y la contraseña del root estará vacía. El contenedor número tres tiene de nombre phpmyadmin y si en él se encuentra solamente la interfaz gráfica que gestiona todo en maria db, esté estará disponible desde el puerto 81 del localhost y esta vinculado con el contenedor db.  Y se crea un volumen llamada db-data donde todos los contenedores estarán convergiendo.</p>



<h2 class="wp-block-heading">¿Cómo funciona?</h2>



<p><strong>Primero</strong> el código anterior debe de estar guardado en un fichero con nombre &#8220;<strong>docker-compose.yml</strong>&#8220;, se copia tal cual y <strong>luego</strong> se debe de ejecutar el comando:</p>



<pre class="wp-block-code"><code>% docker-compose up -d</code></pre>



<p><strong>Después</strong> ya solo escribes en el navegador <strong>localhost:81</strong> y se mostrará la página de acceso de phpmyadmin. Si escribes <strong>localhost</strong> se mostrará la página de apache. Y lo interesante es que se crea una carpeta con el nombre de <strong>public</strong> y dentro de ella es donde se colocarán todos los proyectos que se quieran hacer usando la tecnología clásica apache + php + mariadb + docker.</p>



<h2 class="wp-block-heading">¿Qué se puede hacer?</h2>



<p>Aún no se si pueda ser posible emular de tal grado una ofimática de Microsoft en docker aunque solo sería para los que usamos distribuciones basadas en linux. Aun falta por aprender más cosas. como construir tu propia imagen de docker, la ventaja es que si formateas llevas esa misma imagen a otro equipo la &#8220;instalas&#8221; y se tiene de nuevo el ambiente creado para desarrollar.</p>
<p>La entrada <a href="https://www.frexus.dev/post/docker-sus-manias-y-encantos/">Docker, sus manías y encantos.</a> se publicó primero en <a href="https://www.frexus.dev">Frexus</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.frexus.dev/post/docker-sus-manias-y-encantos/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">999</post-id>	</item>
	</channel>
</rss>
