PHP kabus başlatmak için kalıtsal?

24 Cevap php

Ben bir kabus olduğu ortaya çeviriyor bir PHP proje miras ettik. Burada göze çarpan noktalar şunlardır:

  1. Tüm orijinal geliştiriciler yapmamışlar
  2. Kod no versiyon kontrolü bulunmaktadır
  3. Tüm geliştirme ve test PHP dosyaları yeniden adlandırma ve düzenleme ile canlı sunucuda yapıldı. Orada her dosya index.php, index2.php, index3.php vb birden fazla kopyası olan ve gerçekten kullanılan hangi dosyaların belirsiz
  4. Diğer çoklu dosyaları dahil diğer dosyaları, vb dahil dosyalara her dosyada içerir vardır
  5. Her Orada şeyler yapmanın kendi yolu vardı proje üzerinde birden çok geliştiriciler olmuştur. Örneğin, JavaScript çerçevesinden bir Hodgepodge var, bazı veritabanı sorgularını, diğerleri bir XML arayüz, SQL kullanmak ve diğerleri veritabanında usul işlevleri çağırır.

Çünkü tüm bu sorunların, geliştirme bombalanmasını yavaş. , Taşması Stack bu karmaşa başlamak konusunda herhangi bir öneriler benim sıkıntılarınızı havalandırma yanında? Kendimi PHP geliştirme için oldukça yeni, ama bu değişiklikler, canlı sunucuyu bozmadan test edilebilir ve böylece geliştirme ortamı çeşit kurma gibi ilk adımdır görünüyor. Burada başlamak konusunda herhangi bir ipucu? Test yapmak için tipik bir yolu nedir? Benim masaüstünde sitenin yerel bir sürümünü kurma çalışmalarının bir sürü (sunucu Linux, ancak burada masaüstü, Windows vardır) gibi görünüyor. Ben test için canlı sunucu üzerinde bir alt dizin oluşturmak, ya da ..? Ne veritabanı hakkında?

İkincisi, ben aslında kullanılmakta olan sunucu üzerinde hangi dosyaları izlemek için etkinleştirebilirsiniz profilleme çeşit var mı? Aslında dahil edilmediklerini şeylerin yeniden adlandırılmış kopyalarını silmek istiyorum. Daha da iyisi, idam edilmemesi, bir dosyanın hangi parçaları anlamanın bir yolu var mı? Ben şüpheli olarak kopyalanan fonksiyonları ve çöp çok da kullanılmayan vardır. Benzer şekilde, içeren için, karışıklık dışarı doğrultma herhangi bir ipucu?

Eh, burada havalandırma durdurmak ve burada herkesin insafına kendimi atarım. :)

24 Cevap

Bunu yaptım. Sen benim sempati var. Pasaport mevcut veya atlatmak bu yapmıyorum bazı başka nedenle değilse, burada ben yaklaşım istiyorum nasıl:

Adım Sıfır olursa olsun, ne kadar berbat, sürüm kontrolü içine almak olduğunu. Ya da en azından neyin yanlış gittiğini anlamaya ona değişiklikleri karşılaştırmak - hatta biraz çalışır ve bir şey uymazsanız, geri çalışma durumuna gitmek gerekiyor. Eğer üstlenmeden konum olarak sık sık, küçük check-in yapın ve bir şeyler gizemli yanlış gittiğinde geri almak için daha az kod gerekir. (Şeyler gizemli yanlış OLACAKTIR.)

Bundan sonra, veri tabanına başlamak istiyorum. Her şeyin, sütunlar açıkça vb, nispeten iyi normalize adlandırılır olun

Sonraki PHP kodu yapmak. Kod gerçekten bir patchwork o kadar ise, ben devam edin ve bir çerçeveye sığdırmak istiyorum. Ayıran kaygıları onların Rayları-ish şekilde soruyu yapar - CakePHP içine bakmak veya Symfony "bu kod parçası gitmeli?" kolay cevap. Bu küçük bir görev değil, ama bir kez bunu yaptık, muhtemelen bir sanely-inşa uygulaması olan yarım-bir şekilde daha iyisin. Ayrıca, iyi bir web çerçevenin dahili testi tesisleri FAR kolay üstlenmeden yapmak - Bunu değiştirmek önce işlevselliği varolan bir parça karşılamak için bir test yazmak ve size değişiklikten sonra herhangi bir şey kırdı olmadığını bileceksiniz.

Eğer veritabanı sıralanır ve modelleri model kodunu ve kontrolörleri kontrolör kodu var sonra, o zaman, vb bir tek JS / AJAX kitaplıkta standartlaştırılması CSS temizlik gibi sunum düzey şeyler hakkında endişe olabilir

Bir dev ortamında gelince: Kesinlikle bir yerel dev ortamını kurmak gerekir. (Ben sanallaştırma için VirtualBox) tavsiye var anahtar teslimi WAMP paketi var, ya da bir Linux kutu / VM yüklemek olabilir. Ayrıca canlı sunucuyu taklit ayrı bir entegrasyon test ortamına sahip olmalıdır. Canlı kodu ama hiçbir şey canlı sunucuda çalıştırmak gerekir.

