Bir çerçeveden çerçevesiz duruma geçme [kapalı]


89

PHP'de hobi olarak yaklaşık 8 yıldır geliştiriyorum. 2009'da kod işaretleyiciyi aldım ve o zamandan beri tek bir proje geliştirmeyi başaramadım.

Saf PHP'de çalışıyor olsaydım, bilirdim ya da hızlı bir şekilde bir parçacığı bulabilirdim, onu istediğim gibi nasıl değiştirebileceğimi bulmaya çalışırken beni yavaşlattığını görüyorum.

CodeIgniter, Kohana ve Symfony'yi denedim. Kullanım kolaylığını seviyorum (ve ayrıca veritabanı işimi büyük ölçüde hızlandıran bir ORM olarak doktrini kullanmaya başladım), ancak projelerin saf PHP'de aldığı sürenin 3-4 katını aldığını görüyorum. Daha önce saf PHP'de çözdüğüm bir soruna çözüm bulamadığımda sıkıldım ve hayal kırıklığına uğruyorum.

Herhangi biri çerçeve kullanmaktan çerçevesiz bir yaklaşıma geri döndü. Temel bir güvenlik çerçevesi gibi bir şey var mı (XSS'yi önleme, yayınlanan verileri filtreleme, veritabanlarıyla kullanım için bir temizleme işlevi sağlama)? Bunun gibi bir şeyin bana tam ölçekli bir çerçeveden çok daha fazla faydası olacağını düşünüyorum. Çerçevelerle çalışmayı öğrenmenin bana çok şey öğrettiğini düşünüyorum, ancak kendi kodumla çalışmaktan daha mutlu olacağım.


5
Neden çerçevesiz çerçeveye kıyasla 3-4 kez zaman alan çerçeve kullanımı hakkında söylediğiniz hakkında daha fazla bilgi duymak isterim .. bunun üzerinde daha fazla ayrıntıya girebilir misiniz?
Lukman

7
CI'nin veya herhangi bir çerçevenin faydalarından biri, sizi, belirli geliştirme tarzınıza alışkın olmayan geliştiricilerin sürdürmesi daha kolay olan tasarım modeline zorlamasıdır. Ayrıca, daha büyük ortamlarda, görünümleri mantıktan ayırmak çok önemlidir, böylece CSS uzmanlarınız geliştiricilerin ayak parmaklarına basmadan işlerini yapabilir.
Kyle Noland

1
Harika bir soru, eğer bir seçeneğim olursa, saf PHP kullanırım. Ama çoğu zaman, birlikte çalıştığım insanlar bir çerçeve kullanmamı istiyorlar, bu yüzden sadece fazladan saatler ücretlendiriyorum :) Kendi kodumun okunabilir, iyi organize edilmiş ve kararlı olduğunu hissediyorum. Belki de bir felaket meydana gelirse ve tüm kod "başka hiç kimsenin okuyamayacağı özel çerçeveniz" durumunda sizi tutmaktan korkuyorlardır.
SSH Bu

Yanıtlar:


101

PHP5'in mevcut sürümleri, aradığınız güvenlik çerçevesinin çoğunu standart kitaplığın bir parçası olarak içerir.

HTML'yi girdi olarak kabul ediyorsanız, HTML Purifier'ı almanızı ve filter_input_array kurulumunuzdaki FILTER_CALLBACK hattı üzerinden çağırmanızı tavsiye ederim . Giriş güvenliğine yönelik beyaz listeye dayalı yaklaşımı, XSS'ye karşı harika (ve çok güçlü) bir ilk savunma hattı oluşturur.

Anladığım kadarıyla, PHP, siteler arası istek sahteciliğine karşı koruma sağlayacak bir mekanizmaya sahip değildir , ancak eminim ki Google bu konuda size yardımcı olabilir. OWASP Güvenlik Cheatsheets kendi korumasını uygulamak istiyorsanız üzerine bir bölüm bulunmaktadır.

Meraktan bağımsız bileşenlere de bakmaya karar verdim ve şu ana kadar bulduklarım şunlar:

