MasterDrive.it   
Vai indietro   MasterDrive.it > Web Development e Scripting > PHP



Rispondi
 
Strumenti della discussione Modalità di visualizzazione
Vecchio 05-02-2010, 17:54   #1 (permalink)
Nuovo della community

 
38 Messaggi

Fabio_ novizio della comunita' ( + 10 )
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

Fabio_ non è in linea   Bookmark and Share Rispondi quotando
Vecchio 05-02-2010, 18:44   #2 (permalink)
Moderatore Globale

 L'avatar di Master85

 
4,545 Messaggi

Master85 e' decisamente importante ( + 350 )Master85 e' decisamente importante ( + 350 )Master85 e' decisamente importante ( + 350 )Master85 e' decisamente importante ( + 350 )
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
Master85 non è in linea   Bookmark and Share Rispondi quotando
Vecchio 05-02-2010, 19:14   #3 (permalink)
Nuovo della community

 
38 Messaggi

Fabio_ novizio della comunita' ( + 10 )
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
Fabio_ non è in linea   Bookmark and Share Rispondi quotando
Vecchio 05-02-2010, 19:46   #4 (permalink)
Moderatore Globale

 L'avatar di bottomap

 
2,935 Messaggi

bottomap e' un tipo da prendere in considerazione ( + 650 )bottomap e' un tipo da prendere in considerazione ( + 650 )bottomap e' un tipo da prendere in considerazione ( + 650 )bottomap e' un tipo da prendere in considerazione ( + 650 )bottomap e' un tipo da prendere in considerazione ( + 650 )bottomap e' un tipo da prendere in considerazione ( + 650 )bottomap e' un tipo da prendere in considerazione ( + 650 )
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
__________________


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)

Ultima modifica di bottomap : 05-02-2010 a 21:32.
bottomap non è in linea   Bookmark and Share Rispondi quotando
Vecchio 06-02-2010, 00:03   #5 (permalink)
Nuovo della community

 
38 Messaggi

Fabio_ novizio della comunita' ( + 10 )
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
Fabio_ non è in linea   Bookmark and Share Rispondi quotando
Vecchio 06-02-2010, 00:44   #6 (permalink)
Moderatore Globale

 L'avatar di bottomap

 
2,935 Messaggi

bottomap e' un tipo da prendere in considerazione ( + 650 )bottomap e' un tipo da prendere in considerazione ( + 650 )bottomap e' un tipo da prendere in considerazione ( + 650 )bottomap e' un tipo da prendere in considerazione ( + 650 )bottomap e' un tipo da prendere in considerazione ( + 650 )bottomap e' un tipo da prendere in considerazione ( + 650 )bottomap e' un tipo da prendere in considerazione ( + 650 )
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)
bottomap non è in linea   Bookmark and Share Rispondi quotando
Vecchio 06-05-2010, 17:41   #7 (permalink)
Nuovo della community

 
1 Messaggi

donato.chpp novizio della comunita' ( + 10 )
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:

Quote:
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!!!!!
donato.chpp non è in linea   Bookmark and Share Rispondi quotando
Vecchio 06-05-2010, 17:55   #8 (permalink)
Moderatore Globale

 L'avatar di bottomap

 
2,935 Messaggi

bottomap e' un tipo da prendere in considerazione ( + 650 )bottomap e' un tipo da prendere in considerazione ( + 650 )bottomap e' un tipo da prendere in considerazione ( + 650 )bottomap e' un tipo da prendere in considerazione ( + 650 )bottomap e' un tipo da prendere in considerazione ( + 650 )bottomap e' un tipo da prendere in considerazione ( + 650 )bottomap e' un tipo da prendere in considerazione ( + 650 )
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)
bottomap non è in linea   Bookmark and Share Rispondi quotando
Rispondi

Strumenti della discussione
Modalità di visualizzazione

Regole d'invio
Non puoi inserire discussioni
Non puoi inserire repliche
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è attivo
Le smilies sono attive
Il codice IMG è attivo
il codice HTML è disattivato
Trackbacks are attivo
Pingbacks are attivo
Refbacks are disattivato

Salto del forum


Tutti gli orari sono GMT +2. Attualmente sono le 09:58.


Powered by vBulletin versione 3.8.0
Copyright © 2000 - 2010, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.2.0

Valid XHTML 1.0 Transitional  Creative Commons License

Eccetto dove diversamente specificato, i contenuti pubblicati in questa comunità sono rilasciati sotto Licenza
Creative Commons Attribuzione-Non commerciale-Condividi allo stesso modo 2.5 Italia License.
La comunita' di MasterDrive.it non e' responsabile di eventuali imprecisioni presenti nelle pagine.