Foros del Web » Programando para Internet » PHP »

¿Como descargar archivo solo una vez?

Estas en el tema de ¿Como descargar archivo solo una vez? en el foro de PHP en Foros del Web. Hola a todos,me llamo Tyto en el foro y soy nuevo,la razon por la que estoy aqui es porque tengo una consulta para los "duros" ...
  #1 (permalink)  
Antiguo 01/11/2008, 21:34
 
Fecha de Ingreso: noviembre-2008
Mensajes: 23
Antigüedad: 15 años, 6 meses
Puntos: 1
Pregunta ¿Como descargar archivo solo una vez?

Hola a todos,me llamo Tyto en el foro y soy nuevo,la razon por la que estoy aqui es porque tengo una consulta para los "duros" del php,el asunto es el siguiente,una persona tiene un website de asuntos judiciales,alli tiene miles de documentos que solo tienen acceso los miembros registrados,si alguien quiere ver algun documento y usarlo debe pagar.
El cliente quiere lo siguiente:

El trabajo consiste en que tanto el usuario silver (usuario gratis) como el Premium (suscriptos) puedan ver cualquier material de la pagina…..solo verlo…cuando entran por primera vez….o sea se debe conservar la ip o cualquier otro dato para identificar al visitante……………..si le dan a descargar entonces el sistema le requerira que se registre….ya sea un material gratis….. o un material Premium….

Si el material es gratis….entonces lo lleva a un url,si el material es premium lo llevara a otro url.

En verdad la pagina esta hecha en un cms que no conosco llamado SAC ,agradeceria que me dieran alguna idea o si tienen un archivo php que haga algo similar o que le pueda modificar tambien,lo que sea en que me puedan ayudar.

Millll gracias.
  #2 (permalink)  
Antiguo 01/11/2008, 21:45
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: ¿Como descargar archivo solo una vez?

[QUOTE=Tyto;2644309]:

El trabajo consiste en que tanto el usuario silver (usuario gratis) como el Premium (suscriptos) puedan ver cualquier material de la pagina…..solo verlo…QUOTE]

si lo ven en que formato PDF DOC, por que si es asi lo podran guardar aunque no se registren, y si es una imagen en panlalla, siempre se puede hacer una captura de la pantalla y pegarlo en photoshop por ejemplo.

esa es mi opinio por lo menos

Un saludo
  #3 (permalink)  
Antiguo 02/11/2008, 18:15
 
Fecha de Ingreso: noviembre-2008
Mensajes: 23
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: ¿Como descargar archivo solo una vez?

En si los documentos estan en la misma pagina pero protegidos para que no funcione el click derecho,si un usuario le interesa la informacion debe hacer click en descargar y descargara un archivo en word,el cliente necesita que google le indexe los contenidos de esos documentos en word,la pregunta clave seria:
¿Que debo hacer para que google indexe informacion que esta dentro de documentos en word?
Gracias por la ayuda.
  #4 (permalink)  
Antiguo 02/11/2008, 18:25
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: ¿Como descargar archivo solo una vez?

El problema es que si los dejas abiertos para que el Bot de Google los indexe, entonces cualquier persona los va a poder ver.

No hay vuelta de hoja tienes que definir por dos lados, o los dejas abiertos para todos o los cierras solo para usuarios "premium".

Saludos.
  #5 (permalink)  
Antiguo 02/11/2008, 21:30
 
Fecha de Ingreso: noviembre-2008
Mensajes: 23
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: ¿Como descargar archivo solo una vez?

Gracias por tu comentario. Un amigo me dijo que una vez vio una opcion en google que permite al robot entrar a este tipo de paginas protegidas por contraseña,pero no me abundo mucho porque no recuerda bien,
¿Alguien sabe algo de eso?
  #6 (permalink)  
Antiguo 02/11/2008, 22:44
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: ¿Como descargar archivo solo una vez?

El robot de Google se identifica con un userstring como GoogleBot, tu puedes programar tu aplicación para que si es el Googlebot entre al sistema.

