Newsgroup: it.comp.www.php
Titolo: Right click... x favore, URGENTE !!!!

Ciao,
non so se sono nel NG giusto, eventualmente rimandatemi ad uno piů adatto...
Il problema č questo: ho fatto un sito utilizzando Xoops e ho caricato il
modulo per il download dei file.
I files sono degli mp3.
Perň:
- Se ci clicco col tasto sinistro, il browser funge da "lettore" mp3 (e fin
qui vabbč...);
- Se ci clicco con il destro e scelgo "salva oggetto con nome", invece di
salvare sul pc il file mp3 salva un file php (precisamente quello che
"cataloga" i file da downloadare).
La domanda in sostanza č: come faccio a dirgli che cliccando con il destro
mi salvi il file mp3 sul pc?
Grazie ragazzi, č piuttosto urgente e non so come uscirne...!!!

 ha detto:

Ho avuto anch'io lo stesso problema con E-Xoops/E-Xoopport, ho risolto
modificando gli header in modo da forzare il download nel file
modules/mydownloads/visit.php (credo che questo file sia uguale sia in
Xoops che in E-Xoops). Il codice da utilizzare (e da sostituire a
quello che c'č) č questo:
// Hide file from browser by streaming it, if it's local:
if ( !preg_match('/^(http|https|ftp|ftps)/i', $url) &&
@is_file('cache/files/'.$url) ) {
	header('Cache-Control: no-store, no-cache, max-age=1,
s-maxage=1, must-revalidate, post-check=0, pre-check=0');
	header('Content-Disposition: attachment;
filename="'.$url.'"');
	header("Content-type: application/download\n");
	$fn =
fopen(XOOPS_ROOT_PATH."/modules/mydownloads/cache/files/".$url,"r");
	fpassthru($fn);
 
	exit();
}
Ciao
Francesco Mazzi
Webmaster di AltroPC.it - 
http://www.altropc.it
 
Project Admin di "PHP Reservation - Online booking system" - 
http://phpreservation.sourceforge.net
Dev.Staff di E-Xoopport - 
http://dev.e-xoopport.it

Scusa l'ignoranza, ma qual'è esattamente il file in cui dovrei trovare
quanto dici?
(ho già cercato in visit.php e header.php dentro al modulo wf-download ma
non trovo traccia...)
Grazie, j.

 ha scritto nel messaggio
news:ubbuj0pm9gcvn5bvg...@4ax.com...

Attenzione perchč questo script puň presentare problemi per la sicurezza!!
E consigliabile mettere come condizione (non solo is_file()) che il file da
scaricare sia un mp3 (ossia che il file_type sia audio/mpeg), se č possibile
manipolare la variabile $url.
Francesco Duca
http://www.goldenweb.it

Jaco ha scritto:

il file è visit.php dentro al modulo download, cerca la parte in cui c'è 
  il pezzo di codice simile a quello che ti ho postato e sostituiscilo.
Ciao
-- 
-------------------


 manipolare la variabile $url.
Non è possibile mettere come condizione che il file sia mp3 perché 
presumo che Jaco voglia poter mettere in download anche altri tipi di file.
Comunque non c'è alcun problema di sicurezza perché la variabile $url 
contiene il nome del file che viene recuperato nel database (e non 
tramite GET) e quindi è sicuro. D'altra parte non si sono mai verificate 
falle di sicurezza nel modulo download di Xoops o di E-Xoops.
Ciao
-- 
-------------------


 Ciao
E' lecito postare qui pezzi di codice?
Ve lo vorrei far vedere, perchè l'unico "preg_match" che ho trovato in
visit.php ho l'impressione che non c'entri molto con il mio problema...
Grazie, J.

visit.php ho l'impressione che non c'entri molto con il mio problema...
Certo che è lecito...comunque ora lo vado a vedere anch'io.


visit.php ho l'impressione che non c'entri molto con il mio problema...
Inserisci il codice che ti ho postato in precedenza prima della
penultima riga, cioè
echo "<html><head><meta http-equiv=\"Refresh\" content=\"0;
URL=".$myts->oop.......
Ciao


Mi vergogno profondamente di essere cosě incompetente ma io davvero non
trovo ciň che dici.
Ti posto tutto il file di seguito:
**********************************
<?php
/**
 * $Id: visit.php v 1.02 06 july 2004 Liquid Exp $
 * Module: WF-Downloads
 * Version: v2.0.5a
 * Release Date: 26 july 2004
 * Author: WF-Sections
 * Licence: GNU
 */
include 'header.php';
global $xoopsUser, $xoopsModuleConfig, $myts;
$agreed = (isset($_GET['agree'])) ? $_GET['agree'] : 0;
$lid = intval($_GET['lid']);
$cid = intval($_GET['cid']);
function reportBroken($lid)
{
    global $xoopsModule;
    echo "
  <h4>" . _MD_WFD_BROKENFILE . "</h4>\n
  <div>" . _MD_WFD_PLEASEREPORT . "\n
  <a href='" . XOOPS_URL . "/modules/wfdownloads/brokenfile.php?lid=$lid'>"
. _MD_WFD_CLICKHERE . "</a>\n
  </div>\n";
}
if ($agreed == 0)
{
    if ($xoopsModuleConfig['check_host'])
    {
        $goodhost = 0;
        $referer = parse_url(xoops_getenv('HTTP_REFERER'));
        $referer_host = $referer['host'];
        foreach ($xoopsModuleConfig['referers'] as $ref)
        {
            if (!empty($ref) && preg_match("/" . $ref . "/i",
$referer_host))
            {
                $goodhost = "1";
                break;
            }
        }
        if (!$goodhost)
        {
            redirect_header(XOOPS_URL .
"/modules/wfdownloads/singlefile.php?cid=$cid&amp;lid=$lid", 20,
_MD_WFD_NOPERMISETOLINK);
            exit();
        }
    }
}
if ($xoopsModuleConfig['showDowndisclaimer'] && $agreed == 0)
{
    include XOOPS_ROOT_PATH . '/header.php';
    echo "
  <div align='center'>" . wfd_imageheader() . "</div>\n
  <h4>" . _MD_WFD_DISCLAIMERAGREEMENT . "</h4>\n
  <div>" . $myts -> displayTarea($xoopsModuleConfig['downdisclaimer'], 0, 1,
1, 1, 1) . "</div><br />\n
  <form action='visit.php' method='post'>\n
  <div align='center'><b>" . _MD_WFD_DOYOUAGREE . "</b><br /><br />\n
  <input type='button'
onclick='location=\"visit.php?agree=1&amp;lid=$lid&amp;cid=$cid\"'
class='formButton' value='" . _MD_WFD_AGREE . "' alt='" . _MD_WFD_AGREE . "'
/>\n
  &nbsp;\n
  <input type='button' onclick='location=\"index.php\"' class='formButton'
value='" . _CANCEL . "' alt='" . _CANCEL . "' />\n
  <input type='hidden' name='lid' value='1' />\n
  <input type='hidden' name='cid' value='1' />\n
  </div></form>\n";
    include XOOPS_ROOT_PATH . '/footer.php';
    exit();
}
else
{
    $isadmin = (!empty($xoopsUser) && $xoopsUser -> isAdmin($xoopsModule ->
mid())) ? true : false;
    if ($isadmin == false)
    {
        $sql = sprintf("UPDATE " . $xoopsDB ->
prefix('wfdownloads_downloads') . " SET hits = hits+1 WHERE lid =$lid");
        $xoopsDB -> queryF($sql);
    }
    $result = $xoopsDB -> query("SELECT url FROM " . $xoopsDB ->
prefix('wfdownloads_downloads') . " WHERE lid=$lid");
    list($url) = $xoopsDB -> fetchRow($result);
    include XOOPS_ROOT_PATH . '/header.php';
    echo "<br /><div align='center'>" . wfd_imageheader() . "</div>";
    $url = $myts -> htmlSpecialChars(preg_replace('/javascript:/si' , 'java
script:', $url), ENT_QUOTES);
    if (!empty($url))
    {
        if (!headers_sent())
        {
         echo "
   <h4><img src='" . XOOPS_URL .
"/modules/wfdownloads/images/icon/downloads.gif' align='middle' alt='' /> "
. _MD_WFD_DOWNINPROGRESS . "</h4>\n
   <div>" . _MD_WFD_DOWNSTARTINSEC . "</div><br />\n
   <div>" . _MD_WFD_DOWNNOTSTART . "\n
   <a href='$url' target='_blank'>" . _MD_WFD_CLICKHERE . "</a>.\n
   </div>\n";
            if (!empty($url))
            {
                header("Cache-Control: no-store, no-cache,
must-revalidate");
                header("Cache-Control: post-check=0, pre-check=0", false);
                // HTTP/1.0
                header("Pragma: no-cache");
                // Date in the past
                header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
                // always modified
                header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "
GMT");
                header("Refresh: 3; url=$url");
            }
            else
            {
                include XOOPS_ROOT_PATH . '/header.php';
                echo "<br /><div align='center'>" . wfd_imageheader() .
"</div>";
                reportBroken($lid);
            }
        } else {
   die("Headers already sent");
  }
    }
    else
    {
        reportBroken($lid);
    }
    include XOOPS_ROOT_PATH . '/footer.php';
}
?>
*******************************************************
Dove inserisco il tuo pezzo di codice?
Grazie infinite per la pazienza, davvero.
J.

 */
Scusa ma che roba è questo modulo? Non è il modulo downloads compreso
nel pacchetto ufficiale...


 nel pacchetto ufficiale...
Sě, infatti, č un modulo alternativo che si chiama WF-Download, ho visto che
sono in parecchi ad utilizzarlo. Infatti ha un sacco di opzioni ed č
graficamente molto curato.
Ciao, J.

            }
con quella che ti ho postato io...perň non garantisco, in questo file
rispetto alla versione originale c'č molta piů carne al fuoco.


 rispetto alla versione originale c'č molta piů carne al fuoco.
Infatti non funziona... AAARRRGGHHHH!!!!!
Ma secondo te, se disinstallo il modulo, ripulisco il database e lo
reinstallo, il problema scompare o si tratta di una cosa piů "a monte"?
Grazie, J.

reinstallo, il problema scompare o si tratta di una cosa più "a monte"?
No, il problema è che i file con estensione mp3 vengono aperti con
l'applicazione predefinita, prova ad usare ad esempio getright e
vedrai che te li scarica. 
Per forzare il download bisogna inviare degli appositi header al
browser, cioè quelli che ti ho postato.
Aspetta ora che ci penso devi cambiare questa riga:
fopen(XOOPS_ROOT_PATH."/modules/mydownloads/cache/files/".$url,"r");
	fpassthru($fn);
Perché presumo che il nome del modulo sia diverso, metti il percorso
giusto qui sopra.


 Ma hai provato a chiedere sul forum di Xoops Italia?
Sì, ma niente da fare.... Sei la mia unica speranza! :-)
J.

 Ho controllato la riga 124...ma non esiste! Si ferma alla 123.
Mi autocorreggo (avevo sbagliato l'url del file): adesso salva correttamente
"visit.htm"....!
J.

"visit.htm"....!
hai controllato che il path sia giusto?


> hai controllato che il path sia giusto?
Infatti, l'url era sbagliato ma l'errore permane se clicco col sinistro.
(col destro invece salva l'htm).

(col destro invece salva l'htm).
Quando fa cosě, cioč ti chiede di salvare la pagina stessa invece del
file, di solito č perché non trova il file....sicuro che sia giusto?


 file, di solito è perché non trova il file....sicuro che sia giusto?
Adesso l'url è giusto ma il problema rimane; invece ho notato che nella
stringa di testo dell'errore quell' "home" è in più.
Significherà qualcosa?

Significherà qualcosa?
Non credo...domani riguardo il tutto a mente fredda...intanto è
possibile vedere questo modulo in azione su qualche sito?


 possibile vedere questo modulo in azione su qualche sito?
Certamente:
questo č il sito degli sviluppatori:
http://www.wf-projects.com
 e qui lo vedi in azione
http://www.wf-projects.com/modules/wfdownloads/
Grazie ancora, ciao, J.