internet pencereler Android
Genişletmek

Kayıt defteri. Php7'ye gitmeli miyim? PHP 5 ila 7'den geçiş

Öyleyse, eski, ama PHP7'ye çevirmek için acıma (ya da belki de, HABRA'yı yeniden okuyan) karar verdiğiniz çok sevimli bir kalp sitesi. Heyecanla, keskin bir verimlilik artışını bekliyorum, zayıf siteden toza benziyorsunuz ve PHP sürümünün barındırma kontrol panelinde güçlü bir şekilde geçiş yapabilirsiniz.

Site uzun olmasasa, çok fazla olasılıkla bir mucize olmayacak. En iyi ihtimalle, farklı hatalar görünmeye başlayacak ve en kötüsü - beyaz bir ekran, Zen web geliştirme göreceksiniz. Şu anda, her şeyi geri döndürmek ve ani zayıflığınızı unutmak istiyorum.

Fakat güçlü tarafınızın sebat olduğumu varsayalım, ayrıca deneyler için biraz zamanınız var. Her şeyi düzeltmeye çalışalım.

Yedekleme

Sitenin yedek kopyalarını (ve aynı zamanda veritabanlarında) yaparız. Sonuçta, kim yedekleme yapmaz - düşmanın kendisi değil mi? Her türlü deney için, barındıran başka bir site eklemek ve dosyaları şimdi yöneteceğiz.

Dergiler Hataları

PHP hata günlüğünü file.htaccess için özelleştirin (daha önce yapılandırılmamışsa):

php_Value Display_Errors 0.
Php_value log_errors 1.
php_value error_log /home/vasya/doupins/mysite.ru/logs/error.log.

Mysql ile çalışmak

Sitenin veritabanlarını kullandığını varsayalım ve şöyle hata görüyorsunuz:

Ölümcül Hata: Yakalanmamış Hata: Tanımsız İşlev için Arama MySQL_Connect ()

Bunun nedeni, modern PHP sürümlerinde (PHP 5.5.0 ile başlayarak), orijinal MySQL uzantısı desteklenmez. Geliştiriciler Mysqli veya PDO kullanmanızı önerir. Mysqli'ye gitmeye çalışalım, kolaydır:

Sitenin, birçok klasik kürek olan bir prosedürel yaklaşım kullanılarak yazıldığını varsayalım, çoğu ve şimdi özlü ve verimli bir çözüm düşünün. Bu durumda, aşağıdaki güncel tasarımın veritabanına bağlanması için:

$ Link \u003d mysql_connect ('localhost', $ kullanıcı, $ şifre)
mysql_select_db ($ dbname, $ link)
MySQL_QUERY ('CP1251' adlarını ayarla ')

değiştirilebilir:

$ Link \u003d mysqli_connect ('localhost', $ kullanıcı, $ şifre, $ dbname)
Mysqli_query ($ link, 'Set Adı CP1251')

sorgular için:

$ Sonuç \u003d mysql_query ($ sorgu, $ cid)

ile ikame edilmiş:

$ Sonuç \u003d mysqli_query ($ cid, $ sorgu)

Diğer popüler fonksiyonlar, 'I' harfi ile analogları için kolayca değiştirilir:

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

Bu basit eylemlerin bir sonucu olarak, veritabanından gelen veriler başarıyla toplanmalı ve gönderilmelidir.

Kodlama

Gerçek bir eski okul CP1251'deki bir sitedir (en azından). Her şey bir elmas veya başka bir mahzenlere dönüştü?

Büyük olasılıkla, v.htaccess kodlamasını bu şekilde belirtmek için yeterli olacaktır:

pHP_VALUE DEFAILTER_CARSET "CP1251"

Düzenli ifadeler

Aşağıdaki hataların türlerini de gözlemleyebilirsiniz:

UYARI: Preg_Replace (): / E değiştirici artık desteklenmiyor, bunun yerine Preg_Replace_callback kullanın.

Bu, normal bir ifadenin keyfi bir fonksiyonunun sonucuna izin veren / E değiştiricinin artık desteklenmemesi anlamına gelir. Bu gibi durumlarda, preg_replace_callback işlevini kullanmanız önerilir.

Diyelim ki normal bir ifademiz var:

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

preg_replace_callback yerine değiştirme ile şöyle görünmelidir:

$ string \u003d preg_replace_callback ("/: ((((((1.10)): /", Create_Function ('$ maçlar', 'iade print_smile ($ maçlar)'), $ string)

burada her şey basittir, düzenli ifade şimdi (değiştirici / E, elbette) ve ikinci bir argüman olarak belirtilmiştir ve ikinci bir argüman olarak, iki ile adsız bir işlev belirtilir (düzenli bir ifade uyguladıktan sonra gerçekleştirilecektir) Argümanlar: Verilerin düzenli bir ifadeyle çakışın ve argümanlarla harici bir işlevi çağıracağı bir Dizi Maç Dizi. Bu örnekte, harici fonksiyonun Print_smile olarak adlandırılır ve ilk bulunan girişin argümanı tarafından iletilir. Preg_replace'de \\\\ 1 (ilk bulunan giriş) $ maç olacaktı (daha fazla argüman olsaydı, o zaman $ maçlar, $ maçlar ve benzeri olacak).

İşte başka bir örnek, daha karmaşık:

Böyledi:

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

Böyle oldu:

$ Out \u003d preg_replace_callback ('/<(=[\’\»]{0,1}|)(.*?)([\’\»]{0,1})>(.*?)<\/>/ S ', Create_Function (' $ Maçlar ',' iade feed_out_sub_rm ($ maçlar "" "$ Base_prefix." "," "$ Nick." "," "$ İd_entry." "") '), $ OUT)

burada tırnak içinde karıştırılması kolaydır, dikkatli olun.

Düzenli ifadelerde sigara içmek, PHP sürüm 5.3.0'dan gelen iki işlevi hatırlayabilirsiniz (ve desteklenmiyor). Belirtiler aşağıdaki gibidir:

Ölümcül Hata: Yakalanmamış Hata: Tanımsız İşlev için Arama Ereg_Replace ()

EREG_REPEYE'deki normal ifade basitse, sadece burada olduğu gibi sınır karakterleri kurabilirsiniz:

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

Benzer semptom:

Ölümcül Hata: Yakalanmamış Hata: Tanımsız İşlev Bölümüne ()

$ var_pair \u003d split ("\u003d", $ TMP)

$ Var_pair \u003d patlow ("\u003d", $ TMP)

Düzenli ifade daha karmaşıksa, o zaman Preg_Split'e dönüştürmeye çalışıyoruz.

Bir şey işe yaramazsa veya durumunuz örneklemlerimize benzer değilse - yorum yazın, birlikte anlamaya çalışın.

Gönderen yorumları göndermek için, Sosyal Ağlar VKontakte / Facebook veya Google / Yandex hesabındaki hesabınızı kullanarak giriş yapın.

Birkaç gün önce, sunucumu PHP 7'de yaklaşık 30 siteden değiştirdim. Bazıları yeterince eskiydi ve çeşitli çerçevelerden ve CMS'den geniş bir yelpazedin. İşte henüz PHP 7'ye gitmeye karar vermemiş olanlar için bazı ipuçları.

Neredeyse olgunlaştığını, bazı hataları ya da uyumsuzluğu beklerken, gerçekten "istikrarlı" olan stabil sürümünü göz önünde bulundurmayan birçok insan olduğunu anlayalım. Her sürüm adayı çekerken görüldüğüm gerçeğiyle, dışarı çıkmaz, dışarı çıktığı anda PHP 7'ye geçmek tamamen güvenlidir. Hiçbir zaman kendim ne olursa olsun, bazı anlaşılmaz davranış ya da kalkış fark etmedim. Bunun yeni bir versiyon olduğu gerçeğine rağmen, bu, yani, yani ve büyük olan birçok uyumsuz değişiklik olmaz, bununla sadece PHP 5.7 ile ilişkilendirebilirsiniz.

Ve hız gerçekten etkileyici, hatta bile inanılmaz. Örneğin, PHPixie'deki basit bir alan neredeyse üç kat daha hızlı kazandı, PHP 5.6'daki phalcon hızı ile karşılaştırıldığında, WordPress'deki çeşitli siteler hızda iki kez sabit bir artış gösterdi. Son Google Raporunu dikkate alırsanız, sayfa yükleme performansının% 10'unun bile kaybının maddi bir müşteri kaybına yol açtığını, ardından sitenin çalışmalarını kolayca hızlandırabilirseniz, sadece PHP'yi güncelleyebilirseniz, harcamadan daha fazla satış alırsınız. herhangi bir şey. Müdürünüzü PHP'ye gitmeye ikna ettiğinizde bunu hatırlayın. 7. Hiçbir şey satışlardan daha iyidir.

Birkaç yorum

Genişleme mysql daha uygun değil, eğer değiştirilmediyseniz Pdo veya mysqli. Şimdi şimdi tam olarak olacak. Neyse ki, birçok durumda, sadece zorlukların yerini almak için yeterli. mysql_ Fonksiyonlar mysqli_.

E_strict Hatalar diğer hata türleri olarak yeniden sınıflandırılır. Daha önce gizli ya da yoksaydınız, şimdi başkalarıyla açılmaya başlayacaklar. Örneğin, statik olmayan yöntemlerin zorluğu statik olarak şimdi atıyor E_deprecated. Joomla 2.5 ile bir sürü sorun yaratan şey, neden bir nedenden dolayı oldukça sık yapar. Ayrıca uyumsuz miras şimdi olarak sınıflandırılır E_warning. WordPress, Şubat ayından bu yana PHP 7 ile çalışma için test edilmiştir, bu nedenle onunla ilgili herhangi bir sorun yoktur, ancak birkaç eklenti uyumlu değildir.

her biri için. Şimdi her zaman dizinin bir kopyasıyla çalışır, bu nedenle yineleme sırasında dizideki tüm değişiklikler yinelemeyi etkilemez. Aslında, birçok durumda, böylece çalıştı ve davanın kendisi oldukça nadirdir, ancak yine de ondan geldiğim eklentilerden birinde.

Şimdi $ Foo -\u003e $ bar ["BAZ"] Olarak yorumlandı ($ Foo -\u003e $ bar) ["BAZ"] Ama değil $ Foo -\u003e ($ bar ["BAZ"]) PHP 5'teki gibi, bu nadir görülen bir durumdur, fakat ayrıca eklentilerden birine yakalandı ve Magento 1.x ( Çekirdek / Büyücü / Çekirdek / Model / Layout.php).

Tüm uzantıların PHP 7 tarafından zaten desteklenmeyeceğini unutmayın. Artık sevdiğim Xcache'yi kullanamıyorum, kim çok yıllardır bana hizmet etti.

Toplamda, tüm siteleri PHP 7'de çevirmek için yaklaşık 5 saat sürdüm. Süreç tamamen daha küçüktür ve tüm popüler dağıtımlar için paketler mevcuttur. Öyleyse, istikrarlı bir sürüm için bekleyebilseniz bile (zaten uzun değil), sitelerinizi geçişe geçmemeniz gerekmez.


CMS Joomla için PHP 7'ye gitmek gerekli midir?

Joomla Version ile başlayan! 3.5 Çok faydalı ilaveler vardı, ancak en önemli değişiklik, ortalama kullanıcının hemen farketmeyeceği gerçeğiydi. PHP 7'yi destekleme olasılığı hakkında konuşuyoruz.

Uyarı verilir: 5.6.29 olan PHP sürümünüz, şu anda yalnızca PHP projesinden güvenlik düzeltmeleri gerçekleştiriyor. Bu, PHP sürümünüzün yakında desteklenmeyeceği anlamına gelir. Güncellemeyi 12/31/18'deki desteğin sonuna kadar PHP'nin yeni sürümüne planlamanızı öneririz. Joomla, PHP'nin yeni sürümüne (PHP 7.x önerilen) güncelleniyorsanız daha hızlı ve daha güvenli olacaktır. Talimatları güncellemek için lütfen hostinginize başvurun.

Hadi bulmaya çalışalım.

Sadece yöneticideki bu uyarı karıştırıldıysanız, daha fazla okunamıyorsunuz, ancak eklenti yöneticisinden - PHP sürüm tanımı eklentisi aracılığıyla yalnızca devre dışı bırakabilirsiniz. Sitenin performansını etkilemez ve can sıkıcı bildirim (yukarıdaki resim) kaybolur.

PHP 7 hafife alınmamalıdır. Bununla birlikte, başarısızlıkları ve arızaları azaltabilirsiniz, sayfaların indirme hızını artırabilir ve çalışmayı daha fazla mobil hale getirebilirsiniz.

PHP 7 kullanmanın prensibi ve faydaları hakkında zaten makaleler okuduysanız, kesinlikle, geliştiricilere göre, bu dilin CMS'sinin uygulanması performanslarını önemli ölçüde arttırdığını biliyoruz. Ancak, bu Joomla'yı nasıl etkiledi? Bu soru bu makalede gözden geçirilecektir.

PHP 7, esasen ünlü performans ve tüketilen hafızanın azaltılmasıdır. Geliştiriciler ve blogcular, kodun php5.6'ya kıyasla neredeyse iki kat daha hızlı olduğunu savunuyorlar.

Ancak, PHP7 ile ilgili ana sorun PHP5.6 ile geri dönüşümlü değildir. Şunlar. Geliştiriciler, eski kodunuzun yeni PHP sürümünde çalışacağını garanti etmemektedir.

PHP 7'nin güncellenmiş sürümü, PHP için en önemli olay ve PHP için önemli bir değişiklik oldu, bu arada, bu arada, kullanıcılardan çok fazla eksiklik ve şikayette bulundu. PHP Geliştirici ekibi, bu, güncellenmiş üründe önemli ilerleme ilan eder: performans yarısı kadar arttırılır ve hafıza tüketimi önceki sürümle karşılaştırıldığında% 50 oranında azaltıldı. Ayrıca yeni özellikler var: Hatalı hataları dışlamak, sınıflar ve operatörler eklemek için dönüştürün. Ancak, CMS Joomla kullanıcıları ile ilgili kötü haberler var.

Joomla 3'in (3.5'e kadar) ve Joomla 2.5 ve 1.5 satırının eski versiyonları - PHP7'yi desteklemeyin.

