Programando PHP
El blog ideal para los principiantes (y no tan principiantes) en programación PHP
Composer update: problema SSL
2. Comprobar que el php.ini apunta a la ruta correcta del certificado, por ejemplo: C:\xampp\php\extras\ssl\cacert.pem
3. Para saber a que php.ini apunta desde consola: php --ini
4. En las variables del entorno y del sistema comprobar que apunta a C:\xampp\php
5. En php.ini descomentar: extension=openssl
6. En php.ini:
curl.cainfo="C:\xampp\php\extras\ssl\cacert.pem"
openssl.cafile="C:\xampp\php\extras\ssl\cacert.pem"
PHP: Cambiar, modificar o borrar contenido capas por su id
// **************************************************
function replaceHtmlById($htmlOriginal, $id, $nuevoHtml) {
libxml_use_internal_errors(true);
// --- DOM PRINCIPAL ---
$dom = new DOMDocument;
$dom->loadHTML(mb_convert_encoding($htmlOriginal, 'HTML-ENTITIES', 'UTF-8'));
$xpath = new DOMXPath($dom);
// Buscar el nodo con el ID indicado
$nodes = $xpath->query("//*[@id='$id']");
if ($nodes->length === 0) {
return $htmlOriginal; // No encontró el ID
}
$nodoViejo = $nodes->item(0);
// --- NUEVO NODO ---
// Usamos un wrapper para poder insertarlo en DOMDocument
$domNuevo = new DOMDocument;
$domNuevo->loadHTML("<div id='wrap'>$nuevoHtml</div>", LIBXML_HTML_NODEFDTD | LIBXML_HTML_NOIMPLIED);
// Nodo raíz dentro del wrapper
$nodoNuevo = $domNuevo->getElementById('wrap')->firstChild;
// Importar el nodo nuevo al DOM original
$nodoNuevoImportado = $dom->importNode($nodoNuevo, true);
// Reemplazar
$nodoViejo->parentNode->replaceChild($nodoNuevoImportado, $nodoViejo);
// Devolver HTML
return $dom->saveHTML();
}
// *********************************************
function emptyHtmlById($htmlOriginal, $id) {
libxml_use_internal_errors(true);
$dom = new DOMDocument;
$dom->loadHTML(mb_convert_encoding($htmlOriginal, 'HTML-ENTITIES', 'UTF-8'));
$xpath = new DOMXPath($dom);
// Buscar nodo
$nodes = $xpath->query("//*[@id='$id']");
if ($nodes->length === 0) {
return $htmlOriginal; // ID no encontrado
}
$nodo = $nodes->item(0);
// Eliminar todos los hijos
while ($nodo->firstChild) {
$nodo->removeChild($nodo->firstChild);
}
return $dom->saveHTML();
}
******************************************************
function removeHtmlById($htmlOriginal, $id) {
libxml_use_internal_errors(true);
$dom = new DOMDocument;
$dom->loadHTML(mb_convert_encoding($htmlOriginal, 'HTML-ENTITIES', 'UTF-8'));
$xpath = new DOMXPath($dom);
// Buscar el nodo con ese ID
$nodes = $xpath->query("//*[@id='$id']");
if ($nodes->length === 0) {
return $htmlOriginal; // No existe el ID
}
$nodo = $nodes->item(0);
// Eliminar el nodo completo
$nodo->parentNode->removeChild($nodo);
return $dom->saveHTML();
}
$dom = new DOMDocument;
libxml_use_internal_errors(true);
$dom->loadHTML($cuerpo);
libxml_clear_errors();
$xpath = new DOMXPath($dom);
$nodes = $xpath->query("//*[@id='parrilla_".$_GET['parrilla_old']."']");
if ($nodes->length > 0) {
$htmlParrilla_old = $dom->saveHTML($nodes->item(0));
}
$nodes = $xpath->query("//*[@id='parrilla_".$_GET['parrilla_new']."']");
if ($nodes->length > 0) {
$htmlParrilla_new = utf8_decode($dom->saveHTML($nodes->item(0)));
}
$new_cuerpo = removeHtmlById($cuerpo,"parrilla_".$_GET["parrilla_new"]);
$new_cuerpo = replaceHtmlById($new_cuerpo, "parrilla_".$_GET["parrilla_old"], $htmlParrilla_new);
Ancla HTML sin que cambie la URL con #
<a href="javascript:document.getElementById('ancla1').scrollIntoView({ behavior: 'smooth' })">lo que sea</a>
<h2 id="ancla1">xxx</h2>
XAMPP: Tener dos versiones de xampp instaladas en el mismo ordenador
Al instalarlo lo creas en una nueva carpeta (por ejemplo xampp8_2)
Ahora para ejecutar una versión de XAMPP u otra (las dos no se puede al mismo tiempo pues comparten los mismos puertos) crea unos accesos directos ya sea a:
C:\xampp\xampp-control.exe
ó a:
C:\xampp8_2\xampp-control.exe
Para comprobar en cuál estás en cada momento (aparte del panel de XAMPP que tengas abierto):
http://localhost
y para el phpmyadmin: http://localhost/phpmyadmin/
Una cosa importante es también especificar en el path de ordenador donde está la versión de PHP que quieras ejecutar en cada momento (por ejemplo la 8.2), para ello:
Busca en la barra de Windows "Editar las variables de entorno del sistema".
En la ventana de Propiedades del sistema, pulsa en Variables de entorno.
En “Variables del sistema”, busca la variable Path y edítala.
Modifica la ruta que haya a por ejemplo: c:\xampp8_2\php
Aceptar todo y cierra
Reiniciar el ordenador
Ya si desde el terminal pones php-v te saldrá 8.2
xampp cURL error 60: SSL certificate cuando creas un proyecto en Laravel
Sino mirar: https://stackoverflow.com/questions/29822686/curl-error-60-ssl-certificate-unable-to-get-local-issuer-certificate
PHPStorm: Cargar desde PHPStorm un repositorio
En URL poner los datos del clone:
git@bitbucket.org:lo-que-sea.git
Y en Directory:
C:\xampp\htdocs\lo-que-sea
Creará automáticamente la carpeta lo-que-sea y clonará dicho repositorio en tu ordenador local
Jquery: Acceder al valor de un campo del form a partir del id del form
$("#formLSG").find('[name="cp"]').val();
Para sacar el valor de todos los campos del form:
$("#formLSG").find('input, select, textarea').each(function() {
var nombreCampo = $(this).attr('name');
var valorCampo = $(this).val();
console.log(nombreCampo + ': ' + valorCampo);
});
Composer: Error porque el paquete a instalar no tiene SSL
composer config -g secure-http false
Y después ya instalar el paquete que se quiera sin problema:
composer require cboden/ratchet
CSS: Mostrar un texto sobre una imagen al hacer hover sobre ella
<html>
<head>
<style>
.hover-img {
background-color: #000;
color: #fff;
display: inline-block;
margin: 8px;
max-width: 320px;
min-width: 240px;
overflow: hidden;
position: relative;
text-align: center;
width: 100%;
}
.hover-img figcaption {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
align-items: center;
z-index: 1;
display: flex;
flex-direction: column;
justify-content: center;
line-height: 1.1em;
opacity: 0;
z-index: 2;
transition-delay: 0.1s;
font-size: 20px;
font-family: sans-serif;
font-weight: 400;
letter-spacing: 1px;
text-transform: uppercase;
}
.hover-img:hover img { /* oscurecer la imagen */
opacity:0.6;
}
.hover-img:hover figcaption { /* Mostrar el texto de invisible a visible */
opacity: 1;
}
.hover-img h2 {
font-size: 1.3em;
opacity: 0;
-webkit-transition: opacity 0.35s, -webkit-transform 0.35s;
transition: opacity 0.35s, transform 0.35s;
-webkit-transform: scale(1.5);
transform: scale(1.5);
.hover-img:hover h2 {
opacity: 1;
-webkit-transform: scale3d(1,1,1);
transform: scale3d(1,1,1);
}
</style>
</head>
<body>
<figure class="hover-img">
<img src="https://picsum.photos/id/200/440/320.jpg">
<figcaption>
<h2>En un lugar de la mancha</h2>
</figcaption>
</figure>
</body>
</html>
Más información en: https://www.30secondsofcode.org/css/s/image-overlay-hover/
PHPStorm: Hacer GIT desde develop a master
Hacer Pull: Ctrl+T
Hacer Push: Ctrl+K
Pasar de Develop a Master:
1. Primero hacerte un pull normal con Ctrl+T
2. En PHPStorm en GIT Version Control te saldrán los cambios q hay en repositorio
3. En PHPStorm: a la derecha del todo en master de colores darle a la flecha: Bajar a Remote -> Develop -> "Merge origjn/develop to master"
4. Una vez esté todo en tu ordenador pues hacerte un push con Ctrl+K para volver a subir al repositorio todo (ya directamente a master)