¿El fallo de esto? Cualquiera con un poco de ganas puede entrar a tu aplicación al pasarse como GoogleBot ya que ese string se puede falsificar fácilmente.

Saludos.
  #7 (permalink)  
Antiguo 03/11/2008, 08:36
 
Fecha de Ingreso: noviembre-2008
Mensajes: 23
Antigüedad: 15 años, 6 meses
Puntos: 1
De acuerdo Respuesta: ¿Como descargar archivo solo una vez?

Muy interesante tu info Gator,me gustaria saber mas sobre como lo puedo hacer de esa manera,si tienes algun ejemplo de como lo podria hacer o alguna pagina que hable al respeto seria de gran ayuda,se que tiene sus desventajas pero son mas las ventajas que tendre con esto.
  #8 (permalink)  
Antiguo 03/11/2008, 10:41
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: ¿Como descargar archivo solo una vez?

Hola Tyto,

En este aporte puedes ver información: http://googlewebmastercentral.blogsp...googlebot.html

Saludos.
  #9 (permalink)  
Antiguo 04/11/2008, 08:04
 
Fecha de Ingreso: noviembre-2008
Mensajes: 23
Antigüedad: 15 años, 6 meses
Puntos: 1
Sonrisa Respuesta: ¿Como descargar archivo solo una vez?

Me tope con una pagina que tiene un script en php que dice hacer justamente lo que buscaba,aqui les la pagina donde esta el script,probare si funciona bien y luego les aviso..

http://davidwalsh.name/google-password-protected-areas
  #10 (permalink)  
Antiguo 04/11/2008, 09:26
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: ¿Como descargar archivo solo una vez?

Te recomendaria vieras el link que te puse ya que usa los DNS de Google para identificar al GoogleBot, ya que si comparas por UserAgent, es muy fácil que puedan leer el contenido.

Saludos.
  #11 (permalink)  
Antiguo 04/11/2008, 20:35
 
Fecha de Ingreso: noviembre-2008
Mensajes: 23
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: ¿Como descargar archivo solo una vez?

Gracias Gator,asi he leido pero solo estoy probando a ver con cual me quedo,por cierto probando el script me sale el siguiente error:

Parse error: parse error, unexpected '<' in /home/content/g/e/r/gerly/html/realstate/demo/index.php on line 16

El codigo usado es este:

<span onmouseover="_tipon(this)" onmouseout="_tipoff()"> <span class="google-src-text" style="direction: ltr; text-align: left">
$allow_inside = ($ is_logged_in) || substr_count($ _SERVER ['HTTP_USER_AGENT'],'Googlebot');</span>
$allow_inside = ($ is_logged_in) || substr_count($ _SERVER ['HTTP_USER_AGENT'],'Googlebot');</span>

He revisado y no encuentro donde falta este simbolo,tal vez lo pase por alto,o sea otra cosa,a ver que opinan??
  #12 (permalink)  
Antiguo 04/11/2008, 20:48
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: ¿Como descargar archivo solo una vez?

Mmm de entrada no puedes combinar asi PHP y HTML, necesitas leer un manual de PHP, con eso resolveras dudas, todo código PHP, empieza con <?php, de lo contrario no lo pasara el compilador, con lo que pones no se ve en que parte estas empezando el PHP y que parte esta el HTML.

Saludos.
  #13 (permalink)  
Antiguo 04/11/2008, 20:55
 
Fecha de Ingreso: noviembre-2008
Mensajes: 23
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: ¿Como descargar archivo solo una vez?

Bueno si,lo que pasa es que solo puse la parte a agregar dentro del archivo php,todo el archivo en si contiene esto:


<?php

//Permite que solo Googlebot tenga acceso a areas restringidas;


<span onmouseover="_tipon(this)" onmouseout="_tipoff()"> </span> <span class="google-src-text" style="direction: ltr; text-align: left"> </span>
$allow_inside = ($ is_logged_in) || substr_count($ _SERVER ['HTTP_USER_AGENT'],'Googlebot');
$allow_inside = ($ is_logged_in) || substr_count($ _SERVER ['HTTP_USER_AGENT'],'Googlebot');