Şablon oluşturma:

  • PHP Şablonu Kalıtımı (Normal PHP artı şablon kalıtımı)
  • TWIG (Django / Jinja2 / Liquid- style sözdizimi, autoescape ve sandboxing dahil. Hız için önbelleğe alınmış PHP'ye derler.)
  • Dwoo (daha hızlı, daha özellikli, PHP5 imsi halefi Smarty . Varolan Smarty şablonları için bir uyumluluk sistemini içerir.)

Hala tam olarak incelemediğim şeyler:

  • Rota dağıtımı ( Şimdiye kadar yalnızca RouteMap ve Net_URL_Mapper bulundu . Teşekkürler, cweiske.)
  • ORM (Çıplak PDO'nun senin işin olmaması durumunda)

Teşekkürler, çok iyi tavsiyeler ve şimdi onları incelemeye başlayacağım!
Alex C

4
Şablonlama motoruna ihtiyacınız varsa Smarty'yi Dwoo ile değiştirin. Özellik olarak Smarty ile neredeyse aynıdır ancak CPU'ları eritmez.
Phil Sturgeon

pear.php.net/package/Net_URL_Mapper bir rota dağıtıcısıdır.
cweiske

4
Çerçeveler sizi yavaşlatırsa, motorları, özellikle de veba gibi Smarty'yi kullanmaktan kaçının. İyi niyetliler ama sadece PHP'nin zaten yaptığı bir şeyi yeni ve sezgisel olmayan bir şekilde yapıyorlar.
Night Owl

Neyi başarmaya çalıştığınıza ve çerçevenin sizi neden yavaşlattığına bağlıdır.
ssokolow

10

Çerçevelere inanmıyorum ... Birçoğunda çalıştım.

MVC çerçevelerinden nefret etmenin nedenleri:

1) Kod bloat, geliştirmeme yardımcı olan premium sınıflar satın alıyorum. Form sınıfları veya SQL sınıfları gibi.

2) MVC çerçevelerinin özellikle bağımlılık yöneticileri kullanılırken kolayca taşınabilir olmadığına inanıyorum.

3) Aslında bir MVC çerçevesi ile daha fazla kod yazdığınıza inanıyorum, o zaman kimlik doğrulamasını vb. İşleyen bir ton kullanışlı sınıf içeren bir standart metin kullanmanız gerekiyorsa

4) Çoğu çerçeve, yerel olarak yalnızca bir veya iki veritabanını da sağlar.

Kimlik doğrulama ve metin editörü içeren bir form çerçevesi ve madoo gibi bir sql çerçevesi bulmanızı öneririm + bir e-posta sınıfı ...

Başvurunuzun% 90'ı her zaman formlar, sql ve ajax SINIFLARIDIR - geri kalanı sadece ihtiyaç duyulduğunda alınabilir

Ben bir minimalistim ve uygulamamda hiçbir şey yapmayan bir kod bulundurma fikriyle mücadele ediyorum ... sadece ihtiyacım olması durumunda işe yaramıyor.


"Premium sınıflar satın alıyorum" ifadesi ile ilgili olarak: bu tür sınıfları nereden ve hangi amaçlarla satın alıyorsunuz? Teşekkürler.
dotancohen

Katılıyorum. Ayrıca, birçok çerçevede önemli bir performans artışı var.
developerbmw

8

Arkanızda bu kadar deneyim varken, kendi favori kütüphanelerinize sahip olmalı, bunları elle seçmeli ve kendi basit çerçevenizi oluşturmalısınız. Çerçeve veya çerçevesizlik (ve hangisi) eldeki projenin türüne bağlıdır, hiçbir eldiven herkese uymaz. Bu yüzden, mevcut çerçevelerin sizi yavaşlattığını düşünüyorsanız, bir süre harcayın ve ihtiyaçlarınıza göre çalışan bir çerçeve geliştirin.


8

PHP'yi bir hobi olarak kullandığınıza dair ifadenize ve "Oraya yavaşça varmak" profil ifadenize dayanarak, bu bir öğrenme eğrisi sorunu gibi görünüyor. Görünüşe göre, a) çerçevenin dayattığı yapı içinde nasıl çalışılacağını anlayacak ve b) bu ​​nedenle çerçevenin sağladığı verimliliklerden yararlanamayacak kadar deneyim derinliğine ve genişliğine sahip değilsiniz.

Size bağlı kalmanızı tavsiye ediyorum. Eğitim videoları ile başa dönün. Diğer insanların kodunu anlayana kadar bulun ve okuyun. Projelerinizi aşağıdan yukarıya doğru oluşturun - basitçe başlayın ve işlevsellik ekleyin. Cevapları okumadan önce soruları kendiniz cevaplamaya çalışarak forumları takip edin.

