Visualizzazione risultati 1 fino 9 di 9

Discussione: [PHP] Gestire il file con i links...

  1. #1
    Guest

    Post [PHP] Gestire il file con i links...

    Ciao a tutti, io ho un file txt che contiene in ordine id|url con id generato tramite rand di 5 numeri.

    Ecco il file txt di esempio:
    80540|http://ilbello.com
    44848|http://ciao.com
    44848|http://forumcommunity.net
    44018|http://blogfree.net
    45828|http://altervista.org
    34848|http://netsons.org
    24848|http://forumfree.it
    Il risultato di file():
    Array ( [0] => 80540|http://ilbello.com [1] => 44848|http://ciao.com [2] => 44848|http://forumcommunity.net [3] => 44018|http://blogfree.net [4] => 45828|http://altervista.org [5] => 34848|http://netsons.org [6] => 24848|http://forumfree.it )
    E il codice PHP:
    Codice PHP:
    if($_SERVER["QUERY_STRING"]) {
    $id = $_SERVER["QUERY_STRING"];
    $lista = file("url.txt");



    /* codice che manca */



    header("Location: $url");
    exit();
    }
    In pratica si dovrebbe prelevare l'id che viene dato dopo il ? (http://sito.com?12345) e che dovrà essere poi reindirizzato al sito associato...
    Non riesco a procedere, avete idee di come fare?? Grazie mille e...Buona Befana!!
    Ultima modifica di sIM : 06-01-2010 alle ore 02.01.06

  2. #2
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Codice PHP:
    <?php

    if( !preg_match ( '#^[0-9]{5}$#', ($id = $_SERVER['QUERY_STRING']) ) )
    exit (
    'Querystring non valida.');

    $f = fopen ('url.txt', 'r');

    while ( list (
    $idCurr, $sito ) = fscanf ( $f , '%d|%s' ) )
    if (
    $id == $idCurr )
    header ( 'Location: ' . $sito );

    echo
    'ID ', $id , ' non trovato.';

    fclose($f);

    ?>
    Ultima modifica di programmazioned : 06-01-2010 alle ore 18.27.24 Motivo: fclose

  3. #3
    Guest

    Predefinito

    parse_url.
    Qualcosa come:
    Codice PHP:
    <?php
    $array
    = parse_url($url); //$url = http://sito.com?12345
    echo $array['query'] //12345
    ?>

  4. #4
    Guest

    Predefinito

    Non funziona il codice di programmazioned... in pratica mostra tutti gli id e gli url...
    Dovrebbe mostrare solo l'url a cui appartiene... xD
    Codice PHP:
    $id = $_SERVER["QUERY_STRING"];
    $file = fopen("url.txt","r");

    if(!
    preg_match("#^[0-9]{5}$#",$id)) { header("Location: index.php"); exit(); }

    while(list(
    $idc,$url) = fscanf($file,'%d|%s')) {
    print_r($idc); echo "<br>";
    #if ($id == $idc) { header ("Location: {$url}"); }
    #else { header("Location: index.php"); exit(); }
    }
    Gabry, il tuo non funzionerà perché nelle chiavi io ho [0] => ID|URL...non [id] => URL...che forse sarebbe più semplice xD
    Grazie mille a tutti!! <3

    Edit: Ho risolto così...come credevo di fare: in pratica alla [key] => URL... così $lista[$id] corrisponde l'url xD
    Codice PHP:
    $id = $_SERVER["QUERY_STRING"];
    $file = fopen("url.txt","r");

    if(!
    preg_match("#^[0-9]{5}$#",$id)) { header("Location: index.php"); exit(); }
    while(list(
    $k,$url) = fscanf($file,'%d|%s')) { $lista[$k] = $url; }
    header("Location: {$lista[$id]}");
    Ultima modifica di sIM : 06-01-2010 alle ore 13.57.04

  5. #5
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,226

    Predefinito

    programmazioned ha fatto un codice davvero buono, ma utilizzando il suggerimento di gabryhacker con qualche piccola modifica si ottiene ciò che vuoi:

    Codice PHP:
    <?php

    $url
    = "http://sito.com/?12345";

    $contenutofile = file("nomefile.txt");
    $array = parse_url($url);
    $dm = $array['query'];
    for(
    $i=0;$i<count($contenutofile);$i++) {
    $contenutofile[$i]=explode("|",trim($contenutofile[$i]));
    if (
    strtolower($contenutofile[$i][0])==strtolower($dm)) {
    $sito = $contenutofile[$i][1];
    break;
    }
    }

    if(!empty(
    $sito)){ Header("Location:".$sito); }

    ?>
    Apprezzi l'aiuto? Offrimi un caffè!

  6. #6
    Guest

    Predefinito

    Si infatti la mia idea era di usare il list...ora invece vorrei sapere come posso verificare che un id non sia già esistente e farne generare un altro? o.O" ...con eregi? Ma è deprecata giusto?? xD
    Codice PHP:
    $id = rand(10000,99999);

    $o = fopen("url.txt","a+");
    $w = fwrite($o,"{$id}|{$_POST[url]}\n");

    fclose($o);
    Ultima modifica di sIM : 06-01-2010 alle ore 14.10.51

  7. #7
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,226

    Predefinito

    Guarda l'ultima riga del mio codice:

    Codice PHP:
    if(!empty($sito)){ Header("Location:".$sito); }
    Controlla se $sito è vuoto o meno.

    Potresti sfruttare questa cosa a tuo favore:

    Codice PHP:
    <?php

    function check($id){

    $contenutofile = file("nomefile.txt");
    $array = parse_url($url);
    $dm = $array['query'];
    for(
    $i=0;$i<count($contenutofile);$i++) {
    $contenutofile[$i]=explode("|",trim($contenutofile[$i]));
    if (
    strtolower($contenutofile[$i][0])==strtolower($dm)) {
    $sito = $contenutofile[$i][1];
    break;
    }
    }

    if(empty(
    $sito)){ return false; }else{ return true; }
    }

    if(
    check("12345")){

    $id = rand(10000,99999);

    $o = fopen("url.txt","a+");
    $w = fwrite($o,"{$id}|{$_POST[url]}\n");

    fclose($o);

    }

    ?>
    Comunque anche eregi è buono, ben configurato.
    Apprezzi l'aiuto? Offrimi un caffè!

  8. #8
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Ci sono delle cose che non ho capito:


    • perchè usare parse_url()['query']: non dovrebbe dare lo stesso risultato di $_SERVER['QUERY_STRING']?
      La differenza sta solo nel fatto che nel primo caso è invocata una funzione e nell'altro ci si appoggia ad una variabile superglobale, no?

    • perchè aggiungere quell' exit() forzato dopo la chiamata a header():
      se il redirect ad un'altra pagina avviene correttamente, è ovvio che l'esecuzione dello script corrente termina.

    • perchè il mio script non funziona: scorre tutte le righe, e quando trova l'id che si cerca reindirizza, mostrando un errore se non si ottengono risultati.
      Cosa cambia se si utilizza un array? Ho forse capito male la richiesta iniziale?


    Comunque anche eregi è buono, ben configurato.
    Eregi è deprecata, e pertanto non è una buona idea usarla. Inoltre ha un peso maggiore di preg.
    Ultima modifica di programmazioned : 06-01-2010 alle ore 22.07.02

  9. #9
    Guest

    Predefinito

    Io ho risolto i miei problemi così:
    Codice PHP:
    function check($id) {
    if(
    eregi($id,file_get_contents("url.txt"))) { return true; }
    else { return
    false; }
    }

    if(
    $_POST["url"]) {
    $id = rand(10000,99999);

    if(
    check($id) == FALSE) {
    if(!
    filter_var($_POST["url"],FILTER_VALIDATE_URL)) { header("Location: ?errore"); exit(); }

    $o = fopen("url.txt","a+");
    $w = fwrite($o,"{$id}|{$_POST[url]}\n");
    fclose($o);
    }
    }

    else if(
    $_SERVER["QUERY_STRING"] == "errore") {
    echo
    "<script>alert(\"- Il sito non esiste\n- L'id è errato\n- L'url non è valido\");</script>\n";
    echo
    "<script>location.href=\"index.php\";</script>";

    exit();
    }

    else if(
    $_SERVER["QUERY_STRING"]) {
    $id = $_SERVER["QUERY_STRING"];
    $file = fopen("url.txt","r");

    if(!
    preg_match("#^[0-9]{5}$#",$id)) { header("Location: index.php"); exit(); }
    while(list(
    $k,$url) = fscanf($file,'%d|%s')) { $lista[$k] = $url; }
    header("Location: {$lista[$id]}");

    exit();
    }
    L'exit lo metto dopo l'header per sicurezza.... xD
    Sapete come renderlo più "sicuro" come controlli?? Grazie mille! *-*

Regole di scrittura

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