+ Rispondi
Risultati da 1 a 8 di 8

Discussione: Funzione ereg() deprecata

  1. #1
    Nuovo della community
    reputazione complessiva: 1 1

    Messaggi
    45

    Funzione ereg() deprecata

    ciao a tutti, premetto la mia poca dimistichezza con questo linguaggio. Ho un piccolo problema con una funzione che è presente su una mod per game

    Codice:
    for ($i=0; $i<$player_cnt; $i++)
        {
        $i_rcon_string = $output[$i];
        if ($i_rcon_string != '')
            {
            $pat[0] = "/^\s+/";
            $pat[1] = "/\s{2,}/";
            $pat[2] = "/\s+\$/";
            $rep[0] = "";
            $rep[1] = " ";
            $rep[2] = "";
            $i_rcon_string = preg_replace($pat,$rep,$i_rcon_string);
    
            unset($tmp2);
            if (ereg("[[:space:]][0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}",  $i_rcon_string, $tmp2))
                {
                $i_ip = substr($tmp2[0],1);
                } else $i_ip = '';
    purtroppo mi da errore sulla riga dopo unset($tmp2).
    l'errore preciso che mi da sul browser è questo:

    Codice:
    Deprecated:  Function ereg() is deprecated in C:\Program Files\EasyPHP5.3.0\www\php_rcon\rules_checker\rcon-rules.php on line 215
    Faccio presente che sul pc ho installato easyphp 5.3

    grazie a tutti per la disponibilità.
    ciao

  2. #2
    Moderatore Globale L'avatar di Master85
    reputazione complessiva: 24 24

    Messaggi
    4,564
    Blogs
    13
    Ciao Fabio_,
    da PHP 5.3.0, la funzione ereg() è deprecata, ciò significa che non viene più inclusa e dunque utilizzata da PHP. Dovresti sostituire il tuo codice con:

    Codice PHP:
    ...
    preg_match"[[:space:]][0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}",  $i_rcon_string$tmp2 );
    ... 
    Ovviamente non posso sapere se funziona ma a rigor logica dovrebbe essere così. Sostituisci e facci sapere.

    A presto,
    Giuseppe

  3. #3
    Nuovo della community
    reputazione complessiva: 1 1

    Messaggi
    45
    grazie per la tua risposta, ho fatto la sostituzione che mi hai detto ma non và, d aun altro errore

    Codice:
    Warning:  preg_match() [function.preg-match]: Unknown modifier '[' in C:\Program Files\EasyPHP5.3.0\www\php_rcon\rules_checker\rcon-rules.php on line 215
    la sostituzione che ho fatta è questa:
    Codice:
            unset($tmp2);
            if (preg_match("[[:space:]][0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}",  $i_rcon_string, $tmp2))
                {
                $i_ip = substr($tmp2[0],1);
                } else $i_ip = '';
    grazie per l'aiuto

  4. #4
    Moderatore Globale L'avatar di bottomap
    reputazione complessiva: 41 41

    Messaggi
    2,960
    Ciao,

    Le funzioni ereg() e preg_replace() sono similli ma non identiche (ad esempio ereg non modifica l'array se non trova alcun match, mentre la preg_replace lo sostituisce con un array vuoto)... ad ogni modo incapsula la tua regular expression tra due caratteri '/' che agiscono da delimitatore dell'espressione (mentre la ereg non li vuole, la preg_match si... come puoi vedere dalla prima parte del tuo codice, in cui la preg_replace viene effettivamente usata per ripulire l'input prima di passarlo alla ereg).

    Accanto ai delimitatori / puoi poi aggiungere vari caratteri che indicano come trattare l'espressione regolare... ma ti rimando per una trattazione approfondita a qualche manuale o guida esaustiva (le regular expression sono un mondo piuttosto vasto).

    Ciaociao
    Ultima modifica di bottomap; 05-02-2010 alle 21:32


    Venite a farmi un saluto su http://www.bottomap.com/

    - Come porre domande in modo intelligente
    - Hai mai dato un'occhiata al
    Regolamento del Forum? Se la risposta è no, sarebbe proprio l'ora di farlo...
    - Se un utente ti è stato d'aiuto usa il pulsante Commenta Intervento per aumentare la sua reputazione!

    "La violenza è l'ultimo rifugio degli incapaci" - I.Asimov
    (per chiunque se lo fosse mai chiesto, il nick Bottomap è volutamente sgrammaticato)

  5. #5
    Nuovo della community
    reputazione complessiva: 1 1

    Messaggi
    45
    grazie mille, ho risolto ocn il vostri consigli, ho fatto in questa maniera

    Codice:
            if (preg_match("/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/",  $i_rcon_string, $tmp2))
    ora ho un altro problema però a cui nn sono riuscito a dare una spiegazione nonostante tutte le mie ricerche
    la riga di codice incriminata è questa:

    Codice:
    // CLI support
    if ($_SERVER['argv'])
        {
        for ($i=1;$i<count($_SERVER['argv']);$i++)
            {
            $it = split("=",$_SERVER['argv'][$i]);
            $_GET[$it[0]] = $it[1];
            }
        chdir(dirname($_SERVER['argv'][0]));
        $_SERVER['SERVER_ADDR'] = '127.0.0.1';
        }
    questo è l'errore che mi da

    Codice:
    Notice:  Undefined index: argv in C:\Program Files\EasyPHP5.3.0\www\php_rcon\rules_checker\rcon-rules.php on line 80
    la linea 80 è riferita a if ($_SERVER['argv']).....in realtà sembra che il tutto funzioni correttamente, ma comunque vorrei capire che cosa significa questo errore, potete darmi qualche dritta?
    sto impazzendo

    grazie a tutti

  6. #6
    Moderatore Globale L'avatar di bottomap
    reputazione complessiva: 41 41

    Messaggi
    2,960
    Ciao,

    L'errore ti indica che nell'array (autoglobale) $_SERVER non esiste alcun elemento di nome 'argv'... il ché è la norma per uno script php che viene eseguito in una pagina web.

    Probabilmente non sai (in effetti l'utilità è relativamente limitata) che l'interprete php può essere invocato tranquillamente da riga di comando, che accetta parametri come qualsiasi altro eseguibile e che produce un output (a schermo invece che in una pagina web). Normalmente il web server invoca l'interprete passandogli semplicemente il nome dello script .php da eseguire e si occupa di dirigerne l'output sulla pagina che viene restituita all'utente.

    Nel caso lo script venga eseguito da riga di comando è possibile passargli dei parametri (un po' come le richeste in GET/POST). Questi parametri vanno a finire, sotto forma di array, in $_SERVER['argv'] (in $_SERVER['argc'] c'è il numero di tali elementi).

    Il commento "CLI support" (CLI sta proprio per Command Line Interface) indica chiaramente che lo spezzone in questione è utilizzato se lo script viene eseguito da linea di comando.

    Se vuoi evitare la warning, puoi usare la funzione isset() su $_SERVER['argv'] per determinare se esiste o meno prima di accedervi (analogamente puoi usare anche la array_key_exist - meno diffusa - che controlla se una determinata chiave esiste in un determinato array).

    Ciaociao


    Venite a farmi un saluto su http://www.bottomap.com/

    - Come porre domande in modo intelligente
    - Hai mai dato un'occhiata al
    Regolamento del Forum? Se la risposta è no, sarebbe proprio l'ora di farlo...
    - Se un utente ti è stato d'aiuto usa il pulsante Commenta Intervento per aumentare la sua reputazione!

    "La violenza è l'ultimo rifugio degli incapaci" - I.Asimov
    (per chiunque se lo fosse mai chiesto, il nick Bottomap è volutamente sgrammaticato)

  7. #7
    Nuovo della community
    reputazione complessiva: 1 1

    Messaggi
    1

    funzione ereg() deprecata

    scusate se riapro questa discussione (tra l'altro sono nuovo del forum e spero di non violare nessuna regola).
    Il mio problema è questo, sto facendo un sito in joomla, e sto creando un menu con immagini, con l'effetto hover. Questo menu si crea facilmente con il modulo image menu, ma purtroppo questo usa la funzione ereg() che come detto prima è deprecata, come potrei modificarlo?

    questa è la funzione del modulo originario:

    foreach ( $rows as $row )
    {
    $menu['link'][]= $row->link."&amp;Itemid=".$row->id;
    $menu['nome'][]=$row->name;
    $parametri=$row->params;
    $as=array();
    $as= explode ("\n", $parametri);
    foreach ($as as $a)
    {
    if (ereg("menu_image", $a))
    {
    list($pre, $immagine)=explode ("=", $a);
    $menu['immagine'][]=$immagine;
    }
    }
    }
    return $menu;
    io ho provato a sostituire ereg(...) con preg_match(...), ma mi dice
    undefined variable menu
    mi potreste dare un aiuto per favore???? grazie mille!!!!!

  8. #8
    Moderatore Globale L'avatar di bottomap
    reputazione complessiva: 41 41

    Messaggi
    2,960
    Ciao,

    Non la puoi sostituire direttamente con gli stessi parametri, visto che il funzionamento è leggermente differente. In ogni caso il "pattern" che passi come espressione regolare dev'essere un'espressione regolare standard, comprensiva dei delimitatori di inizio e fine...

    La funzione preg_match inoltre ritorna il numero di match che riesce ad effettuare, mentre la ereg ritorna la lunghezza della stringa matchata o FALSE in caso non trovi alcun match... il test con la if quindi non è corretto se usi la preg_match.

    Ti rimando ad ogni modo alle pagine apposite (che comprendono parecchi esempi di utilizzo):
    La ereg: PHP: ereg - Manual
    La preg_match: PHP: preg_match - Manual

    Forse inoltre è il caso di impratichirsi un poco con le regular expression, visto che la preg_match si basa su quelle... in rete trovi parecchio materiale.

    Se semplicemente vuoi controllare se in $a è presente la sottostringa "menu_image" forse più semplicemente puoi sfruttare la strpos(), la substr() o la strstr().

    Ciaociao


    Venite a farmi un saluto su http://www.bottomap.com/

    - Come porre domande in modo intelligente
    - Hai mai dato un'occhiata al
    Regolamento del Forum? Se la risposta è no, sarebbe proprio l'ora di farlo...
    - Se un utente ti è stato d'aiuto usa il pulsante Commenta Intervento per aumentare la sua reputazione!

    "La violenza è l'ultimo rifugio degli incapaci" - I.Asimov
    (per chiunque se lo fosse mai chiesto, il nick Bottomap è volutamente sgrammaticato)

+ Rispondi

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi