Recordad que para pedir soporte alguno, debéis facilitar los datos de soporte oportunos por favor, mirad aquí y leer las Normas generales del foro, esto nos servirá de ayuda para dar el mejor soporte..

Gracias.

La Administración de phpBB España.

Contador de descargasTema Solucionado

PHP, HTML, CSS, JS, jQuery, etc.
migue_coco
Usuario/a
Mensajes: 51
Registrado: 02 Abr 2013, 01:01

Contador de descargas

#1

Mensaje por migue_coco »

Buenas!
Llevo ya una semana dandole vueltas al codigo y no hay manera.
Asi que recurro a vosotros todopoderosos a pediros ayuda.
La idea es que quier contabilizar las descargas que se realizan de cada archivo (en una web).
Lo estoy haciendo en php de la siguiente forma.
Una carpeta "contador" donde se guardan los .txt en los que se lleva el conteo de las descargas.
Un archivo download.php con el codigo para contar y para enlazar la descarga
Y un codigo en el index.php para mostrar el conteo.

download.php

Código: Seleccionar todo

<?php
$extension = ".rar"; 
if (file_exists($archivo.$extension))
{
header("Location: $archivo$extension");
$file = fopen(contador/$archivo.txt,r); 
$count = fread($file, 100);
$countplus = ($count + 1);
fclose($file);
$fileb = fopen(contador/$archivo.txt,w);
fwrite($fileb, $countplus, 100);
fclose($fileb);
}


?>
index.php

Código: Seleccionar todo

<?
php include(contador/prueba.txt); 
?>
El problema es que al ingresar en index.php me reporta el siguiente error:
Warning: Division by zero in /home/.../index.php on line 9

Warning: include(txt) [function.include]: failed to open stream: No such file or directory in /home/.../index.php on line 9

Warning: include(txt) [function.include]: failed to open stream: No such file or directory in /home/.../index.php on line 9

Warning: include() [function.include]: Failed opening 'txt' for inclusion (include_path='.:/usr/lib/php')in /home/.../index.php on line 9

Que estoy haciendo mal??
:sweat: :sweat: :sweat: :sweat:

P.D.: Si, soy SUPER novato en codigo php, asi que probablemente esté haciendo una salvajada y no me doy cuenta :rock:

Gracias por la ayuda!
Ah! Si teneis una idea mejor, bienvenida sea!!! :rofl:
URL: http://www.granatest.es/forum
Version: 3.0.11
Plantilla: CA_halcyon
Servidor: De pago.

migue_coco
Usuario/a
Mensajes: 51
Registrado: 02 Abr 2013, 01:01

Re: Contador de descargas

#2

Mensaje por migue_coco »

Ah! Se me olvidaba, al hacer click sobre el enlace para descargar, tampoco me descarga el archivo
:cry: :cry: :cry:
URL: http://www.granatest.es/forum
Version: 3.0.11
Plantilla: CA_halcyon
Servidor: De pago.

Avatar de Usuario
leviatan21
Ex Staff
Mensajes: 8279
Registrado: 26 Mar 2008, 20:06
Género:
Edad: 54

Re: Contador de descargas

#3

Mensaje por leviatan21 »

migue_coco escribió:Ah! Se me olvidaba, al hacer click sobre el enlace para descargar, tampoco me descarga el archivo
veo varios errores uno de ellos es que haces el header("Location: $archivo$extension"); encadenas el nombre y la extensión sin ser separados por un punto, y obviamente si eso resultaría correcto, nunca llegaría a pasar de esa linea y no ejecutaría el contador


Si lo que necesitas es un contador, aqui te dejo una rutina vieja que tenia guardada
es una función a la que le pasas un nombre de archivo y un número, si el archivo existe lo abre y le suma uno al valor que tenga y si no existe lo crea con el valor inicial que le pases como $num

y retorna el valor nuevo.

Código: Seleccionar todo

/**
 * Obtiene un numero de identificacion desde un archivo
 *
 * @param (string)	$file	=> Ruta/Nombre del archivo donde se obtiene/almacena el contador
 * @param (int)		$num	=> Numero por omision
 * @return (int)	$num	=> Numero actualizado
 */
