Cómo añadir la posibilidad de mostrar el MD5 (función HASH criptográfica) de un fichero en la sección Descargas (Downloads) de la web, utilizando PHP-Nuke como gestor de contenidos web. Muchos sitios web suelen mostrar el MD5 de la descarga como una forma eficaz de saber si el fichero descargado es el fichero original. Con esta opción daremos mayor credibilidad a nuestras descargas y una forma eficaz de que un usuario pueda saber si el fichero que ha obtenido (de otras webs o mediante P2P) es el original.
En primer lugar accederemos a la base de datos MySQL (o en la que se haya creado) de PHP-Nuke, mediante cualquier software cliente de MySQL, como por ejemplo AjpdSoft Administración Bases de Datos (aplicación freeware, gratuita, con código fuente (open source) disponible en Delphi 6), pondremos el nombre del servidor (o la IP), el usuario y la contraseña con permisos suficientes para modificar tablas y nos conectaremos a MySQL:
Ejecutaremos la siguiente consulta SQL para agregar el campo «hash» a la tabla nuke_downloads_downloads:
ALTER TABLE nuke_downloads_downloads ADD COLUMN
hash VARCHAR(200) AFTER homepage
Al añadir este campo a la tabla nuke_downloads_downloads afectará al funcionamiento de la administración de las descargas, el efecto colateral es que si se intenta añadir una descarga desde la administración de PHP-Nuke no dará error pero tampoco la añadirá. Esto se puede solucionar modificando la línea 1034:
1 |
sql_query("insert into ".$prefix."_downloads_downloads values (NULL, '$cat[0]', '$cat[1]', '$title', '$url', '$description', now(), '$name', '$email', '$hits','$submitter',0,0,0, '$filesize', '$version', '$homepage')", $dbi); |
del fichero /admin/modules/download.php, por este otro código PHP:
1 |
sql_query("insert into ".$prefix."_downloads_downloads values (NULL, '$cat[0]', '$cat[1]', '$title', '$url', '$description', now(), '$name', '$email', '$hits','$submitter',0,0,0, '$filesize', '$version', '$homepage', '')", $dbi); |
Haciendo esta modificación, de momento servirá para salir del paso y que la inserción de una nueva descarga funcione. Lógicamente explicaremos más adelante cómo modificar el código PHP de este fichero (download.php) para poder añadir el MD5 desde el propio formulario de alta de descarga.
A continuación modificaremos el fichero /modules/Downloads/index.php para que este nuevo dato (MD5) aparezca en la página de los detalles de cada descarga:
Modificaremos la línea 379 de la función NewDownloadsDate:
1 |
$sql = "SELECT lid, cid, title, description, date, hits, downloadratingsummary, totalvotes, totalcomments, filesize, version, homepage FROM ".$prefix."_downloads_downloads WHERE date LIKE '%$newdownloadDB%' ORDER BY title ASC"; |
por esta otra:
1 |
$sql = "SELECT lid, cid, title, description, date, hits, downloadratingsummary, totalvotes, totalcomments, filesize, version, homepage, hash FROM ".$prefix."_downloads_downloads WHERE date LIKE '%$newdownloadDB%' ORDER BY title ASC"; |
Añadiremos esta línea a partir de la línea 395, en la función NewDownloadsDate:
1 |
$hash = $row[hash]; |
Añadiremos esta línea a partir de la línea 412:
1 2 |
echo "MD5: $hash "; |
Haremos lo mismo en la función TopRated, modificaremos la línea 487:
1 |
$sql = "SELECT lid, cid, title, description, date, hits, downloadratingsummary, totalvotes, totalcomments, filesize, version, homepage FROM ".$prefix."_downloads_downloads WHERE downloadratingsummary != 0 AND totalvotes >= $downloadvotemin ORDER BY downloadratingsummary DESC LIMIT 0,$topdownloads"; |
por:
1 |
$sql = "SELECT lid, cid, title, description, date, hits, downloadratingsummary, totalvotes, totalcomments, filesize, version, homepage, hash FROM ".$prefix."_downloads_downloads WHERE downloadratingsummary != 0 AND totalvotes >= $downloadvotemin ORDER BY downloadratingsummary DESC LIMIT 0,$topdownloads"; |
Añadiremos esta línea a partir de la línea 505, en la función TopRated:
1 |
$hash = $row[hash]; |
Añadiremos esta línea a partir de la línea 522:
1 2 |
echo "MD5: $hash "; |
Haremos exactamente lo mismo en la función MostPopular, modificando también la línea 596:
1 |
while(list($lid, $cid, $title, $description, $time, $hits, $downloadratingsummary, $totalvotes, $totalcomments, $filesize, $version, $homepage) = sql_fetch_row($result, $dbi)) { |
por:
1 |
while(list($lid, $cid, $title, $description, $time, $hits, $downloadratingsummary, $totalvotes, $totalcomments, $filesize, $version, $homepage, $hash) = sql_fetch_row($result, $dbi)) { |
Modificaremos la línea a partir de la línea 732, en la función viewdownload:
1 |
while(list($lid, $title, $description, $time, $hits, $downloadratingsummary, $totalvotes, $totalcomments, $filesize, $version, $homepage)=sql_fetch_row($result, $dbi)) { |
por
1 |
while(list($lid, $title, $description, $time, $hits, $downloadratingsummary, $totalvotes, $totalcomments, $filesize, $version, $homepage, $hash)=sql_fetch_row($result, $dbi)) { |
Añadiremos esta línea a partir de la línea 753:
1 2 |
echo "MD5: $hash "; |
Lo mismo para la función viewsdownload, cambiaremos la línea 897:
1 |
$result=sql_query("SELECT lid, url, title, description, date, hits, downloadratingsummary, totalvotes, totalcomments, filesize, version, homepage FROM ".$prefix."_downloads_downloads WHERE sid=$sid order by $orderby limit $min,$perpage", $dbi); |
por:
1 |
$result=sql_query("SELECT lid, url, title, description, date, hits, downloadratingsummary, totalvotes, totalcomments, filesize, version, homepage, hash FROM ".$prefix."_downloads_downloads WHERE sid=$sid order by $orderby limit $min,$perpage", $dbi); |
La línea 902:
1 |
while(list($lid, $url, $title, $description, $time, $hits, $downloadratingsummary, $totalvotes, $totalcomments, $filesize, $version, $homepage)=sql_fetch_row($result, $dbi)) { |
por
1 |
while(list($lid, $url, $title, $description, $time, $hits, $downloadratingsummary, $totalvotes, $totalcomments, $filesize, $version, $homepage, $hash)=sql_fetch_row($result, $dbi)) { |
Añadiremos esta línea a partir de la línea 921:
1 2 |
echo "MD5: $hash "; |
Para la función search, línea 1154:
1 |
while(list($lid, $cid, $title, $url, $description, $time, $hits, $downloadratingsummary, $totalvotes, $totalcomments, $filesize, $version, $homepage) = sql_fetch_row($result, $dbi)) { |
cambiaremos por:
1 |
while(list($lid, $cid, $title, $url, $description, $time, $hits, $downloadratingsummary, $totalvotes, $totalcomments, $filesize, $version, $homepage, $hash) = sql_fetch_row($result, $dbi)) { |
Añadiremos a partir de la línea 1176:
1 2 |
echo "MD5: $hash "; |
Más de lo mismo para la función viewdownloaddetails, cambiaremos estas dos líneas:
1 2 |
$res = sql_query("SELECT name, email, description, filesize, version, homepage FROM ".$prefix."_downloads_downloads WHERE lid='$lid'", $dbi); list($auth_name, $email, $description, $filesize, $version, $homepage) = sql_fetch_row($res, $dbi); |
por:
1 2 |
$res = sql_query("SELECT name, email, description, filesize, version, homepage, hash FROM ".$prefix."_downloads_downloads WHERE lid='$lid'", $dbi); list($auth_name, $email, $description, $filesize, $version, $homepage, $hash) = sql_fetch_row($res, $dbi); |
Nota: puede que el número de línea varíe, lo importante es buscar en qué sección del código se muestra la información de la descarga (fecha, autor, votos, etc) y añadir ahí el hash (MD5). Normalmente habrá que añadir el campo en la consulta SQL, salvo que lleve un * y añadir el correspondiente «echo» para que aparezca.
Al final quedará algo así:
A continuación explicaremos cómo añadir el campo MD5 en el formulario de alta y modificación de descarga (administración), para poder añadir este dato y permitir que aparezca.
Modificaremos la línea 57 del fichero /admin/modules/download.php
1 |
$result = sql_query("select lid, cid, sid, title, url, description, name, email, submitter, filesize, version, homepage from ".$prefix."_downloads_newdownload order by lid", $dbi); |
por
1 |
$result = sql_query("select lid, cid, sid, title, url, description, name, email, submitter, filesize, version, homepage, hash from ".$prefix."_downloads_newdownload order by lid", $dbi); |
Modificaremos la línea 62 del fichero /admin/modules/download.php
1 |
while(list($lid, $cid, $sid, $title, $url, $description, $name, $email, $submitter, $filesize, $version, $homepage) = sql_fetch_row($result, $dbi)) { |
por
1 |
while(list($lid, $cid, $sid, $title, $url, $description, $name, $email, $submitter, $filesize, $version, $homepage, $hash) = sql_fetch_row($result, $dbi)) { |
Accederemos a este fichero, en la función downloads a partir de la línea 75 añadiremos esta nueva línea:
1 |
."MD5: <input maxlength="200" name="txthash" size="30" type="text" value="$hash"><br>" |
Accederemos a este fichero, en la función downloads a partir de la línea 168 añadiremos esta nueva línea:
1 |
."MD5: <input maxlength="200" name="txthash" size="30" type="text">" |
En la función DownloadsModDownload, modificaremos la línea 269:
1 |
$result = sql_query("select cid, sid, title, url, description, name, email, hits, filesize, version, homepage from ".$prefix."_downloads_downloads where lid='$lid'", $dbi); |
por
1 |
$result = sql_query("select cid, sid, title, url, description, name, email, hits, filesize, version, homepage, hash from ".$prefix."_downloads_downloads where lid='$lid'", $dbi); |
Modificaremos la línea 276:
1 |
while(list($cid, $sid, $title, $url, $description, $name, $email, $hits, $filesize, $version, $homepage) = sql_fetch_row($result, $dbi)) { |
por
1 |
while(list($cid, $sid, $title, $url, $description, $name, $email, $hits, $filesize, $version, $homepage, $hash) = sql_fetch_row($result, $dbi)) { |
Tras la línea 285 añadiremos la línea:
1 |
."MD5: <input maxlength="200" name="txthash" size="20" type="text" value="$hash"><br>" |
Modificaremos la línea 674 de la función DownloadsModDownloadS:
1 |
function DownloadsModDownloadS($lid, $title, $url, $description, $name, $email, $hits, $cat, $filesize, $version, $homepage) { |
por
1 |
function DownloadsModDownloadS($lid, $title, $url, $description, $name, $email, $hits, $cat, $filesize, $version, $homepage, $txthash) { |
Modificaremos la línea 685 de la función DownloadsModDownloadS
1 |
sql_query("update ".$prefix."_downloads_downloads set cid='$cat[0]', sid='$cat[1]', title='$title', url='$url', description='$description', name='$name', email='$email', hits='$hits', filesize='$filesize', version='$version', homepage='$homepage where lid='$lid'", $dbi); |
por
1 |
sql_query("update ".$prefix."_downloads_downloads set cid='$cat[0]', sid='$cat[1]', title='$title', url='$url', description='$description', name='$name', email='$email', hits='$hits', filesize='$filesize', version='$version', homepage='$homepage, hash='$txthash' where lid='$lid'", $dbi); |
Modificaremos la línea 1037:
1 |
sql_query("insert into ".$prefix."_downloads_downloads values (NULL, '$cat[0]', '$cat[1]', '$title', '$url', '$description', now(), '$name', '$email', '$hits','$submitter',0,0,0, '$filesize', '$version', '$homepage')", $dbi); |
por
1 |
sql_query("insert into ".$prefix."_downloads_downloads values (NULL, '$cat[0]', '$cat[1]', '$title', '$url', '$description', now(), '$name', '$email', '$hits','$submitter',0,0,0, '$filesize', '$version', '$homepage','$txthash')", $dbi); |
Al final del fichero, en la cláusula switch modificaremos la línea 1073:
1 |
DownloadsAddDownload($new, $lid, $title, $url, $cat, $description, $name, $email, $submitter, $filesize, $version, $homepage, $hits); |
por
1 |
DownloadsAddDownload($new, $lid, $title, $url, $cat, $description, $name, $email, $submitter, $filesize, $version, $homepage, $hits, $txthash); |
y la línea 1141:
1 |
DownloadsModDownloadS($lid, $title, $url, $description, $name, $email, $hits, $cat, $filesize, $version, $homepage); |
por
1 |
DownloadsModDownloadS($lid, $title, $url, $description, $name, $email, $hits, $cat, $filesize, $version, $homepage, $txthash); |
El formulario de alta de nueva descarga quedará así:
y el de modificación de descarga:
Lógicamente, para obtener el MD5 y poder insertarlo en la descarga deberemos utilizar algún programa que lo obtenga, por ejemplo AjpdSoft Hash, software completamente gratuito (freeware) desarrollado por ProyectoA y con código fuente (open source) disponible en Delphi 6:
Por supuesto, también hay otras formas de mostrar el MD5, incluso automáticas (sin necesidad de utilizar software de terceros para obtener el HASH MD5), por ejemplo utilizando PHP para obtener directamente el MD5 de la descarga del servidor antes de mostrar los detalles de la misma.
Este artículo también se puede emplear para añadir cualquier otro campo a la sección Descargas de PHP-Nuke, por ejemplo: Tipo de licencia, Requerimientos (sistema operativo), etc.
Para realizar este artículo hemos usado:
- PHP-Nuke 6.0.
- AjpdSoft Administración Bases de Datos.
- AjpdSoft Hash.