Çeşitli performans göstergelerini (performans) joomla ve php7'yi değerlendirmek için birçok test yapıldı, örneğin httplog///www.gavick.com/blog/joomla-php-7-speedtest https://habr.com/company/mailru/blog / 350686 /

Hepsi, verimlilikte% 45-50 artış ve ciddi ve ziyaret edilen sitelerde önemli olan sunucudaki yükü azaltın.

Çalışma şovunun sonuçları olarak, PHP 7 desteğinin en son sürüm Joomla! Basit bir işlev güncellemesinden çok daha fazlasını sunan en büyük erişilebilir gelişmedir.

Her ne kadar kesinlikle fark etmeseniz de, ilk bakışta, indirme hızının sitenizdeki önemli bir faktör olduğu gerçeği, başarısızlık oranının yanı sıra, çok sayıda ziyaretçiye sahip siteler için gelişmiş bellek tüketimi önemlidir. Sayfa görünümleri. Sayfa başına% 40 daha az hafıza gerçekten çok! Bütün bunlar göz önüne alındığında, tek soru neden şimdi güncellenmemesidir?

Açıkçası, hafızanın hızı ve iyileştirilmesi, mümkün olduğunca çabuk kullanmak istediğiniz çok çekici parametrelerdir. Ancak, bu durumda acele etmemek daha iyidir, ancak her şeyi üretmek. Sonuçta, muhtemelen siteniz Joomla'nın erken sürümlerini kullanarak kuruldu! ve php. Ve Joomla'nın versiyonu! 3.5 ve yukarıda en son RPR sürüm 7 ile uyumlu Üçüncü taraf uzantılarında uyumluluk garanti etmezSitenize zaten yüklü. Bu nedenle, RNR'nin güncellenmiş sürümünü kurmaya başlamadan önce, Joomla'nın kendisini mevcut sürüme güncellemeye değer, sitenizde yüklü olan uzantıların uyumluluğunu kontrol etmeye değer. Hostinginizin PHP 7 ile uyumlu olup olmadığını kontrol etmeyi unutmayın. Değilse, mümkündür, başka bir modern hoster aramanın zamanı geldi, bu da PHP'nin yeni sürümünün tüm avantajlarından yararlanmanıza izin verecek.