Çeşitli platformlarda neredeyse 20 yıldır profesyonel olarak programlama yapıyorum ve CI konusunda rahat olmam biraz zaman aldı. Ama şimdi olduğuma göre, ölçülebilir performans sorunlarını açığa çıkaran yeterli ölçekte bir sitem olmadığı sürece (Twitter'ı düşünün) saf PHP'ye (kendi projelerim için) geri dönmem.


Ben de çerçevelerden hoşlansam da sevmesem de hala sınırdayım. Kesinlikle OP'nin amacını anlıyorum, ama sizinkini de görüyorum ... Bir çerçeve öğrenmek tamamen yeni bir dil öğrenmek gibidir. Framework'ün işleri yapma biçimine girmelisiniz. Bununla birlikte, uğraştığım bir başka şey de, işlerin nasıl yapılması gerektiğine dair felsefemin çerçeveden farklı olması. Hala bana uygun birini bulmaya çalışıyorum. (.NET MVC3 için sabırsızlanıyorum)
mpen

Henüz başka çerçeve bilmiyorum, bu yüzden herhangi bir genellikle konuşamam. Ancak bir çerçeve kullanmak bir ya hep ya hiç önermesi değildir. Örneğin, CI'nin önbelleğe alma kitaplıklarını (sayfa, veritabanı) yetersiz buluyorum ve kolayca ölçeklendirilemez. Bu yüzden üçüncü taraf bir önbellek kitaplığı (Phil Sturgeon's) kullanıyorum ve bundan oldukça memnunum.
coolgeek

Buna bağlı kalmanın bir diğer önemli avantajı, daha sonra diğer çerçeveleri öğrenmeyi nispeten kolaylaştırmasıdır. Bu nedenle, belirli bir çerçeveyi (örneğin, CI) belirten iş listelerini sık sık görüyorsunuz, ancak benzer çerçevelerle (örneğin Zend veya Symfony) deneyimin dikkate alınacağını belirtiyorsunuz.
coolgeek

2

Zend Framework bunun için gerçekten süper. İstediğiniz kadar çok veya az kullanabilirsiniz. Hepsi php olarak kodlanmıştır ve açık kaynaklı olduğundan, onu hackleyebilir ve kendiniz yapabilirsiniz. Farklı bileşen, diğer çerçevelerde olduğu kadar birbirine bağlı değildir.

Herhangi bir sorun yaşamadan Zend'in bazı bileşenlerini kullanarak kendinize basit bir çerçeve oluşturabilirsiniz.

Şuna bakın !


3
Bir çerçeveden uzaklaşmaya çalışıyor.
WarmWaffles

1
@Filmdenkare Bu yüzden ZF'nin bazı kısımlarını kullanmaktan bahsetmiştim. Elbette adamın her şey için tekerleği yeniden icat etmesini beklemiyorsunuz.
Iznogood

2
Iznogood'un çok iyi bir noktası var. ZF, bir çerçeveden daha fazlasıdır. Paketleri birçok ortak görevi yapmak için son derece yararlı buldum ve bu konuda sizi MVC modellerini veya DB erişim yöntemlerini veya gerçekten herhangi bir şeyi kullanmaya zorlayan hiçbir şey yok. Elbette, sadece Armut modülleri ile de gidebilirsiniz.
Bob Baddeley

2
Evet, aynı zamanda bir çerçeve sporu yapan bir kütüphanedir. Ancak kullanımı kolay bir şey arıyor ve en son kontrol ettiğimde Zend'in isim alanı darmadağın ve yazmak için bir acı. @Bob_Baddeley PEAR iyi bir öneri
WarmWaffles

@WarmWaffles Her biri kendi sanırım iyi. Belki şimdi Zend'in 1.10.x'te olduğunu tekrar kontrol edebilir ve daha sonra 1.8 diyebilirsiniz.
Iznogood

2

Tam olarak nasıl hissettiğini biliyorum. 4-5 yıl önce PHP'de başladım (Delphi, lol'den geldim) ve saf php ile başladım. Onları geri aldığım şey, sadece tüm tablo alanlarını okuyan ve formu oluşturan bir "CMS Paneli" gibiydi. Bir süre sonra bir şekilde PHP Framework bilgisine ulaştım, ilk olarak CakePHP'yi denedim ve hoşuma gitmedi, sonra Yii'ye girdim ki bence oldukça sezgisel ve kullanımı kolay (Gii jeneratörü ile oldukça sallanıyor). Symfony, ZF2, Laravel, Yii2-Beta ve RAD için bazı çerçeveleri denedim, ancak yine de çerçevelerden önceki gibi yeterince hızlı hissetmiyordum.

