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:
credo la parte problematica sia l'ultima. ci son metodi alternativi per fare ciò?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(); ?>
questo è quanto.
spero mi potiate aiutare perché è veramente importante per me.
vi ringrazio moltissimo per le vostre risposte.


Rispondi quotando