Basit bir yaklaşım kullanıyorum - uzantı bu yıl (ve bir kereden fazla) güncelleniyorsa, PHP7 ile uyumluluğunun olasılığı yüksektir. Ama bu bir gerçek değil! Uzantılarınızın geliştiricileri sitelerinde yürümek ve orada görmeniz gerekir. Hazırlıksız basit kullanıcılar için hala bir sorun var. Büyük olasılıkla, uzantı kalıplarını değiştirdiniz ya da sizin için ayarlandılar, her zaman uzatma şablonu site şablon klasörüne yerleştirilir. Yukarıdaki uzantıları güncellerken, tasarım bozulabilir. Uzatma şablonlarını doğru yere dayanmanız gerekebilir - Site şablonunuzun HTML klasörü. Bu nedenle, her zaman her şey baz ve tüm dosyalar arşivleriyle yapılmalıdır !!!

Bir etki alanı için herhangi bir ücretli uzantınız varsa (örneğin, bir çevrimiçi mağaza için), o zaman IONCUBE, OPCACE veya hatta belirli bir PHP sürümünün altındaki eski zend optimizer Hosting'in altında derlendikleri yüksek olasılık çalışmaz. Böyle bir uzantının geliştiricisinden öğrenmeliyiz - PHP7'nin altındaki güncelleştirmenin çıkıp indirmediği. Neyse ki, bu, sıradan siteler için sık görülen bir durum değildir, ancak ücretli uzantıların genellikle satın alındığı çevrimiçi mağazalarda ortaya çıkar. Örneğin, bu geliştirici https://joomshopping.pro/ her şeyde puan aldı, PHP7'nin altındaki uzantıları güncellemez, kimseye cevap vermiyor. Olur. Böyle bir uzantıların değiştirilmesi veya PHP5.6'da olduğu gibi her şeyi bırakmanız gerekir (önerilir).

Tam bir denetim yapın - hangi sürümlerin ve PHP7 ile herhangi bir uyumluluk olması durumunda yükledikleriniz.

Sitenizle korkunç bir şey yoksa, deneme için PHP 7'de Hosting'i değiştirirseniz - olmayacak. Geri ve hepsi bir şey durumunda anahtarlayın. Bu korku değil.

Açtıktan sonra, sitenin performansını, tüm uzantıları, sitenin uygulanmasını kontrol edin. Emin ol! Genel site ayarlarına gidin ve geliştirici için tüm hataların ekranını açın. Yöneticinizde bir hata yoksa, zaten iyidir, siteye gidin. Büyük sayıları korkmazsa bile, hata kodlarına dikkatlice bakmaya çalışın. Hata yollarında bir kural olarak, bileşen belirtilir (eklenti, modül) ve meydana geldiği dosya. Başlamak için bu bileşeni güncelleyin.