Bildiğim kadarıyla debug / profilleme araçları olarak, ben Symfony günlüğü & (sadece hata ayıklama modunda) sayfalarınızda çıkageldi biraz JS araç dahil olmak üzere araçlar oldukça kaygan seti ile geliyor biliyorum profil bilgilerini.

İyi şanslar.

Peki, ilk şeylerden ilk. Ben sizi konum durumda oldum, ve o berbat. Ben sizi bir geliştirme ortamı almak isteyen ve çalışan ile doğru yolda olduğunu düşünüyorum.

Development environment

Bu Webserver / script motor / veritabanı motoru yığını, ve büyük olasılıkla bir IDE içerecektir.

LAMP yığını installer için, bunlardan birini kullanmanızı öneririz:

Dahası LAMP yığını üzerinde okuma:

O'Reilly's OnLamp site

Bir iyiliği için PHP IDE, bunlardan birini kullanmanızı öneririz:

Article on IBM's Developer site Birçok IDE bulunuyor karşılaştırarak

Source control, Team Foundation Server, SVN veya Git kullanabilirsiniz İçin - Sadece bilmeni şey kullanın. Ben (aklınıza gelebilecek herhangi bir acil bakım için) ilk kaynak denetiminde her şeyi almak öneririz, ama sonra oldukça büyük bir revizyon yapmayı planlıyoruz.

The Overhaul

Sen bile alışmak hangi dosyaları bilmediğini belirtti ve bir pseudo-sürüm-kontrol olarak bir dosya adlandırma kullanılan. Yukarı ve çalışan bir geliştirme ortamı var bir kez, orada elden başlamak isteyebilirsiniz. Size yardımcı olabilecek birkaç şey vardır:

  • Sizin app müşterileri / kullanıcıları
  • Titiz ve organize not alma
  • İyi bir günlük çerçeve

Eğer projeye yeni konum ve uygulaması (büyük olasılıkla) senden daha iyi nasıl davranması gerektiğini bilmek için gidiyoruz gibi Your customers/users are important, bu sesler yüzünden.

Meticulous note taking is important, aslında sıfırdan yeniden yazılması da gereksinimler / tasarım / son kullanıcı belgeleri olmak için gidiyoruz çünkü. Bunu yapmak için gidiyoruz eğer internals anlamak gerekir. Ve bu sistem hakkında bir şey anlamak için gidiyoruz eğer, kendiniz (veya yerine yığın taşması okuma hemen Premade belgeleri incelemeden olurdum) bunu yazmak gerekir ;-)

Ve son olarak, a logging framework is important şeyleri düzeltmek gerekir, ve sen kırık bilmiyorum şeyleri düzeltmek değil çünkü. Bir günlük çerçeve herhangi bir belirgin UI yok app bölüme görüş verir. App çeşitli yerlerinde takarak ve ardından günlükleri bakarak size kod yürütme ve hangi sırayla zaman iyi bir fikir verir.

Sen app nasıl çalışması gerektiğini (kağıt üzerinde) yakalama, ve bir şey kırmak değil çalışırken sonra yavaş yavaş gereksiz dosyaları kaldırarak odaklanmak isteyeceksiniz. Hata ayıklama yardımcı olmak için günlükleri bir göz atın. Müşterilerinizin şey kırık olduğunu çığlık olmadığından emin olun. Senin ne notları kaydedilir oluyor ve ne müşterilerinizin söyleyerek katılıyorum emin olun.

Preventing this in the future

Recheck everything back into source control. Umarım bu noktada yeni, saner, daha iyi dizin yapısı gelmiş olacaktır.

Get a test structure in place. Bu sadece bir yerde temel bir birim test çerçeve almak ve her dağıtmak sonra bazı temel duman testleri yapıyor anlamına gelse bile, hiç yoktan iyidir. İdeal olarak, her dağıtmak sonra zaman test geçirebileceğiniz bir test mühendisi veya bilgili ve güvenilir müşteri olmalıdır.

Put a deployment process in place birden fazla geliştirici büyümeye eğer. Üretim ortamına değişiklik denetleme ilk öncelik olmalıdır. (Eğer yapmak istediğiniz son şey doğru, yine bu geçmesi mi?) Sen (Dev gibi -> Testi sonra Test -> Üretim) çevre sınırları arasında hareket etmek için açık ve basit bir süreç olmalıdır.

Bir dosya grep kullanarak tarafından kullanılıyorsa, çoğu zaman size söyleyebilirim.

grep -r "index2.php" *

Ayrıca size temizleme yardımcı PHP çözümleyici kullanabilirsiniz. Burada ilan ve fonksiyon çağrıları vardır işlevlerini yazdıran bir örnek script:

#!/usr/bin/php
<?php
class Token {
    public $type;
    public $contents;

    public function __construct($rawToken) {
        if (is_array($rawToken)) {
            $this->type = $rawToken[0];
            $this->contents = $rawToken[1];
        } else {
            $this->type = -1;
            $this->contents = $rawToken;
        }
    }
}

$file = $argv[1];
$code = file_get_contents($file);

$rawTokens = token_get_all($code);
$tokens = array();
foreach ($rawTokens as $rawToken) {
    $tokens[] = new Token($rawToken);
}

