<?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>Emanuel Paxtian</title>
	<atom:link href="https://emanuelpaxtian.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>https://emanuelpaxtian.com/blog</link>
	<description></description>
	<lastBuildDate>Tue, 05 Aug 2025 05:04:36 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>10 Trucos Pocos Conocidos de Sublime Text para Programadores (PHP y Más)</title>
		<link>https://emanuelpaxtian.com/blog/10-trucos-pocos-conocidos-de-sublime-text-para-programadores-php-y-mas/</link>
		
		<dc:creator><![CDATA[Psoluciones]]></dc:creator>
		<pubDate>Tue, 05 Aug 2025 05:04:36 +0000</pubDate>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[Recursos]]></category>
		<guid isPermaLink="false">https://www.emanuelpaxtian.com/?p=1162</guid>

					<description><![CDATA[Sublime Text es uno de los editores más rápidos y personalizables para desarrolladores. Pero más allá de lo básico (como&#160;Ctrl+P&#160;o&#160;multi-cursor), hay funciones ocultas que pueden&#160;ahorrarte horas de trabajo. Aquí tienes&#160;10&#8230;]]></description>
										<content:encoded><![CDATA[
<p>Sublime Text es uno de los editores más rápidos y personalizables para desarrolladores. Pero más allá de lo básico (como&nbsp;<strong>Ctrl+P</strong>&nbsp;o&nbsp;<strong>multi-cursor</strong>), hay funciones ocultas que pueden&nbsp;<strong>ahorrarte horas de trabajo</strong>.</p>



<p>Aquí tienes&nbsp;<strong>10 trucos avanzados</strong>&nbsp;que todo programador PHP (y otros lenguajes) debería conocer.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>1. Edición Rápida en Múltiples Archivos con &#8220;Find in Files&#8221;</strong></h2>



<p>¿Necesitas cambiar una función en varios archivos a la vez?</p>



<ul class="wp-block-list">
<li><strong><code>Ctrl + Shift + F</code></strong> (Windows/Linux) o <strong><code>Cmd + Shift + F</code></strong> (Mac).</li>



<li>Busca un término (ej: <code>function getUser</code>).</li>



<li><strong>¡Puedes editar directamente en los resultados!</strong></li>
</ul>



<p>👉&nbsp;<strong>Ejemplo PHP</strong>: Cambiar&nbsp;<code>mysql_query</code>&nbsp;a&nbsp;<code>PDO</code>&nbsp;en todo un proyecto.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>2. Selección Rápida de Bloques de Código</strong></h2>



<p>En lugar de seleccionar línea por línea:</p>



<ul class="wp-block-list">
<li><strong><code>Ctrl + Shift + M</code></strong> → Selecciona contenido entre paréntesis <code>()</code>, llaves <code>{}</code> o corchetes <code>[]</code>.</li>



<li><strong><code>Ctrl + Shift + J</code></strong> → Selecciona todo el contenido de un bloque (ideal para funciones PHP).</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>3. Reordenar Líneas con Drag &amp; Drop</strong></h2>



<p>¿Quieres mover una función o línea sin cortar y pegar?</p>



<ul class="wp-block-list">
<li><strong>Mantén <code>Ctrl + Shift</code></strong> y arrastra la línea (o bloque) hacia arriba/abajo.</li>



<li><strong>Útil para reorganizar métodos en una clase PHP.</strong></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>4. Comandos Rápidos con la Palabra Clave</strong></h2>



<p>Olvídate de buscar en menús:</p>



<ul class="wp-block-list">
<li><strong><code>Ctrl + P</code></strong> → Escribe <code>@</code> para saltar a funciones/métodos (útil en archivos PHP grandes).</li>



<li><strong><code>Ctrl + R</code></strong> → Lista todas las funciones/clases del archivo actual.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>5. Editar HTML/XML con &#8220;Emmet&#8221; (Ahorra Tiempo en Vistas PHP)</strong></h2>



<p>Sublime incluye&nbsp;<strong>Emmet</strong>&nbsp;para generar código HTML rápido:</p>



<ul class="wp-block-list">
<li>Escribe <code>div.container>ul>li*5</code> y presiona <strong><code>Tab</code></strong> → Genera una lista con 5 elementos.</li>



<li><strong>Funciona en archivos PHP con bloques HTML.</strong></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>6. Dividir la Pantalla en Columnas (Sin Plugins)</strong></h2>



<p>¿Quieres comparar dos archivos o ver código y resultado?</p>



<ul class="wp-block-list">
<li><strong><code>Alt + Shift + 2</code></strong> → Divide en 2 columnas.</li>



<li><strong><code>Alt + Shift + 1</code></strong> → Vuelve a una sola vista.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>7. Expandir/Contraer Bloques de Código Rápidamente</strong></h2>



<ul class="wp-block-list">
<li><strong><code>Ctrl + K + 1</code></strong> → Contraer todos los bloques de nivel 1 (útil para ocultar funciones PHP).</li>



<li><strong><code>Ctrl + K + J</code></strong> → Expande todo.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>8. Buscar y Reemplazar con Expresiones Regulares</strong></h2>



<p>¿Necesitas refactorizar código masivamente?</p>



<ul class="wp-block-list">
<li><strong><code>Ctrl + H</code></strong> → Activa Regex (<strong><code>.*</code></strong>).</li>



<li><strong>Ejemplo PHP</strong>: Cambiar <code>$var = old_function();</code> a <code>$var = new_function();</code> en todo el proyecto.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>9. Snippets Personalizados para PHP</strong></h2>



<p>Crea tus propios atajos para código repetitivo:</p>



<ol start="1" class="wp-block-list">
<li><strong><code>Tools > Developer > New Snippet</code></strong></li>



<li>Ejemplo para un <code>foreach</code> en PHP:</li>
</ol>



<p>xml</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: xml; title: ; notranslate">
&lt;snippet&gt;
    &lt;content&gt;&lt;!&#x5B;CDATA&#x5B;
foreach ($${1:array} as $${2:key} =&gt; $${3:value}) {
    ${4:// code}
}
]]&gt;&lt;/content&gt;
    &lt;tabTrigger&gt;foreach&lt;/tabTrigger&gt;
&lt;/snippet&gt;
</pre></div>


<ul class="wp-block-list">
<li>Al escribir <code>foreach</code> + <strong><code>Tab</code></strong>, se autocompletará.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>10. Navegación por Pestañas sin Mouse</strong></h2>



<ul class="wp-block-list">
<li><strong><code>Ctrl + Tab</code></strong> → Cambia entre pestañas recientes.</li>



<li><strong><code>Ctrl + PgUp/PgDown</code></strong> → Navega entre pestañas en orden.</li>
</ul>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Validación y Sanitización de Datos en PHP con filter_var()</title>
		<link>https://emanuelpaxtian.com/blog/validacion-y-sanitizacion-de-datos-en-php-con-filter_var/</link>
		
		<dc:creator><![CDATA[Psoluciones]]></dc:creator>
		<pubDate>Tue, 05 Aug 2025 04:41:12 +0000</pubDate>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[Seguridad]]></category>
		<guid isPermaLink="false">https://www.emanuelpaxtian.com/?p=1152</guid>

					<description><![CDATA[En PHP, la seguridad de los datos es crucial para prevenir vulnerabilidades como&#160;SQL Injection,&#160;XSS (Cross-Site Scripting)&#160;y otros ataques comunes. Una de las formas más eficientes y nativas de validar y&#8230;]]></description>
										<content:encoded><![CDATA[
<p>En PHP, la seguridad de los datos es crucial para prevenir vulnerabilidades como&nbsp;<strong>SQL Injection</strong>,&nbsp;<strong>XSS (Cross-Site Scripting)</strong>&nbsp;y otros ataques comunes. Una de las formas más eficientes y nativas de validar y sanitizar datos es usando la función&nbsp;<strong><code>filter_var()</code></strong>.</p>



<p>En este artículo, aprenderás:<br>✅&nbsp;<strong>Qué es&nbsp;<code>filter_var()</code>&nbsp;y por qué usarlo</strong><br>✅&nbsp;<strong>Diferencias entre validación y sanitización</strong><br>✅&nbsp;<strong>Filtros más útiles para formularios, emails y URLs</strong><br>✅&nbsp;<strong>Ejemplos prácticos de uso</strong></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>1. ¿Qué es&nbsp;<code>filter_var()</code>?</strong></h2>



<p><code>filter_var()</code>&nbsp;es una función de PHP que permite&nbsp;<strong>validar</strong>&nbsp;y&nbsp;<strong>sanitizar</strong>&nbsp;datos aplicando filtros predefinidos. Es más seguro que funciones obsoletas como&nbsp;<code>htmlspecialchars()</code>&nbsp;o expresiones regulares complejas en algunos casos.</p>



<h3 class="wp-block-heading"><strong>Sintaxis básica:</strong></h3>



<p>php</p>



<pre class="wp-block-preformatted">filter_var($valor, $filtro, $opciones);</pre>



<ul class="wp-block-list">
<li><strong><code>$valor</code></strong>: Dato a filtrar (ej:&nbsp;<code>$_POST['email']</code>).</li>



<li><strong><code>$filtro</code></strong>: Tipo de filtro a aplicar (ej:&nbsp;<code>FILTER_VALIDATE_EMAIL</code>).</li>



<li><strong><code>$opciones</code></strong>&nbsp;(opcional): Configuraciones adicionales.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>2. Validación vs. Sanitización</strong></h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th><strong>Validación</strong></th><th><strong>Sanitización</strong></th></tr></thead><tbody><tr><td>Verifica si un dato cumple ciertas reglas (ej: un email válido).</td><td>Limpia el dato, eliminando caracteres peligrosos.</td></tr><tr><td>Devuelve&nbsp;<code>false</code>&nbsp;si no es válido.</td><td>Devuelve el dato modificado.</td></tr><tr><td>Ej:&nbsp;<code>FILTER_VALIDATE_EMAIL</code></td><td>Ej:&nbsp;<code>FILTER_SANITIZE_STRING</code></td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>3. Filtros Más Útiles</strong></h2>



<h3 class="wp-block-heading"><strong>Validación de datos comunes</strong></h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Filtro</th><th>Descripción</th><th>Ejemplo</th></tr></thead><tbody><tr><td><code>FILTER_VALIDATE_EMAIL</code></td><td>Verifica si es un email válido.</td><td><code>filter_var("user@example.com", FILTER_VALIDATE_EMAIL)</code></td></tr><tr><td><code>FILTER_VALIDATE_URL</code></td><td>Comprueba si es una URL válida.</td><td><code>filter_var("https://example.com", FILTER_VALIDATE_URL)</code></td></tr><tr><td><code>FILTER_VALIDATE_IP</code></td><td>Valida una dirección IPv4 o IPv6.</td><td><code>filter_var("192.168.1.1", FILTER_VALIDATE_IP)</code></td></tr><tr><td><code>FILTER_VALIDATE_INT</code></td><td>Verifica si es un número entero.</td><td><code>filter_var(42, FILTER_VALIDATE_INT)</code></td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><strong>Sanitización de datos peligrosos</strong></h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Filtro</th><th>Descripción</th><th>Ejemplo</th></tr></thead><tbody><tr><td><code>FILTER_SANITIZE_STRING</code>&nbsp;(OBSOLETO en PHP 8.1+)</td><td>Elimina etiquetas HTML.</td><td><code>filter_var("&lt;script&gt;alert('XSS')&lt;/script&gt;", FILTER_SANITIZE_SPECIAL_CHARS)</code></td></tr><tr><td><code>FILTER_SANITIZE_EMAIL</code></td><td>Elimina caracteres no válidos en emails.</td><td><code>filter_var("user@&lt;script&gt;example.com", FILTER_SANITIZE_EMAIL)</code></td></tr><tr><td><code>FILTER_SANITIZE_URL</code></td><td>Limpia URLs eliminando caracteres peligrosos.</td><td><code>filter_var("https://&lt;script&gt;example.com", FILTER_SANITIZE_URL)</code></td></tr><tr><td><code>FILTER_SANITIZE_NUMBER_INT</code></td><td>Solo deja números enteros.</td><td><code>filter_var("a1b2c3", FILTER_SANITIZE_NUMBER_INT)</code>&nbsp;→&nbsp;<code>123</code></td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>4. Ejemplos Prácticos</strong></h2>



<h3 class="wp-block-heading"><strong>Validar un formulario de contacto</strong></h3>



<p>php</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: php; title: ; notranslate">
$email = $_POST&#x5B;'email'] ?? '';
$url = $_POST&#x5B;'website'] ?? '';
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    echo "El email no es válido";
    } elseif (!filter_var($url, FILTER_VALIDATE_URL)) {
    echo "La URL no es válida";
    } else {
    echo "Datos correctos, procesando...";
    }
</pre></div>


<h3 class="wp-block-heading"><strong>Sanitizar una entrada para evitar XSS</strong></h3>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: php; title: ; notranslate">
$comentario = $_POST&#x5B;'comentario'] ?? '';
$comentario_limpio = filter_var($comentario, FILTER_SANITIZE_SPECIAL_CHARS);

echo $comentario_limpio; // Convierte &lt;script&gt; en &amp;lt;script&amp;gt;

</pre></div>


<h3 class="wp-block-heading"><strong>Validar y sanitizar un número entero</strong></h3>



<p>php</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: php; title: ; notranslate">
$edad = $_POST&#x5B;'edad'] ?? '';
$edad_limpia = filter_var($edad, FILTER_SANITIZE_NUMBER_INT);
if (filter_var($edad_limpia, FILTER_VALIDATE_INT, &#x5B;"options" =&gt; &#x5B;"min_range" =&gt; 18, "max_range" =&gt; 99]])) {
    echo "Edad válida: $edad_limpia";
    } else {
    echo "Edad debe ser entre 18 y 99";
    }
</pre></div>


<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><strong>5. Conclusión</strong></h2>



<p>✅&nbsp;<strong><code>filter_var()</code>&nbsp;es una herramienta poderosa para validar y sanitizar datos.</strong><br>✅&nbsp;<strong>Reduce riesgos de inyección de código y ataques XSS.</strong><br>✅&nbsp;<strong>Es más seguro que funciones antiguas como&nbsp;<code>mysql_real_escape_string()</code>.</strong></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Detectar petición AJAX con PHP</title>
		<link>https://emanuelpaxtian.com/blog/detectar-peticion-ajax-con-php/</link>
		
		<dc:creator><![CDATA[Psoluciones]]></dc:creator>
		<pubDate>Thu, 07 Feb 2019 18:30:18 +0000</pubDate>
				<category><![CDATA[Sin categoría]]></category>
		<guid isPermaLink="false">https://www.emanuelpaxtian.com/?p=1116</guid>

					<description><![CDATA[En el desarrollo web moderno, a menudo necesitamos distinguir entre peticiones regulares y solicitudes AJAX para mejorar la seguridad o implementar comportamientos específicos. Veamos cómo hacer esta verificación de manera&#8230;]]></description>
										<content:encoded><![CDATA[
En el desarrollo web moderno, a menudo necesitamos distinguir entre peticiones regulares y solicitudes AJAX para mejorar la seguridad o implementar comportamientos específicos. Veamos cómo hacer esta verificación de manera efectiva.



<div class="wp-block-syntaxhighlighter-code "><pre class="brush: php; title: ; notranslate">
if(
   !empty($_SERVER&#x5B;&#039;HTTP_X_REQUESTED_WITH&#039;]) &amp;&amp;
   strtolower($_SERVER&#x5B;&#039;HTTP_X_REQUESTED_WITH&#039;]) == &#039;xmlhttprequest&#039;
){
   # Aquí van las operaciones que se mostraran mediante una petición ajax
}else{
   # Ejecutamos las instrucciones si no es Ajax
}
</pre></div>


<h2 class="wp-block-heading">¿Por qué es importante esta comprobación?</h2>



<ol start="1" class="wp-block-list">
<li><strong>Seguridad</strong>: Puedes restringir ciertas operaciones sensibles solo a llamadas AJAX desde tu propia aplicación.</li>



<li><strong>Experiencia de usuario</strong>: Permite ofrecer respuestas diferentes (JSON vs HTML completo) según cómo se acceda.</li>



<li><strong>Prevención de acceso directo</strong>: Evita que usuarios accedan directamente a endpoints pensados para ser usados vía AJAX.</li>
</ol>



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



<ul class="wp-block-list">
<li><code>$_SERVER['HTTP_X_REQUESTED_WITH']</code> es una cabecera HTTP que los frameworks JavaScript como jQuery envían automáticamente en peticiones AJAX.</li>



<li>Verificamos que no esté vacía (<code>!empty</code>).</li>



<li>Convertimos a minúsculas (<code>strtolower</code>) para comparación case-insensitive.</li>



<li>Comprobamos que el valor sea exactamente &#8220;xmlhttprequest&#8221;.</li>
</ul>



<h2 class="wp-block-heading">Limitaciones a considerar</h2>



<ol start="1" class="wp-block-list">
<li><strong>No es 100% confiable</strong>: Las cabeceras HTTP pueden ser falsificadas.</li>



<li><strong>No todos los clientes AJAX la envían</strong>: Algunas librerías modernas podrían no incluirla por defecto.</li>



<li><strong>Debe complementarse con otras medidas</strong>: Como tokens CSRF y validación de origen.</li>
</ol>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>El FBI lanza un comunicado pidiendo reiniciar los routers a nivel mundial</title>
		<link>https://emanuelpaxtian.com/blog/el-fbi-lanza-un-comunicado-pidiendo-reiniciar-los-routers-a-nivel-mundial/</link>
		
		<dc:creator><![CDATA[Psoluciones]]></dc:creator>
		<pubDate>Mon, 28 May 2018 14:16:46 +0000</pubDate>
				<category><![CDATA[Noticias]]></category>
		<guid isPermaLink="false">https://www.emanuelpaxtian.com/?p=1111</guid>

					<description><![CDATA[No es algo que ocurre todos los días. El FBI ha publicado un comunicado este fin de semana en donde aconseja reiniciar los routers a nivel mundial. La culpa la tiene un malware ruso llamado VPNFilter, que ha infectado&#8230;]]></description>
										<content:encoded><![CDATA[<p>No es algo que ocurre todos los días. El <strong>FBI</strong> ha publicado <a href="https://www.ic3.gov/media/2018/180525.aspx" target="_blank" rel="nofollow noopener">un comunicado</a> este fin de semana en donde aconseja <strong>reiniciar los routers a nivel mundial</strong>.</p>
<p>La culpa la tiene <strong>un malware ruso </strong>llamado <strong>VPNFilter</strong>, que <strong>ha infectado a 500.000 routers </strong>en los últimos días. Este malware convierte a los routers en <em>bots </em>que puedes ser controlados de forma externa para lanzar ataques masivos coordinados, infectar a otros, e incluso estropear el router.</p>
<p>Al parecer, según el <strong>FBI </strong>los grupos de hackers rusos<em> Fancy Bear </em>y <em>APT28</em> tenían como objetivo producir un colapso en los ordenadores de la final de la Champion League, que se celebró ayer sábado en Kiev (Ucrania), país con el que Rusia mantiene una elevada hostilidad desde su separación de la Unión Soviética, con el conflicto de Crimea como telón de fondo. El Kremlin ha negado estar detrás del ataque.</p>
<p>El FBI asegura que más de 500.000 routers han sido infectados con el malware VPNFilter en las últimas horas. Estos son los modelos vulnerables al malware que se conocen, pero podría haber más:</p>
<p>Linksys E1200<br />
Linksys E2500<br />
Linksys WRVS4400N<br />
Mikrotik RouterOS for Cloud Core Routers: Versions 1016, 1036, y 1072<br />
Netgear DGN2200<br />
Netgear R6400<br />
Netgear R7000<br />
Netgear R8000<br />
Netgear WNR1000<br />
Netgear WNR2000<br />
QNAP TS251<br />
QNAP TS439 Pro<br />
QNAP NAS devices running QTS software<br />
TP-Link R600VPN<br />
Se cree que el malware penetra a través de alguna vulnerabilidad en los routers, o cuando se usan contraseñas débiles fácilmente hackeables.</p>
<p> El FBI aconseja reiniciar todos los routers aunque no pertenezcan a las anteriores marcas, ya que un reinicio no elimina el malware pero si dificulta que pueda tomar el control del router infiltrado. También insiste en cambiar la contraseña del router. </p>
<p>La compañía Cisco va más allá y recomienda resetear el router de fábrica, es decir, introducir un alambre en el botón de reset que hay en todos los routers, para resetearlo de fábrica. Cuidado porque esta opción elimina los ajustes personalizados que hayamos hecho en el router.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Carrito de compras con php</title>
		<link>https://emanuelpaxtian.com/blog/carrito-de-compras-con-php/</link>
		
		<dc:creator><![CDATA[Psoluciones]]></dc:creator>
		<pubDate>Fri, 25 May 2018 23:35:44 +0000</pubDate>
				<category><![CDATA[Php]]></category>
		<guid isPermaLink="false">https://www.emanuelpaxtian.com/?p=1108</guid>

					<description><![CDATA[Vamos a ver como crear un carrito de compras con php, no es muy complicado, pero al haber varios métodos se puede hacer un poco más lioso. Como podremos ver todo&#8230;]]></description>
										<content:encoded><![CDATA[<p>Vamos a ver como <strong>crear un carrito de compras con php</strong>, no es muy complicado, pero al haber varios métodos se puede hacer un poco más lioso.</p>
<p>Como podremos ver todo tiene su lógica, tendremos un <strong>método</strong> para cada una de las funcionalidades de un <strong>carrito de compras</strong> convencional, insertar, actualizar, eliminar etc, así que antes de comenzar veamos un listado de los métodos y funciones más importantes y que hacen<span id="more-3896"></span>:</p>
<ul>
<li style="list-style-type: none">
<ul>
<li><strong>El método add</strong></li>
</ul>
</li>
</ul>
<p>Pasando un array de clave valor nos insertará un producto dentro del carrito, si ese producto ya existe lo que hace es actualizar la cantidad de unidades.</p>
<ul>
<li style="list-style-type: none">
<ul>
<li><strong>La función remove_producto</strong></li>
</ul>
</li>
</ul>
<p>Pasando un unique_id, que no es más que un identificador único de cada producto que conseguimos encriptando con md5 la id del producto, eliminará por completo todas las unidades de ese producto.</p>
<ul>
<li style="list-style-type: none">
<ul>
<li><strong>El método get_content</strong></li>
</ul>
</li>
</ul>
<p>Nos devuelve un array con todos los productos del carrito y la información de cada uno de ellos.</p>
<ul>
<li style="list-style-type: none">
<ul>
<li><strong>El método precio_total</strong></li>
</ul>
</li>
</ul>
<p>Devuelve el precio total del carrito de compras, por defecto, si el carrito está vacío el valor es de 0.</p>
<ul>
<li style="list-style-type: none">
<ul>
<li><strong>El método artículos_total</strong></li>
</ul>
</li>
</ul>
<p>Devuelve el número total de artículos del carrito, por defecto, si el carrito está vacío el valor es de 0.</p>
<ul>
<li style="list-style-type: none">
<ul>
<li><strong>La función destroy</strong></li>
</ul>
</li>
</ul>
<p>Elimina por completo el carrito de compras, una vez hecho, nuestro carrito tendrá valor NULL.</p>
<h2>Clase carrito de compras con php</h2>
<p>Toda nuestra lógica estará dentro de una clase que llamaremos Carrito.class.php, así que creo que es un buen momento de crear un proyecto vacío y dentro crear ese archivo, una vez hecho podemos añadir el siguiente código con el que nuestro carrito quedará implementado.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
session_start();
class Carrito
{
    //aquí guardamos el contenido del carrito
    private $carrito = array();
    //seteamos el carrito exista o no exista en el constructor
    public function __construct()
    {
        if(!isset($_SESSION&#x5B;&quot;carrito&quot;]))
        {
            $_SESSION&#x5B;&quot;carrito&quot;] = null;
            $this-&gt;carrito&#x5B;&quot;precio_total&quot;] = 0;
            $this-&gt;carrito&#x5B;&quot;articulos_total&quot;] = 0;
        }
        $this-&gt;carrito = $_SESSION&#x5B;'carrito'];
    }
    //añadimos un producto al carrito
    public function add($articulo = array())
    {
        //primero comprobamos el articulo a añadir, si está vacío o no es un 
        //array lanzamos una excepción y cortamos la ejecución
        if(!is_array($articulo) || empty($articulo))
        {
            throw new Exception(&quot;Error, el articulo no es un array!&quot;, 1);
        }
        //nuestro carro necesita siempre un id producto, cantidad y precio articulo
        if(!$articulo&#x5B;&quot;id&quot;] || !$articulo&#x5B;&quot;cantidad&quot;] || !$articulo&#x5B;&quot;precio&quot;])
        {
            throw new Exception(&quot;Error, el articulo debe tener un id, cantidad y precio!&quot;, 1);
        }
        //nuestro carro necesita siempre un id producto, cantidad y precio articulo
        if(!is_numeric($articulo&#x5B;&quot;id&quot;]) || !is_numeric($articulo&#x5B;&quot;cantidad&quot;]) || !is_numeric($articulo&#x5B;&quot;precio&quot;]))
        {
            throw new Exception(&quot;Error, el id, cantidad y precio deben ser números!&quot;, 1);
        }
        //debemos crear un identificador único para cada producto
        $unique_id = md5($articulo&#x5B;&quot;id&quot;]);
        //creamos la id única para el producto
        $articulo&#x5B;&quot;unique_id&quot;] = $unique_id;
        //si no está vacío el carrito lo recorremos 
        if(!empty($this-&gt;carrito))
        {
            foreach ($this-&gt;carrito as $row)
            {
                //comprobamos si este producto ya estaba en el 
                //carrito para actualizar el producto o insertar
                //un nuevo producto	
                if($row&#x5B;&quot;unique_id&quot;] === $unique_id)
                {
                    //si ya estaba sumamos la cantidad
                    $articulo&#x5B;&quot;cantidad&quot;] = $row&#x5B;&quot;cantidad&quot;] + $articulo&#x5B;&quot;cantidad&quot;];
                }
            }
        }
        //evitamos que nos pongan números negativos y que sólo sean números para cantidad y precio
        $articulo&#x5B;&quot;cantidad&quot;] = trim(preg_replace('/(&#x5B;^0-9\.])/i', '', $articulo&#x5B;&quot;cantidad&quot;]));
        $articulo&#x5B;&quot;precio&quot;] = trim(preg_replace('/(&#x5B;^0-9\.])/i', '', $articulo&#x5B;&quot;precio&quot;]));
        //añadimos un elemento total al array carrito para 
        //saber el precio total de la suma de este artículo
        $articulo&#x5B;&quot;total&quot;] = $articulo&#x5B;&quot;cantidad&quot;] * $articulo&#x5B;&quot;precio&quot;];
        //primero debemos eliminar el producto si es que estaba en el carrito
        $this-&gt;unset_producto($unique_id);
        ///ahora añadimos el producto al carrito
        $_SESSION&#x5B;&quot;carrito&quot;]&#x5B;$unique_id] = $articulo;
        //actualizamos el carrito
        $this-&gt;update_carrito();
        //actualizamos el precio total y el número de artículos del carrito
        //una vez hemos añadido el producto
        $this-&gt;update_precio_cantidad();
    }
    //método que actualiza el precio total y la cantidad
    //de productos total del carrito
    private function update_precio_cantidad()
    {
        //seteamos las variables precio y artículos a 0
        $precio = 0;
        $articulos = 0;
        //recorrecmos el contenido del carrito para actualizar
        //el precio total y el número de artículos
        foreach ($this-&gt;carrito as $row)
        {
            $precio += ($row&#x5B;'precio'] * $row&#x5B;'cantidad']);
            $articulos += $row&#x5B;'cantidad'];
        }
        //asignamos a articulos_total el número de artículos actual
        //y al precio el precio actual
        $_SESSION&#x5B;'carrito']&#x5B;&quot;articulos_total&quot;] = $articulos;
        $_SESSION&#x5B;'carrito']&#x5B;&quot;precio_total&quot;] = $precio;
        //refrescamos él contenido del carrito para que quedé actualizado
        $this-&gt;update_carrito();
    }
    //método que retorna el precio total del carrito
    public function precio_total()
    {
        //si no está definido el elemento precio_total o no existe el carrito
        //el precio total será 0
        if(!isset($this-&gt;carrito&#x5B;&quot;precio_total&quot;]) || $this-&gt;carrito === null)
        {
            return 0;
        }
        //si no es númerico lanzamos una excepción porque no es correcto
        if(!is_numeric($this-&gt;carrito&#x5B;&quot;precio_total&quot;]))
        {
            throw new Exception(&quot;El precio total del carrito debe ser un número&quot;, 1);
        }
        //en otro caso devolvemos el precio total del carrito
        return $this-&gt;carrito&#x5B;&quot;precio_total&quot;] ? $this-&gt;carrito&#x5B;&quot;precio_total&quot;] : 0;
    }
    //método que retorna el número de artículos del carrito
    public function articulos_total()
    {
        //si no está definido el elemento articulos_total o no existe el carrito
        //el número de artículos será de 0
        if(!isset($this-&gt;carrito&#x5B;&quot;articulos_total&quot;]) || $this-&gt;carrito === null)
        {
            return 0;
        }
        //si no es númerico lanzamos una excepción porque no es correcto
        if(!is_numeric($this-&gt;carrito&#x5B;&quot;articulos_total&quot;]))
        {
            throw new Exception(&quot;El número de artículos del carrito debe ser un número&quot;, 1);
        }
        //en otro caso devolvemos el número de artículos del carrito
        return $this-&gt;carrito&#x5B;&quot;articulos_total&quot;] ? $this-&gt;carrito&#x5B;&quot;articulos_total&quot;] : 0;
    }
    //este método retorna el contenido del carrito
    public function get_content()
    {
        //asignamos el carrito a una variable
        $carrito = $this-&gt;carrito;
        //debemos eliminar del carrito el número de artículos
        //y el precio total para poder mostrar bien los artículos
        //ya que estos datos los devuelven los métodos 
        //articulos_total y precio_total
        unset($carrito&#x5B;&quot;articulos_total&quot;]);
        unset($carrito&#x5B;&quot;precio_total&quot;]);
        return $carrito == null ? null : $carrito;
    }
    //método que llamamos al insertar un nuevo producto al 
    //carrito para eliminarlo si existia, así podemos insertarlo
    //de nuevo pero actualizado
    private function unset_producto($unique_id)
    {
        unset($_SESSION&#x5B;&quot;carrito&quot;]&#x5B;$unique_id]);
    }
    //para eliminar un producto debemos pasar la clave única
    //que contiene cada uno de ellos
    public function remove_producto($unique_id)
    {
        //si no existe el carrito
        if($this-&gt;carrito === null)
        {
            throw new Exception(&quot;El carrito no existe!&quot;, 1);
        }
        //si no existe la id única del producto en el carrito
        if(!isset($this-&gt;carrito&#x5B;$unique_id]))
        {
            throw new Exception(&quot;La unique_id $unique_id no existe!&quot;, 1);
        }
        //en otro caso, eliminamos el producto, actualizamos el carrito y 
        //el precio y cantidad totales del carrito
        unset($_SESSION&#x5B;&quot;carrito&quot;]&#x5B;$unique_id]);
        $this-&gt;update_carrito();
        $this-&gt;update_precio_cantidad();
        return true;
    }
    //eliminamos el contenido del carrito por completo
    public function destroy()
    {
        unset($_SESSION&#x5B;&quot;carrito&quot;]);
        $this-&gt;carrito = null;
        return true;
    }
    //actualizamos el contenido del carrito
    public function update_carrito()
    {
        self::__construct();
    }
}
</pre>
<p>Para entender el funcionamiento del carrito es suficiente con repasar el código las veces necesarias, hasta que logremos entender el funcionamiento y la lógica ya que está explicado en cada apartado de forma muy muy clara.</p>
<p>Para poder hacer uso del carrito, lo primero es crear una nueva instancia, lo que nos devolverá un carrito vacío y valor 0 tanto al precio como al número de artículos.</p>
<p>Crear un nuevo carrito</p>
<pre class="brush: php; title: ; notranslate">$carrito = new Carrito();</pre>
<p>Añadir un producto al carrito</p>
<pre class="brush: php; title: ; notranslate">
//array que crea un producto
$articulo = array(
		&quot;id&quot;			=&gt;		14,
		&quot;cantidad&quot;		=&gt;		3,
		&quot;precio&quot;		=&gt;		50,
		&quot;nombre&quot;		=&gt;		&quot;camisetas&quot;
	);

//añadir el producto
//$carrito-&gt;add($articulo);
</pre>
<p>Eliminar un producto por su unique_id</p>
<pre class="brush: php; title: ; notranslate">

$carrito-&gt;remove_producto(&quot;45c48cce2e2d7fbdea1afc51c7c6ad26&quot;);
</pre>
<p>Ese es el aspecto de un campo unique_id de cada producto.</p>
<p>Obtener el contenido del carrito</p>
<pre class="brush: php; title: ; notranslate">
$carrito-&gt;get_content();
</pre>
<p>Obtener el precio total del carrito</p>
<pre class="brush: php; title: ; notranslate">
$carrito-&gt;precio_total();
</pre>
<p>Obtener el número de artículos del carrito</p>
<pre class="brush: php; title: ; notranslate">
$carrito-&gt;articulos_total();
</pre>
<p>Eliminar el contenido del carrito</p>
<pre class="brush: php; title: ; notranslate">
$carrito-&gt;destroy();
</pre>
<p>Una vez creado el carrito y añadido algún producto, simplemente podemos mostrar los artículos de la siguiente forma.</p>
<pre class="brush: php; title: ; notranslate">

//asignamos a $carro el método get_content() que contiene el contenido del carrito
$carro = $carrito-&gt;get_content();
if($carro)
{
	foreach($carro as $producto)
	{
		echo $producto&#x5B;&quot;id&quot;];
		echo &quot;&lt;br /&gt;&quot;;
		echo $producto&#x5B;&quot;unique_id&quot;];
		echo &quot;&lt;br /&gt;&quot;;
		echo $producto&#x5B;&quot;cantidad&quot;];
		echo &quot;&lt;br /&gt;&quot;;
		echo $producto&#x5B;&quot;precio&quot;];
		echo &quot;&lt;br /&gt;&quot;;
		echo $producto&#x5B;&quot;nombre&quot;];
		echo &quot;&lt;br /&gt;&quot;;
	}
}

</pre>
<p>Y eso es todo, no tiene más misterio un carrito de compras con php, sólo necesitamos juntar los ingredientes que necesitemos y ya está, espero que te sea de utilidad, por lo menos para seguir aprendiendo php si estás en ese camino.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Cisco detecta una nueva ciberamenaza mundial</title>
		<link>https://emanuelpaxtian.com/blog/cisco-detecta-una-nueva-ciberamenaza-mundial/</link>
		
		<dc:creator><![CDATA[Psoluciones]]></dc:creator>
		<pubDate>Fri, 25 May 2018 15:15:58 +0000</pubDate>
				<category><![CDATA[Cisco]]></category>
		<guid isPermaLink="false">https://www.emanuelpaxtian.com/?p=1103</guid>

					<description><![CDATA[Cisco ha detectado una nueva ciberamenaza por la que una red global de dispositivos infectados podrían provocar un ataque altamente destructivo a escala global. Durante los últimos meses, al menos&#8230;]]></description>
										<content:encoded><![CDATA[<p>Cisco ha detectado una nueva ciberamenaza por la que una red global de dispositivos infectados podrían provocar un ataque altamente destructivo a escala global. Durante los últimos meses, al menos 500.000 routers (para pymes y consumo) y dispositivos de almacenamiento NAS (Network Attached Storage) han sido infectados, aunque podría haber muchos más.</p>
<p>Se trata de una de las mayores redes de dispositivos infectados descubiertas hasta la fecha por Talos, la división de inteligencia de ciber-seguridad de Cisco. La gran mayoría de equipos están conectados directamente a Internet (sin mecanismos de seguridad intermedios), y coordinados a través de una red TOR privada (red anónima de dispositivos).</p>
<h3>En esta ciberamenaza, sin saberlo, usuarios de routers y dispositivos NAS podrían coordinar un ataque masivo mundial</h3>
<p>El atacante podría así compartir datos entre los dispositivos y coordinar un ataque masivo utilizando los equipos como nodos. Al incluir un ‘kill switch’ (interruptor de apagado), también podría destruir los equipos dejándolos inoperativos y eliminar el acceso a Internet para cientos de miles de usuarios, además de inspeccionar el tráfico y robar datos confidenciales.</p>
<p>Los dispositivos infectados se encuentran en más de 54 países. Ucrania ha sufrido el mayor pico de infecciones, con un elevado incremento durante la primera quincena de mayo. El malware, denominado ‘VPNFilter’ al instalarse en dicho directorio, tiene similitudes de código con BlackEnergy, un malware que ya fue responsable de múltiples ataques a gran escala a dispositivos en Ucrania.</p>
<h4>Protección y recomendaciones</h4>
<p>Cisco Talos ya ha comunicado la vulnerabilidad a los fabricantes de los equipos (Linksys, MikroTik, NETGEAR, TP-Link y QNAP, por el momento) y a la Cyber Threat Alliance, además de crear y desplegar más de 100 firmas Snort para las vulnerabilidades conocidas que pueden utilizarse libremente.</p>
<p>Los usuarios de los dispositivos afectados -incluyendo proveedores de Internet- deberían reiniciar sus equipos en modo fábrica y actualizarlos con los últimos parches tan pronto como sea posible. Muchas organizaciones podrían tener partners o empleados que se conectan mediante los equipos infectados, pudiendo comprometer también las redes corporativas.</p>
<p>Los equipos de Cisco no se han visto comprometidos por esta nueva ciber-amenaza, aunque los clientes pueden utilizar Cisco Umbrella, Cloud Web Security y Web Security Appliance como primera línea de defensa (bloqueo de ataques Command and Control conocidos) y NGFW&nbsp;y NGIPS para bloquear las amenazas en la red.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Forzar el uso de  ssl (https) usando cloudflare</title>
		<link>https://emanuelpaxtian.com/blog/forzar-el-uso-de-ssl-https-usando-cloudflare/</link>
		
		<dc:creator><![CDATA[Psoluciones]]></dc:creator>
		<pubDate>Tue, 27 Mar 2018 00:05:43 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<guid isPermaLink="false">https://emanuelpaxtian.com/blog/?p=1088</guid>

					<description><![CDATA[Cuando por algún motivo no puedas usar .htaccess en tu cuenta de hospedaje y quieres que tu sitio acceda mediante el uso de https usando un ssl valido lo podrás&#8230;]]></description>
										<content:encoded><![CDATA[<p>Cuando por algún motivo no puedas usar .htaccess en tu cuenta de hospedaje y quieres que tu sitio acceda mediante el uso de https usando un ssl valido lo podrás hacer con cloudflare es muy sencillo solo tendrás que hacer una regla para ello realiza lo siguiente:</p>
<p>Das clic en el menu sobre el bottón <strong>“Page Rule”</strong>.</p>
<p>A continuación das clic en el botón <strong>“Create Page Rule”</strong> y en el 1er campo text (If the URL matches) insertas la url antigua con el comodín para seleccionar todas las urls del dominio .</p>
<p>http://*emanuelpaxtian.com/*<br />
3) A continuación das clic en  <strong>“Add settings”</strong> y en el despegable (Then the settings are) seleccionas la opción <strong>“Always use HTTPS”</strong> y guardas dando clic en el botón <strong>“Save and Deploy”</strong></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Dejar solo letras y números con preg_replace</title>
		<link>https://emanuelpaxtian.com/blog/dejar-solo-letras-y-numeros-con-preg_replace/</link>
		
		<dc:creator><![CDATA[Psoluciones]]></dc:creator>
		<pubDate>Mon, 28 Aug 2017 22:55:39 +0000</pubDate>
				<category><![CDATA[Php]]></category>
		<guid isPermaLink="false">https://emanuelpaxtian.com/blog/?p=1050</guid>

					<description><![CDATA[Hace poco un amigo me pregunto como dejar puras letras (mayusculas y minúsculas) y números en una cadena de texto eliminando todo lo que demás, en php existe una función&#8230;]]></description>
										<content:encoded><![CDATA[<p>Hace poco un amigo me pregunto como dejar puras letras (mayusculas y minúsculas)  y números en una cadena de texto eliminando todo lo que demás, en php existe una función muy interesante llamada <a href="http://php.net/manual/es/function.preg-replace.php">preg_replace</a>, a continuación le muestro una sencilla función </p>
<pre class="brush: php; title: ; notranslate">
function LetrasyNumeros($texto)
{
      $textoLimpio = preg_replace('(&#x5B;^A-Za-z0-9])', '', $texto);	     					
      return $textoLimpio;
}
</pre>
<p>Modo de uso </p>
<pre class="brush: php; title: ; notranslate">
$texto=&quot;Este texto-Limpio&quot;
echo LetrasyNumeros($texto)
//salida
//EstetextoLimpio
</pre>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Una campaña virulenta de spam ha afectado a Facebook Messenger durante los últimos días</title>
		<link>https://emanuelpaxtian.com/blog/una-campana-virulenta-de-spam-ha-afectado-a-facebook-messenger-durante-los-ultimos-dias/</link>
		
		<dc:creator><![CDATA[Psoluciones]]></dc:creator>
		<pubDate>Mon, 28 Aug 2017 18:42:02 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Noticias]]></category>
		<category><![CDATA[OSX]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[Windows]]></category>
		<guid isPermaLink="false">https://emanuelpaxtian.com/blog/?p=1047</guid>

					<description><![CDATA[Facebook Messenger es una de las aplicaciones de mensajería instantánea más utilizadas en todo el mundo. Millones de usuarios se conectan cada día con amigos y familiares a través de&#8230;]]></description>
										<content:encoded><![CDATA[<p>Facebook Messenger es una de las aplicaciones de mensajería instantánea más utilizadas en todo el mundo. Millones de usuarios se conectan cada día con amigos y familiares a través de este programa desde sus teléfonos o tabletas. Sin embargo esta herramienta del gigante Facebook está sufriendo una virulenta campaña de spam durante estos últimos días. Esto ha puesto en alerta a muchos usuarios que utilicen esta aplicación.</p>
<p>La alerta ha llegado desde Avira, CSIS Security Group y Kaspersky Lab, algunos de los desarrolladores de seguridad más importantes. Los mensajes de spam que están llegado a Facebook Messenger contienen un link que aparenta ser un vídeo inofensivo.</p>
<p>El mensaje llega a través de alguno de los contactos que tenemos en Facebook. Esto indica que este amigo también ha sido afectado y es por ello por lo que ahora lo envía, de forma inconsciente, al resto de sus contactos en esta red social.</p>
<p>El formato del mensaje es muy simple. Sin embargo son muchos los usuarios que pueden caer en la trampa. El contenido es el siguiente: primer nombre del usuario, seguido la palabra vídeo y un link acortado.</p>
<p>Por ejemplo podría ser: Javi Video http://bit.ly /23sfs<br />
Cómo actúa</p>
<p>Los usuarios que hagan click en estos enlaces, automáticamente se les redirecciona a otra página diferente que nada tiene que ver con un vídeo. La dirección a la que llegan varía en función de la posición geográfica, el tipo de navegador o incluso el tipo de sistema operativo que estemos utilizando.</p>
<p>Según informan en algunos sitios, los usuarios que utilicen el navegador Firefox, tanto en Windows como en Mac, están siendo redireccionados a una página que ofrece un falso instalador de Flash Player. Según informa desde Kaspersky Lab, al hacer click aquí el archivo instala adware en el ordenador de la víctima.</p>
<p>Por otra parte, en Google Chrome que es otro de los navegadores más utilizados, sus usuarios son redireccionados a una página falsa de YouTube que introduce una extensión maliciosa. Se cree que los delincuentes utilizan esta extensión de Chrome para introducir adware y recopilar credenciales para nuevas cuentas de Facebook, que posteriormente utilizan para enviar los mensajes de spam a nuevos usuarios.<br />
Qué hacer si vemos este mensaje</p>
<p>Lógicamente si hemos leído este artículo y vemos en nuestra cuenta de Facebook Messenger que nos llega un link con las características que hemos mencionado, no hay que abrirlo. Lo primero por nuestra propia seguridad y para no caer en la trampa.</p>
<p>Posteriormente hay que tener en cuenta que ese mensaje nos ha llegado a través de un contacto que tenemos en esta red social. Por tanto lo mejor que podemos hacer es avisarle del problema (seguramente muchos lo desconozcan) y aconsejarle que cambien las credenciales de su cuenta.</p>
<p>Lo tercero que podemos hacer es reportar estos mensajes de spam a Facebook.</p>
<p>Como siempre decimos, lo mejor para evitar problemas como este y otros similares es tener sentido común. Pero también debemos de tener instalado software de seguridad en nuestro equipo y que pueda protegernos, llegado el momento, frente a amenazas en forma de malware.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>¿Que es un disco duro New Pull?</title>
		<link>https://emanuelpaxtian.com/blog/que-es-un-disco-duro-new-pull/</link>
		
		<dc:creator><![CDATA[Psoluciones]]></dc:creator>
		<pubDate>Mon, 03 Jul 2017 23:26:29 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<guid isPermaLink="false">https://emanuelpaxtian.com/blog/?p=1042</guid>

					<description><![CDATA[En México, se pueden encontrar publicaciones en tiendas en linea donde venden discos duros tipo “New Pull” y aquí, les vamos a decir que son y que riesgos tiene comprarlos.&#8230;]]></description>
										<content:encoded><![CDATA[<p>En México, se pueden encontrar publicaciones en tiendas en linea donde venden discos duros tipo <strong>“New Pull”</strong> y aquí, les vamos a decir que son y que riesgos tiene comprarlos.</p>
<p>OK, como todos ustedes sabrán, no todos los equipos de computo de los fabricantes son vendidos, muchos de ellos se quedan en almacén y los ponen en remate, y si así no se venden, entonces empiezan a desarmarlos para extraer piezas que pudieran funcionar en nuevos equipos o en su defecto, antes venían con ciertas especificaciones y las mejoran agregándoles mas memoria o cambiándoles el disco duro, y aquí nos detenemos con la ultima frase.</p>
<p>Ahora, que pasa, con todos los discos duros de esas pc´s que no se vendieron, pues empiezan a venderlos con ese termino <strong>“Disco Duro New Pull”</strong>, así que huye de aquellos que digan “Venta de discos duros new pull sin usar” ¡ESO NO EXISTE!</p>
<p>Todo disco duro New Pull, por lo menos a sido formateado quitando el Windows que tenia de la PC de donde fue extraído, eso significa que no es nuevo, Me a tocado ver, que venden discos duros New Pull de las PC’s que están en exhibición, es decir, que ya tienen muchas horas encendidos, pero como esa pc no se vendió, entonces el disco duro pasa a ser vendido como <strong>New Pull</strong>.</p>
<p>La recomendación es, Huye de los que te digan “Venta de discos duros new pull sin usar”, compralos si te dan la misma garantía que un disco nuevo y sobre todo ten esto en mente: Gástate un poquito más en el disco duro de tu PC, ya que es el medio en donde se guarda la información, y créeme, pagar más de 20,000 por recuperar datos no esta padre.</p>
<p>Fuente: https://gedatek.com/</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