Hata sayfası genellikle kullanılır ve site PHP7'ye geçtikten sonra yüklenmez ve hemen bu sayfayı verir. Ve bir hata kodu belirtmez. Bu durumla - şablonunuzun klasöründe geçici olarak hatayı yeniden adlandırın. Sonra standart hata sayfası indirilecek ve yolu gösteren bir dize olacaktır.

Joomla 3.8+ olsanız bile, PHP7'ye geçiş sırasında hiçbir şeyin kırılmayacağı bir gerçek değildir: Bazı eklentiler ve bileşenler henüz PHP7'yi desteklemez.

Buradaki sorun, PHP 7'de operatörlerin kullanımı prosedürünü değiştirmesidir (yalnızca değil):

Kaynak:
$ Foo -\u003e $ bar ["BAZ"]
PHP5.6 sürümünde şu şekilde anlaşılıyor:
$ Foo -\u003e ($ bar ["BAZ"])
A, php7 oldukça farklı anlar:
($ Foo -\u003e $ bar) ["BAZ"]

Prensip olarak, eğer bileşen sizin için çok değerli ise, sorunu bağımsız olarak düzeltebilir, doğru yerlere bir braketi koyabilirsiniz: $ Foo -\u003e ($ bar ["BAZ"]). Bunu yapmak için, Joomla admininde, tüm olası hataların gösterisini ve ardından karşılık gelen sorunları arayan dosya adları ve numaralarına göre açılırsınız.

Hatalar çok. Örneğin: PHP 7.x kullanmak için SJ şablonlarını güncellerken hatalar ve çözümler:

1. Google Haritası

Hata:
Modası geçmiş: Sınıfları ile aynı ada sahip yöntemler, PHP'nin gelecekteki versiyonunda tasarımcı olmayacak; Plugin_googlemaps, /plugins/system/ytshortcodes/includes/libs/ytshortcodes/Oncludes/libs/ytshortCodes/googLemaps.lib.php'deki modası geçmiş bir yapıya sahiptir.

Bul: Function Plugin_GoogLemaps

2. Çerez Lite Direktifi

Hata:
Modası geçmiş: Sınıfları ile aynı ada sahip yöntemler, PHP'nin gelecekteki versiyonunda tasarımcı olmayacak; Plgsystemeucookiedirectiviveite, / eklentiler / sistem / eucookiedirectivivelite / eucookiedirectivivelite.php bir dizgede modası geçmiş bir yapıya sahiptir.

Git: /plugins/system/eucookieDirectivIsiTe/Eucookiedipectivivelite.php

Bulun: İşlev PlgSystemeucookieDireticInvelite

Üzerinde değiştirin: fonksiyon __Construct

3. Çerçeve YT

Hata:
Modası geçmiş: Sınıfları ile aynı ada sahip yöntemler, PHP'nin gelecekteki versiyonunda tasarımcı olmayacak; YTFRAMEWorkTemplate, /plugins/system/yt/includes/site/lib/yt_template.php satırında 16.Çokta eski bir yapıya sahiptir.

Bul: YTFrameWorkTemplate Fonksiyonu

Üzerinde değiştirin: fonksiyon __Construct

4. YT Framework XML Render

Hata:
Modası geçmiş: Sınıfları ile aynı ada sahip yöntemler, PHP'nin gelecekteki versiyonunda tasarımcı olmayacak; YTFRAMEWorkRENDEXML'de modası geçmiş bir yapıcıya sahip / eklentiler / sistem / yt / dahil / site / lib / yt_renderxml.php satırda 13

Bul: YTFrameWorkRenderxml Fonksiyonu

Üzerinde değiştirin: fonksiyon __Construct

5. YT Çerçevesi

Hata:
Modası geçmiş: Sınıfları ile aynı ada sahip yöntemler, PHP'nin gelecekteki versiyonunda tasarımcı olmayacak; YTObject, Straplates / SJ_IMAG / MENUSYS / YTOBJECT.PHP'DE OUTORUN BAŞKANINDAKİ BİR YAPIYOR

Bul: YTObject Function

Üzerinde değiştirin: fonksiyon __Construct

6. Tüm Videolar JW

Hata:
Modası geçmiş: Sınıfları ile aynı ada sahip yöntemler, PHP'nin gelecekteki versiyonunda tasarımcı olmayacak; Plgcontentjw_allvideos, /plugins/content/jw_allvideos/jw_allvideos.php satırındaki 18.

Git: /plugins/content/jw_allvideos/jw_allvideos.php

Bul: fonksiyon plgcontentjw_allvideos

Üzerinde değiştirin: fonksiyon __Construct