Kendi çerçevemi geliştirdiğim için oldu (Doğal olarak, tam olarak bir gün uyanıp "Yeni bir çerçeve oluşturacağım" dediğim zamanla oldu). Bunun kötü, kötü bir uygulama ve "tekerlek yeniden icat" hareketi olduğunu biliyorum, AMA, şimdi projelerimi çok daha hızlı geliştiriyorum (sadece PHP'den daha fazla).

Kodu tam bir MESS olduğundan, yaklaşık bir ay önce çerçevemi yeniden biçimlendirmeye başladım, şimdi besteci kullanıyor, php çerçeveleri arasında var olan ortak kuralları izliyor, MVC.

Neden yeniden biçimlendiriyorum? Çünkü birinin benim bir projemi tamir etmesi gerekiyorsa, bu başka bir dünya meselesi olmayacak.

Yani seni anlıyorum.

Tavsiyem, araçlarınızı hazırlayın (buna bir çerçeve, önceden ayarlanmış bir uygulama veya insanların adı ne olursa olsun) ve onu daha iyi hissettiğiniz şekilde kullanın, ancak yine de bazı ortak kuralları takip edin (MVC gibi, "modüle edilmesi kolay" şeyler Kırılma durumunda değiştirebilirsiniz.


1

Temel güvenlik için, süper küresellerimi tamamlayan özel bir filtre yöntemi kullanıyorum . Sözdiziminin biraz alışması gerekir, ancak PHP filter_var () API'sinden daha basittir ve kayma temizliği yapmanıza izin vermez:

 $_GET->text("inputvar") or $_POST->name["field"]

Ayrıca satır içi $ _REQUEST-> sql () kaçışına da izin verdi. Ancak veritabanı çalışması için parametreli SQL veya tercih ettiğiniz DAL / ORM'yi kullanmaya devam edin.


Bu kesinlikle akıllıca bir çözüm, ancak filtre API'sinin neden hantal olduğunu düşündüğünüzden emin değilim. Bir şey varsa, filter_input_array () mükemmel olduğunu düşünüyorum. (Öncelikle, belirli bir istek türü için tüm girdileri makul bir şekilde açıklayıcı bir şekilde tek bir yerde tanımlamayı basitleştirdiği için. Bu tür bir şeyin yararını asla küçümsemeyin.)
ssokolow

@ssokolow: Gerçekten, filter_input_array () bunu tek seferde yapmak için harika. Bununla birlikte, filter_ * işlevlerinde zaten çok fazla esneklik vardır ve çok fazla parametre buna uymuyor. Bu yüzden insanların bundan kaçtığını düşünüyorum (teknik olarak iyi bir çözüm olmasına rağmen).
mario

Belki. Sanırım sorunun bir kısmı, pek çok insanın hala raflarında PHP4 kitaplarının bulunduğu bir dünyaya yeni gelmiş olmanın yanı sıra, reklamı yeterince yapılmamış, resmi belgeler yeterince açık değil ve W3Schools belgeleri Google'ın en iyi sonuçlarını paylaşma eğiliminde olanlar yeterince kapsamlı değildir.
ssokolow

1

ToroPHP üzerine bir günlük çalışma yaptım ve oldukça hoş buldum. RESTful uygulamalarını hedefleyen minimalist bir çerçevedir. Bu, herhangi bir çerçevenin şişkinliği ile uğraşmak zorunda kalmadan sunucu tarafı kodunu modüler tutmayı mümkün kılar.


1

Sizi neyin rahatsız ettiğini bilmiyorum ama kod işaretleyici harika bir çerçeve. Güzel belgelere sahip ve birçok kişi kod işaretleyiciyi kullandığından, tüm yardımı belgelerinde, forumunda veya stackoverflow'da bulacaksınız.Bir çok çerçeve üzerinde çalıştım ( Codeigniter, CakePHP, Zend, Spring 3.0, Ruby on Rails), ancak kod işaretleyicinin en iyi belgelere sahip olduğunu söylemeliyim. Kodlayıcıda otomatik olarak işlenen birçok şey vardır ve güvenlik konusunda endişelenmenize gerek yoktur. Çekirdek PHP üzerinde çalışmak, tekerleği yeniden icat etmeye benzer. En önemli şey, bir çekirdekten çerçeveye geçişin, buna alıştıktan sonra çok fazla çaba sarf etmeniz gerekeceğidir, onu sevmeye başlayacaksınız.Ayrıca, Ruby on rails, tüm ayrıntılarını öğrendiğinizde harika bir çerçevedir. çift ​​hıza sahip.


2
Bunu yayınladığımdan bu yana sadece iki yıldan fazla zaman geçti ve aslında bir süredir saf PHP ile çalıştım, ancak o zamandan beri PHP'ye geri döndüm - kesinlikle haklısınız, kullanımı inanılmaz derecede kolay. Şu anda tercih ettiğim kurulum CI, veritabanları için phpActiveRecord ve şablon oluşturma için Twig.
Alex C

Evet, phpActiveRecord güzel görünüyor. Laravel'i hiç denedin mi? ( laravel.com ) CI, phpActiveRecord ve Twig'in en iyilerinin varsayılan olarak yerleşik olduğunu göreceksiniz. Ben de CakePHP geliştiricisiyim ama son zamanlarda Laravel'e hevesle bakıyorum.
Simon East
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.