Erori dupa Upgrade PHP de la 5.3 la 5.4

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
adrian_ady
Mesaje: 80

Erori dupa Upgrade PHP de la 5.3 la 5.4

Salut, nu ne-am mai auzit demult!
Azi am primit un mesaj de la hosting sa ma anunte ca: "A fost efectuat upgrade la versiunea de PHP(de la 5.3 la 5.4)"...
M-am uitat pe site si era totul aiurea, nu stiu de unde sa incep pentru a rezolva zapaceala.
Erau sute de erori gen :

Cod: Selectaţi tot

Strict Standards: Non-static method Functii::getSetare() should not be called statically in...
Am observat ca, de exemplu daca pana acum era:

Cod: Selectaţi tot

 <?=Functii::getSetare('TITLU_SITE')?>
ar trebui sa inlocuiesc cu

Cod: Selectaţi tot

<?=$titlu_site?>
- bineinteles dand anterior o valoare lui $titlu_site.
Nu cumva se rezolva mult mai simplu din paginile de setari ale site-ului: functii.class.php ??
O parte din acea pagina:

Cod: Selectaţi tot

<?
// clasa care contine numai metode statice
class Functii
{

function __construct()
{
     //..
}
function stripurl($var)
{
    $var = str_replace(',',' ',$var);
    $var = str_replace('.',' ',$var);
    $var = str_replace('/',' ',$var);
    $var = str_replace('\\',' ',$var);
    $var = str_replace('!',' ',$var);
    $var = str_replace('?',' ',$var);
    $var = str_replace('#',' ',$var);
    $var = str_replace('@',' ',$var);
    $var = str_replace('$',' ',$var);
    $var = str_replace('^',' ',$var);
    $var = str_replace('*',' ',$var);
    $var = str_replace('(',' ',$var);
    $var = str_replace(')',' ',$var);
    $var = str_replace('`',' ',$var);
    $var = str_replace('&',' ',$var);
    $var = str_replace('"','',$var);
    $var = str_replace('-','',$var);
    $var = str_replace("'",'',$var);
    $var = str_replace('  ',' ',$var);
    $var = str_replace('   ',' ',$var);
    $var = str_replace('    ',' ',$var);
    $var = str_replace(' ','-',$var);
    return $var;
}
function validEmail($email) 
    {
//...  
Acum e acum... daca nu ma ajutati chiar ca trebuie sa iau la mana tot site-ul.

MarPlo Mesaje: 4343
Salut
Sunt mai multe variante de a scapa /rezolva acea problema dupa upgrade. Sa luam pe rand, de la cea mai usoara:
1. S-ar putea ca hosting-ul, serverul Apache sa permita setarea in .htaccess de a folosi alta versiune php, daca este instalata pe server. Pentru asta se adauga aceasta linie de cod la inceput in fisierul .htaccess (sa foloseasca tot PHP 5.3):

Cod: Selectaţi tot

AddType application/x-httpd-php53 .php
2. Poti seta in scriptul php sa nu mai arate erorile tip E_STRICT. Se adauga la inceput in fisierul php acest cod (problema nu e tocmai rezolvata, ci ascunsa ca sa nu mai arate mesajul de eroare):

Cod: Selectaţi tot

error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE); 
Sau asa (nu mai arata nici una din erorile tip mesaj):

Cod: Selectaţi tot

ini_set('display_errors',0);
error_reporting(0); 
3. Eroarea apare fiindca acele metode din clasa nu sunt definite ca Statice, dar le apelezi static (cu "::").
a) Treuie declarate static acele metode (asta inseamna sa adaugi "static" la fiecare functie /metoda):

Cod: Selectaţi tot

static function Numele(){
  //...
} 
b) Sau creezi o instanta de obiect la acea clasa si apelezi metodele prin obiect.

Cod: Selectaţi tot

$func = new Functii();
<?=$func->getSetare('TITLU_SITE')?>

adrian_ady Mesaje: 80
MUltumesc Marplo, am adaugat static si merge. Sa speram ca totul se termina aici, sa vedem zilele urmatoare.
- Am incercat sa bag in .htaccess "AddType application/x-httpd-php53 .php" insa-mi dadea: "eroare 403- Forbidden..."

Am o singura eroare prea complicata sa o pot descifra.

Cod: Selectaţi tot

    public function tree($par,$nivel,&$array=array())
    {                
        $ids = self::getCategoriiParinte($par);
        foreach($ids as $id)
        {
            array_push($array,$id);
            $this->tree($id,$nivel+1,$array);  //AICI AM ELIMINAT & DIN FATA LUI $array CA SA NU MAI DEA EROARE
        }
        return $array;        
    }
Asa, la prima vedere, se intrevede o varianta mai sigura a acestei functii?

MarPlo Mesaje: 4343
Nu stiu despre ce eroare spui ca mai apare. Dar daca s-a rezolvat prin stergerea acelui caracter "&", iar rezultatul e cum vrei, functia e buna.

adrian_ady Mesaje: 80

Cod: Selectaţi tot

Fatal error: Call-time pass-by-reference has been removed in...
este eroarea data daca las "&" acolo unde a fost intotdeauna, pana ieri cand s-a facut trecerea la php 5.4
Zic ca fara acel caracter nu-mi mai da eroare; dar nu stiu daca in realitate codul functiei mai este ok deoarece, aparent nu o folosesc nicaieri.

MarPlo Mesaje: 4343
Codul functiei este bun. Acel "&" la apelarea functiei oricum era in plus deoarece e deja la parametru unde este creata.

Subiecte similare