Sıkı standartlar hataları en sık tedavi edilir - satırdan çıkarın ve

Çok fazla hata seçeneği vardır ve bir şey anlamıyorsanız, her ikisini de PHP7 ile uyumluluktan önce hem de tüm uzantıları güncelle ve ardından düğmesini deneyin. Veya uzmanlara bakın.

sonuç

PHP7'ye git, siteler tarafından ziyaret edilen yeni siteler, ağır yüklü siteler ve benzeri yeni siteler için ihtiyaç duyulacak. Joomla 4 sadece php7 ile çalışacak. Ve bu geçiş ağrısız olmayacak: büyük olasılıkla bir şeyi düzeltmek veya reddetmek gerekli olacaktır. Böylece her şey hemen ve bir hata olmadan kazanır - olası değil!

Bir Konsey olarak, biraz daha beklemeyi tavsiye edebilirim: Belki de şablonların / bileşenlerin / modüllerin / eklentilerin geliştiricilerinden birisi, PHP7 ile uyumlu yeni bir sürümünü serbest bırakacak. Şimdi php5.6'da bazı uzantılar güncellenemez - PHP7'ye ihtiyacım olan yazıyor. Geçiş zamanı, bilindiği gibi - şiddetli.

Ancak, siteniz iyi çalışıyorsa, herkesden memnunsunuz - hiç bir şey yapmak gerekli değildir. Bu, güncellemelerin yarışmasına ihtiyacınız yok, çok tatsız ve acı verici! Sitenizin ek güvenliğini düşünmez misiniz?

Tüm bu güncellemeler rahatsız edilirse, PHP sürümleri, e-posta mektupları vb. - Eklenti yöneticisine gidin ve eklentileri kapatın - Uzantıların güncellemelerinin bildirilmesi, Joomla'nın güncellemelerini bildirin, PHP sürümünü kontrol edin, güncelleme (bildirimler) ve ayrıca istatistikler hakkında e-posta gönderme. Ve yaşa ve sakince çalış.

