Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Modifica file txt a riga stabilita

    Anzitutto buongiorno a tutti!
    Sono nuovo qui... Scrivo per richiedervi semplicemente un favore: un grazie infinito a chiunque contribuirà.

    Sto realizzando un contatore di PIU' downloads con database (se così si può definire!) su un UNICO file txt.

    La struttura del progetto è un semplice link che mandi l'id del file da scaricare con funzione GET ad un file php, il quale, oltre che avviare il download, aprirà il file txt e aggiornerà il numero di download.

    Il file php, ricevuto l'"id" del file da scaricare, con un la funzione "switch", identificherà l'id e avvierà il download corrisponente. Poi aprirà il txt per modificarlo nel modo giusto.Ora, il mio problema è che, volendo usare un'unico file txt per più download, avrei deciso di organizzare il txt in questo modo:

    Downloads di "prova1.zip" [corrispondente ad id=1]
    34
    Downloads di "prova2.zip" [corrispondente ad id=2]
    25

    Quindi: in riga 1 metto l'intestazione del download, in riga 2 i download di quel file; in riga 3 l'intestazione del secondo file, in riga 4 il numero di download avvenuti di quel file, etc etc.
    Date un'occhiata al php di gestione... perchè non funziona?

    <?php

    switch ($_GET[mp3]) {

    case '1':
    header ("Location: http://.../files/prova1.zip");
    $position=2;
    $f=@fopen ("/files/dlcount.txt","r+");
    $i=0;
    while ($i=$position) {
    $ndl=@fgets($f,4096);

    //in questo modo, secondo me, il ciclo legge fino alla riga desiderata (riga 2 se l'id è 1, riga 4 se l'id è 2, ovvero riga=2*id) e memorizza in ndl l'ultima riga, quella che ci interessa

    $i++;
    }
    $ndl++; //qui dovrebbe incrementare il valore che ha acquisito
    @puts($f,$ndl); //qui lo inserisce al posto del vecchio
    @fclose($f);
    break;

    case '2':
    header ("Location: http://.../files/prova2.zip");
    $position=4;
    $f=@fopen ("/files/dlcount.txt","r+");
    $i=0;
    while ($i=$position) {
    $ndl=@fgets($f,255);
    $i++;
    }
    $ndl++;
    @puts($f,$ndl);
    @fclose($f);
    break;

    }
    ?>


    Venendo al punto: COME POSSO FAR LEGGERE IN UN FILE TXT ALLA RIGA DA ME PRESCELTA, INCREMENTARE IL DATO ACQUISITO E AGGIORNARLO NELLA STESSA RIGA, SENZA MODIFICARE ALTRO?
    Perchè il mio file php non funziona?

    Spero di essere stato chiaro.
    Chi può aiutarmi? Anche solo dirmi se ciò che cerco è realizzabile, o magari dandomi la parte mancante dello script di apertura e scrittura del file...

    Ringrazio chi ha perso tempo leggendomi ma soprattutto chi mi darà una mano!
    Tom

  2. #2
    un consiglio, tu hai detto che hai a disposizione un db giusto???
    Allora perchè ti vai a complicare la vita utilizzando un .txt????
    Crea una tabella mysql o quello ceh vuoi te con questa struttura:
    -id
    -file
    -count

    poi utilizza il seguente script

    <?
    $fid=$_get['id'];

    // parametri del database
    $db_host = "localhost";
    $db_user = "";
    $db_password = "";
    $db_name = "";

    //qui modifichi il codice a per il tuo tipo di db
    $db = mysql_connect($db_host, $db_user, $db_password);
    mysql_select_db($db_name, $db);

    //legge i dati dal db
    $query = "SELECT file,count FROM file_down WHERE id=".$fid;
    $result = mysql_query($query, $db);
    if (!$result)
    die("Il file non è più presente!");
    while ($row = mysql_fetch_array($result))
    {
    $file=$row['file'];
    $count=$row['count'];
    }

    // aggiorna il count
    $count++;
    $querys = "UPDATE file_down SET count=".$count." WHERE id=".$idf;
    $results = mysql_query($querys, $db);

    //chiudi il db
    mysql_close($db);

    //manda al file
    header ("Location:".$file);

    ?>


    Spero sia tutto giusto e di averti risposto....

    Errare e' umano, ma per fare veramente casino serve la password di root.
    Coltiva Linux........Tanto windows si impianta da solo!!!!!
    PHP 4 Ever

  3. #3

    Niente da fare... nulla di fatto...

    Mi dispiace, ma non ho a disposizione ne' ho tempo e modo d'imparare l'utilizzo di un db. Per questo devo e vorrei usare il txt.
    Anche perchè poi vorrei implementare lo script (ciò che vi chiedo è solo una parte dello script php, in effetti...)
    La domanda resta in ballo dunque!
    Aggiorno lo script:

    <?php
    $position=$_GET[id];

    $file=fopen ("/files/dlcount.txt","r"); //apre il file in lettura
    while(!feof($file)) {
    $righe[] = fgets($file,255); //fino a quando il file non finisce, ne salva le righe in un array }

    $righe[$position]++; //incrementa la posizione desiderata di 1, ovvio che l'id passato sarà corrispondente alla riga giusta del dato da aumentare fclose($file);

    $fileb=fopen("/files/dlcount.txt","w"); //riapre il file in scrittura e ne cancella il contenuto for ($i=0; $i<count($righe); $i++)
    @puts($fileb,$righe[$i]); //reinserisce ogni riga prima salvata nel'array, in pratica riscrive il file come prima, con un'unica riga cambiata @fclose($fileb);
    echo "Fatto!";

    ?>

    Questo script è buono? Chi me lo può correggere?
    Il server mi da questo errore: Fatal error: Maximum execution time of 15 seconds exceeded in /membri/canalebmc/mp3.php on line 7

    grazie.
    Tom

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.