// Set flag that this is a parent file
define( '_VALID_MOS', 1 );

// checks for configuration file, if none found loads installation page
if (!file_exists( 'configuration.php' ) || filesize( 'configuration.php' ) < 10) {
$self = rtrim( dirname( $_SERVER['PHP_SELF'] ), '/\\' ) . '/';
header("Location: http://" . $_SERVER['HTTP_HOST'] . $self . "installation/index.php" );
exit();
}

require( 'globals.php' );
require( 'configuration.php' );

// SSL check - $http_host returns <live site url>:<port number if it is 443>
$http_host = explode(':', $_SERVER['HTTP_HOST'] );
if( (!empty( $_SERVER['HTTPS'] ) && strtolower( $_SERVER['HTTPS'] ) != 'off' || isset( $http_host[1] ) && $http_host[1] == 443) && substr( $mosConfig_live_site, 0, 8 ) != 'https://' ) {
$mosConfig_live_site = 'https://'.substr( $mosConfig_live_site, 7 );
}

require_once( 'includes/joomla.php' );

//Installation sub folder check, removed for work with SVN
if (file_exists( 'installation/index.php' ) && $_VERSION->SVN == 0) {
define( '_INSTALL_CHECK', 1 );
include ( $mosConfig_absolute_path .'/offline.php');
exit();
}

// displays offline/maintanance page or bar
if ($mosConfig_offline == 1) {
require( $mosConfig_absolute_path .'/offline.php' );
}

// load system bot group
$_MAMBOTS->loadBotGroup( 'system' );

// trigger the onStart events
$_MAMBOTS->trigger( 'onStart' );

if (file_exists( $mosConfig_absolute_path .'/components/com_sef/sef.php' )) {
require_once( $mosConfig_absolute_path .'/components/com_sef/sef.php' );
} else {
require_once( $mosConfig_absolute_path .'/includes/sef.php' );
}
require_once( $mosConfig_absolute_path .'/includes/frontend.php' );

// retrieve some expected url (or form) arguments
$option = strval( strtolower( mosGetParam( $_REQUEST, 'option' ) ) );
$Itemid = intval( mosGetParam( $_REQUEST, 'Itemid', null ) );

if ($option == '') {
if ($Itemid) {
$query = "SELECT id, link"
. "\n FROM #__menu"
. "\n WHERE menutype = 'mainmenu'"
. "\n AND id = " . (int) $Itemid
. "\n AND published = 1"
;
$database->setQuery( $query );
} else {
$query = "SELECT id, link"
. "\n FROM #__menu"
. "\n WHERE menutype = 'mainmenu'"
. "\n AND published = 1"
. "\n ORDER BY parent, ordering"
;
$database->setQuery( $query, 0, 1 );
}
$menu = new mosMenu( $database );
if ($database->loadObject( $menu )) {
$Itemid = $menu->id;
}
$link = $menu->link;
if (($pos = strpos( $link, '?' )) !== false) {
$link = substr( $link, $pos+1 ). '&Itemid='.$Itemid;
}
parse_str( $link, $temp );
/** this is a patch, need to rework when globals are handled better */
foreach ($temp as $k=>$v) {
$GLOBALS[$k] = $v;
$_REQUEST[$k] = $v;
if ($k == 'option') {
$option = $v;
}
}
}
if ( !$Itemid ) {
// when no Itemid give a default value
$Itemid = 99999999;
}

// mainframe is an API workhorse, lots of 'core' interaction routines
$mainframe = new mosMainFrame( $database, $option, '.' );
$mainframe->initSession();

// trigger the onAfterStart events
$_MAMBOTS->trigger( 'onAfterStart' );

// checking if we can find the Itemid thru the content
if ( $option == 'com_content' && $Itemid === 0 ) {
$id = intval( mosGetParam( $_REQUEST, 'id', 0 ) );
$Itemid = $mainframe->getItemid( $id );
}

/** do we have a valid Itemid yet?? */
if ( $Itemid === 0 ) {
/** Nope, just use the homepage then. */
$query = "SELECT id"
. "\n FROM #__menu"
. "\n WHERE menutype = 'mainmenu'"
. "\n AND published = 1"
. "\n ORDER BY parent, ordering"
;
$database->setQuery( $query, 0, 1 );
$Itemid = $database->loadResult();
}

// patch to lessen the impact on templates
if ($option == 'search') {
$option = 'com_search';
}

// loads english language file by default
if ($mosConfig_lang=='') {
$mosConfig_lang = 'english';
}
include_once( $mosConfig_absolute_path .'/language/' . $mosConfig_lang . '.php' );

// frontend login & logout controls
$return = strval( mosGetParam( $_REQUEST, 'return', NULL ) );
$message = intval( mosGetParam( $_POST, 'message', 0 ) );

// Get the information about the current user from the sessions table
$my = $mainframe->getUser();

if ($option == 'login') {
$mainframe->login();

// JS Popup message
if ( $message ) {
?>
<script language="javascript" type="text/javascript">
<!--//
alert( "<?php echo addslashes( _LOGIN_SUCCESS ); ?>" );
//-->
</script>
<?php
}

if ( $return && !( strpos( $return, 'com_registration' ) || strpos( $return, 'com_login' ) ) ) {
// checks for the presence of a return url
// and ensures that this url is not the registration or login pages
// If a sessioncookie exists, redirect to the given page. Otherwise, take an extra round for a cookiecheck
if (isset( $_COOKIE[mosMainFrame::sessionCookieName()] )) {
mosRedirect( $return );
} else {
mosRedirect( $mosConfig_live_site .'/index.php?option=cookiecheck&return=' . urlencode( $return ) );
}
} else {
// If a sessioncookie exists, redirect to the start page. Otherwise, take an extra round for a cookiecheck
if (isset( $_COOKIE[mosMainFrame::sessionCookieName()] )) {
mosRedirect( $mosConfig_live_site .'/index.php' );
} else {
mosRedirect( $mosConfig_live_site .'/index.php?option=cookiecheck&return=' . urlencode( $mosConfig_live_site .'/index.php' ) );
}
}

} else if ($option == 'logout') {
$mainframe->logout();

// JS Popup message
if ( $message ) {
?>
<script language="javascript" type="text/javascript">
<!--//
alert( "<?php echo addslashes( _LOGOUT_SUCCESS ); ?>" );
//-->
</script>
<?php
}

if ( $return && !( strpos( $return, 'com_registration' ) || strpos( $return, 'com_login' ) ) ) {
// checks for the presence of a return url
// and ensures that this url is not the registration or logout pages
mosRedirect( $return );
} else {
mosRedirect( $mosConfig_live_site.'/index.php' );
}
} else if ($option == 'cookiecheck') {
// No cookie was set upon login. If it is set now, redirect to the given page. Otherwise, show error message.
if (isset( $_COOKIE[mosMainFrame::sessionCookieName()] )) {
mosRedirect( $return );
} else {
mosErrorAlert( _ALERT_ENABLED );
}
}

// detect first visit
$mainframe->detect();

// set for overlib check
$mainframe->set( 'loadOverlib', false );

$gid = intval( $my->gid );

// gets template for page
$cur_template = $mainframe->getTemplate();
/** temp fix - this feature is currently disabled */

/** @global A places to store information from processing of the component */
$_MOS_OPTION = array();

// precapture the output of the component
require_once( $mosConfig_absolute_path . '/editor/editor.php' );

ob_start();

if ($path = $mainframe->getPath( 'front' )) {
$task = strval( mosGetParam( $_REQUEST, 'task', '' ) );
$ret = mosMenuCheck( $Itemid, $option, $task, $gid );

if ($ret) {
require_once( $path );
} else {
mosNotAuth();
}
} else {
header( 'HTTP/1.0 404 Not Found' );
echo _NOT_EXIST;
}