Genellikle sorulur - "Güvenliğin PHP5.6'da muzdarip olduğu yazılmıştır." Çok fazla değil ve siteniz uygun şekilde korunmuşsa (uzmanlaşmış sitemizi okuyun - https://joomlahealth.ru), Joomla'nın eski sürümlerinde ve eski PHP sürümlerinde çalışmak için mükemmel ve güvenli olacaktır.

Yeni siteler oluştururken - açıkça, derhal PHP7'de yapmalısınız!

Sonuç olarak, Joomla'nın resmi web sitesinden PHP 7 ve Joomla 4'ün resmi web sitesinden alıntı teklifi:

Gelecek yıl Joomla 4'ün olasılığı ile PHP 7'ye yükseltme ihtiyacının farkındalığını arttırmak istiyoruz.
Joomla 4, PHP 7'nin başlamasını gerektirecektir. Çoğu hosters zaten PHP 7 paketlerinde sunulur ve PHP sürümünü değiştirmek için oldukça kolay olacaksınız.

PHP güncellemeniz gereken sebepler:

Php 7 en iyi

PHP 7, sitenizin iki kat daha hızlı çalışacağı (PHP 5+ ile karşılaştırıldığında), performansı aslında iyileştirdi ve% 50 daha az bellek tüketir. PHP 7 ayrıca daha güvenlidir ve geliştirici olarak daha fazlasını yapmanızı sağlar.

Joomla 4, hem kullanıcılar hem de geliştiriciler için büyük gelişmeler olacak. Düzeltilmiş kod, güncellenmiş çerçeve, mükemmel yeni özellikler ve daha fazlası. Bootstrap 4 çekirdeğinde uygulanacak, 2 yeni şablon ortaya çıkacak (ön kenar ve arka uç), yeni medya yöneticisi birçok kişiden hoşlanacak.

Joomla 4 hala geliştirilmesinden bu yana, fonksiyonların listesi hala genişletecek.

Güncellenmiş yapı

Joomla 4'üyle birlikte verilen Framework (sürüm 2.0) bazı önemli gelişmelere sahiptir. Veritabanı API, önemli bir güvenlik gelişimi olan hazırlanan operatörleri başlangıçta destekleyecektir. Şifreli verilerin depolanması, anahtarlık modüler bileşenini kullanarak artık mümkündür. Konsolun yeni bileşeni sayesinde komut satırı araçları daha iyi ve daha güvenli oluşturulabilir.

Daha güvenlidir ve desteklenir

Versiyonlar, PHP 5.6'dan daha eskidir. Artık güvenlik düzeltmeleri için desteklenmiyor. PHP 5.3'te büyük bir güvenlik açığı tespit edilirse, kimse düzeltmeyecek ve siteniz savunmasız olacaktır. En son sürümü kullanarak, bu olası sorunların ilgileneceğini her zaman bileceksiniz ve güncellemeler göründüğünde size çok hızlı bir şekilde sunulacak.
PHP 7'nin son büyük versiyonundayken, uzun süredir desteklenir (ikincil sorunlar dahil), bu nedenle Joomla 4 web siteniz 2025'e kadar kolayca çalışacaktır.

Ya güncellenemsem?

Joomla 3.9+'un serbest bırakıldıktan iki yıl boyunca tutulacağını hatırlamak önemlidir. Bu, Joomla 3 ila 2020'nizi rahatça yönetebileceğiniz anlamına gelir, ancak Joomla 4'ün harika özelliklerini ve avantajlarını özleyeceksiniz.

Gelecek nesil Joomla'yı en iyi nesille yapmayı ve gelecekte PHP 7'nin kullanımının, kullanıcılarımızı en kaliteli ürünle sağlamaya yardımcı olacağına inanıyoruz.

M. Babcker

Yani burada bir - Joomla 4 sadece php7 + üzerinde çalışacak. 3. Joomla Hattı PHP5 + üzerinde çalışabilir.

Güncelleme veya güncelleme - sadece sizi çözmek için, makalenin başında yazdığım her şeyi dikkate alarak ...

Hakkında yazmaya karar verdi pHP 7'ye geçişArtık şimdi bir motorun kodunun PHP 7'de devredilmesiyle meşgulüm. Ve böylece başlangıç \u200b\u200biçin, sitenin yönetici paneline bir hata ayıklama veya hata ayıklayıcı ekliyoruz, eğer böyle bir şey yoksa, yapabilirsiniz. Konuyla yazılmış: Şimdi Monitör ekranında, aşağıdaki gibi hataları görebiliriz:

UYARI: Preg_Replace (): / E değiştirici artık desteklenmiyor, bunun yerine Preg_Replace_callback kullanın - Dir / File.php (satır numarası)


Bu mesaj, E değiştiricinin PHP 7'de bulunmadığını, ondan kurtulmak için gerekli olduğunu, ancak bu değiştiriciyi basitçe silmek gerekirse, komut dosyası yanlış yapılabilir, orada yazmak kolay değildi. Kod örneğini göstereceğim Phpfox 3. (Kodu yeniden yazarken :), bunu yapın:
Örneğin, hata mesajımız böyle bir çizgiyi gösterir:

$ sstr \u003d preg_replace ("/ \\) / iSE", "" .stripslashes (\\ $ this -\u003e _ Parseusertagged ("1 $")). "", $ SSTR);


Böyle değiştirilmelidir:

$ sstr \u003d preg_replace_callback ("/ \\.+? ± / / x \\] / is", işlev ($ maç) (iade stripslashes ($ -\u003e _ parseumertagged ($ maç));), $ SSTR);


İşte İşlevi Değiştirdik preg_replace (), üzerinde preg_replace_callback (), Normal ifade olan ilk argümanda E değiştirici E kaldırıldı. İkinci argüman, düzenli bir ifade uyguladıktan sonra gerçekleştirilecek isimsiz bir fonksiyonla değiştirildi. Anonim fonksiyon bir $ maç dizisi içerir, dizinin elemanları tesadüfler ile değiştirilir, örneğin, 1 $: 1 $ oldu: $ Maç; BT: 2 $, oldu: $ Maç, vb. Tırnaklı tırnak ve koruma sembolü (ters döşeme \\).

Varolmayan değiştirici e hatasının sonunda, birkaç kod değiştirme örneği göstereceğim. Hat:

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


Değiştirin:

$ AROW ["value_actual"] \u003d preg_replace_callback ("/ s: (. *): \\" (. *?) \\ "; / is", işlev ($ maç) (Dönüş "S:". Strlen ($ maç). . ":" "$ Maç." ";";), $ AROW ["value_actual"]);


Ve düzenli terimler, dize bir değişkenli bir örnek:

$ STXT \u003d Preg_Replace ("/ \\ [". $ SBBCODE. "\u003d (. *?) \\] / ISE", "". \\ $ Bu -\u003e _ replashbcode (". \\ $ Sbbcode." "," Öneki " , Doğru, "1 $"). "" ", $ STXT);


Bunun gibi değiştirildi:

$ Stxt \u003d preg_replace_callback ("/ \\ [". $ SBBCODE. "\u003d (. *?) \\] / İs", işlev ($ maç) kullan ($ SBBCODE) ($ SBBCODE) ($ sbbcode, " önek ", doğru, $ maç);), $ stxt);


Burada, düzenli bir ifadedeki bir değişken yerleştiren bir kullanım () işlevi ekledik, böylece bir değişkeni anonim bir işleve aktardık. Düzenli ifadedeki değişkenler birden fazla ise, daha sonra bunları virgülle yazın, örnek:

İşlev ($ maç) kullanımı ($ a, $ b, $ c)

Modası geçmiş ereg_replace ()
Resmi PHP web sitesine göre: http://php.net/:

PHP 5.3.0'dan bu özellik modası geçmiş olarak kabul edilir. Bu fırsata dayanmak son derece tavsiye edilir.


Ve PHP 7'de unuttukları ... Böyle bir hata mesajı alabilirsin:

Ölümcül Hata: Yakalanmamış Hata: Tanımsız İşlev için Arama Ereg_Replace ()


Bu özellik değiştirilmelidir preg_replace ()Aşağıdaki örneğin ardından. Diyelim ki böyle bir kod hattımız var:

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


Kodu böyle değiştirin: 1 Ocak 2016

PHP 7.0.0'ın serbest bırakılması Aralık 2015'te gerçekleşti, ancak bu versiyona geçiş konusu hala ilerici gençliğin zihinlerini endişelendiriyor. Ve endişelenmeyin, çünkü PHP'nin her önemli sürümü birçok faydalı yenilik taşır.

Neden güncelleme?

Verim

Ağ, PHP ve HHVM'nin farklı versiyonlarının farklı versiyonlarının birçok sentetik ve gerçek performans testini bulabilirsiniz, bu sadece bir şey konuşur - her PHP web versiyonu daha hızlı ve daha hızlı hale gelir. Projelerimin çoğu MODX Devrimi ve CodeIgniter 3. ve doğal olarak, PHP sürümünü değiştirdikten sonra neler değişeceğini bilmeyi merak ediyordum.

Modx evrimi

Tabii ki, performanstaki değişikliği ve modx evrimi için kontrol edebilirim, ancak bu sistemde yukarıda ne yazdığıma bağlı olarak, uzak PHP uzantılarına bağlı olarak çok fazla kod var. Bununla birlikte, kullanıcı tarafından hazırlanan versiyonda, PHP 7 için tam destek ortaya çıktı.

Modx devrimi

Böylece, PHP 5.6'da çalışan birkaç site aldım. Bir sayfa oluşturmak için istek ve zaman sayısını ölçüyorum. Talep sayısının PHP sürümüyle çok az ilişkili olduğunu varsaymak mantıklıdır, ancak bu bilgiyi eklemek için de eklenmeyecektir. Sürümden başlayarak, PHP 7 ile tam uyumluluk uygulanır. Bundan önce, PHP 7 için sadece kısmi destek vardı, yönetici'nin benim için çalışmadığı, sitenin kendisi mükemmel çalışmasına rağmen.

Web Sitesi Numarası 1

PHP sürümü Önbelleğe almak İstek Zamanlar.
5.6 156 1.18
5.6 17 0.25
7 161 0.43
7 17 0.02

Web Sitesi Numarası 2.

Web Sitesi Numarası 3.

Gördüğünüz gibi, PHP sürümünü sonuncuya getirme, sitelerin performansını olumlu şekilde etkiledi, 1,5-3 kez ve bazı yerlerde (örneğin, sitemin ana sayfasında) 10 kez bile.

CodeIgniter 3.

Codeigniter'da çok sayıda projeye sahip olamam, ancak performansı dikkatlice tedavi etmeyi bile zorunlu tutuyorlar, çünkü ayda bir tanesinde makale ve benzersiz ziyaretçilerin sayısı binlerce kişi tarafından hesaplanır. Şu anda, bunlardan birini optimize edip yeniden düzenleme yapıyorum, php 7'ye geçmeden birinin üretkenliği birkaç kez artmıştır. Yakın gelecekte, mevcut işi bitirdiğimde, bir sürüm değişikliğinin sonuçlarını kesinlikle yazacağım.

Sözdizimi

Sözdizimi, geriye dönük uyumluluğu etkileyecek bazı değişikliklere uğrar. Resmi belgelere ek olarak, GitHub'daki kodun örneklerini incelemenizi tavsiye ederim, örneğin:.

Kim güncellenmemeli

Projeleri yeni PHP'de kaldırılan uzantılara dayananları güncellemek gerekli değildir. Ayrıca, sözdizimindeki küçük değişiklikler hakkında internet bilgilerini aramaya değer, çünkü geriye doğru uyumluluğu ihlal eden anlar var. Tabii ki, daha az olmasa, ancak kısıtlanmak daha iyidir.

Barındırma sağlayıcıları

PHP 7'nin serbest bırakılması nispeten son zamanlarda gerçekleşti, bu yüzden tüm barındırma sağlayıcıları yenilikleri denemeyi mümkün kılar. Örneğin, Beet zaten hızda sevinmenize izin verir ve timeweb'de, muhtemelen PHP 7'yi yeterli değildir.

Başkasının deneyimi

Çıktı

En son PHP sürümüne "karşı" karşı "karşı" daha fazla "geçiş. Bu nedenle, kolay optimizasyonu avlarsanız, PHP'yi güncelleyin.