function get_counter($file = "templates/contador.txt", $num = 1){
	// Nos fijamos si el archivo existe
	if (!file_exists($file)){
		// Si el archivo no existe, lo creamos para lectura y escritura; coloca el puntero al fichero al final del fichero
		$fp = @fopen($file, "a+");
		// Escribe el archivo con el valor inicial
		@fwrite($fp, $num);
		// Cerramos el archivo
		@fclose($fp);
	}else{
		// Leemos el archivo y tomamos su valor numerico
		$num = strval(@file_get_contents($file));
		// Suma uno al valor actual
		$num++;
		// Habre el archivo para lectura y escritura; coloca el puntero al fichero al principio del fichero y trunca el fichero a longitud cero
		$fp = @fopen($file, "w+");
		// Escribe el archivo con el nuevo valor
		@fwrite($fp, $num);
		// Cerramos el archivo
		@fclose($fp);
	}
	// Retorna el valor final
	return $num;
}
Normas de phpBB España | Normas de Soporte
No doy soporte por privado : tenga en cuenta que su problema, también puede ser el problema de otro usuario.
Cualquier mensaje privado no solicitado será ignorado :twisted:

"Education is what remains after one has forgotten everything he learned in school" - Albert Einstein

migue_coco
Usuario/a
Mensajes: 51
Registrado: 02 Abr 2013, 01:01

Re: Contador de descargas

#4

Mensaje por migue_coco »

