phpRS help fórum : phpRS Fórum
Hlavní diskuzní phpRS fórum. Najdete zde odpovědi na otázky týkající se provozu a instalace phpRS systému.
phpRS - redakční a informační systém
Deprecated: Function ereg() is deprecated v PHPRS
Zaslán uživatelem/kou: marty (IP adresa zaznamenána)
Datum: 2011-07-23, 13:22

Je vseobecne znamo ze od verze php 5.3 funkce ereg se hlásí jako zastarale viz napr tato hlaska:


Deprecated: Function ereg() is deprecated in /www/doc/www.palenice.net/www/admin/aconfig.php on line 460
(toto mi skace pri zmene sablony v administraci)

pa3k mi poslal zajimavy kod (script) pomoci ktereho se teto chybove hlasky zbavime a nemusime hledat a nasledne upravovat prikazy ereg v celem kodu (jedna se hlavne o pluginy)

script vypada nasledovne:
//--[uprava pro php 5.3.x]-----------------------------
//pomoci teto upravy se automaticky zmeni ereg  a eregi, ktere v teto a vyssi verzi php jiz nejsou podporovany

if (function_exists('ereg') !== true)
{
    function ereg($pattern, $string, &$regs)
    {
        return preg_match('~' . addcslashes($pattern, '~') . '~', $string, $regs);
    }
}

if (function_exists('eregi') !== true)
{
    function eregi($pattern, $string, &$regs)
    {
        return preg_match('~' . addcslashes($pattern, '~') . '~i', $string, $regs);
    }
}


vklada se do config.php a melo by to jet

EDIT:
bohuzel mi to nejede, mozna mam nekde chybku.
Pa3ku neni to tim ze to mam na konci configu?


ICQ: 179653900
skype: marty_hranice
| www.hnfond.cz | | www.struhlovsko.cz | www.bxclub.com | www.r21club.com | www.palenice.net



Celkem upraveno 2×. Poslední úprava marty v 23.07.2011 13:52.

Re: Deprecated: Function ereg() is deprecated v PHPRS
Zaslán uživatelem/kou: MirekS (IP adresa zaznamenána)
Datum: 2011-07-23, 13:47

tenhle kód funguje, jen když v php ty funkce ereg() a eregi() již úplně chybí. pokud tam jsou, tak se kód neuplatní a chybová hláška: Deprecated: Function ereg() se objevuje stále

Re: Deprecated: Function ereg() is deprecated v PHPRS
Zaslán uživatelem/kou: pa3k (IP adresa zaznamenána)
Datum: 2011-07-23, 14:54

Presne tak. Uvedené konštrukcie sú o zabezpečení funkčnosri kódu, ktorý obsahuje ereg / eregi a v php, bez ich podpory v jazyku. Chybové hlášky samotné by mal riešiť skôr error_reporting alebo display_errors.

Čiže uvedený kód nemá zabepčečiť nevypisovanie chybových hlášok, ale zabezpečí to, že kód, ktorý sa spolieha na eistenciu ereg a eregi nebude nutné upravovať. Typicky – ak by bolo prepisovania veľa – je jednoduchšie a bzpečenjšie tieto funckie do config.php doplniť ako prekopávať ereg eregi na prech_match napr. na 50 miestach v kóde.



Celkem upraveno 2×. Poslední úprava pa3k v 23.07.2011 15:14.

Re: Deprecated: Function ereg() is deprecated v PHPRS
Zaslán uživatelem/kou: MirekS (IP adresa zaznamenána)
Datum: 2011-07-23, 17:38

ono ale neuškodí se na ten kód podívat a ty funkce ereg přepsat, např.

kód v specfce.php funkce GenHlavMenu()
$pole_predek=explode(':',$GLOBALS["stromhlmenu"]);
  // projduti pole - test na korektnost vstupu
  $korektni_pole_predek=array();
  reset($pole_predek);
  while (list($klic,$hodnota)=each($pole_predek)):
    if (ereg('^[0-9]*$',$hodnota)):
      $korektni_pole_predek[]=$hodnota;
    endif;
  endwhile;

lze nahradit 4x rychlejší a jednodušší verzí:
$korektni_pole_predek=array();
  if (preg_match('/^[0-9]+(:[0-9]+)*$/U', $GLOBALS["stromhlmenu"])) {
    $korektni_pole_predek=explode(':', $GLOBALS["stromhlmenu"]);
    }

navíc si nejsem jist, jestli v tom původním kódu je správné, když projde i prázdný string, neboť je tam [0-9]* a nejspíš by se spíš hodilo [0-9]+ aby tam byla alespoň jedna číslice

v původním kódu je i dost hrozné procházení polem, mnohem lepší je na to funkce foreach() nebo array_walk()



Celkem upraveno 2×. Poslední úprava MirekS v 23.07.2011 17:39.

Re: Deprecated: Function ereg() is deprecated v PHPRS
Zaslán uživatelem/kou: JanVar (IP adresa zaznamenána)
Datum: 2011-07-24, 10:19

To: MirekS

ano, nahrazením kodu přímo ve zdroji je sice fajn, ale uznej, že kvůli tomu předělávat odladěný a zabezpečený server nehodlám (tedy pokud se nevyskytne nějaká fatální chyba... (já to mám zapsaný na dvakrát, a podle verze PHP to ručně zedituju)).

Ale ano, uznávám, že přechod na novější verze PHP jsou (tedy občas), přínosem, jen se to nesmí přehánět, jako to dělají někteří ISP (novinky za každou cenu). Pravdou je, že pak nabízejí prostor za snížené ceny (výhodná nabídka), kde jim to uživatelé otestují :-)) ( Vím co říkám... :-)) )
Ovšem druhou pravdou je, že na svém serveru provozuji jen několik málo domén a proto si tohle mohu dovolit (nejsem ISP).

A taky uznávám, že phpRS si zaslouží ještě chvilku podržet při životě, protože tenhle systém mám tak nějak rád a mohu si s ním dělat co chci :-) Proto se snažím pomáhat, co mi čas dovoluje, něž to pohřbíme úplně :-((

-- JaV ---- [http://www.hades.cz] ---- security by obscurity ---------------------------------------------
motto:
It's OK to be ignorant; it's not OK to play stupid.
But it's simply not efficient for us to try to help people who are not willing to help themselves.
----------------------------------------------------------------------------------------------------------------------

Re: Deprecated: Function ereg() is deprecated v PHPRS
Zaslán uživatelem/kou: marty (IP adresa zaznamenána)
Datum: 2011-07-24, 10:37

tak to se omlouvam za mystifikaci v mem prispevku vyse, ze to pomuze i od hlasek o deprecated.
Spatne jsem pa3ka pochopil :-)

ICQ: 179653900
skype: marty_hranice
| www.hnfond.cz | | www.struhlovsko.cz | www.bxclub.com | www.r21club.com | www.palenice.net



Lituji, ale pouze registrovaní uživatelé mohou zasílat příspěvky do této sekce.
This forum powered by Phorum and designed by STaNBoSS.