function skipWhitespace(&$tokens, &$i) {
    global $lineNo;
    $i++;
    $token = $tokens[$i];
    while ($token->type == T_WHITESPACE) {
        $lineNo += substr($token->contents, "\n");
        $i++;
        $token = $tokens[$i];
    }
}

function nextToken(&$j) {
    global $tokens, $i;
    $j = $i;
    do {
        $j++;
        $token = $tokens[$j];
    } while ($token->type == T_WHITESPACE);
    return $token;
}

for ($i = 0, $n = count($tokens); $i < $n; $i++) {
    $token = $tokens[$i];
    if ($token->type == T_FUNCTION) {
        skipWhitespace($tokens, $i);
        $functionName = $tokens[$i]->contents;
        echo 'Function: ' . $functionName . "\n";
    } elseif ($token->type == T_STRING) {
        skipWhitespace($tokens, $i);
        $nextToken = $tokens[$i];
        if ($nextToken->contents == '(') {
            echo 'Call: ' . $token->contents . "\n";
        }
    }
}

Bu çok kötü durumda ise, kodu tüm scrampled ve tüm ekran mantığı ve veritabanı çağrıları ile iç içe, sen ben bir PHP projesi ile yapmak zorunda ne yapabilir.

Ben bunu üstlenmeden yaklaşımı çalışırken üç başlar verdi. Bu tepe-tırmanma bir motosiklet üzerinde ve her zaman bir şekilde% 10 almak gibi oldu. Bu yüzden daha iyi çalışma sona erdi başka bir yaklaşım aldı.

  1. Ben, bir kullanıcı olarak oturum
  2. ve ben bulabildiğim her ekranda ve her bir use-case ile çalıştı.
  3. Ben, statik dosyalara html kurtardı
  4. ve prosedürel çalışma ve açık iş kurallarına notlar aldı.

Ben 3 katı gün yaptım, ve sonra benim notlar aldı ve paydaşları ile uzun bir konuşma vardı.

Bazı ilk adımlar üzerinde anlaşmaya aldıktan sonra, ben iyi tutarlı bir tasarıma ve soyutlamayı kullanarak, düzgün tüm html UI reimplemented. Haddeleme aldıktan sonra, ben bir çift ekranlar bir gün yapabilirim.

