Visualizzazione risultati 1 fino 9 di 9

Discussione: [php] script per download che non funziona

  1. #1
    L'avatar di EmoArt
    EmoArt non è connesso Utente attivo
    Data registrazione
    19-03-2007
    Messaggi
    384

    Question [php] script per download che non funziona

    ciao amici, stò cercando di integrare uno script per i download dei file che usa due script php ed un file di testo per il contatore il tutto è racchiuso dentro una cartella "contatore" all'interno della directory principale del sito, il primo file sono riuscito ad integrarlo, lincandolo alla index così:<a href="index.php?pagina=contaclick/download" class="blu">Download</a>

    download.php:
    Codice PHP:
    <title>Download</title>
    <div align="center" >
    <p>
    <a href="getfile.php?<?php echo "name=prova"; ?>">Mini guida</a>
    (download: <?php @include("count/prova.txt"); ?>, dimensione: <?php
    $dim
    = @filesize ("prova.zip") / 1024;
    $dim = round($dim);
    echo
    "$dim KB";
    ?>)
    </p>
    </div>
    mentre il secondo script non funziona, mi rimanda sempre la pagina di errore, non capisco dove devo sistemarlo
    getfile.php:
    Codice PHP:
    <?php
    //estensione dei file da scaricare
    $ext = ".zip";

    //nome directory con i file di testo, compreso lo slash / finale
    $counterdir = "count/";

    //controllo che nell'url ci sia il nome del file da scaricare,
    if(isset($_GET['name']) && trim($_GET['name'])) {

    //se il file richiesto esiste, avviene il download
    if (file_exists("$_GET[name]$ext")) {

    header("Location: $_GET[name]$ext");

    //apro il file .txt relativo al download richiesto e lo incremento di 1
    $file = @fopen("$counterdir/$_GET[name].txt","r");
    $count = @fread($file, 100);
    $countplus = ($count + 1);
    @
    fclose($file);
    $fileb = @fopen("$counterdir/$_GET[name].txt","w");
    @
    fwrite($fileb, $countplus, 100);
    @
    fclose($fileb);

    //altrimenti, se il file richiesto non esiste, parte l'email di avviso al webmaster e stampo un messaggio di errore
    } else {

    $_GET['name'] = str_replace(">", "&gt;", $_GET['name']);
    $_GET['name'] = str_replace("<", "&lt;", $_GET['name']);

    $today = date("j F Y G:i");
    $user_ip = "$_SERVER[REMOTE_ADDR]";
    $to = "sadi84@tiscali.it";
    $subject = "Download non trovato";

    $body = "$user_ip il giorno $today non ha trovato il file $_GET[name]$ext";

    @
    mail("$to","$subject","$body");

    echo
    "Il file $_GET[name]$ext non &egrave; disponibile per il download.<br>
    Riprova pi&ugrave; tardi."
    ;

    }

    //altrimenti, se il nome del file non è passato via get, redirect alla pagina principale
    } else {
    header("Location: index.php");
    }
    ?>

  2. #2
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,767

    Predefinito

    Non saprei se sbaglio, ma perché nella prima if scrivi cosi:
    Codice PHP:
    if(isset($_GET['name']) && trim($_GET['name'])) {
    Invece di vedere solamente se esiste la variabile GET in questo modo:
    Codice PHP:
    if(isset($_GET['name']))
    E perché nella if, dove controlli se il file da scaricare esiste, non modifichi in questo modo
    Codice PHP:
    if (file_exists($_GET[name] . $ext))

    Sevenjeak
    Software developer and much more

  3. #3
    L'avatar di EmoArt
    EmoArt non è connesso Utente attivo
    Data registrazione
    19-03-2007
    Messaggi
    384

    Predefinito

    putroppo sono agli inizi col php e questo è solo uno script che ho trovato in rete, dici che con quelle modifiche risolverò il problema?

  4. #4
    L'avatar di mycarlo
    mycarlo non è connesso Utente attivo
    Data registrazione
    06-10-2009
    Residenza
    $this->s50
    Messaggi
    467

    Predefinito

    sevenjeak ha ragione infatti è inutile usare trim in quel modo.

    In quello script mi sembra che qualcosa non vada bene (oltre la sintassi, orrenda...)

    Codice PHP:
    if (file_exists("$_GET[name]$ext")) {

    header("Location: $_GET[name]$ext");

    //apro il file .txt relativo al download richiesto e lo incremento di 1
    $file = @fopen("$counterdir/$_GET[name].txt","r");
    $count = @fread($file, 100);
    $countplus = ($count + 1);
    @
    fclose($file);
    $fileb = @fopen("$counterdir/$_GET[name].txt","w");
    @
    fwrite($fileb, $countplus, 100);
    @
    fclose($fileb);

    //altrimenti, se il file richiesto non esiste, parte l'email di avviso al webmaster e stampo un messaggio di errore
    }
    Il codice successivo alla funzione header("Location: $_GET[name]$ext"), non verrà mai eseguito dato che verrai reindirizzato verso il file.
    Ultima modifica di mycarlo : 31-01-2010 alle ore 21.32.58

  5. #5
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,767

    Predefinito

    Io rifarei il codice in questo modo:
    Codice PHP:
    <?php
    //estensione dei file da scaricare
    $ext = ".zip";

    //nome directory con i file di testo, compreso lo slash / finale
    $counterdir = "count/";

    //controllo che nell'url ci sia il nome del file da scaricare,
    if(isset($_GET['name'])) {

    //se il file richiesto esiste, avviene il download
    if (file_exists($_GET[name] . $ext)) {

    header("Location: " . $_GET[name] . $ext);

    //apro il file .txt relativo al download richiesto e lo incremento di 1
    $file = fopen("$counterdir/$_GET[name].txt","r");
    $count = fread($file, 100);
    $countplus = ($count + 1);
    fclose($file);
    $fileb = fopen("$counterdir/" . $_GET[name] . ".txt", "w");
    fwrite($fileb, $countplus, 100);
    fclose($fileb);

    //altrimenti, se il file richiesto non esiste, parte l'email di avviso al webmaster e stampo un messaggio di errore
    } else {

    $_GET['name'] = str_replace(">", "&gt;", $_GET['name']);
    $_GET['name'] = str_replace("<", "&lt;", $_GET['name']);

    $today = date("j F Y G:i");
    $user_ip = $_SERVER[REMOTE_ADDR];
    $to = "sadi84@tiscali.it";
    $subject = "Download non trovato";

    $body = "$user_ip il giorno $today non ha trovato il file $_GET[name]$ext";

    mail("$to","$subject","$body");

    echo
    "Il file " . $_GET[name] . $ext . " non &egrave; disponibile per il download.<br>
    Riprova pi&ugrave; tardi."
    ;

    }
    ?>
    Le variabili che hai inserito all'interno delle stringhe sono già delle stringe, quindi dovresti concatenarle ( aggiungerle ) ad altri stringe con il punto.

    Forse prima delle funzioni è stato messo il carattere @ per evitare di stampare eventuali errori, ma non dovresti usarlo ( da quello che credo )

    Il codice che ho scritto non lo potuto provare
    Ultima modifica di sevenjeak : 31-01-2010 alle ore 22.01.02

    Sevenjeak
    Software developer and much more

  6. #6
    L'avatar di EmoArt
    EmoArt non è connesso Utente attivo
    Data registrazione
    19-03-2007
    Messaggi
    384

    Predefinito

    mi affido a voi che sicuramente ne sapete di più, io qualche sforzo lo faccio...ma... ancora i isultati sono scarsi, non capisco bene nemmeno gli script che scarico questo è il link dove dovrebbe scaricarice il file di prova, che giustamente difetta. http://emoart.altervista.org/index.p...click/download.
    Ma il codice che hai appena scritto a questo punto credo che vada in un'unico file giusto? anzichè come prima diviso in due..

  7. #7
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,767

    Predefinito

    Il codice che ho scritto e semplicemente una modifica del file getfile.php, ma non di assicuro che funziona, non avendolo provato

    Sevenjeak
    Software developer and much more

  8. #8
    L'avatar di mycarlo
    mycarlo non è connesso Utente attivo
    Data registrazione
    06-10-2009
    Residenza
    $this->s50
    Messaggi
    467

    Predefinito

    Non è da escludere che queste righe di codice:
    Codice PHP:
    $file = fopen("$counterdir/$_GET[name].txt","r");
    $count = fread($file, 100);
    $countplus = ($count + 1);
    fclose($file);
    $fileb = fopen("$counterdir/" . $_GET[name] . ".txt", "w");
    fwrite($fileb, $countplus, 100);
    fclose($fileb);
    Verranno ignorate...

    Fosse per me cambierei lo script così:
    Codice PHP:
    <?php
    //estensione dei file da scaricare
    $ext = ".zip";

    //nome directory con i file di testo, compreso lo slash / finale
    $counterdir = "count/";

    //controllo che nell'url ci sia il nome del file da scaricare,
    if(isset($_GET["name"])) {

    //se il file richiesto esiste, avviene il download
    if (file_exists($_GET["name"] . $ext)) {
    //apro il file .txt relativo al download richiesto e lo incremento di 1
    $file = fopen($counterdir . "/" . $_GET["name"] . ".txt","r");
    $count = fread($file, 100);
    $countplus = ($count + 1);
    fclose($file);
    $fileb = fopen($counterdir . "/" . $_GET["name"] . ".txt", "w");
    fwrite($fileb, $countplus, 100);
    fclose($fileb);

    header("Location: " . $_GET["name"] . $ext);
    //altrimenti, se il file richiesto non esiste, parte l'email di avviso al webmaster e stampo un messaggio di errore
    } else {

    $_GET["name"] = htmlentities($_GET["name"]);

    $today = date("j F Y G:i");
    $user_ip = $_SERVER["REMOTE_ADDR"];
    $to = "sadi84@tiscali.it";
    $subject = "Download non trovato";

    $body = "{$user_ip} il giorno $today non ha trovato il file {$_GET["name"]}{$ext}";

    mail($to,$subject,$body);

    echo
    "Il file " . $_GET["name"] . $ext . " non &egrave; disponibile per il download.<br>
    Riprova pi&ugrave; tardi."
    ;

    }
    ?>

  9. #9
    L'avatar di EmoArt
    EmoArt non è connesso Utente attivo
    Data registrazione
    19-03-2007
    Messaggi
    384

    Predefinito

    ho provato le vostre modifiche, la pagina del download riconosce il file, quindi è in grado di indicarne il peso, ma non avviene il download, appare un messaggio che dice che il file non è sul server, eppure credo che la directory sia corretta, la struttura è così: cartella principale del sito>cartella con lo script(contaclick,al suo interno ci sono i due codici php più il file "prova.zip")>cartella count(con il file prova.txt).
    sono giuste le cartelle o ho sbagliato qualcosa?

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •