internetul Windows. Android

Jurnalul de bord. Ar trebui să merg la PHP7? Tranziția de la PHP 5 la 7

Deci, aveți un site de inimă vechi, dar un inimă foarte drăguț pe care îl decideți de la milă (sau, probabil, recitirea hebra) pentru a traduce în PHP7. Cu excitare, așteptând o creștere bruscă a productivității, arăți praf de pe site-ul sărac și comutați puternic panoul de control al găzduirii versiunii PHP.

Dacă site-ul nu a fost de mult timp tânăr, atunci un miracol nu se va întâmpla cu o mulțime de probabilitate. În cel mai bun caz, vor începe diferite erori, iar în cel mai rău caz - veți vedea un ecran alb, Zen Web Development. În acest moment, vreau să schimb repede totul înapoi și să uităm de slăbiciunea dvs. bruscă.

Dar să presupunem că partea voastră puternică este perseverența, în plus, aveți ceva timp pentru experimente. Să încercăm să rezolvăm totul.

Backups.

Facem copii de rezervă ale site-ului (și în aceleași baze de date). La urma urmei, cine nu face backup - inamicul în sine, nu? Pentru tot felul de experimente, este logic să adăugați un alt site pe găzduire și să copiați fișierele în el pe care le vom conduce acum.

Erori de reviste

Personalizați înregistrarea erorilor PHP la File.htaccess (dacă nu a fost configurată mai devreme):

pHP_Value Display_errors 0.
PHP_Value Log_errors 1.
php_value error_log /home/vasya/domains/mysite.ru/logs/error.log.

Lucrul cu Mysql.

Să presupunem că site-ul utilizează baze de date și veți vedea erori ca acesta:

Eroare fatală: eroare neclară: Apelați la funcția nedefinită MySQL_CONNECT ()

Acest lucru se datorează faptului că în versiunile moderne PHP (începând cu PHP 5.5.0), extensia MySQL originală nu este acceptată. Dezvoltatorii recomandă utilizarea Mysqli sau DOP. Să încercăm să mergem la Mysqli, este ușor:

Să presupunem că site-ul este scris folosind o abordare procedurală, care este o lopată clasică, mulți și acum consideră o soluție concisă și eficientă. În acest caz, următorul design depășit pentru a vă conecta la baza de date:

$ Link \u003d mysql_connect ('localhost', $ utilizator, $ parola)
mysql_select_db ($ dbname, $ link)
Mysql_query ('Setați numele CP1251')

pot fi înlocuite cu:

$ Link \u003d mysqli_connect ('localhost', $ utilizator, $ parola, $ dbname)
Mysqli_query ($ link ", set nume cp1251 ')

pentru interogări:

$ Rezultat \u003d mysql_query (£ interogare, $ cid)

inlocuit de:

$ Rezultat \u003d mysqli_query ($ cid, $ query)

Alte funcții populare sunt ușor de schimbat pentru analogii lor cu litera "I":

mysqli_fetch_array ()
mysqli_fetch_row ()
mysqli_fetch_assoc ()
mysqli_fetch_array ()
mysqli_num_rows ()
mysqli_insert_id ()
mysqli_close ()

Ca urmare a acestor acțiuni simple, datele din baza de date ar trebui colectate cu succes și trimise.

Codificarea

O școală veche adevărată este un loc în CP1251 (cel puțin). Totul sa transformat într-un diamant sau alte pivnițe?

Cel mai probabil, va fi suficient pentru a indica codarea V.HTACCESS în acest fel:

php_value implicit_charset "CP1251"

Expresii obisnuite

De asemenea, puteți observa următoarele tipuri de erori:

Avertisment: preg_replace (): Modificatorul / e nu mai este acceptat, utilizați preg_replace_callback în schimb

Aceasta înseamnă că modificatorul / E, care a permis rezultatul unei funcții arbitrare a unei expresii regulate, nu mai este susținut. În astfel de cazuri, se recomandă utilizarea funcției preg_replace_callback

Să presupunem că avem o expresie atât de regulată:

$ string \u003d preg_replace (((1.10)): / e "," Print_smile ('\\\\ 1 ")", $ string)

cu înlocuirea la preg_replace_callback ar trebui să arate astfel:

$ string \u003d preg_replace_callback (((1.10)): / ", crea_function_function ('$ meciuri', 'retur Print_smile ($ meciuri)'), $ string)

aici totul este simplu, expresia regulată este acum indicată ca primul argument (fără un modificator / e, desigur) și ca un al doilea argument, este specificată o funcție anonimă (care va fi efectuată după aplicarea unei expresii regulate) cu două Argumente: o serie de meciuri de $, unde datele vor fi salvate coincide cu o expresie regulată și vor apela o funcție externă cu argumente. În acest exemplu, funcția externă se numește print_smile și este transmisă de argumentul prima intrare găsită. Faptul că în preg_replace a fost \\\\ 1 (prima intrare găsită) va fi $ meciuri (dacă au existat mai multe argumente, atunci vor exista meciuri $, $ meciuri și așa mai departe).

Iată un alt exemplu, mai complicat:

A fost așa:

$ Out \u003d preg_replace ("/<(=[\’\»]{0,1}|)(.*?)([\’\»]{0,1})>(.*?)<\/>/ es "," feed_out_sub_rm ('\\\\ 2', '$ base_prefix', '$ nick', '$ id_entry') ", $ out)

A devenit așa:

$ Out \u003d preg_replace_callback ('/<(=[\’\»]{0,1}|)(.*?)([\’\»]{0,1})>(.*?)<\/>/ S ', crea_function (' $ meciuri ',' return FEED_OUT_SUB_RM ($ meciuri "," $ base_prefix "-" "$ NICK." "" "$ Id_entry." "") "), $ OUT)

aici este ușor să vă confundați în citate, fiți atenți.

Fumatul în expresii regulate, vă puteți aminti cele două funcții, care din versiunea PHP 5.3.0 sunt considerate învechite (și nu sunt acceptate). Simptomele sunt după cum urmează:

Eroare fatală: eroare neclară: Apelați la funcția nedefinită ereg_replace ()

Dacă expresia regulată în ereg_replace este simplă, atunci puteți face doar instalarea caracterelor limită ca aici:

$ Str \u003d ereg_replace ("[\\ r \\ t \\ n]", ", $ str)
$ str \u003d preg_replace ("/ [\\ r \\ t \\ n] /", ", $ str)

Simptom similar:

Eroare fatală: eroare neclară: Apelați la funcția nedefinită Split ()

$ var_pair \u003d Split ("\u003d", $ tmp)

$ Var_pair \u003d Explode ("\u003d", $ tmp)

Dacă expresia regulată este mai complicată, atunci încercăm să convertim la preg_split.

Dacă ceva nu funcționează, sau cazul dvs. nu este deloc similar cu exemplele noastre - scrieți comentarii, încercați să vă dați seama împreună.

Pentru a posta comentarii cu postul, conectați-vă utilizând contul dvs. pe rețelele sociale Vkontakte / Facebook sau contul Google / Yandex.

Cu câteva zile în urmă, am schimbat serverul meu de la aproximativ 30 de site-uri pe PHP 7. Unele dintre ele erau destul de vechi și au făcut o gamă largă din diferite cadre și CMS. Iată câteva sfaturi pentru cei care încă nu au decis să meargă la PHP 7 sau nu.

Să începem cu ceea ce înțeleg că există mulți oameni care nu consideră că versiunea stabilă a "stabilă" în timp ce aproape maturată, așteptând câteva bug-uri sau incompatibilitate. Cu faptul că am fost văzută în timp ce încercau fiecare candidat de eliberare de îndată ce a ieșit, este complet sigur să treceți la PHP 7 de îndată ce va ieși. Nu am observat niciodată un comportament incomprehensibil sau o plecare care ar fi eu însumi. În ciuda faptului că aceasta este o versiune nouă, nu suportă multe schimbări incompatibile, adică și mare, vă puteți referi la el ca pur și simplu PHP 5.7 numai semnificativ mai rapid.

Iar viteza este cu adevărat impresionantă, chiar incredibilă ca. De exemplu, un site simplu pe Phpixie a câștigat aproape de trei ori mai rapid, în comparație cu viteza Phalcon pe PHP 5.6, mai multe site-uri de pe Wordpress au arătat o creștere stabilă a vitezei de două ori. Dacă luați în considerare raportul recent Google că pierderea chiar de 10% din performanța de încărcare a paginii duce la o pierdere tangibilă a clientului, atunci dacă puteți accelera cu ușurință activitatea site-ului de două ori, actualizați PHP obțineți mai multe vânzări fără a cheltui orice. Amintiți-vă că atunci când vă convingeți managerul dvs. pentru a merge la PHP 7. Nimic nu este mai bun decât vânzările.

Mai multe comentarii

Expansiune mysql. mai nu sunt disponibile, deci dacă nu ați schimbat DO. sau mysqli. Acum va avea exact. Din fericire, în multe cazuri, este suficient doar să înlocuiască provocările mysql_ FUNCȚII ON. mysqli_.

E_strict. Erori sunt reclasificate ca alte tipuri de erori. Dacă ați fost mai devreme ați fost ascunși sau ignorați, acum vor începe să pop în alții. De exemplu, provocarea metodelor non-statice este statică acum ejectată E_deprecated. Ce a creat o grămadă de probleme cu Joomla 2.5, care din anumite motive o face destul de des. De asemenea, moștenirea incompatibilă este acum clasificată ca E_warning.. WordPress a fost testat pentru muncă cu PHP 7 din februarie, deci nu există probleme cu el, cu toate acestea, mai multe pluginuri sunt incompatibile.

pentru fiecare. Acum, întotdeauna funcționează cu o copie a matricei, astfel încât toate modificările în matrice în timpul iterației nu vor afecta iterația în sine. De fapt, în multe cazuri a funcționat și cazul în sine este destul de rar, dar încă într-unul din pluginurile pe care le-am întâlnit.

Acum $ Foo -\u003e $ bar ["Baz"] Interpretat ca. ($ Foo -\u003e $ bar) ["Baz"] dar nu $ foo -\u003e ($ bar ["Baz"]) Ca și în PHP 5. Acesta este un caz rar, dar, de asemenea, prins într-unul din pluginuri și așa cum sa dovedit în Magento 1.x ( core / Mage / Core / Model / Layout.php).

Rețineți că nu toate extensiile sunt deja susținute de PHP 7. Nu mai pot folosi XCache mi-a plăcut, cine mi-a servit pe bună dreptate de mulți ani.

În total, am luat aproximativ 5 ore pentru a traduce toate site-urile pe PHP 7. Procesul este complet mai mic, iar pachetele sunt disponibile pentru toate distribuțiile populare. Deci, chiar dacă veți aștepta o eliberare stabilă (deja deloc, nu lungă), nu există niciun motiv pentru a nu găti site-urile dvs. la migrație.


Este necesar să mergeți la PHP 7 pentru CMS Joomla

Începând cu versiunea Joomla! 3.5 Au fost multe adăugiri foarte utile, dar cea mai importantă schimbare a fost faptul că utilizatorul mediu nu va observa imediat. Și vorbim despre posibilitatea de a sprijini PHP 7.

Avertismentul este emis: versiunea dvs. PHP, 5.6.29, primește în prezent numai corecții de securitate din proiectul PHP. Aceasta înseamnă că versiunea PHP nu va fi acceptată în curând. Vă recomandăm să planificați actualizarea la noua versiune a PHP până la sfârșitul suportului la 12/31/18. Joomla va fi mai rapidă și mai sigură dacă actualizați la noua versiune a PHP (PHP 7.x recomandat). Vă rugăm să contactați găzduirea dvs. pentru actualizarea instrucțiunilor.

Să încercăm să ne dăm seama.

Dacă sunteți confuzi doar acest avertisment în admin, atunci nu puteți citi mai departe, dar pur și simplu dezactivați prin Plugin Manager - Plug-ul de definire a versiunii PHP. Nu afectează performanța site-ului, iar notificarea enervantă (imaginea de mai sus) va dispărea.

PHP 7 nu trebuie subestimată. Cu aceasta, puteți reduce eșecurile și eșecurile, măriți viteza de descărcare a paginilor și faceți munca mai mobilă.

Dacă ați citit deja articole despre principiul și beneficiile utilizării PHP 7, atunci știți cu siguranță că, potrivit dezvoltatorilor, implementarea acestei limbi în CMS crește semnificativ performanța acestora. Cu toate acestea, cum a afectat acest lucru Joomla? Această întrebare va fi revizuită în acest articol.

PHP 7 este, în principal, performanța și reducerea memoriei consumate. Dezvoltatorii și bloggerii susțin că codul este aproape de două ori mai rapid decât PHP5.6

Dar, principala problemă cu PHP7 nu este reversibilă cu PHP5.6. Acestea. Dezvoltatorii nu garantează că vechiul dvs. cod va funcționa în noua versiune PHP.

Versiunea actualizată a PHP 7 a devenit cel mai semnificativ eveniment și o schimbare importantă pentru PHP, începând cu versiunea PHP 5, care, apropo, a avut o mulțime de deficiențe și plângeri de la utilizatori. Echipa de dezvoltatori PHP declară progrese semnificative în acest domeniu actualizat: performanța este îmbunătățită la jumătate, iar consumul de memorie a fost, de asemenea, redus cu 50% comparativ cu versiunea anterioară. Există, de asemenea, caracteristici noi: convertiți erorile defecte pentru a exclude, adăuga clase și operatori. Cu toate acestea, există știri proaste legate de utilizatorii CMS Joomla.

Versiuni vechi ale Joomla 3 (până la 3.5) și Joomla 2.5 și 1,5 linii - nu susțin PHP7.

Au fost efectuate multe teste pentru a evalua diverse indicatori de performanță Joomla și PHP7, de exemplu https://www.gavick.com/blog/joomla-php-7-speedtest https://habr.com/company/mailru/blog / 350686 /

Toate acestea indică o creștere de 45-50% a productivității și reducerea încărcăturii pe server, care este importantă în site-urile severe și vizitate.

Ca rezultatele spectacolului de studiu, introducerea suportului PHP 7 la ultimul Joomla de lansare! Este cea mai mare îmbunătățire accesibilă, oferind mult mai mult decât o simplă actualizare a funcțiilor.

Deși nu este că veți observa cu siguranță, la prima vedere, faptul că viteza de descărcare este un factor important în site-ul dvs., rata de eșec, precum și consumul de memorie îmbunătățit este important pentru site-urile care au un număr mare de vizitatori și Vizualizări ale paginilor. 40% mai puțin memorie pe pagină este într-adevăr foarte mult! Având în vedere toate acestea, singura întrebare este de ce să nu actualizați acum?

Evident, viteza și îmbunătățirea memoriei sunt parametri foarte atractivi pe care doriți să îl utilizați cât mai repede posibil. Cu toate acestea, în acest caz este mai bine să nu grăbiți, ci să produceți totul. La urma urmei, cel mai probabil site-ul dvs. a fost instalat folosind versiuni timpurii ale lui Joomla! și PHP. Și faptul că versiunea lui Joomla! 3.5 și peste compatibil cu cel mai recent versiune RPR 7 nu garantează compatibilitatea în extensiile terță partedeja instalat pe site-ul dvs. Prin urmare, înainte de a începe instalarea versiunii actualizate a RNR, merită să actualizați Joomla în sine la versiunea curentă și să verificați compatibilitatea extensiilor instalate pe site-ul dvs. Nu uitați să verificați dacă găzduirea dvs. este compatibilă cu PHP 7. Dacă nu, este posibil, este timpul să căutați un alt caracter modern, care vă va permite să profitați de toate avantajele noii versiuni PHP.

Folosesc o abordare simplă - dacă extensia a fost actualizată în acest an (și mai mult decât o dată), atunci probabilitatea compatibilității sale cu PHP7 este ridicată. Dar acest lucru nu este un fapt! Trebuie să umbli prin site-urile dezvoltatorilor de extensii și să vezi acolo. Există încă o problemă pentru utilizatorii simpli nepregătiți. Cel mai probabil, ați schimbat modelele de extensii sau au fost ajustate pentru dvs., nu întotdeauna șablonul de extensie este pus în dosarul șablonului site-ului. La actualizarea extensiilor deasupra, designul poate fi distorsionat. Este posibil să trebuiască să suportați șabloanele de extensie în locul potrivit - dosarul HTML al șablonului site-ului. Prin urmare, întotdeauna totul trebuie făcut cu arhivele bazei și toate fișierele!

Dacă aveți extensii plătite pentru un domeniu (de exemplu, pentru un magazin online), atunci probabilitatea mare ca acestea să fie compilate sub IonCube, Opcache sau chiar vechiul Zend Optimizer Hosting sub o anumită versiune PHP nu va funcționa. Trebuie să învățăm de la dezvoltatorul unei astfel de extinderi - dacă actualizarea sub PHP7 a ieșit și a descărca-o. Din fericire, aceasta nu este o situație frecventă pentru siturile obișnuite, dar apare în magazinele online în care extensiile plătite sunt adesea cumpărate. De exemplu, acest dezvoltator https://joomshopping.pro/ marcat pe tot, nu actualizează extensiile sub PHP7, nu răspunde nimănui. S-a întâmplat. Va trebui să căutați o astfel de extensii sau să lăsați totul așa cum este în PHP5.6 (recomandat).

Faceți un audit complet - ceea ce ați instalat, dintre care versiuni și există vreo compatibilitate cu PHP7.

Nimic teribil cu site-ul dvs. Dacă purtați pur și simplu găzduirea pe PHP 7 pentru experiment - nu se va întâmpla. Comutați în caz de orice spate și totul. Aceasta nu este frică.

După comutare, verificați performanța site-ului, toate extensiile, administrarea site-ului. Fii sigur! Accesați setările site-ului general și activați afișarea tuturor erorilor pentru dezvoltator. Dacă nu există nici o eroare în administrator, este deja bun, mergeți la site. Chiar dacă numărul lor imens nu este speriat, încercați să arătați cu atenție codurile de eroare. Există ca regulă în căile de eroare, componenta este specificată (plugin, modul) și fișierul în care apare. Actualizați această componentă pentru a începe.

Pagina de eroare este adesea utilizată, iar site-ul nu se încarcă după trecerea la PHP7 și dați imediat această pagină. Și nu specifică un cod de eroare. Cu această situație - în dosarul șablonului dvs. redenumiți temporar eroarea.php. Apoi pagina de eroare standard va fi descărcată și va fi un șir care indică calea.

Chiar dacă aveți Joomla 3.8+, nu este un fapt că în timpul tranziției la PHP7 nu se va rupe: unele pluginuri și componente nu susțin încă PHP7.

Problema este că în PHP 7 a schimbat procedura de utilizare a operatorilor (și nu numai):

Sursă:
$ Foo -\u003e $ bar ["Baz"]
În versiunea PHP5.6 este înțeleasă ca:
$ foo -\u003e ($ bar ["Baz"])
A, PHP7 înțelege destul de diferit:
($ Foo -\u003e $ bar) ["Baz"]

În principiu, dacă componenta este foarte valoroasă pentru dvs., atunci puteți corecta independent problema, punerea unui suport în locurile potrivite: $ foo -\u003e ($ Bar ["Baz"]). Pentru a face acest lucru, în Joomla Admin, porniți spectacolul tuturor erorilor posibile și apoi prin nume și numere de fișiere, caută problemele corespunzătoare.

Erorile sunt multe. De exemplu: erori și soluții la actualizarea șabloanelor SJ pentru a utiliza php 7.x:

1. Harta Google.

Eroare:
Outdated: Metodele cu același nume ca și clasa lor, nu vor fi designeri în viitoarea versiune a PHP; Plugin_googlemaps are un constructor învechit în /Plugins/system/ytshortcodes/includes/libs/googlemap/logogaps.lib.php în linia 385

Găsiți: Funcție plugin_googlemaps

2. Directiva Cookie Lite

Eroare:
Outdated: Metodele cu același nume ca și clasa lor, nu vor fi designeri în viitoarea versiune a PHP; PlgsystemeucookiedirectiveLite are un constructor învechit în / plugin-uri / sistem / eucookiedirective / eucookiedirectivelite.php în linia 37

Salt la: /Plugins/system/eucookiedictiveLite/eucookievipectivlite.php

Găsiți: Funcție plgsystemeucookiedreitiveLite

Înlocuiți: funcția __construct

3. Cadrul Yt.

Eroare:
Outdated: Metodele cu același nume ca și clasa lor, nu vor fi designeri în viitoarea versiune a PHP; Ytframeworktemplate are un constructor învechit în /Plugins/sytyt/yt/includes/site/lib/yt_template.php în linia 16

Găsiți: funcția ytframeworktemplatemplate

Înlocuiți: funcția __construct

4. Cadrul YT Render XML

Eroare:
Outdated: Metodele cu același nume ca și clasa lor, nu vor fi designeri în viitoarea versiune a PHP; YtframeworkRenderXML are un constructor învechit în / pluginuri / sistem / yt / include / site / lib / yt_rederxml.php în linia 13

Găsiți: Funcția YtframeworkRenderXML

Înlocuiți: funcția __construct

5. Cadrul YT.

Eroare:
Outdated: Metodele cu același nume ca și clasa lor, nu vor fi designeri în viitoarea versiune a PHP; YTOBJECT are un constructor învechit în / straplates / sj_imag / menuzys / ytobject.php în șir 13

Găsiți: Funcția YTOBJECT

Înlocuiți: funcția __construct

6. JW Toate videoclipurile

Eroare:
Outdated: Metodele cu același nume ca și clasa lor, nu vor fi designeri în viitoarea versiune a PHP; Plgcontentjw_allvideos are un constructor învechit în /Plugins/content/jw_allvideos/jw_allvideos.php în linia 18

Accesați: //plugins/content/jw_allvideos/jw_allvideos.php

Găsiți: Funcție plgcontentjw_allvideos

Înlocuiți: funcția __construct

Erori de standarde stricte sunt cel mai adesea tratate - eliminați din linie &

Există o mulțime de opțiuni de eroare și dacă nu înțelegeți nimic - fie lăsați atât actualizați Joomla, cât și toate extensiile înainte de compatibilitate cu PHP7 și apoi încercați să îl comutați la acesta. Sau să se refere la specialiști.

Concluzii

Du-te la PHP7 va trebui vreodată să fie necesar pentru site-urile noi vizitate de site-uri, site-uri cu încărcătură greu și așa mai departe. Joomla 4 va lucra numai cu PHP7. Și această tranziție nu va fi fără durere: cel mai probabil va fi necesar să corectați ceva sau să refuzați. Astfel încât totul câștigă imediat și fără o singură greșeală - este puțin probabil!

Ca consiliu, pot să vă sfătuim să așteptați mai mult: poate cineva de la dezvoltatorii de șabloane / componente / module / plug-in-ul dvs. veți lansa o nouă versiune compatibilă cu PHP7. Acum, unele extensii nu pot fi actualizate pe PHP5.6 - scrie că am nevoie de PHP7. Timpul de tranziție, așa cum este cunoscut - sever.

Dar dacă site-ul dvs. funcționează bine, sunteți mulțumit de toată lumea - nu este necesar să faceți nimic deloc. Nu aveți nevoie de acest curse de actualizări, este foarte neplăcut și dureros! Nu vă gândiți la securitatea suplimentară a site-ului dvs.

Dacă toate aceste actualizări sunt deranjate, versiuni PHP, scrisori de e-mail etc. - Du-te la managerul plug-in și dezactivați plugin-urile - Notificarea actualizărilor extensiilor, actualizați notificarea Joomla, verificarea versiunii PHP, trimiterea de e-mailuri la actualizarea (notificările) și, de asemenea, statistici. Și trăiesc și lucrează calm.

Adesea întrebat - "Este scris că securitatea suferă la PHP5.6". Nu prea mult, și dacă site-ul dvs. este protejat corect (citiți site-ul nostru specializat - https://joomlahealth.ru), va fi, de asemenea, perfect și sigur pentru a lucra pe versiunile vechi ale lui Joomla și pe vechile versiuni PHP.

Când creați site-uri noi - fără ambiguitate, trebuie să faceți imediat pe PHP7!

În concluzie, mai multe cote de traduceri de pe site-ul oficial al Joomla despre PHP 7 și Joomla 4:

Odată cu perspectiva lui Joomla 4 anul viitor, dorim să sensibilizăm nevoia de a face upgrade la PHP 7.
Joomla 4 va necesita PHP 7 pentru a începe. Majoritatea găzduitorilor sunt deja oferite PHP 7 în pachetele lor și veți fi destul de ușor să modificați versiunea PHP.

Motivele pentru care trebuie să actualizați PHP:

PHP 7 BEST.

PHP 7 are de fapt performanțe îmbunătățite, datorită căruia site-ul dvs. va funcționa de două ori mai rapid (comparativ cu PHP 5+) și consumă o memorie de 50% mai mică. PHP 7 este, de asemenea, mai sigur și vă permite să faceți mai mult ca dezvoltator.

Joomla 4 va avea îmbunătățiri uriașe atât pentru utilizatori, cât și pentru dezvoltatori. Codul corectat, cadrul actualizat, caracteristici excelente și multe altele. Bootstrap 4 va fi implementat în kernel, vor apărea 2 șabloane noi (Frontend și Backend), noul manager media va plăcea multe.

Din moment ce Joomla 4 este încă în curs de dezvoltare, lista de funcții se va extinde în continuare.

Structura actualizată

Cadrul actualizat (versiunea 2.0) furnizat împreună cu Joomla 4 are unele îmbunătățiri semnificative. API-ul bazei de date va sprijini inițial operatorii pregătiți, ceea ce reprezintă o îmbunătățire semnificativă a securității. Depozitarea datelor criptate este acum posibilă utilizând componenta modulară de la Keychain. Instrumentele de linie de comandă pot fi create mai bine și mai sigure datorită noii componente a consolei.

Este mai sigur și susținut

Versiunile sunt mai vechi decât PHP 5.6 nu mai sunt acceptate pentru corecțiile de securitate. Dacă o mare vulnerabilitate este detectată în PHP 5.3, nimeni nu o va corecta, iar site-ul dvs. va fi vulnerabil. Folosind cea mai recentă versiune, veți ști întotdeauna că aceste posibile probleme vor avea grijă, iar actualizările vor fi disponibile foarte repede atunci când apar.
După cum PHP 7 este ultima versiune majoră, acesta va fi susținut de mult timp (inclusiv problemele secundare), astfel încât site-ul dvs. Joomla 4 va funcționa cu ușurință până în 2025.

Dacă nu pot actualiza?

Este important să vă amintiți că Joomla 3.9+ va fi menținută timp de doi ani după eliberarea sa. Aceasta înseamnă că vă puteți gestiona confortabil Joomla 3 până în 2020, dar veți pierde toate caracteristicile minunate și avantajele Joomla 4.

Suntem ferm angajați să facem următoarea generație Joomla cu cea mai bună generație și să credem că utilizarea PHP 7 în viitor va contribui la furnizarea utilizatorilor noștri produsul de cea mai bună calitate.

M. Babcker.

Adică aici este una - Joomla 4 va lucra numai pe PHP7 +. Cea de-a treia linie Joomla poate lucra la PHP5 +.

Actualizați sau nu actualizați - pentru a rezolva numai dvs., luând în considerare tot ce am scris la începutul articolului ...

A decis să scrie despre tranziția la PHP 7De când acum sunt angajat acum de transferul codului unui motor în PHP 7. Și astfel pentru început, vom include un depanare sau un debugger la panoul de administrare al site-ului, dacă nu există nici un astfel de lucru, puteți face așa cum puteți face Scrisă în subiect: Acum pe ecranul monitorului, putem vedea erori, cum ar fi:

AVERTISMENT: preg_replace (): Modificatorul / E nu mai este acceptat, utilizați preg_replace_callback în schimb - dir / file.php (număr rând)


Acest mesaj sugerează că modificatorul E nu există în PHP 7, este necesar să scăpați, dar dacă pur și simplu ștergeți acest modificator, scriptul poate fi făcut incorect, nu a fost ușor să o scrieți acolo. Voi arăta despre exemplul codului de la Phpfox 3. (Așa cum am rescris codul :), faceți acest lucru:
De exemplu, mesajul nostru de eroare indică o astfel de linie:

$ sstr \u003d preg_replace ("/ \\) / ize", "" .stripslashes (\\ $ acest -\u003e _ parseusertagged ("$ 1"). "", $ SSTR);


Ar trebui schimbat astfel:

$ sstr \u003d preg_replace_callback ("/ \\\\+? ± / / x \\] / este", function ($ meci) (Stripslashes ($ -\u003e _ parseumertagged ($ meci));), $ SSTR);


Aici am înlocuit funcția preg_replace (), pe preg_replace_callback (), Eliminat modificatorul E în primul argument, care este o expresie regulată. Al doilea argument a fost înlocuit cu o funcție anonimă, care va fi efectuată după aplicarea unei expresii regulate. Funcția anonimă conține o matrice de $ Match, elementele matricei sunt înlocuite de coincidențe, de exemplu, a fost: $ 1, a devenit: $ Match; A fost: $ 2, a devenit: $ meci și așa mai departe. Citatele curată și simbolul de protecție (inversare inversă \\).

La sfârșitul erorii modificatorului inexistent E, voi arăta câteva exemple de înlocuire a codului. Linia:

$ arow ["value_actual"] \u003d preg_replace ("/ s: (. *): \\" (. *?) \\ "/ iES", "S:" Strlen ("$ 2"). ": \\ "$ 2 \\" ", $ AROW [" Value_Actual "]);


Schimbați astfel:

$ arow ["value_actual"] \u003d preg_replace_callback ("/ s: (. *): \\" (. *?) \\ "; / este", funcția ($ meci) (return "s:" Strlen ($ meci) . ":" "" Match $ "."; ";), $ ACOW [" value_activ "]


Și un exemplu cu o variabilă în termeni regulați, șir:

$ STXT \u003d preg_replace ("/ \\ [" $ sbcode. , Adevărat, "$ 1"). "" ", $ STXT);


Înlocuit astfel:

$ STXT \u003d preg_replace_callback ("/ \\ [" $ sbcode. "\u003d (. *?) \\] / Este", function ($ meci) Utilizare ($ sbbode) (return $ acest -\u003e _ înlocuire ($ sbcode " prefix ", adevărat, $ meci);), $ STXT);


Aici am adăugat o funcție de utilizare (), care a plasat o variabilă dintr-o expresie regulată, a transferat astfel o variabilă la o funcție anonimă. Dacă variabilele din expresia regulată sunt mai mult de una, apoi listați pur și simplu prin virgulă, un exemplu:

funcție ($ meci) Utilizare ($ a, $ b, $ c)

Outdated ereg_replace ()
Potrivit site-ului oficial PHP: http://php.net/:

De la PHP 5.3.0, această caracteristică este considerată depășită. Este extrem de recomandat să se bazeze pe această oportunitate.


Și în PHP 7 au uitat de ea ... puteți obține un astfel de mesaj de eroare:

Eroare fatală: eroare neclară: Apelați la funcția nedefinită ereg_replace ()


Această caracteristică ar trebui înlocuită cu preg_replace ()Urmând exemplul de mai jos. Să presupunem că avem o astfel de linie de cod:

$ Str \u003d ereg_replace ("[^ -<>-)] "," ", str_replace (" \\ x00 ",", $ OriginalCommentName));


Schimbați codul de genul acesta: 1 ianuarie 2016

Eliberarea PHP 7.0.0 a avut loc în decembrie 2015, dar problema tranziției la această versiune încă mai îngrijorează mintea tinerilor progresivi. Și nu îngrijorați, deoarece fiecare eliberare semnificativă a PHP are multe inovații utile.

De ce actualizați?

Performanţă

Rețeaua puteți găsi multe teste de performanță sintetice și reale ale diferitelor versiuni ale PHP și HHVM, care vorbesc doar un singur lucru - cu fiecare versiune web PHP devine mai rapidă și mai rapidă. Majoritatea proiectelor mele lucrează la revoluția MODX și Codeignire 3. și, în mod natural, am fost curios să știu ce s-ar schimba după schimbarea versiunii PHP.

MODX EVOLUTION.

Desigur, aș putea verifica schimbarea performanței și pentru evoluția MODX, dar în acest sistem există o mulțime de cod, în funcție de modul în care am scris mai sus, extensiile la distanță PHP. Cu toate acestea, în versiunea pregătită de utilizator, a apărut suport complet pentru PHP 7.

MODX REVOLUTION.

Deci, am luat mai multe site-uri care lucrează la PHP 5.6. Măsoară numărul de solicitări și timp pentru a genera o pagină. Este logic să presupunem că numărul de solicitări se corelează puțin cu versiunea PHP, dar nu va fi adăugată prea adăugată pentru a adăuga aceste informații. Începând cu versiunea, este implementată compatibilitatea completă cu PHP 7. Înainte de a exista doar un suport parțial pentru PHP 7, având în vedere că administratorul nu a funcționat pentru mine, deși site-ul însuși a lucrat perfect.

Numărul site-ului 1.

Versiunea PHP Caching. Cereri Timpul, S.
5.6 156 1.18
5.6 17 0.25
7 161 0.43
7 17 0.02

Numărul site-ului 2.

Numărul site-ului 3.

După cum puteți vedea, comutarea versiunii PHP la ultima a afectat pozitiv performanța site-urilor, crescând 1,5-3 ori, iar în unele locuri (de exemplu, pe pagina principală a site-ului meu) chiar de 10 ori.

Codeignire 3.

Nu pot maura un număr mare de proiecte pe Codeignire, dar chiar și ei obligă să trateze performanța, deoarece numărul de articole și vizitatorii unici pe lună pe unul dintre ele se calculează de mii. În acest moment optimizează și refactorizând unul dintre ele, oriunde, fără tranziție la PHP 7, productivitatea unei persoane a crescut de mai multe ori. În viitorul apropiat, când termin lucrările curente, voi scrie cu siguranță despre rezultatele unei schimbări de versiune.

Sintaxă

Sintaxa a suferit unele modificări care vor afecta compatibilitatea înapoi. În plus față de documentația oficială, vă sfătuiesc să explorați exemplele codului de pe GitHub, de exemplu, acestea :.

Cine nu ar trebui să fie actualizat

Nu este necesar să se actualizeze pe cei ale căror proiecte se bazează pe extensiile eliminate în noul PHP. De asemenea, merită căutarea informațiilor despre Internet despre modificările minore ale sintaxei, deoarece există momente care încalcă compatibilitatea înapoi. Desigur, există unul câte o mie de astfel de cazuri, dacă nu mai puțin de, dar este mai bine să fii restrâns.

Furnizori de găzduire

Eliberarea PHP 7 a avut loc relativ recent, deci nu toți furnizorii de găzduire permit să încerce noutatea. De exemplu, Beget vă permite deja să vă bucurați de viteza și, în timp, considerați probabil că PHP 7 nu este suficient de stabilă.

Experiența altcuiva

Ieșire

Pentru trecerea la cea mai recentă versiune PHP mai "pentru" decât "împotriva". Prin urmare, dacă vânați o optimizare ușoară, actualizați PHP.