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

+
    + +
  • + 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 ''

-

Subir archivo ZIP

+

Subir nuevo archivo ZIP

From 5076b3058a13318fe38e3d2bd988c2b1e2a5cac3 Mon Sep 17 00:00:00 2001 From: cefireazure2505 Date: Thu, 19 Jun 2025 15:26:55 +0200 Subject: [PATCH 24/38] Delete .github/workflows directory --- .github/workflows/master_cefire-webapp01.yml | 78 -------------------- 1 file changed, 78 deletions(-) delete mode 100644 .github/workflows/master_cefire-webapp01.yml diff --git a/.github/workflows/master_cefire-webapp01.yml b/.github/workflows/master_cefire-webapp01.yml deleted file mode 100644 index f0f01e834..000000000 --- a/.github/workflows/master_cefire-webapp01.yml +++ /dev/null @@ -1,78 +0,0 @@ -# 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 9aa122881cd0f39d71f3e0add927b299ece03ccb Mon Sep 17 00:00:00 2001 From: cefireazure2505 Date: Mon, 23 Jun 2025 17:28:40 +0200 Subject: [PATCH 25/38] Update storage.php --- storage.php | 94 +++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 76 insertions(+), 18 deletions(-) diff --git a/storage.php b/storage.php index 9c2f09793..f6e26f938 100644 --- a/storage.php +++ b/storage.php @@ -1,41 +1,70 @@ deleteBlob($containerName, $blobToDelete); echo "

Archivo $blobToDelete eliminado correctamente.

"; } catch (ServiceException $e) { - echo "

Error al eliminar: " . $e->getMessage() . "

"; + 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.

"; + + $blobName = basename($uploadedFile["name"]); + $extension = strtolower(pathinfo($blobName, PATHINFO_EXTENSION)); + + if ($extension !== "zip") { + echo "

Solo se permiten archivos con extensión .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() . "

"; + // (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"); + + try { + $blobClient->createBlockBlob( + $containerName, + $blobName, + $content + ); + echo "

Archivo $blobName subido correctamente.

"; + } catch (ServiceException $e) { + echo "

Error al subir: " . + $e->getMessage() . + "

"; + } } } } @@ -56,14 +85,43 @@ Gestor de archivos ZIP en Azure Blob -

Archivos ZIP en el contenedor ''

+

Archivos ZIP en el contenedor ''

    + 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() . "

    "; + } + } + ?>
  • - + 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 ''

-
    - Archivos ZIP en '' - 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

    + + + +

    Subir nuevo archivo ZIP

    +
    + + +
    + +