Visualizzazione risultati 1 fino 20 di 20

Discussione: [PHP] ob_start/ob_end_flush

  1. #1
    Guest

    Predefinito [PHP] ob_start/ob_end_flush

    Salve a voi,

    Ho un piccolo problema con le function sovrascritte nel titolo del topic, come già letto in analoghe discussioni del forum, anche a me se utilizzate in locale/altro hosting funzionano dandomi l'effetto voluto mentre se inserite in altervista non vanno.

    Purtroppo in quei topic non è mai stata data risposta di un perchè, se fosse possibile averla mi fareste un piacere

    Saluti

  2. #2
    Guest

    Predefinito

    Senza leggere qualche esempio non si può aiutare.


    Ciaoo!

  3. #3
    Guest

    Predefinito

    Citazione Originalmente inviato da debug
    Senza leggere qualche esempio non si può aiutare.


    Ciaoo!

    Ogni esempio che sfrutta quelle function son convinto non vada, in ogni caso ti capisco e quindi spiego che utilizzo quele function per filtrare delle parole nel mio sito, facendole tramutare in link se il nome di quelle parole sono presenti come file di una directory.

    la parte in questione l'associo ad un include che mi richiama le case del mio sito:

    Codice PHP:
    ob_start("linkword");
    include(
    $lang."/".$page.".php");
    ob_end_flush();
    se può servire questo è il resto dello script:

    Codice PHP:

    <?php
    function linkword($str) {
    $d = opendir("../wiki");
    $a = array();
    while(
    $c = readdir($d)) {
    $c = str_replace(".php","",$c);
    if(
    strlen($c) > 2) $str = str_replace($c,"<a href=\"../wiki/it/?
    page=
    $c\">$c</a>", $str);
    }
    closedir($d);
    return(
    $str);
    }
    ?>
    funziona correttamente in locale.

    Grazie per la risposta debug :)

  4. #4
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Cosa dovrebbe fare lo script? Che errori ti dà?
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  5. #5
    Guest

    Predefinito

    lo script ha lo scopo di trasformare una parola presente nel mio sito in link se questa parola è presente come file di una directory.

    esempio nella directory "Keeper" c'è il file art.php ..

    Se in una pagina del mio sito è presente la parola art , automaticamente diventerebbe http://art.php (esempio banale)

    tutto ciò correttamente funzionante in locale, su altervista invece non da alcun errore o avvertenza, semplicemente non ottengo il risultato voluto come se le function non venissero proprio interpretate.

    spero questa volta di essermi espresso il più chiaramente possibile per potervi aiutare nell'aiutarmi :)

    Saluti

  6. #6
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Tu cosa passi alla funzione?
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  7. #7
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    potrebbe essere un problema di path - su altervista non sei in / e magari ti ritrovi con nomi troppo lunghi. Prova ad usare $c = basename($c, '.php'); invece di str_replace, metti un po' di echo qua e la per sicurezza e, sempre, un error_reporting(E_ALL); all'inizio

  8. #8
    Guest

    Predefinito

    Citazione Originalmente inviato da funcool
    Tu cosa passi alla funzione?

    tramite ob_start("linkword"); mi richiamo il contenuto di linkword descritto sopra e gli dico di applicarla ad ogni case richiamato.


    dreadnaut ho provato lo script anche in una directory del tipo miosito.altervista.org/prova .. path parlando non dovrebbe essere eccessivamente lunga, in ogni caso ho provato a sostituire quanto descritto, ma non risolve il mio problema.

    grazie ragazzi per la disponibilità :)

  9. #9
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Prova a fare così:
    Codice PHP:
    ob_start();
    include(
    $lang."/".$page.".php");
    $linkword=ob_get_contents();
    ob_end_flush();
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  10. #10
    Guest

    Predefinito

    aime non ottengo risultati neppure con quest'ultimo metodo indicato = [

  11. #11
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Dunque,
    basandosi su questo warning che leggo nel manuale php.net su ob_start:
    Citazione Originalmente inviato da php.net
    Avvertimento
    Some web servers (e.g. Apache) change the working directory of a script when calling the callback function. You can change it back by e.g. chdir(dirname($_SERVER['SCRIPT_FILENAME'])) in the callback function.
    La "callback function" nel tuo caso è linkword per capirci, ed in effetti lì usi un riferimento alla path relativo "..", non so se è proprio quello di cui trattava nell'avvertimento.

    Anche perché secondo me il pezzo di script di funcool evita sicuramente questo problema visto che non fa uso di una funzione "callback" .. però appunto non facendone uso non rimpiazza i link hai soltanto il buffer dentro la variabile $linkword e quindi non vedi alcun risultato no..
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  12. #12
    Guest

    Predefinito

    uhm.. speravo in questa soluzione, riflettendoci nel file in locale non usufruivo di ../

    ma aime non risolvo il problema neppure spostando le directory e quindi dichiarando un percorso tipo /it

    Per comodità di gestione ecco lo script, così com'è funziona correttamente in locale:

    tmp.rar

  13. #13
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    su Altervista la callback non viene proprio mai chiamata...

    edit: so che non è lo stesso, ma una soluzione di ripiego potrebbe essere
    Codice PHP:
    echo linkword( file_get_contents('a.php') );
    Ultima modifica di dreadnaut : 29-07-2007 alle ore 21.15.32

  14. #14
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Mi sono incuriosito, soprattutto perché non avevo mai provato ob_start indicando il parametro di callback...
    e ahime' non posso far altro che confermare, se ce ne fosse stato il bisogno, le parole di dreadnut e cioè che le callback qui su AV non vengono chiamate affatto :/
    Basta provare -invano- l'esempio della pagina di php.net:
    http://it.php.net/ob_start
    (le "apples" rimangono tali invece di diventare oranges)

    Quindi direi di trovare un'altra soluzione, seguendo il saggio consiglio di funcool (usare ob_start senza callback).
    Occhio, mi baso su il codice del .rar che hai linkato (che è piuttosto diverso da quello postato sopra con $lang e $page che nel rar non ci sono... tanto per agevolare ).

    Ho quindi usato questo codice, cambiando solo file.php
    basta sostituire le tue righe originali:
    Codice PHP:
    ob_start("linkword");
    include(
    "a.php");
    ob_end_flush();
    con:
    Codice PHP:
    ob_start();
    include(
    "a.php");
    $linkword = ob_get_contents();
    ob_end_clean();

    echo
    linkword($linkword);
    da notare che è necessario il ob_end_clean(); al posto del ob_end_flush(); (altrimenti vedi tutto doppio, non linkato e poi linkato)
    Quindi la function linkword() non è rimasta così com'era solo che viene chiamata esplicitamente (visto che come callback non va qui) per linkare le parole.
    Come risultato vedo asdasd linkato a
    nomesito.altervista.org/wiki/it/?page=sdasda

    Quindi direi che funziona.
    ciao
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  15. #15
    Guest

    Predefinito

    ed io direi anche che ti ringrazio e non sai quanto..

    ottima spiegazione e risoluzione del mio problema..

    grazie a tutti quanti :)

  16. #16
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Credo che "risoluzione del mio problema" significhi che ha risolto.
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  17. #17
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Su.. capisciammè
    visto che m'aveva contattato in privato per altri problemi l'ho cortesemente invitato a continuare qui. Visto che l'ultimo era il SUO post per evitare un suo doppio post o un edit che non avremmo mai visto ho scritto quel post, che si autodistruggerà tra:
    10... 9... 8...
    *zot*
    (che tra l'altro anticipa il mio pensionamento! )
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  18. #18
    Guest

    Predefinito

    Citazione Originalmente inviato da funcool Visualizza messaggio
    Credo che "risoluzione del mio problema" significhi che ha risolto.
    ah si, voleva essere un modo diverso per dire che funziona



    Cmq si heracleum un altro problema ce lo avrei, visto l'invito e la vostra disponibilità allora proseguo qui.

    In sostanza adesso il "linkaggio" funziona correttamente, il problema è che mi linka anche i link.

    esempio:

    io in it/ ho il file ciao.php , e nel mio sito:

    Codice:
    <a href="beh_ciao.php"> Salve </a>
    lui giustamente mi filtra la parola ciao all'interno del link e me la fa diventare a sua volta link... lascio immaginare quindi la sgradita conseguenza.

    Quindi mi chiedevo se fosse possibile annullare il linkaggio alle parole racchiuse nei tag html o nel tag <a>.

    lo script in riferimento è sempre lo stesso:

    Codice PHP:
    <?php
    function linkword($str) {
    $d = opendir("../wiki/it");
    $a = array();
    while(
    $c = readdir($d)) {
    $c = str_replace(".php","",$c);
    if(
    strlen($c) > 2) $str = str_replace($c,"<span class=\"wk\"><a href=\"../wiki/?
    page=
    $c\">$c</a></span>", $str);
    }
    closedir($d);
    return(
    $str);
    }
    ?>
    grazie davvero anche questa volta

  19. #19
    Guest

    Predefinito

    non credo sia possibile, come si fa a dire al signor php di non remplacare gli a href?! penso sia impossibile...però chissà!
    anche se, forse ho trovato una soluzione, andrebbe detto che le parole .php non devono essere rimpiazzate...ciao

  20. #20
    Guest

    Predefinito

    immaginavo..

    cmq .php mi elimina l'estensione che sennò verrebbe stampata a video, è si un alternativa ma purtroppo non la soluzione che intenderei applicare..

    Invece riformulando, far si che l'effetto (filtraggio) avvenga solamente alle parole presenti solo all'interno di un determinato ID prestabilito all'interno del mio sito?

    così sarebbe possibile?

    grazie : )

Regole di scrittura

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