Buenas, gracias por el codigo.
Pero estoy viendo que me voy a complicar mucho la vida, asi que he pensado en hacer el contador metiendo mysql.
La tabla cuenta con ID, URL y CONTADOR.
Pero... :( no se como hacer para rescatar el valor de contador y mostrarlo en la web ni el codigo para que sume.
Me hago una idea, pero muy pequeña de como decirle que sume 1 al pinchar (me da igual que no se descargue).
Me podrias dar un empujoncito?
:angel:

Gracias!!
URL: http://www.granatest.es/forum
Version: 3.0.11
Plantilla: CA_halcyon
Servidor: De pago.

Avatar de Usuario
leviatan21
Ex Staff
Mensajes: 8279
Registrado: 26 Mar 2008, 20:06
Género:
Edad: 54

Re: Contador de descargas  Tema Solucionado

#5

Mensaje por leviatan21 »

migue_coco escribió:Me podrias dar un empujoncito?
Mas que un empujoncito te escribí todo un código

Ajusta los datos de configuración y prueba

Código: Seleccionar todo

<?php
/**
 @example : localhost/download.php?id=1

 BASE :
	ID
	CONTADOR
	URL

**/
//	Obtenemos el identificador dela archivo a descargar
$id = (isset($_GET['id'])) ? $_GET['id'] : 0;
//	por las dudas pasamos el identificador a entero por si viene un string
$id = (int) $id;
//	Si no se logró obtener el identificador, morimos mostrando un mensaje de error
if (!$id)
{
	die('No se especificó el identificador del archivos a descargar');
}

/**	Configuramos las variables básicas	- INICIO **/
//	Ruta de la carpeta donde se almacenan las descargas
$folder 	= 'files/';
//	Servidor de phpmyadmin
$dbhost		= 'localhost';
//	usuario de la base de datos
$dbuser		= 'usuario';
//	Clave del usuario de la base de datos 
$dbpasswd	= 'password';
//	Nombre de la base de datos
$dbname		= 'databasename';
//	Nombre de la tabla de descargas
$table		= 'tablename';
/**	Configuramos las variables básicas	- FIN **/

//	Nos conectamos a phpmyadmin
$conectar = mysql_connect($dbhost, $dbuser, $dbpasswd);
//	Comprobamos que  nos pudieramos conectar a phpmyadmin
if (!$conectar) {
    die('No se pudo conectar a la base: ' . mysql_error());
}
//	Nos conectamos a la base
mysql_select_db($dbname);
//	Buscamos el identificador en la tabla
$sql = 'SELECT * FROM ' . $table . ' 
		WHERE ID = ' . $id;
$resultado = mysql_query($sql, $conectar) or die ($sql . mysql_error() . '<hr />');
$row = @mysql_fetch_array($resultado);

//	Si obtuvimos concordancia con el identificador, comprobamos que tengamos el nombre del archivo
if (!isset($row['ID']))
{
	die('No se encontró el archivos a descargar con el identificador ' . $id);
}
//	Saneamos el nombre del archivo
$file = $folder . basename($row['URL']);

//	Comprobamos que el archivo exista
if (file_exists($file))
{
	//	Si existe, guardamos en la base aumentando el contador
	$sql = 'UPDATE ' . $table . '
		SET CONTADOR = CONTADOR + 1
		WHERE ID = ' . $id;
	$res = mysql_query($sql, $conectar);
	//	Comprobamos que se actualizó el contador 
	if (!mysql_affected_rows())
	{
		die('No se pudo incrementar el contador para el archivo ' . $file);
	}
	//	Finalmente redirigimos al archivo
	header("Location: $file");
}
else
{
	die('El archivo ' . $file . ' no existe');
}

?>
Normas de phpBB España | Normas de Soporte
No doy soporte por privado : tenga en cuenta que su problema, también puede ser el problema de otro usuario.
Cualquier mensaje privado no solicitado será ignorado :twisted:

"Education is what remains after one has forgotten everything he learned in school" - Albert Einstein

migue_coco
Usuario/a
Mensajes: 51
Registrado: 02 Abr 2013, 01:01

Re: Contador de descargas

#6

Mensaje por migue_coco »

:o :o :o :o
:clap: :clap: :clap: :clap:

Muchisimas gracias!!!

Me da error, me dice que el archivo no existe
Creo que la culpa la tiene la ruta.
He probado todas las variables que se me ocurren sobre la ruta de la carpeta pero ninguna elimina el error
:(

Ahora mi pregunta de noob 100%...para que es necesario indicar la ruta si en la BDD recuperamos la URL de descarga del archivo?
Eso no lo entiendo :P

En fin... como deberia indicar la ruta? :(
O lo mismo es otro error...
Última edición por migue_coco el 06 May 2013, 01:07, editado 1 vez en total.
URL: http://www.granatest.es/forum
Version: 3.0.11
Plantilla: CA_halcyon
Servidor: De pago.

Avatar de Usuario
leviatan21
Ex Staff
Mensajes: 8279
Registrado: 26 Mar 2008, 20:06
Género:
Edad: 54

Re: Contador de descargas

#7

Mensaje por leviatan21 »

migue_coco escribió:Ahora mi pregunta de noob 100%...para que es necesario indicar la ruta si en la BDD recuperamos la URL de descarga del archivo?
Eso no lo entiendo :P

En fin... como deberia indicar la ruta? :(
O lo mismo es otro error...
No so como está almacenado el archivo y si incluye una carpeta dentro de otra.

las rutas dependerán de donde se ubica el archivo de descarga y los archivos a descargar
Sería mejor que nos dieras ejemplos reales
Normas de phpBB España | Normas de Soporte
No doy soporte por privado : tenga en cuenta que su problema, también puede ser el problema de otro usuario.
Cualquier mensaje privado no solicitado será ignorado :twisted:

"Education is what remains after one has forgotten everything he learned in school" - Albert Einstein

migue_coco
Usuario/a
Mensajes: 51
Registrado: 02 Abr 2013, 01:01

Re: Contador de descargas

#8

Mensaje por migue_coco »

Ok.
El link directo del archivo es:
www.granatest.es/pruebas/descargas/prueba1.rar
Es decir, public/pruebas/descargas/ es la carpeta donde estan los archivos de descarga

En la BDD el valor para URL es el link completo.

Gracias de nuevo!!
URL: http://www.granatest.es/forum
Version: 3.0.11
Plantilla: CA_halcyon
Servidor: De pago.

Avatar de Usuario
leviatan21
Ex Staff
Mensajes: 8279
Registrado: 26 Mar 2008, 20:06
Género:
Edad: 54

Re: Contador de descargas

#9

Mensaje por leviatan21 »

migue_coco escribió:En la BDD el valor para URL es el link completo.
todo ? incluye desde http en adelante ?
asi ?? www.granatest.es/pruebas/descargas/prueba1.rar
y el archivo que creaste recien que maneja las descargas y el contador ?

Al final te estoy haciendo todo el trabajo y no pones nada de tu parte :twisted:
Normas de phpBB España | Normas de Soporte
No doy soporte por privado : tenga en cuenta que su problema, también puede ser el problema de otro usuario.
Cualquier mensaje privado no solicitado será ignorado :twisted:

"Education is what remains after one has forgotten everything he learned in school" - Albert Einstein

Avatar de Usuario
leviatan21
Ex Staff
Mensajes: 8279
Registrado: 26 Mar 2008, 20:06
Género:
Edad: 54

Re: Contador de descargas

#10

Mensaje por leviatan21 »

Por cierto en

Código: Seleccionar todo

www.granatest.es/pruebas/descargas/prueba1.rar
solo se ve una página personalizada de error
Normas de phpBB España | Normas de Soporte
No doy soporte por privado : tenga en cuenta que su problema, también puede ser el problema de otro usuario.
Cualquier mensaje privado no solicitado será ignorado :twisted:

"Education is what remains after one has forgotten everything he learned in school" - Albert Einstein

migue_coco
Usuario/a
Mensajes: 51
Registrado: 02 Abr 2013, 01:01

Re: Contador de descargas

#11

Mensaje por migue_coco »

A ver.
Lo del error es que estaba modificando yo la web porque me he dado cuenta de que el archivo .rar contenia datos y si los descargaba alguien pues... :S

A ver, acabo de hacer las siguientes modificaciones:
BDD: URL = prueba1.rar (solo el nombre del archivo)

Y me estaba fallando porque soy un gran inutil, los archivos index.html y download.php estaban en la misma carpeta (descargas) que el archivo.
Los he puesto un directorio por encima y ya funciona.
Se ha realizado la suma al contador.
Pero claro...mi duda era que queria mostrar el contador en la pagina: "Se ha descargado CONTADOR veces"
Y lo que no se es mostrar el valor de la celda en la web.
Siento abusar de tu ayuda :worried: :worried:

Muchisimas gracias por todo!!
URL: http://www.granatest.es/forum
Version: 3.0.11
Plantilla: CA_halcyon
Servidor: De pago.

Avatar de Usuario
leviatan21
Ex Staff
Mensajes: 8279
Registrado: 26 Mar 2008, 20:06
Género:
Edad: 54

Re: Contador de descargas

#12

Mensaje por leviatan21 »

ese dato lo tienes despues de comprobar si el archivo existe, justo antes de hacer el UPDATE y lo muestras con el valor de

Código: Seleccionar todo

$count = $row['CONTADOR'];
echo $count;
//	Si existe, guardamos en la base aumentando el contador
Normas de phpBB España | Normas de Soporte
No doy soporte por privado : tenga en cuenta que su problema, también puede ser el problema de otro usuario.
Cualquier mensaje privado no solicitado será ignorado :twisted:

"Education is what remains after one has forgotten everything he learned in school" - Albert Einstein

migue_coco
Usuario/a
Mensajes: 51
Registrado: 02 Abr 2013, 01:01

Re: Contador de descargas

#13

Mensaje por migue_coco »

Pues no me sale...
:(
Pero creo que no has entendido mi duda.
http://www.granatest.es/descargas/fas/t ... index.html

En esa pagina, quiero que donde pone Archivo, Tamaño, Fecha, ponga tambien Descargado X veces.
Y asi, en cada descarga.
Que deberia hacer?
Quizas es una burrada lo que voy a decir, en esa pagina, incluyo un php de conexion a la BDD, y en cada archivo embebo un codigo php que realice una consulta por su ID y que me muestre la celda CONTADOR?
URL: http://www.granatest.es/forum
Version: 3.0.11
Plantilla: CA_halcyon
Servidor: De pago.

Avatar de Usuario
leviatan21
Ex Staff
Mensajes: 8279
Registrado: 26 Mar 2008, 20:06
Género:
Edad: 54

Re: Contador de descargas

#14

Mensaje por leviatan21 »

migue_coco escribió:En esa pagina, quiero que donde pone Archivo, Tamaño, Fecha, ponga tambien Descargado X veces.
Y asi, en cada descarga.
Que deberia hacer?
Sinceramente no tengo idea...
¿ como es que generas esa lista ?
¿ de donde sale la información que muestras, respecto al archivo, formato tamaño... ?

si no pones algo de tu parte, dejaré de ayudarte, no puedo hacer todo sin tener nada
Normas de phpBB España | Normas de Soporte
No doy soporte por privado : tenga en cuenta que su problema, también puede ser el problema de otro usuario.
Cualquier mensaje privado no solicitado será ignorado :twisted:

"Education is what remains after one has forgotten everything he learned in school" - Albert Einstein

migue_coco
Usuario/a
Mensajes: 51
Registrado: 02 Abr 2013, 01:01

Re: Contador de descargas

#15

Mensaje por migue_coco »

Esa lista de archivo, tamaño, fecha no la obtengo de ningun sitio, la introduzco manualmente en el html.
Por eso decia que no tengo mucha idea de como llamar al CONTADOR del ID=1
La consulta seria:
$consulta = "SELECT * CONTADOR FROM descargas;
$result = mysql_query($consulta, $con);
while ($row = mysql_fetch_array($result)) {
echo $row["CONTADOR"];
echo "
";
}

Pero eso me mostraria todos los valores de CONTADOR que existan en la tabla.

Y ahora, lo otro era que quiero que el valor de CONTADOR aparezca en la web,
el echo podria introducirlo en <body><div>echo$row...</div></body> y se mostraria el valor?
URL: http://www.granatest.es/forum
Version: 3.0.11
Plantilla: CA_halcyon
Servidor: De pago.

Cerrado

Volver a “🆘 Recursos Webmaster”