• Welcome to the Chevereto user community!

    Here users from all over the world gather around to learn the latest about Chevereto and contribute with ideas to improve the software.

    Please keep in mind:

    • 😌 This community is user driven. Be polite with other users.
    • 👉 Is required to purchase a Chevereto license to participate in this community (doesn't apply to Pre-sales).
    • 💸 Purchase a Pro Subscription to get access to active software support and faster ticket response times.

[NB 1.4] Ver imágenes solo desde el visualizador

Status
Not open for further replies.

Rodolfo

👑 Chevereto Godlike
Chevereto Staff
Administrator
Ver imágenes solo desde el visualizador

rkstro15 said:
Bueno probando diversas cosas llegue a hacer un pequeño script para mostrar las imagenes, y que solo se acepte verlas desde el visualizador , entonces para los que quieran ver la foto solo podran ver la miniatura que los llevara al visualizador en el hosting, esto servira para poder aumentar los ingresos a por medio de publicidad.

Colaborado por rkstro15
http://chevereto.com/foro/topic12-ver-imagenes-solo-desde-el-visualizador.html

Se incluirá en la siguiente release.
 
PHP:
<?php

/* -----------------------------------------

  Chevereto - Script de hosting de imagenes
  Nightly Build 1.4
  [url]http://www.chevereto.com/[/url]

  Released under the GPL 2.0
  Copyright (C) 2008 by Rodolfo Berrios
  <inbox at rodolfoberrios dot com>

  ----------------------------------------- */
  
  /* imagen.php por rkstro15 */

require('config.php');

$imagen = $_GET['i'];
$ext = explode(".", $imagen);
$num = count($ext)-1;

// DE DONDE VIENES?
$referer = parse_url($_SERVER['HTTP_REFERER']);
if (empty($referer['host']) && !isset($referer['host'])) {
	$referido = DOM_SCRIPT;
} else {
	$referido = $referer['host'];
}

/* hay un problema... Permite si es "dominio.com" pero no si es "dominio.com/algo" o "subdom.dominio.com" etc.. */
if ($referido !== DOM_SCRIPT) {
	header("Content-Type: image/gif");
	@readfile("site-img/error.gif");
} else {
	switch($ext[$num]){
		case "gif":
			header("Content-Type: image/gif");
			break;
		case "jpg":
			header("Content-Type: image/jpeg");
			break;
		case "png":
			header("Content-Type: image/png");
			break;
		case "bmp":
			header("Content-Type: image/bmp");
			break;
	}

	@readfile(DIR_IM.$_GET['i']);

}

?>
 
argrrgg... 🙂🙂🙂
me ganaste bueno iba a colocar enlace al host donde lo probe y me doy cuenta que ya lo implementaste, pero coloco igual los enlaces por si acaso:
elace al visualizador:


la imagen:
vlcsnap127.png


como se ve se ve lo que se quiere lograr no mostrar la imagen original directamente

creo que lo que habria que implementar, si es que no lo hiciste es hacer alguna opcion para activar o desactivar la opcion
 
mrt.png


Hay que agregar un lista de sitios que pueden permitir hotlink... Fijate en la condicional para el referer

PHP:
/* hay un problema... Permite si es "dominio.com" pero no si es "dominio.com/algo" o "subdom.dominio.com" etc.. */
if ($referido !== DOM_SCRIPT) {
 
Rodolfo said:
mrt.png


Hay que agregar un lista de sitios que pueden permitir hotlink... Fijate en la condicional para el referer

PHP:
/* hay un problema... Permite si es "dominio.com" pero no si es "dominio.com/algo" o "subdom.dominio.com" etc.. */
if ($referido !== DOM_SCRIPT) {

mmm.... en parte tienes razon ya que si es dominio.com/algo no lo aceptara, pero si es subdom.dominio.com si lo aceptara, por ejemplo en el host que lo tengo yo lo tengo como subdominio, y en la configuracion el dom_script yo lo tengo asi
Code:
define('DOM_SCRIPT', 'img.rcastro.co.cc');
y $referido corresponde al host de la direccion del referer. asi que desde el punto de vista que lo veo , realmente no le veo cual es el problema?? o tal vez no te entendi bien
ademas si yo quiero permitir siertos sitios con hotlink eso principalmente se hace al dominio entero o no? por lo que tampoco habria problema
 
ya mira agregue la parte para permitir dominios que acepten hotlinking, primero
agregar al config esto:
Code:
//Hotlinking
$hotlink = false; // TRUE para aceptar hotlinking y FALSE para no permitirlo
$permitidos= array("www.chevereto.com", "chevereto.com"); //Array con los dominios permitidos

y el imagen.php lo deje asi:
Code:
<?php
/* -----------------------------------------
 
  Chevereto - Script de hosting de imagenes
  Nightly Build 1.4
  http://www.chevereto.com/
 
  Released under the GPL 2.0
  Copyright (C) 2008 by Rodolfo Berrios
  <inbox at rodolfoberrios dot com>
 
----------------------------------------- */
 
  /* imagen.php por rkstro15 */
 
require('config.php');
 
$imagen = $_GET['i'];
$ext = explode(".", $imagen);
$num = count($ext)-1;

//funcion para visualizar
function visualizar($ext, $img){
    switch($ext){
        case "gif":
            header("Content-Type: image/gif");
            break;
        case "jpg":
            header("Content-Type: image/jpeg");
            break;
        case "png":
            header("Content-Type: image/png");
            break;
        case "bmp":
            header("Content-Type: image/bmp");
            break;
    }
    @readfile(DIR_IM.$img);
}

// DE DONDE VIENES?
$referer = parse_url($_SERVER['HTTP_REFERER']);
if (empty($referer['host']) && !isset($referer['host'])) {
    $referido = DOM_SCRIPT;
} else {
    $referido = $referer['host'];
}
 
/* hay un problema... Permite si es "dominio.com" pero no si es "dominio.com/algo" o "subdom.dominio.com" etc.. */
if ($referido !== DOM_SCRIPT && $hotlink == false) {
    header("Content-Type: image/gif");
    @readfile("site-img/error.gif");
} elseif($referido !== DOM_SCRIPT && $hotlink == true){
    for($n=0;$n<count($permitidos);$n++){
    if($referido == $permitidos[$n]){ visualizar($ext[$num], $_GET['i']); }
    }
}
else {
    visualizar($ext[$num], $_GET['i']);
}
 
?>
 
Me refiero a que su tu tienes tu host en img.midominio.com y quieres poner imagenes en midominio.com o en blog.midominio.com o en midominio.com/joomla no va a funcionar ya que la condición solo ve si el referido es igual al DOM_SCRIPT, que en este caso es img.midominio.com.

Suponiendo que tu quieres permitir una lista de dominios que pueden acceder a tus imágenes, no lo vas a poder hacer.

Existe otra opción mucho más simple de hacer todo esto y es con un .htaccess
 
Es mucho más fácil así, ademas te evitas tener que depender de php.

Code:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?dev.chevereto.com [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?godlike.cl [NC]
RewriteRule images/.*\.(jpg|png|bmp|gif)$ http://dev.chevereto.com/site-img/error.gif [NC,R,L]
 
Rodolfo said:
Es mucho más fácil así, ademas te evitas tener que depender de php.

Code:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?dev.chevereto.com [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?godlike.cl [NC]
RewriteRule images/.*\.(jpg|png|bmp|gif)$ http://dev.chevereto.com/site-img/error.gif [NC,R,L]

mm supongo que asi funciona, me imagino que lo probaste y te creo
porque la verdad se algo de php pero no tanto y de htacces tampoco, por no decir nada y si hay algo que me cuesta son las expresiones regulares.

pero bueno son ideas y en el camino salen distintas soluciones para el mismo problema y quedara la mas simple y mejor que en este caso es por htaccess
 
No se mal entienda... Tiene sus ventajas y desventajas cada una de las soluciones.

Por ejemplo, la de php, si se cae el servicio php deja de funcionar. Ademas consume más recursos para emplearse. Pero permite capturar estadísticas mucho más detalladas (si se las ponemos) como sitios que tratan de acceder a la imagen, cantidad de veces... etc.

Creo que seria bueno dar las dos alternativas, esta claro que la solución en php no es una gran competencia para la por .htaccess pero tiene mucho mayor potencial.

Así que, nos servirá mucho para más adelante.
 
waaaa excelente, yo estaba usando hotlinks solamente, para mantener un control de trafico. y viendo si puedo generar unas impresiones de adsense, no estaria mal.
 
Status
Not open for further replies.
Back
Top