Premetto che:
Uso IIS 5.1 (WinXp Prof. SP2)
Lo script ha come percorso inetpub\wwwroot\download.php
http://localhost/ è la directory wwwroot (valori predefiniti di IIS)
nella wwwroot è installato mambo
Dati diritti di lettura su tutti i file toccatti da questo script
allora:
diciamo che questa è la struttura della directory Inetpub:

Quello che devo fare è:
riuscire a far scaricare un file (situato fuori dalla wwwroot) con qualsiasi estensione tramite uno script php.
i link saranno http://localhost/download.php?file=patch
lo script asocia a delle stringhe conosciute (quindi patch in questo caso) un file.
in un altra variabile metto il path che porta fuori dalla directory wwwroot. (../Sphereserver/DOWNLOAD_FILES)
lo script deve interfacciarsi con mambo e leggere le informazioni di login (devi essere logato per poter scaricare il file)
Il tutto funziona...
adesso i problemi:
con firefox se il file ha estensione .exe mi salva il file come nomefile.exe.htm (con il normale contenuto del file, rinominandolo in .exe è funzionante)
con internet explorer invece di salvare il file mi stampa nella finestra il suo contenuto (tutti caratteri strani visto che non è un file di testo.)
questo è il contenuto del file donwload.php che ho scritto fino adesso:
codice:
<?php
//interfacciamento con mambo
include_once( 'globals.php' );
require_once( 'configuration.php' );
if ( $mosConfig_offline == 1 ){
include( 'offline.php' );
exit();
}
require_once( 'includes/mambo.php' );
require_once( 'includes/frontend.php' );
$option = trim( strtolower( mosGetParam( $_REQUEST, 'option' ) ) );
$database = new database( $mosConfig_host, $mosConfig_user, $mosConfig_password, $mosConfig_db, $mosConfig_dbprefix );
$database->debug( $mosConfig_debug );
$mainframe = new mosMainFrame( $database, $option, '.' );
$mainframe->initSession();
$my = $mainframe->getUser();
$path="../Sphereserver/DOWNLOAD_FILES";//path dove prendere i file
$filename="nofile"; //valore iniziale del $filename
//sostituzione del $filename se conosce la stringa pasata come query
if ($_GET['file']=="patch") {
$filename="patch.rar";
}//eventuali else if per sostituzione stringhe con altri file
//stampa errore e uscita nel caso di stringa non riconosciuta
if ($filename=="nofile") {
echo "<html><head><title>Errore</title><META HTTP-EQUIV=\"refresh\" CONTENT=\"7; url=index.php\"><body>Impossibile scaricare questo file!</body></html>";
exit();
}
//stampa errore e uscita nel caso di login non eseguito
if ($my->username=="") {
echo "<html><head><title>Errore</title><META HTTP-EQUIV=\"refresh\" CONTENT=\"7; url=index.php\"><body>Devi esere logato per poter scaricare questo file!</body></html>";
exit();
}
//stampa errore e uscita nel caso di $filename non esistente nella path definita
if (!file_exists("$path/$filename")) {
echo "<html><head><title>Errore</title><META HTTP-EQUIV=\"refresh\" CONTENT=\"7; url=index.php\"><body>File $filename non presente sul server!
Segnalare l'errore all'admin.</body></html>";
exit();
}
//invio file :confused:
header("Content-Disposition: atachment; filename=$filename");
header("Pragma: no-cache");
header("Expires: 0");
$fp=fopen("$path/$filename","r");
print fread($fp,filesize("$path/$filename"));
fclose($fp);
exit();
?>
credo la parte problematica sia l'ultima. ci son metodi alternativi per fare ciò?
questo è quanto.
spero mi potiate aiutare perché è veramente importante per me.
vi ringrazio moltissimo per le vostre risposte.