$_MOS_OPTION['buffer'] = ob_get_contents();

ob_end_clean();

initGzip();

header( 'Expires: Mon, 26 Jul 1997 05:00:00 GMT' );
header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' );
header( 'Cache-Control: no-store, no-cache, must-revalidate' );
header( 'Cache-Control: post-check=0, pre-check=0', false );
header( 'Pragma: no-cache' );

// display the offline alert if an admin is logged in
if (defined( '_ADMIN_OFFLINE' )) {
include( $mosConfig_absolute_path .'/offlinebar.php' );
}

// loads template file
if ( !file_exists( $mosConfig_absolute_path .'/templates/'. $cur_template .'/index.php' ) ) {
echo _TEMPLATE_WARN . $cur_template;
} else {
require_once( $mosConfig_absolute_path .'/templates/'. $cur_template .'/index.php' );
echo '<!-- '. time() .' -->';
}

// displays queries performed for page
if ($mosConfig_debug) {
echo $database->_ticker . ' queries executed';
echo '<pre>';
foreach ($database->_log as $k=>$sql) {
echo $k+1 . "\n" . $sql . '<hr />';
}
echo '</pre>';
}

doGzip();
?>
  #14 (permalink)  
Antiguo 04/11/2008, 20:57
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: ¿Como descargar archivo solo una vez?

Cita:
Iniciado por Tyto Ver Mensaje
Parse error: parse error, unexpected '<' in /home/content/g/e/r/gerly/html/realstate/demo/index.php on line 16

He revisado y no encuentro donde falta este simbolo,tal vez lo pase por alto,o sea otra cosa,a ver que opinan??
demás, usa un traductor si no sabes lo que significa el error...

unexpected = inesperado

Código:
... no se esperaba '<' en ...
lo estas pensando todo al revés, ni modo...

suerte!


PDTA: GatorV ya te dijo claramente... NO puedes combinar HTML/PHP de esa forma.... por favor... urgentemente lee un manual básico de PHP
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #15 (permalink)  
Antiguo 04/11/2008, 20:58
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: ¿Como descargar archivo solo una vez?

Aún así estas juntando HTML y PHP, lo cual es ilegal de esa forma, esos dos <span> es HTML y si los quieres imprimir tiene que ser fuera del bloque de ejecución de PHP, cerrando ?> y abriendo <?php para continuar con la ejecución de PHP.

Saludos.
  #16 (permalink)  
Antiguo 04/11/2008, 22:09
 
Fecha de Ingreso: noviembre-2008
Mensajes: 23
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: ¿Como descargar archivo solo una vez?

Si pateketrueke yo se lo que significa,por otro lado le quite lo de html con lo que solo queda php,asi:

<?php
$allow_inside = ($ is_logged_in) || substr_count($_SERVER ['HTTP_USER_AGENT'],'Googlebot');
?>

y me tira ahora este error:

Parse error: parse error, unexpected T_STRING, expecting T_VARIABLE or '$' in /home/content/g/e/r/gerly/html/realstate/demo/index.php on line 17

NO esperaba T_STRING,esperando T_VARIABLE o $ ¿Que debo hacer?
  #17 (permalink)  
Antiguo 04/11/2008, 22:22
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: ¿Como descargar archivo solo una vez?

Y cual es la linea 17??

por que no se si estoy equivocado pero creo tienes un espacio de mas

($ is_logged_in)

($is_logged_in)

Un saludo
  #18 (permalink)  
Antiguo 04/11/2008, 23:04
 
Fecha de Ingreso: noviembre-2008
Mensajes: 23
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: ¿Como descargar archivo solo una vez?

Al final ya corre el codigo,quedo asi:

$allow_inside = ($is_logged_in) || substr_count($_SERVER['HTTP_USER_AGENT'],'Googlebot');

Les aviso si funciona bien cuando googlebot visite la pagina.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:45.