Sonra geri paydaşlara sonuç aldı ve kullanım durumları bir grup ile koştu. Iyileştirilmesi için umut aklı başında-eski-app sadece kurtarma, orada değildi gibi onlar zaten tüm ilk uygulaması (sürpriz) gibi değildi ve şimdi baktım çünkü (paydaşlar, adım 1 ve 2 derece memnun.

Yani zor iş sonu olduğu ortaya çıktı (ve aynı zamanda paydaşlar için algılanan proje risk sonu.)

Bu ilk ekip böylece işin nispeten az içerik aslında orada olduğunu kendi misbegotten spagetti bağladı kazanılmış vardı, bu yüzden herkes şüpheli daha az kapsamı vardı çoğaltarak çıktı.

Ama önemli karar özgün kod, içerik ve yapısı, hem unrefactorable idi ve düzgün tasarlanmış yeni bir çerçeve ile tamamen dış görünümünden çalışmak için gerekli.

Eğer düşünebilirsiniz tek şey (muhtemelen otomatik UI testleri ile) tüm uygulama egzersiz tam olarak mümkün olduğunca daha sonra, bir geliştirme ortamında PHP "xdebug" uzantısı yüklemek tüm fonksiyon çağrıları izlemek için ayarlamak, ve etmektir. Daha sonra uygulama tarafından kullanılan tüm dosyalar / fonksiyonları bulmak için xdebug izleme dosyaları ayrıştırmak / analiz etmek mümkün olacak.

Biraz daha az önemsiz olmayan benim için hiç xdebug deneyime sahip olanlar için daha olacağını bu yüzden bu bu yılın başlarında ben miras kendi PHP kabus analiz için planımın bir parçası oldu, ben önce xdebug deneyimi vardı. Ama bunun yerine, ben aslında sadece boşaltılan, bir tamamlayıcı yarı zamanlı bir konser oldu ve sadece çok stresli oldu; Ben ancak kendimi tam zamanlı bir kişi ile değiştirilir aldın.

Bu konuya diğer millet büyük tavsiye var. Ben de bu durumda oldum. Muhtemelen kendi kariyerinde bir anda herkesin bir kasırga isabet gibi görünen bir projeye yürüdü.

Ben eklemek istiyorum Bir öneri diğer millet tarafından açıklanan temizleme herhangi yapmadan önce, yönetim buy-in almak gerekir olmasıdır.

  • Bu konuya önerileri dayalı bir plan yapın.
  • Eğer bir gelişme yaratmak & gerekir herhangi bir yeni donanım veya yazılım açıklamak test ortamı ve fiyat bu çıkışı.
  • Eğer geliştirme kurmak ve kullanmak için eğitilmiş olması gerekir ve hangi yeni beceriler anlamaya test ortamı. Zaman ve bu becerileri elde etmek için gerekli giderleri tahmin. Örneğin kitaplar veya ücretli eğitim.
  • Eğer temizlik yapmak için bir çalışma takvimi tahmin. Kaynak denetimi altında kodu almak için ne kadar? Nasıl veritabanı anlamak için uzun? Nasıl PHP ve JavaScript kodu anlamak için uzun?
  • Onun alt satıra fayda bakımından yönetici ve ifade amaç için bu sunuyoruz. Örneğin Her şey değişiklikleri yaparak veya yeni işlevler daha hızlı olacak yayıyoruz, temizlenir sonra, ayıklama hataları daha öngörülebilir olacak ve yeni personel yokuş yukarıya daha kolay olacaktır.

Canlı bir site çünkü Doğal, mevcut karmaşa ile çalışmaya devam etmek gerekir. Canlı siteyi yönetme önceliği alır, böylece temizleme çalışması bir arka plan görevi olmalıdır. İşte bu daha da uzun sürebilir demektir. Bir arka plan görevi olarak orta ölçekli bir proje temizlik benim deneyimleri genellikle oniki ay altı almış. Site, bu süre içinde gelişmeye devam edeceğinden, tamamlanan temizleme bazı görevler revize veya yeniden yapılması gerekebilir. Yöneticiniz de tüm bu anlar emin olun.

Yönetici bu pisliği temizlemek için planı balks, ya da temizlik değer vermezse, tüm diğer geliştiriciler bu firma yapmamışlar neden, en azından o zaman anlarsınız!

Ben devam etmek konusunda birkaç belirli öneri var:

I would:

  1. Otur ve derin bir nefes alın;
  2. Çalışmak istediğiniz yere gerçekten karar;
  3. Evet varsayarsak, o zaman ben bir anda üzerinde çalışmak ve çalışmak için bir karışıklık almak, kölelerim rulo olacaktır.

Ben bir seferde sadece tek bir görev için kendimizi sınırlamak değil biliyorum; Ancak, içeri günlük görevler üzerinde çalışırken bir anda bir karışıklık çözme işinizi sınırlayabilirsiniz

Siz sayfanın altına yakın bu koyarak tüm dahil / gerekli dosyaların bir listesini görebilirsiniz:

<?php var_dump(get_included_files()); ?>

Hayret, hiç kimse bile mentioned Bu, bildiğim kadarıyla gördüğünüz gibi, ama başka bir alternatif var: give up on the code and just use the functionality of the site itself yeni bir özellik seti şartname (yani, ilk bir yaratmak için temel olarak Şimdiye kadar bu proje) ve daha sonra bu CakePHP ya da Drupal gibi kurulmuş bir çerçeve ile bu özelliklere dayalı siteyi, yeniden inşa etmek.

Evet, kötü kelime re-write yalakalık isteyenler var ... ama are olgu bu aslında gitmek için daha iyi bir yolu olduğu zaman, ve bazı nedenlerden ima:

  • Kendinizi PHP gelişimi için oldukça yeni konum
  • muhtemelen bir şeyle başlayarak daha iyi clean yerine saf bok kod size miras kaldı olacak
  • son tahlilde, insanların çoğu (kullanıcılar) kaynak kodu ile ilgili bir umurumda değil, ve onlara o "eser" gibi görünüyor, onlar size, onlara birşeyler anlatmaya çalışıyorum eğer delisin gibi görünebilir korkunç yanlış olduğunu
  • Eğer birisi aslında kendi adını ona bağlı olması yeterli umursamaz gibi görünen bir birleşik çerçevesinde kaynak revizyon kontrolü ve veritabanı tasarımı uygulamalarını almak eğer daha eğlenceli ve uzun bir hayat yaşayacak

Tabii, bu pozisyonda herkes önce bu gibi bir kod ile çalışmak zorunda kaldı, ama bazen yeter ve spagetti hurda ve taze bir plaka ile başlamak daha iyi oldu. Eğer bir yeniden-yazma yapmak için kötü neden Joel'ın makaleyi okursanız, o burada sizin için geçerli değinir koşullar neredeyse hiçbiri göreceksiniz.

Ben yapacağını ilk şey, bazı tür bir sanal makine kullanarak bir test ortamı kurmak. VirtualBox veya Virtual PC ince seçenekler olacaktır. Bu şekilde üretim ortamını kırma korkusu olmadan şeyler değişiyor başlayabilirsiniz. Olursa olsun (veritabanı ve web sunucusu ve her şeyi ile) olacak gibi görünüyor bu iş ne kadar, sonunda buna değer olacaktır. Büyük avantajlarından biri Eğer yardıma ihtiyacınız bulursanız, VM kopyalamak ve başkasına vermek olduğunu.

Kesinlikle bir geliştirme ortamı gerekir. Eğer windows kutusunu site çalıştıran uğraşmak istemiyorsanız, bazı Linux dağıtımı bir VMWare görüntü kapmak olabilir.

Elbette ilk adım sürüm denetimi altına koymak olacaktır. Bu şekilde en azından geri özgün çalışma sürümü gidebilirsiniz. İkinci olarak, örneğin, bazı günlük dosyası, aslında dahil ediliyor hangi dosyaları bulabilirsiniz bu şekilde (böylece umarım dahil ediliyor dosyanın adını yazmak, vb işlevleri gerektiren dahil üzerine yazmak için iyi bir fikir olabilir index2.php bir sürü iktidar, index3.php, vb

Gerekirse, öğrenmek için bazı sınıfları kullanılmış ve bazı değildir iseniz, get_defined_vars ile conjuction get_declared_classes kullanımı ve türleri örneği edildiği görmek için getType yapabilirsiniz.

Konuya 4 ve 5 için olduğu gibi, bu muhtemelen biraz daha zor çözmek için vardır, ama bu umarım başlamak gerekir.

Ben tüm noktaları 5 Ben devralınan bazı klasik ASP projeler üzerinde vurmak düşünüyorum, ve de bir PHP biri ...

ASAP kaynak denetiminde almak ve bir test ortamında vb için VMware, VirtualBox, kullanmak ben tamamen katılıyorum diğerleri ile.

Prosedürler onlara ekstra mantığı (sadece düz ekleme, güncelleme, silme) varsa, özellikle veritabanı çok sürüm almak için emin olun. DB sürüm daha fazla dikkat sonra php sayfaları alır. Siz komut sql ve kaynak denetimi içine bu komut koymak için tüm nesneleri oluşturmak gerekiyor. Vb db yapısı, prosedürleri, değiştirmek gibi o zaman da bu değişikliklerin bir geçmişi var bu yüzden komut güncellemeniz gerekir.

Veritabanı tarafında ben bakarak öneririm ne kullanarak hangi sergiyi gelince ApexSQL Clean. Ben birkaç yüz ASP dosyaları, 200 + tablolar ve yaklaşık 400 saklanan prosedürleri ile bir proje üzerinde bu kullanılır. Ben kullanımda değildi ve saklanan prosedürleri yaklaşık 25% 20 ya da öylesine tablolar tespit etmek mümkün oldu. ApexSQL Clean ile tablolar, görünümler ve saklı procs birlikte bağımlılık çek içine php tüm dosyaları ekleyebilirsiniz. 30 günlük deneme kapmak ve check it out, bu size çok zaman kazandıracak.

Hangi dosyaları web sitesi için kullanımı vardı, ben bir önceki ay için web sunucusu günlükleri vardı ve ben emin değildi şey için onlara karşı arama koştu. Ben de Aistina erişildiğinde oturum dosyalarını değiştirerek önerdi ne bir varyasyonu gibi yapmak. Belki de dosya adı ve erişim sayısı ve o dosya yüklenen her zaman için bu sayısını artırır kurulum veritabanındaki bir tabloya gitmek var. Sonra bir süre sonra sayıları üzerinden bakmak ve gidip ne belirleyebilirsiniz.

İşte bazı fikirler:

  • PHP ve Apache Windows üzerinde de sadece iyi çalışır. Belki de bütün bunlardan sonra bir all-Windows kurulumunu yapabilirim?
  • "Include" için grep 'ing (veya bazı Windows alternatif) deneyin ve "ihtiyaç" Tüm PHP dosyaları. Sonra bulunan tüm içerdiği dosyaların bir listesini yapmak. Klasördeki dosyaları listesiyle karşılaştırın. En azından BAZI unreferenced dosyaları kurtulmak gerekir.
  • Alternatif olarak, tüm dosya adlarının bir listesini yapmak ve onlar için tüm dosyaları aramak. Böyle bir dependancy grafiği gibi bir şey yapabiliriz.

Bu gerçekten bir felaket. Ama bu şey üzerinde Tentacles bazı kesmek için nerede yaratıcı başlar:

  1. Sürüm kontrolü alın. Ben Git öneririz.
  2. Bir yerel kalkınma sunucusu kurun. Bu yeni konum beri başlamak için bir WAMP LAMBASI veya MAMP paketi bulabilirsiniz.
  3. Giriş noktalarını (index.php, vb) bulabilirsiniz. Bunların ne olduğunu görmek için sunucu erişim günlüklerini denetleyin.
  4. Bazı düzenli ifade kara büyü üzerinde kollarınızı sıvayın ve bir / tüm dosyaları ağaç ihtiyaç içerir dökümü. Ama herhangi sakının ($ dosya) dinamik içerir içerir. Eğer bunlardan herhangi biri varsa onun etrafında kod size ipuçları vermeli rağmen, muhtemelen dahil olur ne öğrenmek için $ dosya üzerinde bazı günlük yapmak gerekir. Biraz şans ile tüm kullanılmayan dosyaları bu şekilde itlaf edebilirsiniz.
  5. Başka kod temeli başvurulan ediliyor işlevleri ve yöntemleri kontrol etmek için daha fazla regex kara büyü kullanın. Bu size yardımcı olabilecek bir IDE var olabilir. (Bana bir kez C + + proje refactor yardımcı olmak için kullanılır, bu yüzden burada yardımcı olabilir.) NetBeans deneyin
  6. Başkası cevap olarak, "gerekirse bazı sınıfları kullanılması halinde, öğrenmek ve bazı get_defined_vars birlikte get_declared_classes kullanımı ve türleri örneği edildiği görmek için getType olabilir, değil." Ayrıca, sadece kod tabanı tüm yeni ifadeleri bulmak için bazı kod yazabilirsiniz.
  7. Ve böylece ... ne kadar aşağı eritmek bu canavarı can düşünüyorum. Ve nerede olabilir kodunu yeniden denemelisiniz.

Bu nasıl başa hakkında yararlı mesajların sürü.

Herkes ne söyledi tekrarlamak çalışıyorum olmadan:

  1. Eşya çevre çalışan bir kopyasını alın. Bu bir sanal makine, ya da başka bir gerçek makine olabilir. Ama bunun üzerinde Tanrı olması gerekir. Eşya veritabanı başka bir kutusunda ise, siz de bir dev sürümü gerekir.
  2. Sürüm kontrolü içine bütün atın. Başka kutusunda. Bir haftada en az yedeklenen olduğunu.
  3. Eğer versiyon kontrol uygulamasında eserlerini dallanma nasıl bildiğinizden emin olun. Muhtemelen ihtiyacınız olacak.
  4. Eşya sunucu kilitli olsun. Sen sürüm kontrolden gelmiyor kendisine yapılan herhangi bir değişiklik istemiyoruz.
  5. Eşya sunucuya sürüm denetimi kodu bırakmadan için talimatlar oluşturun. Serbestleştirilebilen değişimin küçük birimi bütün kod tabanı olmalıdır.

Sonraki adımlar kullanıcıları ona bağlı nasıl bağlıdır. Sebebi ne olursa olsun çok değiştirilebilir olamaz eğer, ilerici bir yaklaşım gerekir. Geliştirme ve bakım hala gerçekleşmesi gerekiyorsa, o zaman bu muhtemelen tek seçenektir. Uzakta yeniden yazma çabaları gibi mods ayırmak için bu dallanma özelliğini kullanmayı unutmayın.

Yapı içine anlamda koymak için, orada temelde ne yanında yeni bir yapı oluşturmak zorunda. Yeni DB işleyici genellikle başlamak için iyi bir yerdir, bir jenerik gelen dahil her sayfa yüklenecektir dosyası içerir. Burada amaç en az bir ek dosyalar yüklemek için her sayfayı söylemeden sonra genişletilebilir yapısı dahil yaratmaktır.

Şimdi dosyaları dahil yeni işlevsellik üzerinde hareket başlatmak gerekir. Böyle bir çoklu dosya editörü, veya ekran + vi (veya emacs) gibi aynı anda açık birkaç dosya, için bir yol gerekir. Çeşitli yerlerde tekrarlanır yarar fonksiyonları ve kod blokları ile başlayın. Kerede çok sabitleme içine dalıp almak için çalışın. Bazı sorunlar türleri diğer sorunlar sabit almak gibi sadece yerlere taşımak zorunda olacak. Daha sonra onlara geri geleceğiz.

Bir üçüncü taraf çerçeve eklemenize gerek hissetmiyorum. Böyle bir şey ekleme hızla tam bir yeniden-yazma yol açar. Bu noktada, bu sadece onun yapısını içerir evcilleştirme daha bir sürü daha çalışma olacak. Yani ilk dışarı sıralamak.

Işlevselliğini üzerinde hareket olarak, dosyalar sizin yeni bir dosya eklemek kullanmanız olması gerekir. Sizin için bunu ilk birkaç dosyaları bir süre çatışmaları takip edilecektir. Bu cesaret kırıcı ve anlamsız hissedeceksiniz ancak bu muhtemelen zor kısmıdır. Birkaç dosyalarını sonra, daha kolay olacaktır. Sadece bir ile içeren bir düzine değiştirerek dosyaları dahil yeni yarım düzine sayfaları geçirebilirsiniz zamanlar olacaktır. O eylem flip tarafında sadece silebilirsiniz dosyalar orada olacak olmasıdır.

Ona sopa varsa, sonunda dosyaları dahil tüm yazdım olanlar ve tamamında olacak düzenini içerir noktaya alacak. Bu noktada, bir üçüncü taraf çerçevesinde koyarak gibi daha invaziv değişiklikleri yapmak için önemli ölçüde daha kolay olacaktır.

  1. Get it under revision control.

  2. Decide on naming conventions and file/directory structure.

  3. Make sure you have decent tools/IDE.

  4. Set up a separate development/testing environment if you haven't already

SONRA ...

  1. Ne yazık ki, tüm bu 1, 2, 3 dosyaları elemek ve olanları kullanımda olduğunu belirlemek gerekir, ve bertaraf edilebilir. Başka hiçbir yolu bir kaba kuvvet yanı sıra dosya dosya yoluyla eziyet.

  2. Ben yerinde bir RCS olsa bile, ben hala sık sık. Söylüyorlar, ben gizli bir yere kullanılmayan komut ne düşündüğünü kabrini taşıyın ve sonra RCS bu konumunu görmezden var. Geri repo gitmeden yerel bir göz atmanız için muktedir güzel.

  3. Separate HTML and PHP to the greatest extent possible. Ben bu herhelde! Bu güzel, her dosyaya yapılırsa. Sadece çok uzun PHP ve HTML ayrı parçalar var gibi. Tabii ki, HTML orada burada ekolar ile biberli, ama tüm testler, anahtarları, HTML blok dışına her şeyi ve PHP bloğa sahip deneyin olacaktır. Bu işler dizildi almak için geldiğinde tek başına bu HUGE olabilir.

  4. Ben senin durumunda olduğunu varsayıyorum - - kodu öncelikle usul ise bazı sınıflara herhangi bir ciddi üstlenmeden veya üstlenmeden yapmadan önce, ilk olarak temizlemek yapmak için muhtemelen en iyisidir.

  5. Eğer mantıklı kombine edilebilir dosya / komut bulmak gibi, bunu yapmak. (Ben projeler gördüm - dosya hayatta toplam sayısı yaklaşık 1/4 ile başladık ne olduğunu - muhtemelen sizinki aksine).

Bu kadar bir kere gittim, daha sonra sınıflara uygun üstlenmeden veya üstlenmeden başlayabilirsiniz.

Bol şans!

Ben nasıl hissettiğini biliyorum. Ben böyle bir projenin gelişimini miras. Bu bir yıl boyunca benimle kaldı ve dürüst olmak gerekirse beni bugün olduğum geliştirici yaptı. Boka diz çalışmak yerine, kişisel gelişimi için iyi bir fırsat var.

İşte çoğu için bana yardımcı şeyler şunlardır:

  • Sistemin önemli içerik olduğunu belirlemek. İşinizin en çok onları yapılacaktır çünkü bunları bulabilirsiniz
  • (veritabanı dahil) projesinin yerel bir sürümünü yaratmak ve versiyon kontrolü altına koydum
  • küçük değişiklikler sadece dosya küçük bir miktarına iş
  • Eğer iyice test ettik kadar üretim versiyonu içinde bir şey koymak, ve sonra tekrar eski sürümü koymak için hazır olmayın
  • Sistemin kullanıcılar (oturumları, çerezleri) nasıl işleneceğini öğrenmek. Süper bir kullanıcı oluşturun ve canlı sistemdeki kodu test etmek gerekir o zaman böyle bir blok koydu:

    if($_POST['your_registered_user_name']{
       //Your live code being tested, which will be visible only to you when you are logged in
    }
    

    diğer kullanıcıların alışkanlık değişiklikleri hissetmek mümkün. Ben benim yerel makinede sistem durumunu değiştirmek mümkün iken bu tekniği bana çok yardımcı oldu

  • test yazmak ve yazarken tüm kodu için sıkı mühendislik yönergeleri izleyin

  1. Şimdi kod yedeğini.

  2. Sürüm kontrolü.

  3. Bir test site oluşturun. Site Apache altında çalışıyor? Hatta kendi bilgisayarınızda Apache + PHP + MySQL yüklemek ve testleri için kullanabilirsiniz.

  4. Güvenlik sorunları ile uğraşmak. Site sql enjeksiyon karşı korumalıdır, ve e-posta enjeksiyon emin olun. En azından, veritabanı aramalar için bir arama yapabilirsiniz ve daha iyi kodu anlamak kez mysql_real_escape_string() (iyi, bir MySQL veritabanı kullanarak eğer) ... daha sonra gerçek bir düzeltme yapabileceği için arama eklemek . E-posta enjeksiyon için ... spam kodunu filtreleyen bir filtre işlevi yazmak, ve bir e-posta kullanılan tüm form alanları, filtre emin olun. (Evet daha spagetti kod ekler, ancak önemli ölçüde kod refactor hazırsınız önce bir süre alacak.)

  5. Bundan sonra, artımlı yükseltme öneririz. Sen yenisin ve kod higgleypiggley karışıklık olduğunu, bu yüzden ... tüm anlamak için bir süre geçmesi ve tam etki anlamak için gidiyor. Dolayısıyla, sadece ilave gerekenleri ekleyerek, sabit gerekenleri tespit, biraz iş hakkında gitmek. Bunu yapıyoruz gibi, sistem araya nasıl öğreniyoruz. Eğer kodu (örgütlü ya da değil) biraz daha iyi organize olduğunu biliyorum sonra, sistemin önemli bir üstlenmeden / yeniden yazılmasında planlama başlayabilirsiniz. Her zaman eli kulağında yeni bir kilometre taşı var bu yüzden umarım bileşeni tarafından o bileşeni yapabilirsiniz.

Sitede ayrıntılı istatistikler almak ve giriş ve çıkış noktaları nerede olduğunu bulmaya çalışın. Dosyaları üst kapalı vurulduktan ne olduğunu bulmak için bir iyi yolu (ve daha sonra çekiliyor içeren görmek için bu dosyalara bakmak).

Harper Shelby dediğini yapmak ...

Ama aynı zamanda bu kadar temiz yönetim desteği alamadım eğer, bu bir nedenle bu gibi olabilir gerçeğini kabul isteyebilirsiniz olduğunu eklemek istiyorum. Sadece ... sayin. ;-)

I just Bu kendimi gitti.

My number one tip is to not try and change everything on day one. You need friends if you really want to be able to fix this thing. You need your colleagues respect before you suggest how to change everything they've been working on for months (years?).

İlk olarak, kısa sürede sürüm kontrolü altında kodu olsun. En azından sadece dosyaları sıkıştırma ve tarih ile zip dosyası adlandırma anlamına gelse bile, günlük yedekleme yapmaya başlamak, sizin için kolay olacak değilse. Kimse sürüm kontrolü hakkında orada biliyorsa, CVS veya SVN Pragmatik Programcı kitabı satın, ve kendiniz ayarlayın. Kitaplar bir günde okunabilir, ve hızlı bir şekilde kuruldu ve çalışıyor olabilir. Başka kimse sürüm kontrolü kullanmak istiyorsa birileri sizin repo bir kopyası ile günü kurtarmak bir dosyayı kaybettiğinde, sonra ... kendiniz kullanabilirsiniz. Er ya da geç, diğerleri sürüm kontrolü bilgeliği göreceksiniz.

İkincisi, sert muhtemelen gibi koduna dalış. Onu yaşamak ve bir ay için nefes. Onların kod öğrenmek için gidiyoruz vardır insanlara göstermek.

Eğer kod geçmesi Üçüncü olarak, bol bol not almak. Kodu hakkında sizi rahatsız her şeyi yazın. Sadece kağıt üzerinde düşüncelerinizi almak. Sen Ay Bir sonra, daha sonra düzenleyebilirsiniz.

Dördüncü, (örneğin xdebug gibi) bir kod profil yüklemek. Bu ve dosyaları ne anlatacağım fonksiyonları her sayfada denir ediliyor ve ne kadar uzun kod her parça çalıştırmak için alır. Sen senin konularını içerir anlamaya kullanabilir, ve kod yavaş bit bulabilirsiniz. İlk o optimize.

Zor iş senin ay sonra, kod eleyerek, notlar alarak, uygun bir belgeye notlarınızı açın. Farklı bölümlerde başka ne sizi rahatsız etmek, mimarisi, güvenlikten, önbelleğe alma aralığı olabilir. Yaptığınız her eleştiri için, daha iyi bir çözüm, ve bunu düzeltmek için ne kadar süre alacağını bir tahmin sunuyor. Tüm rakip javascript çerçeveler vb kurtulmak bu nerede

Revise this document as much as possible. I cannot stress that enough.

Kitlenizin sizin kişisel tercihleri ​​değil, şirketin iyiliği için yapıyoruz söyleyebilirim emin olun.

Present it to your boss, in person. Set-up a time to discuss it.

Onlar yazılı olan için ateş olabilir. Eğer onlar geliştirmek istemiyorum, ve kariyer durgun olacak, çünkü, onlar olmadan daha iyiyiz.

Onlar tüm önerileri uygulamak isteyebilirsiniz. Bu olası değil, ama mümkün. (Önerileriniz başarısız sürece) o zaman mutlu olurdum.

Büyük olasılıkla onlar önerileri birkaç uygulamak isteyeceksiniz ve o yoktan iyidir. En azından, bu kaygılarını hafifletmek yardımcı olacağız.

Test, kurulum (Windows ve Linux üzerinde desteklenir) Apache başka bir "sanal konak" gibi. Sanal Konaklar tek bir sunucu üzerinde birden fazla site çalışmasına izin. Dev.domain.com (günlük gelişim için), staging.domain.com (QA insanlar sadece bir yayınlanmadan önce üzerinde test yapmak için), ve www.domain: En büyük siteler en az 3 sanal konaklar (veya gerçek sunucuları) var. com (üretim sunucusu). Farklı giriş ve sahip veritabanı You should Ayrıca kurulum dev, evreleme ve üretim versiyonları, şifreleri böylece yanlışlıkla onları karıştırmayın.

Alternatif bir çözüm, her geliştirici Linux sunucu üzerinde kendi sanal konak vermek olacaktır, ve onlar samba kullanarak FTP / SCP veya ağ paylaşımına üzerinden çalışabilirsiniz.

İyi şanslar!

Diğer insanların aktif olarak kullanılıyor hangi dosyaları bir ilk geçiş almak, dedi harika şeyler ek olarak, size dev sunucusu (veya hatta bir üretim sunucusuna APC veya eAccelerator gibi bir opcode önbellek yükleyebilirsiniz, bu kırmam bir şey). Sonra, dev sunucu üzerinde web uygulaması etrafında tıklayın (veya kullanıcıların üretim sunucusuna yapalım).

Şimdi önbellek yönetici sayfada önbelleğe dosyaların listesine bakmak. Bir dosya opcode önbellek tarafından önbelleğe varlık olarak yer almıyorsa, o şey tarafından yüklenen değil iyi bir şans var.

Bu bütün bir çözüm değil, ancak her dizin 10 index.php dosyalarını (örneğin index.php, index2.php, vb) varsa, en azından size app tarafından kullanılıyor hangisinin bileceksiniz.

Evet, Sürüm Kontrolü kesinlikle # 0 adımdır.

Ben de iyi tavsiye ederim Code Search Tool.

Agent Ransack is pretty good (assuming you're on windows) http://www.mythicsoft.com/agentransack/Page.aspx?page=download

Ben kodu arama olmadan kör uçuyor olurdum.