From 89204733fc557bb5519139ffb5cbe9ab45652506 Mon Sep 17 00:00:00 2001
From: cefireazure2505
Date: Wed, 28 May 2025 11:24:31 +0200
Subject: [PATCH 01/38] Add or update the Azure App Service build and
deployment workflow config
---
.github/workflows/master_cefire-webapp01.yml | 78 ++++++++++++++++++++
1 file changed, 78 insertions(+)
create mode 100644 .github/workflows/master_cefire-webapp01.yml
diff --git a/.github/workflows/master_cefire-webapp01.yml b/.github/workflows/master_cefire-webapp01.yml
new file mode 100644
index 000000000..f0f01e834
--- /dev/null
+++ b/.github/workflows/master_cefire-webapp01.yml
@@ -0,0 +1,78 @@
+# Docs for the Azure Web Apps Deploy action: https://github.com/Azure/webapps-deploy
+# More GitHub Actions for Azure: https://github.com/Azure/actions
+
+name: Build and deploy PHP app to Azure Web App - cefire-webapp01
+
+on:
+ push:
+ branches:
+ - master
+ workflow_dispatch:
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read #This is required for actions/checkout
+
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Setup PHP
+ uses: shivammathur/setup-php@v2
+ with:
+ php-version: '8.2'
+
+ - name: Check if composer.json exists
+ id: check_files
+ uses: andstor/file-existence-action@v1
+ with:
+ files: 'composer.json'
+
+ - name: Run composer install if composer.json exists
+ if: steps.check_files.outputs.files_exists == 'true'
+ run: composer validate --no-check-publish && composer install --prefer-dist --no-progress
+
+ - name: Zip artifact for deployment
+ run: zip release.zip ./* -r
+
+ - name: Upload artifact for deployment job
+ uses: actions/upload-artifact@v4
+ with:
+ name: php-app
+ path: release.zip
+
+ deploy:
+ runs-on: ubuntu-latest
+ needs: build
+ environment:
+ name: 'Production'
+ url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}
+ permissions:
+ id-token: write #This is required for requesting the JWT
+ contents: read #This is required for actions/checkout
+
+ steps:
+ - name: Download artifact from build job
+ uses: actions/download-artifact@v4
+ with:
+ name: php-app
+
+ - name: Unzip artifact for deployment
+ run: unzip release.zip
+
+ - name: Login to Azure
+ uses: azure/login@v2
+ with:
+ client-id: ${{ secrets.AZUREAPPSERVICE_CLIENTID_20740F51F07142D4A3EF20F6A03ECC08 }}
+ tenant-id: ${{ secrets.AZUREAPPSERVICE_TENANTID_793CCE6A62434C228776CCC9F5C664F9 }}
+ subscription-id: ${{ secrets.AZUREAPPSERVICE_SUBSCRIPTIONID_C0A9580164B344EBA102B2C5AD159EE2 }}
+
+ - name: 'Deploy to Azure Web App'
+ uses: azure/webapps-deploy@v3
+ id: deploy-to-webapp
+ with:
+ app-name: 'cefire-webapp01'
+ slot-name: 'Production'
+ package: .
+
\ No newline at end of file
From c50605053131e45bd500a7ef35858e66e99fd20c Mon Sep 17 00:00:00 2001
From: cefireazure2505
Date: Wed, 28 May 2025 11:38:07 +0200
Subject: [PATCH 02/38] Update index.php
---
index.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/index.php b/index.php
index 82966e27a..43c4ee0e3 100644
--- a/index.php
+++ b/index.php
@@ -1,3 +1,3 @@
Date: Wed, 28 May 2025 11:41:35 +0200
Subject: [PATCH 03/38] Update index.php
---
index.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/index.php b/index.php
index 43c4ee0e3..82966e27a 100644
--- a/index.php
+++ b/index.php
@@ -1,3 +1,3 @@
Date: Wed, 28 May 2025 19:23:32 +0200
Subject: [PATCH 04/38] Create prueba_conexion.php
---
prueba_conexion.php | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
create mode 100644 prueba_conexion.php
diff --git a/prueba_conexion.php b/prueba_conexion.php
new file mode 100644
index 000000000..5b79c07b2
--- /dev/null
+++ b/prueba_conexion.php
@@ -0,0 +1,30 @@
+ PDO::ERRMODE_EXCEPTION, // Excepciones en errores
+ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // Fetch como array asociativo
+ PDO::ATTR_EMULATE_PREPARES => false, // Desactivar emulación de prepares
+ ];
+
+ // Crear la conexión PDO
+ $pdo = new PDO($dsn, $dbUser, $dbPass, $options);
+ echo "Conexión exitosa a la base de datos '{$dbName}' en '{$dbHost}'.";
+} catch (PDOException $e) {
+ // Manejo de error de conexión
+ error_log('Error de conexión PDO: ' . $e->getMessage());
+ echo "Error al conectar con la base de datos.";
+ exit;
+}
From ef599e63405205e0c96602b48b3d286109f4d830 Mon Sep 17 00:00:00 2001
From: cefireazure2505
Date: Wed, 28 May 2025 19:27:55 +0200
Subject: [PATCH 05/38] Update prueba_conexion.php
---
prueba_conexion.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/prueba_conexion.php b/prueba_conexion.php
index 5b79c07b2..b07787acc 100644
--- a/prueba_conexion.php
+++ b/prueba_conexion.php
@@ -24,7 +24,7 @@
echo "Conexión exitosa a la base de datos '{$dbName}' en '{$dbHost}'.";
} catch (PDOException $e) {
// Manejo de error de conexión
- error_log('Error de conexión PDO: ' . $e->getMessage());
+ echo "Error de conexión PDO: " . $e->getMessage());
echo "Error al conectar con la base de datos.";
exit;
}
From 57e3b351c35c3340b859832ebdd04a7baf7be492 Mon Sep 17 00:00:00 2001
From: cefireazure2505
Date: Wed, 28 May 2025 19:30:09 +0200
Subject: [PATCH 06/38] Update prueba_conexion.php
---
prueba_conexion.php | 27 +++++++++++++++++----------
1 file changed, 17 insertions(+), 10 deletions(-)
diff --git a/prueba_conexion.php b/prueba_conexion.php
index b07787acc..fb5897ab5 100644
--- a/prueba_conexion.php
+++ b/prueba_conexion.php
@@ -1,30 +1,37 @@
PDO::ERRMODE_EXCEPTION, // Excepciones en errores
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // Fetch como array asociativo
PDO::ATTR_EMULATE_PREPARES => false, // Desactivar emulación de prepares
+
+ // Asegurar la conexión TLS hacia Azure Database for MySQL
+ PDO::MYSQL_ATTR_SSL_CA => '/etc/ssl/certs/BaltimoreCyberTrustRoot.crt.pem',
+ PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => true,
];
// Crear la conexión PDO
$pdo = new PDO($dsn, $dbUser, $dbPass, $options);
- echo "Conexión exitosa a la base de datos '{$dbName}' en '{$dbHost}'.";
+
+ // Ejemplo: consulta sencilla
+ $stmt = $pdo->query('SELECT NOW() AS fecha_actual;');
+ $fila = $stmt->fetch();
+ echo "Conectado correctamente. Hora del servidor: " . $fila['fecha_actual'];
} catch (PDOException $e) {
- // Manejo de error de conexión
echo "Error de conexión PDO: " . $e->getMessage());
- echo "Error al conectar con la base de datos.";
+ echo "Error al conectar con la base de datos: " . htmlspecialchars($e->getMessage());
exit;
}
From bd8e3883b1f81e579446aa76988b93867404e52e Mon Sep 17 00:00:00 2001
From: cefireazure2505
Date: Wed, 28 May 2025 19:31:51 +0200
Subject: [PATCH 07/38] Update prueba_conexion.php
---
prueba_conexion.php | 30 +++++-------------------------
1 file changed, 5 insertions(+), 25 deletions(-)
diff --git a/prueba_conexion.php b/prueba_conexion.php
index fb5897ab5..8eb902c5e 100644
--- a/prueba_conexion.php
+++ b/prueba_conexion.php
@@ -9,29 +9,9 @@
throw new \RuntimeException('Faltan variables de entorno para la conexión a la base de datos.');
}
-// DSN con charset utf8mb4
-$dsn = "mysql:host={$dbHost};dbname={$dbName};charset=utf8mb4";
-
-try {
- $options = [
- PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // Excepciones en errores
- PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // Fetch como array asociativo
- PDO::ATTR_EMULATE_PREPARES => false, // Desactivar emulación de prepares
-
- // Asegurar la conexión TLS hacia Azure Database for MySQL
- PDO::MYSQL_ATTR_SSL_CA => '/etc/ssl/certs/BaltimoreCyberTrustRoot.crt.pem',
- PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => true,
- ];
-
- // Crear la conexión PDO
- $pdo = new PDO($dsn, $dbUser, $dbPass, $options);
-
- // Ejemplo: consulta sencilla
- $stmt = $pdo->query('SELECT NOW() AS fecha_actual;');
- $fila = $stmt->fetch();
- echo "Conectado correctamente. Hora del servidor: " . $fila['fecha_actual'];
-} catch (PDOException $e) {
- echo "Error de conexión PDO: " . $e->getMessage());
- echo "Error al conectar con la base de datos: " . htmlspecialchars($e->getMessage());
- exit;
+//Establishes the connection
+$conn = mysqli_init();
+mysqli_real_connect($conn, $dbHost, $dbUser, $dbPass, $dbName, 3306);
+if (mysqli_connect_errno($conn)) {f
+ die('Failed to connect to MySQL: '.mysqli_connect_error());
}
From 2c27a135d3e295d713d0414cd26252187436208b Mon Sep 17 00:00:00 2001
From: cefireazure2505
Date: Wed, 28 May 2025 19:36:13 +0200
Subject: [PATCH 08/38] Update prueba_conexion.php
---
prueba_conexion.php | 10 +---------
1 file changed, 1 insertion(+), 9 deletions(-)
diff --git a/prueba_conexion.php b/prueba_conexion.php
index 8eb902c5e..12e3604e1 100644
--- a/prueba_conexion.php
+++ b/prueba_conexion.php
@@ -5,13 +5,5 @@
$dbUser = getenv('DB_USER'); // e.g. adminuser@mysql-cefire01
$dbPass = getenv('DB_PASS'); // tu contraseña
-if (!$dbHost || !$dbName || !$dbUser || $dbPass === false) {
- throw new \RuntimeException('Faltan variables de entorno para la conexión a la base de datos.');
-}
+echo $dbHost . " " . $dbName . " " . $dbUser . " " . $dbPass;
-//Establishes the connection
-$conn = mysqli_init();
-mysqli_real_connect($conn, $dbHost, $dbUser, $dbPass, $dbName, 3306);
-if (mysqli_connect_errno($conn)) {f
- die('Failed to connect to MySQL: '.mysqli_connect_error());
-}
From 473c1235d58b47bce7337102ca49b599f9bca66d Mon Sep 17 00:00:00 2001
From: cefireazure2505
Date: Wed, 28 May 2025 19:36:45 +0200
Subject: [PATCH 09/38] Rename prueba_conexion.php to conexion.php
---
prueba_conexion.php => conexion.php | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename prueba_conexion.php => conexion.php (100%)
diff --git a/prueba_conexion.php b/conexion.php
similarity index 100%
rename from prueba_conexion.php
rename to conexion.php
From d66afe7b909bfd0c0e3e6df3c676bdf0e81d1286 Mon Sep 17 00:00:00 2001
From: cefireazure2505
Date: Wed, 28 May 2025 19:38:22 +0200
Subject: [PATCH 10/38] Update conexion.php
---
conexion.php | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/conexion.php b/conexion.php
index 12e3604e1..41cfc9ea8 100644
--- a/conexion.php
+++ b/conexion.php
@@ -1,9 +1,9 @@
Date: Wed, 28 May 2025 19:39:13 +0200
Subject: [PATCH 11/38] Update conexion.php
---
conexion.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/conexion.php b/conexion.php
index 41cfc9ea8..32f0629b8 100644
--- a/conexion.php
+++ b/conexion.php
@@ -3,7 +3,7 @@
$dbHost = getenv('DB_HOST');
$dbName = "prueba";
$dbUser = getenv('DB_USER');
-$dbPass = getenv('DB_PASS');
+$dbPass = getenv('DB_PASSWORD');
echo $dbHost . " " . $dbName . " " . $dbUser . " " . $dbPass;
From 7473834a669a2dd2eebc182db0bb32c9103c0faf Mon Sep 17 00:00:00 2001
From: cefireazure2505
Date: Wed, 28 May 2025 19:40:03 +0200
Subject: [PATCH 12/38] Update conexion.php
---
conexion.php | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
diff --git a/conexion.php b/conexion.php
index 32f0629b8..8a9cac0ad 100644
--- a/conexion.php
+++ b/conexion.php
@@ -7,3 +7,33 @@
echo $dbHost . " " . $dbName . " " . $dbUser . " " . $dbPass;
+if (!$dbHost || !$dbName || !$dbUser || $dbPass === false) {
+ throw new \RuntimeException('Faltan variables de entorno para la conexión a la base de datos.');
+}
+
+// DSN con charset utf8mb4
+$dsn = "mysql:host={$dbHost};dbname={$dbName};charset=utf8mb4";
+
+try {
+ $options = [
+ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // Excepciones en errores
+ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // Fetch como array asociativo
+ PDO::ATTR_EMULATE_PREPARES => false, // Desactivar emulación de prepares
+
+ // Asegurar la conexión TLS hacia Azure Database for MySQL
+ PDO::MYSQL_ATTR_SSL_CA => '/etc/ssl/certs/BaltimoreCyberTrustRoot.crt.pem',
+ PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => true,
+ ];
+
+ // Crear la conexión PDO
+ $pdo = new PDO($dsn, $dbUser, $dbPass, $options);
+
+ // Ejemplo: consulta sencilla
+ $stmt = $pdo->query('SELECT NOW() AS fecha_actual;');
+ $fila = $stmt->fetch();
+ echo "Conectado correctamente. Hora del servidor: " . $fila['fecha_actual'];
+} catch (PDOException $e) {
+ error_log('Error de conexión PDO: ' . $e->getMessage());
+ echo "Error al conectar con la base de datos: " . htmlspecialchars($e->getMessage());
+ exit;
+}
From 21d957497f655cc4aa3060a2d73cbd584948b3f1 Mon Sep 17 00:00:00 2001
From: cefireazure2505
Date: Wed, 28 May 2025 19:41:07 +0200
Subject: [PATCH 13/38] Update conexion.php
---
conexion.php | 2 --
1 file changed, 2 deletions(-)
diff --git a/conexion.php b/conexion.php
index 8a9cac0ad..81e6be7aa 100644
--- a/conexion.php
+++ b/conexion.php
@@ -5,8 +5,6 @@
$dbUser = getenv('DB_USER');
$dbPass = getenv('DB_PASSWORD');
-echo $dbHost . " " . $dbName . " " . $dbUser . " " . $dbPass;
-
if (!$dbHost || !$dbName || !$dbUser || $dbPass === false) {
throw new \RuntimeException('Faltan variables de entorno para la conexión a la base de datos.');
}
From dfed7cdbda02763ebb6c2987a685d71b709ed08a Mon Sep 17 00:00:00 2001
From: cefireazure2505
Date: Wed, 28 May 2025 19:42:31 +0200
Subject: [PATCH 14/38] Update conexion.php
---
conexion.php | 26 +++++++++++---------------
1 file changed, 11 insertions(+), 15 deletions(-)
diff --git a/conexion.php b/conexion.php
index 81e6be7aa..1c4e2ee8b 100644
--- a/conexion.php
+++ b/conexion.php
@@ -14,24 +14,20 @@
try {
$options = [
- PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // Excepciones en errores
- PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // Fetch como array asociativo
- PDO::ATTR_EMULATE_PREPARES => false, // Desactivar emulación de prepares
+ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
+ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
+ PDO::ATTR_EMULATE_PREPARES => false,
- // Asegurar la conexión TLS hacia Azure Database for MySQL
- PDO::MYSQL_ATTR_SSL_CA => '/etc/ssl/certs/BaltimoreCyberTrustRoot.crt.pem',
- PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => true,
+ // Asegurar la conexión TLS:
+ PDO::MYSQL_ATTR_SSL_CA => '/home/site/certs/BaltimoreCyberTrustRoot.crt.pem',
+ // Si el nombre de host del certificado no coincide,
+ // desactivar la verificación estricta:
+ PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false,
];
- // Crear la conexión PDO
$pdo = new PDO($dsn, $dbUser, $dbPass, $options);
-
- // Ejemplo: consulta sencilla
- $stmt = $pdo->query('SELECT NOW() AS fecha_actual;');
- $fila = $stmt->fetch();
- echo "Conectado correctamente. Hora del servidor: " . $fila['fecha_actual'];
+ echo "Conexión SSL establecida correctamente.";
} catch (PDOException $e) {
- error_log('Error de conexión PDO: ' . $e->getMessage());
- echo "Error al conectar con la base de datos: " . htmlspecialchars($e->getMessage());
- exit;
+ error_log('Error PDO SSL: ' . $e->getMessage());
+ echo "Error de conexión SSL: " . htmlspecialchars($e->getMessage());
}
From 06bac537629f19733f631fbf70bceca5ec1112db Mon Sep 17 00:00:00 2001
From: cefireazure2505
Date: Wed, 28 May 2025 19:45:13 +0200
Subject: [PATCH 15/38] Update conexion.php
---
conexion.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/conexion.php b/conexion.php
index 1c4e2ee8b..8a1887189 100644
--- a/conexion.php
+++ b/conexion.php
@@ -22,7 +22,7 @@
PDO::MYSQL_ATTR_SSL_CA => '/home/site/certs/BaltimoreCyberTrustRoot.crt.pem',
// Si el nombre de host del certificado no coincide,
// desactivar la verificación estricta:
- PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false,
+ PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => true,
];
$pdo = new PDO($dsn, $dbUser, $dbPass, $options);
From f3d4204eaaf480a3ab321b06e93af3a0c2a68de7 Mon Sep 17 00:00:00 2001
From: cefireazure2505
Date: Wed, 28 May 2025 19:45:54 +0200
Subject: [PATCH 16/38] Update conexion.php
---
conexion.php | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/conexion.php b/conexion.php
index 8a1887189..e7117d322 100644
--- a/conexion.php
+++ b/conexion.php
@@ -20,13 +20,12 @@
// Asegurar la conexión TLS:
PDO::MYSQL_ATTR_SSL_CA => '/home/site/certs/BaltimoreCyberTrustRoot.crt.pem',
- // Si el nombre de host del certificado no coincide,
- // desactivar la verificación estricta:
+ // Activamos la validación de certificado SSL
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => true,
];
$pdo = new PDO($dsn, $dbUser, $dbPass, $options);
- echo "Conexión SSL establecida correctamente.";
+ echo "Conexión SSL establecida correctamente contra la bbdd.";
} catch (PDOException $e) {
error_log('Error PDO SSL: ' . $e->getMessage());
echo "Error de conexión SSL: " . htmlspecialchars($e->getMessage());
From 5e2ef5b0493599ce991fdc4af4d44a0214bfbca9 Mon Sep 17 00:00:00 2001
From: cefireazure2505
Date: Wed, 28 May 2025 19:46:33 +0200
Subject: [PATCH 17/38] Update conexion.php
---
conexion.php | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/conexion.php b/conexion.php
index e7117d322..768aabef6 100644
--- a/conexion.php
+++ b/conexion.php
@@ -20,8 +20,8 @@
// Asegurar la conexión TLS:
PDO::MYSQL_ATTR_SSL_CA => '/home/site/certs/BaltimoreCyberTrustRoot.crt.pem',
- // Activamos la validación de certificado SSL
- PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => true,
+ // Desactivamos la validación de certificado SSL, para evitar error de conexión
+ PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false,
];
$pdo = new PDO($dsn, $dbUser, $dbPass, $options);
From 88fd40cffcab22ac0f10d30900cb1036c55da53b Mon Sep 17 00:00:00 2001
From: cefireazure2505
Date: Wed, 28 May 2025 19:47:33 +0200
Subject: [PATCH 18/38] Update conexion.php
---
conexion.php | 23 ++++++++++++++---------
1 file changed, 14 insertions(+), 9 deletions(-)
diff --git a/conexion.php b/conexion.php
index 768aabef6..e8c3e6637 100644
--- a/conexion.php
+++ b/conexion.php
@@ -14,19 +14,24 @@
try {
$options = [
- PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
- PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
- PDO::ATTR_EMULATE_PREPARES => false,
+ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // Excepciones en errores
+ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // Fetch como array asociativo
+ PDO::ATTR_EMULATE_PREPARES => false, // Desactivar emulación de prepares
- // Asegurar la conexión TLS:
- PDO::MYSQL_ATTR_SSL_CA => '/home/site/certs/BaltimoreCyberTrustRoot.crt.pem',
- // Desactivamos la validación de certificado SSL, para evitar error de conexión
+ // Asegurar la conexión TLS hacia Azure Database for MySQL
+ PDO::MYSQL_ATTR_SSL_CA => '/etc/ssl/certs/BaltimoreCyberTrustRoot.crt.pem',
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false,
];
+ // Crear la conexión PDO
$pdo = new PDO($dsn, $dbUser, $dbPass, $options);
- echo "Conexión SSL establecida correctamente contra la bbdd.";
+
+ // Ejemplo: consulta sencilla
+ $stmt = $pdo->query('SELECT NOW() AS fecha_actual;');
+ $fila = $stmt->fetch();
+ echo "Conectado correctamente. Hora del servidor: " . $fila['fecha_actual'];
} catch (PDOException $e) {
- error_log('Error PDO SSL: ' . $e->getMessage());
- echo "Error de conexión SSL: " . htmlspecialchars($e->getMessage());
+ error_log('Error de conexión PDO: ' . $e->getMessage());
+ echo "Error al conectar con la base de datos: " . htmlspecialchars($e->getMessage());
+ exit;
}
From 195cc835402585df93637aa0c456776ec5b6d033 Mon Sep 17 00:00:00 2001
From: cefireazure2505
Date: Wed, 28 May 2025 19:51:04 +0200
Subject: [PATCH 19/38] Update conexion.php
---
conexion.php | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/conexion.php b/conexion.php
index e8c3e6637..077a2bc3b 100644
--- a/conexion.php
+++ b/conexion.php
@@ -5,7 +5,7 @@
$dbUser = getenv('DB_USER');
$dbPass = getenv('DB_PASSWORD');
-if (!$dbHost || !$dbName || !$dbUser || $dbPass === false) {
+if (!$dbHost || !$dbUser || $dbPass === false) {
throw new \RuntimeException('Faltan variables de entorno para la conexión a la base de datos.');
}
@@ -14,12 +14,16 @@
try {
$options = [
- PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // Excepciones en errores
- PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // Fetch como array asociativo
- PDO::ATTR_EMULATE_PREPARES => false, // Desactivar emulación de prepares
+ // Excepciones en errores
+ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
+ // Fetch como array asociativo
+ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
+ // Desactivar emulación de prepares
+ PDO::ATTR_EMULATE_PREPARES => false,
// Asegurar la conexión TLS hacia Azure Database for MySQL
PDO::MYSQL_ATTR_SSL_CA => '/etc/ssl/certs/BaltimoreCyberTrustRoot.crt.pem',
+ // Desactivamos la validación del certificado SSL
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false,
];
From 2fbcdb742708cec6b48000d2a5efec62ebb886dd Mon Sep 17 00:00:00 2001
From: cefireazure2505
Date: Fri, 13 Jun 2025 14:03:50 +0200
Subject: [PATCH 20/38] Create descomprimir.php
---
descomprimir.php | 53 ++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 53 insertions(+)
create mode 100644 descomprimir.php
diff --git a/descomprimir.php b/descomprimir.php
new file mode 100644
index 000000000..4cc05fa41
--- /dev/null
+++ b/descomprimir.php
@@ -0,0 +1,53 @@
+setPrefix(""); // Sin prefijo específico
+$blobs = $blobClient->listBlobs($sourceContainer, $options);
+
+foreach ($blobs->getBlobs() as $blob) {
+ if (strtolower(pathinfo($blob->getName(), PATHINFO_EXTENSION)) !== "zip") {
+ continue;
+ }
+
+ echo "Procesando ZIP: " . $blob->getName() . PHP_EOL;
+
+ // Descargar el ZIP
+ $zipContent = $blobClient->getBlob($sourceContainer, $blob->getName())->getContentStream();
+ $tempZip = tempnam(sys_get_temp_dir(), 'zip');
+ file_put_contents($tempZip, stream_get_contents($zipContent));
+
+ $zip = new ZipArchive();
+ if ($zip->open($tempZip) === TRUE) {
+ for ($i = 0; $i < $zip->numFiles; $i++) {
+ $entry = $zip->getNameIndex($i);
+ $fileContent = $zip->getFromIndex($i);
+ if ($fileContent !== false) {
+ $uploadOptions = new CreateBlockBlobOptions();
+ $blobClient->createBlockBlob($targetContainer, $entry, $fileContent, $uploadOptions);
+ echo "Extraído y subido: $entry" . PHP_EOL;
+ }
+ }
+ $zip->close();
+ } else {
+ echo "Error abriendo el ZIP: " . $blob->getName() . PHP_EOL;
+ }
+
+ unlink($tempZip);
+ break; // Solo procesamos el primer ZIP para este ejemplo
+}
+
+?>
From 65b04a77b561ab199733244589c1de99e30306d5 Mon Sep 17 00:00:00 2001
From: cefireazure2505
Date: Fri, 13 Jun 2025 14:04:13 +0200
Subject: [PATCH 21/38] Create composer.json
---
composer.json | 5 +++++
1 file changed, 5 insertions(+)
create mode 100644 composer.json
diff --git a/composer.json b/composer.json
new file mode 100644
index 000000000..ffd6551e1
--- /dev/null
+++ b/composer.json
@@ -0,0 +1,5 @@
+{
+ "require": {
+ "microsoft/azure-storage-blob": "^1.5"
+ }
+}
From 7e6a7eb59ac133d7ab2ff97540e3b4cc2f961603 Mon Sep 17 00:00:00 2001
From: cefireazure2505
Date: Sun, 15 Jun 2025 13:28:31 +0200
Subject: [PATCH 22/38] Create storage.php
---
storage.php | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 79 insertions(+)
create mode 100644 storage.php
diff --git a/storage.php b/storage.php
new file mode 100644
index 000000000..c82c23bfd
--- /dev/null
+++ b/storage.php
@@ -0,0 +1,79 @@
+deleteFile($shareName, $directoryName, $fileToDelete);
+ echo "Archivo $fileToDelete eliminado correctamente.
";
+ } catch (ServiceException $e) {
+ echo "Error al eliminar: " . $e->getMessage() . "
";
+ }
+}
+
+// ⬆️ Subida de archivo ZIP
+if ($_SERVER["REQUEST_METHOD"] === "POST" && isset($_FILES["zipfile"])) {
+ $uploadedFile = $_FILES["zipfile"];
+ if ($uploadedFile["type"] !== "application/zip") {
+ echo "Solo se permiten archivos ZIP.
";
+ } else {
+ $fileName = basename($uploadedFile["name"]);
+ $fileContent = file_get_contents($uploadedFile["tmp_name"]);
+ $fileSize = filesize($uploadedFile["tmp_name"]);
+
+ try {
+ $fileClient->createFile($shareName, $directoryName, $fileName, $fileSize);
+ $fileClient->createFileRangeFromContent($shareName, $directoryName, $fileName, $fileContent, 0, $fileSize - 1);
+ echo "Archivo $fileName subido correctamente.
";
+ } catch (ServiceException $e) {
+ echo "Error al subir: " . $e->getMessage() . "
";
+ }
+ }
+}
+
+// 📂 Listado de archivos
+try {
+ $options = new ListDirectoriesAndFilesOptions();
+ $result = $fileClient->listDirectoriesAndFiles($shareName, $directoryName, $options);
+ $files = $result->getFiles();
+} catch (ServiceException $e) {
+ die("Error al listar archivos: " . $e->getMessage());
+}
+?>
+
+
+
+
+ Gestión de ZIPs en Azure Files
+
+
+ Archivos en Azure Files
+
+
+ -
+ = htmlspecialchars($file->getName()) ?>
+ [Eliminar]
+
+
+
+
+ Subir archivo ZIP
+
+
+
From c30ff98d6084735ad581c8408b351562a3e4a4ed Mon Sep 17 00:00:00 2001
From: cefireazure2505
Date: Sun, 15 Jun 2025 13:39:15 +0200
Subject: [PATCH 23/38] Update storage.php
---
storage.php | 54 ++++++++++++++++++++++++++---------------------------
1 file changed, 26 insertions(+), 28 deletions(-)
diff --git a/storage.php b/storage.php
index c82c23bfd..9c2f09793 100644
--- a/storage.php
+++ b/storage.php
@@ -1,54 +1,50 @@
deleteFile($shareName, $directoryName, $fileToDelete);
- echo "Archivo $fileToDelete eliminado correctamente.
";
+ $blobClient->deleteBlob($containerName, $blobToDelete);
+ echo "Archivo $blobToDelete eliminado correctamente.
";
} catch (ServiceException $e) {
echo "Error al eliminar: " . $e->getMessage() . "
";
}
}
-// ⬆️ Subida de archivo ZIP
+// Subida de archivo ZIP
if ($_SERVER["REQUEST_METHOD"] === "POST" && isset($_FILES["zipfile"])) {
$uploadedFile = $_FILES["zipfile"];
if ($uploadedFile["type"] !== "application/zip") {
echo "Solo se permiten archivos ZIP.
";
} else {
- $fileName = basename($uploadedFile["name"]);
- $fileContent = file_get_contents($uploadedFile["tmp_name"]);
- $fileSize = filesize($uploadedFile["tmp_name"]);
+ $blobName = basename($uploadedFile["name"]);
+ $content = fopen($uploadedFile["tmp_name"], "r");
try {
- $fileClient->createFile($shareName, $directoryName, $fileName, $fileSize);
- $fileClient->createFileRangeFromContent($shareName, $directoryName, $fileName, $fileContent, 0, $fileSize - 1);
- echo "Archivo $fileName subido correctamente.
";
+ $blobClient->createBlockBlob($containerName, $blobName, $content);
+ echo "Archivo $blobName subido correctamente.
";
} catch (ServiceException $e) {
echo "Error al subir: " . $e->getMessage() . "
";
}
}
}
-// 📂 Listado de archivos
+// Listar archivos
try {
- $options = new ListDirectoriesAndFilesOptions();
- $result = $fileClient->listDirectoriesAndFiles($shareName, $directoryName, $options);
- $files = $result->getFiles();
+ $listOptions = new ListBlobsOptions();
+ $blobList = $blobClient->listBlobs($containerName, $listOptions);
+ $blobs = $blobList->getBlobs();
} catch (ServiceException $e) {
die("Error al listar archivos: " . $e->getMessage());
}
@@ -57,20 +53,22 @@
- Gestión de ZIPs en Azure Files
+ Gestor de archivos ZIP en Azure Blob
- Archivos en Azure Files
+ Archivos ZIP en el contenedor '= htmlspecialchars($containerName) ?>'
- Subir archivo ZIP
+ Subir nuevo archivo ZIP
";
+ } else {
+ try {
+ $sasHelper = new SharedAccessSignatureHelper($accountName, $accountKey);
+ } catch (Exception $e) {
+ echo "Error creando SAS Helper: " . $e->getMessage() . "
";
+ }
+ }
+ ?>
-
+
= htmlspecialchars($blob->getName()) ?>
- [Eliminar]
+ [Eliminar]
From cffd554101f29bc792688015338268e89b61949a Mon Sep 17 00:00:00 2001
From: cefireazure2505
Date: Tue, 24 Jun 2025 14:02:41 +0200
Subject: [PATCH 26/38] Update storage.php
---
storage.php | 151 ++++++++++++++++++++++------------------------------
1 file changed, 63 insertions(+), 88 deletions(-)
diff --git a/storage.php b/storage.php
index f6e26f938..cd08cf90b 100644
--- a/storage.php
+++ b/storage.php
@@ -1,129 +1,104 @@
deleteBlob($containerName, $blobToDelete);
- echo "Archivo $blobToDelete eliminado correctamente.
";
- } catch (ServiceException $e) {
- echo "Error al eliminar: " .
- $e->getMessage() .
- "
";
+ $blob = $blobClient->getBlob($containerName, $blobName);
+ $content = stream_get_contents($blob->getContentStream());
+
+ header('Content-Type: application/zip');
+ header('Content-Disposition: attachment; filename="' . basename($blobName) . '"');
+ header('Content-Length: ' . strlen($content));
+
+ echo $content;
+ exit;
+ } catch (Exception $e) {
+ http_response_code(500);
+ echo "Error al descargar el archivo: " . $e->getMessage();
+ exit;
}
}
-// Subida de archivo ZIP
-if ($_SERVER["REQUEST_METHOD"] === "POST" && isset($_FILES["zipfile"])) {
- $uploadedFile = $_FILES["zipfile"];
-
- $blobName = basename($uploadedFile["name"]);
- $extension = strtolower(pathinfo($blobName, PATHINFO_EXTENSION));
-
- if ($extension !== "zip") {
- echo "Solo se permiten archivos con extensión .zip.
";
- } else {
- // (Opcional) Verificación adicional por tipo MIME real:
- $finfo = finfo_open(FILEINFO_MIME_TYPE);
- $mimeType = finfo_file($finfo, $uploadedFile["tmp_name"]);
- finfo_close($finfo);
-
- if (
- $mimeType !== "application/zip" &&
- $mimeType !== "application/x-zip-compressed"
- ) {
- echo "El archivo no parece ser un ZIP válido (MIME: $mimeType).
";
- } else {
- $blobName = basename($uploadedFile["name"]);
- $content = fopen($uploadedFile["tmp_name"], "r");
+// Eliminar archivo si se envió solicitud
+if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['delete_blob'])) {
+ try {
+ $blobClient->deleteBlob($containerName, $_POST['delete_blob']);
+ echo "Archivo eliminado: {$_POST['delete_blob']}
";
+ } catch (Exception $e) {
+ echo "Error al eliminar: {$e->getMessage()}
";
+ }
+}
- try {
- $blobClient->createBlockBlob(
- $containerName,
- $blobName,
- $content
- );
- echo "Archivo $blobName subido correctamente.
";
- } catch (ServiceException $e) {
- echo "Error al subir: " .
- $e->getMessage() .
- "
";
- }
+// Subir archivo nuevo
+if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['zipfile'])) {
+ $file = $_FILES['zipfile'];
+ if ($file['error'] === UPLOAD_ERR_OK && mime_content_type($file['tmp_name']) === 'application/zip') {
+ $blobName = basename($file['name']);
+ try {
+ $content = fopen($file['tmp_name'], 'r');
+ $blobClient->createBlockBlob($containerName, $blobName, $content);
+ echo "Archivo subido: {$blobName}
";
+ } catch (Exception $e) {
+ echo "Error al subir: {$e->getMessage()}
";
}
+ } else {
+ echo "Solo se permiten archivos .zip válidos.
";
}
}
-// Listar archivos
+// Listar blobs
try {
- $listOptions = new ListBlobsOptions();
- $blobList = $blobClient->listBlobs($containerName, $listOptions);
+ $blobList = $blobClient->listBlobs($containerName, new ListBlobsOptions());
$blobs = $blobList->getBlobs();
-} catch (ServiceException $e) {
- die("Error al listar archivos: " . $e->getMessage());
+} catch (Exception $e) {
+ die("Error al listar blobs: " . $e->getMessage());
}
?>
-
+
+
Gestor de archivos ZIP en Azure Blob
- Archivos ZIP en el contenedor '= htmlspecialchars(
- $containerName
- ) ?>'
-
- Archivos ZIP en '= htmlspecialchars($containerName) ?>'
- if (preg_match("/AccountName=([^;]+)/", $connectionString, $matches1)) {
- $accountName = $matches1[1];
- }
-
- if (preg_match("/AccountKey=([^;]+)/", $connectionString, $matches2)) {
- $accountKey = $matches2[1];
- }
-
- if (!$accountName || !$accountKey) {
- echo "No se pudo extraer la clave de acceso de la cadena de conexión.
";
- } else {
- try {
- $sasHelper = new SharedAccessSignatureHelper($accountName, $accountKey);
- } catch (Exception $e) {
- echo "Error creando SAS Helper: " . $e->getMessage() . "
";
- }
- }
- ?>
+
Subir nuevo archivo ZIP
From a0591ddf38190c7a370600b8086b7c9e25c66983 Mon Sep 17 00:00:00 2001
From: Jonman-JM <57720716+Jonman-JM@users.noreply.github.com>
Date: Fri, 28 Nov 2025 22:51:23 +0100
Subject: [PATCH 27/38] Add or update the Azure App Service build and
deployment workflow config
---
.../workflows/master_cefire-webapp0001.yml | 70 +++++++++++++++++++
1 file changed, 70 insertions(+)
create mode 100644 .github/workflows/master_cefire-webapp0001.yml
diff --git a/.github/workflows/master_cefire-webapp0001.yml b/.github/workflows/master_cefire-webapp0001.yml
new file mode 100644
index 000000000..9ea9aa543
--- /dev/null
+++ b/.github/workflows/master_cefire-webapp0001.yml
@@ -0,0 +1,70 @@
+# Docs for the Azure Web Apps Deploy action: https://github.com/Azure/webapps-deploy
+# More GitHub Actions for Azure: https://github.com/Azure/actions
+
+name: Build and deploy PHP app to Azure Web App - cefire-webapp0001
+
+on:
+ push:
+ branches:
+ - master
+ workflow_dispatch:
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read #This is required for actions/checkout
+
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Setup PHP
+ uses: shivammathur/setup-php@v2
+ with:
+ php-version: '8.2'
+
+ - name: Check if composer.json exists
+ id: check_files
+ uses: andstor/file-existence-action@v1
+ with:
+ files: 'composer.json'
+
+ - name: Run composer install if composer.json exists
+ if: steps.check_files.outputs.files_exists == 'true'
+ run: composer validate --no-check-publish && composer install --prefer-dist --no-progress
+
+
+ - name: Upload artifact for deployment job
+ uses: actions/upload-artifact@v4
+ with:
+ name: php-app
+ path: .
+
+ deploy:
+ runs-on: ubuntu-latest
+ needs: build
+ permissions:
+ id-token: write #This is required for requesting the JWT
+ contents: read #This is required for actions/checkout
+
+ steps:
+ - name: Download artifact from build job
+ uses: actions/download-artifact@v4
+ with:
+ name: php-app
+
+ - name: Login to Azure
+ uses: azure/login@v2
+ with:
+ client-id: ${{ secrets.AZUREAPPSERVICE_CLIENTID_965E3188695B49EDB8C67E5A7B73E441 }}
+ tenant-id: ${{ secrets.AZUREAPPSERVICE_TENANTID_762C13F281664B218F8E41A1D13D5F0A }}
+ subscription-id: ${{ secrets.AZUREAPPSERVICE_SUBSCRIPTIONID_BABD884DB13F4683B59173811276EAB7 }}
+
+ - name: 'Deploy to Azure Web App'
+ uses: azure/webapps-deploy@v3
+ id: deploy-to-webapp
+ with:
+ app-name: 'cefire-webapp0001'
+ slot-name: 'Production'
+ package: .
+
\ No newline at end of file
From 7debafff6f3590cd9963e4c9817daa1c9d545e39 Mon Sep 17 00:00:00 2001
From: Jonman-JM <57720716+Jonman-JM@users.noreply.github.com>
Date: Fri, 28 Nov 2025 23:24:39 +0100
Subject: [PATCH 28/38] Update index.php
---
index.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/index.php b/index.php
index 82966e27a..7bb9704c4 100644
--- a/index.php
+++ b/index.php
@@ -1,3 +1,3 @@
Date: Fri, 12 Dec 2025 11:35:30 +0100
Subject: [PATCH 29/38] Add or update the Azure App Service build and
deployment workflow config
---
.github/workflows/master_cefire-webapp0001.yml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/.github/workflows/master_cefire-webapp0001.yml b/.github/workflows/master_cefire-webapp0001.yml
index 9ea9aa543..a4e44807f 100644
--- a/.github/workflows/master_cefire-webapp0001.yml
+++ b/.github/workflows/master_cefire-webapp0001.yml
@@ -56,9 +56,9 @@ jobs:
- name: Login to Azure
uses: azure/login@v2
with:
- client-id: ${{ secrets.AZUREAPPSERVICE_CLIENTID_965E3188695B49EDB8C67E5A7B73E441 }}
- tenant-id: ${{ secrets.AZUREAPPSERVICE_TENANTID_762C13F281664B218F8E41A1D13D5F0A }}
- subscription-id: ${{ secrets.AZUREAPPSERVICE_SUBSCRIPTIONID_BABD884DB13F4683B59173811276EAB7 }}
+ client-id: ${{ secrets.AZUREAPPSERVICE_CLIENTID_A3827D44356A4A7FA0ADB157B3B9C544 }}
+ tenant-id: ${{ secrets.AZUREAPPSERVICE_TENANTID_E4626EAF47E74041ACEC4737F46488CB }}
+ subscription-id: ${{ secrets.AZUREAPPSERVICE_SUBSCRIPTIONID_A9D64345FFE446A5AB3F1A897C9FF8B2 }}
- name: 'Deploy to Azure Web App'
uses: azure/webapps-deploy@v3
From cdf317c1193ff9cac8cb318eab8e10eeee3a2f8c Mon Sep 17 00:00:00 2001
From: Jonman-JM <57720716+Jonman-JM@users.noreply.github.com>
Date: Fri, 12 Dec 2025 11:39:28 +0100
Subject: [PATCH 30/38] Update index.php
---
index.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/index.php b/index.php
index 7bb9704c4..2aec296fa 100644
--- a/index.php
+++ b/index.php
@@ -1,3 +1,3 @@
Date: Fri, 12 Dec 2025 12:04:39 +0100
Subject: [PATCH 31/38] Create prueba_conexion.php
---
prueba_conexion.php | 39 +++++++++++++++++++++++++++++++++++++++
1 file changed, 39 insertions(+)
create mode 100644 prueba_conexion.php
diff --git a/prueba_conexion.php b/prueba_conexion.php
new file mode 100644
index 000000000..cea692e69
--- /dev/null
+++ b/prueba_conexion.php
@@ -0,0 +1,39 @@
+ PDO::ERRMODE_EXCEPTION,
+// Fetch como array asociativo
+ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
+// Desactivar emulación de prepares
+ PDO::ATTR_EMULATE_PREPARES => false,
+// Asegurar la conexión TLS hacia Azure Database for MySQL
+ PDO::MYSQL_ATTR_SSL_CA =>
+'/etc/ssl/certs/BaltimoreCyberTrustRoot.crt.pem',
+// Desactivamos la validación del certificado SSL
+ PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false,
+ ];
+// Crear la conexión PDO
+ $pdo = new PDO($dsn, $dbUser, $dbPass, $options);
+// Ejemplo: consulta sencilla
+ $stmt = $pdo->query('SELECT NOW() AS fecha_actual;');
+ $fila = $stmt->fetch();
+ echo "Conectado correctamente. Hora del servidor: " .
+$fila['fecha_actual'];
+} catch (PDOException $e) {
+ error_log('Error de conexión PDO: ' . $e->getMessage());
+ echo "Error al conectar con la base de datos: " .
+htmlspecialchars($e->getMessage());
+ exit;
+}
From f8643470afa09b9c3eb9677ba7575f43beff9482 Mon Sep 17 00:00:00 2001
From: Jonman-JM <57720716+Jonman-JM@users.noreply.github.com>
Date: Fri, 12 Dec 2025 13:01:45 +0100
Subject: [PATCH 32/38] Update index.php
---
index.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/index.php b/index.php
index 2aec296fa..03b3fad84 100644
--- a/index.php
+++ b/index.php
@@ -1,3 +1,3 @@
Date: Fri, 12 Dec 2025 13:43:18 +0100
Subject: [PATCH 33/38] Delete prueba_conexion.php
---
prueba_conexion.php | 39 ---------------------------------------
1 file changed, 39 deletions(-)
delete mode 100644 prueba_conexion.php
diff --git a/prueba_conexion.php b/prueba_conexion.php
deleted file mode 100644
index cea692e69..000000000
--- a/prueba_conexion.php
+++ /dev/null
@@ -1,39 +0,0 @@
- PDO::ERRMODE_EXCEPTION,
-// Fetch como array asociativo
- PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
-// Desactivar emulación de prepares
- PDO::ATTR_EMULATE_PREPARES => false,
-// Asegurar la conexión TLS hacia Azure Database for MySQL
- PDO::MYSQL_ATTR_SSL_CA =>
-'/etc/ssl/certs/BaltimoreCyberTrustRoot.crt.pem',
-// Desactivamos la validación del certificado SSL
- PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false,
- ];
-// Crear la conexión PDO
- $pdo = new PDO($dsn, $dbUser, $dbPass, $options);
-// Ejemplo: consulta sencilla
- $stmt = $pdo->query('SELECT NOW() AS fecha_actual;');
- $fila = $stmt->fetch();
- echo "Conectado correctamente. Hora del servidor: " .
-$fila['fecha_actual'];
-} catch (PDOException $e) {
- error_log('Error de conexión PDO: ' . $e->getMessage());
- echo "Error al conectar con la base de datos: " .
-htmlspecialchars($e->getMessage());
- exit;
-}
From f9434d0808a55c4e42ef89c462439ad918503c6c Mon Sep 17 00:00:00 2001
From: Jonman-JM <57720716+Jonman-JM@users.noreply.github.com>
Date: Fri, 12 Dec 2025 13:47:40 +0100
Subject: [PATCH 34/38] Update index.php
---
index.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/index.php b/index.php
index 03b3fad84..d660e79e6 100644
--- a/index.php
+++ b/index.php
@@ -1,3 +1,3 @@
Date: Fri, 12 Dec 2025 13:51:22 +0100
Subject: [PATCH 35/38] Create prueba_conexion.php
---
prueba_conexion.php | 39 +++++++++++++++++++++++++++++++++++++++
1 file changed, 39 insertions(+)
create mode 100644 prueba_conexion.php
diff --git a/prueba_conexion.php b/prueba_conexion.php
new file mode 100644
index 000000000..c91e60d77
--- /dev/null
+++ b/prueba_conexion.php
@@ -0,0 +1,39 @@
+ PDO::ERRMODE_EXCEPTION,
+// Fetch como array asociativo
+PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
+// Desactivar emulación de prepares
+PDO::ATTR_EMULATE_PREPARES => false,
+// Asegurar la conexión TLS hacia Azure Database for MySQL
+PDO::MYSQL_ATTR_SSL_CA =>
+'/etc/ssl/certs/BaltimoreCyberTrustRoot.crt.pem',
+// Desactivamos la validación del certificado SSL
+PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false,
+];
+// Crear la conexión PDO
+$pdo = new PDO($dsn, $dbUser, $dbPass, $options);
+// Ejemplo: consulta sencilla
+$stmt = $pdo->query('SELECT NOW() AS fecha_actual;');
+$fila = $stmt->fetch();
+echo "Conectado correctamente. Hora del servidor: " .
+$fila['fecha_actual'];
+} catch (PDOException $e) {
+error_log('Error de conexión PDO: ' . $e->getMessage());
+echo "Error al conectar con la base de datos: " .
+htmlspecialchars($e->getMessage());
+exit;
+}
From e483d1e22189962f088548d60f7808fadea0fdff Mon Sep 17 00:00:00 2001
From: Jonman-JM <57720716+Jonman-JM@users.noreply.github.com>
Date: Fri, 12 Dec 2025 13:55:24 +0100
Subject: [PATCH 36/38] Delete prueba_conexion.php
---
prueba_conexion.php | 39 ---------------------------------------
1 file changed, 39 deletions(-)
delete mode 100644 prueba_conexion.php
diff --git a/prueba_conexion.php b/prueba_conexion.php
deleted file mode 100644
index c91e60d77..000000000
--- a/prueba_conexion.php
+++ /dev/null
@@ -1,39 +0,0 @@
- PDO::ERRMODE_EXCEPTION,
-// Fetch como array asociativo
-PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
-// Desactivar emulación de prepares
-PDO::ATTR_EMULATE_PREPARES => false,
-// Asegurar la conexión TLS hacia Azure Database for MySQL
-PDO::MYSQL_ATTR_SSL_CA =>
-'/etc/ssl/certs/BaltimoreCyberTrustRoot.crt.pem',
-// Desactivamos la validación del certificado SSL
-PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false,
-];
-// Crear la conexión PDO
-$pdo = new PDO($dsn, $dbUser, $dbPass, $options);
-// Ejemplo: consulta sencilla
-$stmt = $pdo->query('SELECT NOW() AS fecha_actual;');
-$fila = $stmt->fetch();
-echo "Conectado correctamente. Hora del servidor: " .
-$fila['fecha_actual'];
-} catch (PDOException $e) {
-error_log('Error de conexión PDO: ' . $e->getMessage());
-echo "Error al conectar con la base de datos: " .
-htmlspecialchars($e->getMessage());
-exit;
-}
From fd31a05b5a9f16672f26f191550d8fdbd3b64ad3 Mon Sep 17 00:00:00 2001
From: Jonman-JM <57720716+Jonman-JM@users.noreply.github.com>
Date: Fri, 12 Dec 2025 13:57:24 +0100
Subject: [PATCH 37/38] Update conexion.php
---
conexion.php | 56 +++++++++++++++++++++++++---------------------------
1 file changed, 27 insertions(+), 29 deletions(-)
diff --git a/conexion.php b/conexion.php
index 077a2bc3b..c91e60d77 100644
--- a/conexion.php
+++ b/conexion.php
@@ -1,41 +1,39 @@
PDO::ERRMODE_EXCEPTION,
- // Fetch como array asociativo
- PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
- // Desactivar emulación de prepares
- PDO::ATTR_EMULATE_PREPARES => false,
-
- // Asegurar la conexión TLS hacia Azure Database for MySQL
- PDO::MYSQL_ATTR_SSL_CA => '/etc/ssl/certs/BaltimoreCyberTrustRoot.crt.pem',
- // Desactivamos la validación del certificado SSL
- PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false,
- ];
-
- // Crear la conexión PDO
- $pdo = new PDO($dsn, $dbUser, $dbPass, $options);
-
- // Ejemplo: consulta sencilla
- $stmt = $pdo->query('SELECT NOW() AS fecha_actual;');
- $fila = $stmt->fetch();
- echo "Conectado correctamente. Hora del servidor: " . $fila['fecha_actual'];
+$options = [
+// Excepciones en errores
+PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
+// Fetch como array asociativo
+PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
+// Desactivar emulación de prepares
+PDO::ATTR_EMULATE_PREPARES => false,
+// Asegurar la conexión TLS hacia Azure Database for MySQL
+PDO::MYSQL_ATTR_SSL_CA =>
+'/etc/ssl/certs/BaltimoreCyberTrustRoot.crt.pem',
+// Desactivamos la validación del certificado SSL
+PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false,
+];
+// Crear la conexión PDO
+$pdo = new PDO($dsn, $dbUser, $dbPass, $options);
+// Ejemplo: consulta sencilla
+$stmt = $pdo->query('SELECT NOW() AS fecha_actual;');
+$fila = $stmt->fetch();
+echo "Conectado correctamente. Hora del servidor: " .
+$fila['fecha_actual'];
} catch (PDOException $e) {
- error_log('Error de conexión PDO: ' . $e->getMessage());
- echo "Error al conectar con la base de datos: " . htmlspecialchars($e->getMessage());
- exit;
+error_log('Error de conexión PDO: ' . $e->getMessage());
+echo "Error al conectar con la base de datos: " .
+htmlspecialchars($e->getMessage());
+exit;
}
From 575b88eac3ddd09ed5d8861e0523ae04bb20e69e Mon Sep 17 00:00:00 2001
From: Jonman-JM <57720716+Jonman-JM@users.noreply.github.com>
Date: Sun, 21 Dec 2025 19:39:00 +0100
Subject: [PATCH 38/38] Create storage.php
---
blob/master/storage.php | 79 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 79 insertions(+)
create mode 100644 blob/master/storage.php
diff --git a/blob/master/storage.php b/blob/master/storage.php
new file mode 100644
index 000000000..58d23151d
--- /dev/null
+++ b/blob/master/storage.php
@@ -0,0 +1,79 @@
+deleteBlob($containerName, $blobToDelete);
+ echo "Archivo $blobToDelete eliminado correctamente.
";
+ } catch (ServiceException $e) {
+ echo "Error al eliminar: " . $e->getMessage() . "
";
+ }
+}
+
+// Subida de archivo ZIP
+if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['zipfile'])) {
+ $uploadedFile = $_FILES['zipfile'];
+
+ if ($uploadedFile['type'] !== 'application/zip') {
+ echo "Solo se permiten archivos ZIP.
";
+ } else {
+ $blobName = basename($uploadedFile['name']);
+ $content = fopen($uploadedFile['tmp_name'], "r");
+
+ try {
+ $blobClient->createBlockBlob($containerName, $blobName, $content);
+ echo "Archivo $blobName subido correctamente.
";
+ } catch (ServiceException $e) {
+ echo "Error al subir: " . $e->getMessage() . "
";
+ }
+ }
+}
+
+// Listar archivos
+try {
+ $listOptions = new ListBlobsOptions();
+ $blobs = $blobClient->listBlobs($containerName, $listOptions);
+} catch (ServiceException $e) {
+ die("Error al listar archivos: " . $e->getMessage());
+}
+?>
+
+
+
+
+ Gestor de archivos ZIP en Azure Blob
+
+
+ Archivos ZIP en el contenedor = htmlspecialchars($containerName) ?>
+
+
+
+ Subir nuevo archivo ZIP
+
+
+