Наследованный кошмар PHP, где запустить? [закрытый]

40
задан skaffman 30 November 2010 в 22:11
поделиться

26 ответов

  1. Перед всем остальным, получите файлы в управлении версиями, как. не продолжаются мимо № 1, пока он не сделан.
  2. Устанавливают тестовую среду.
  3. Очищают файлы
56
ответ дан Scott Bevington 27 November 2019 в 00:58
поделиться

Сделайте то, что сказал Harper Shelby...

, Но, я также добавил бы, что, если Вы не заставляете поддержку управления очищать это, можно хотеть, принимают то, что это может быть похожим на это по причине.... просто высказывание.;-)

0
ответ дан John MacIntyre 27 November 2019 в 00:58
поделиться

В дополнение к большому материалу другие люди сказали, для получения первичной обработки в том, какие файлы активно используются, можно установить кэш кода операции как APC или eaccelerator на dev сервере (или даже рабочий сервер, это ничего не повредит). Затем нажмите вокруг веб-приложения на свой dev сервер (или позвольте пользователям сделать это на Вашем рабочем сервере).

Теперь смотрят на список кэшируемых файлов на Вашей администраторской странице кэша. Если файл не перечислен как кэшируемый Вашим кэшем кода операции, существует хороший шанс, он не загружается ничем.

Это не целое решение, но если каждый каталог будет иметь 10 index.php файлов (например, index.php, index2.php, и т.д.), то по крайней мере, Вы будете знать, какой используется Вашим приложением.

0
ответ дан bobbyh 27 November 2019 в 00:58
поделиться

Да, Управление версиями является определенно шагом № 0.

, который я также рекомендовал бы пользе Инструмент Поиска кода .

Агент Роется , довольно хорошо (предположение, что Вы находитесь на окнах) http://www.mythicsoft.com/agentransack/Page.aspx?page=download

, я полетел бы слепой без поиска кода.

1
ответ дан 27 November 2019 в 00:58
поделиться

Попытайтесь получить подробную статистику на сайте и узнать, где точки входа и выхода. Достойный способ узнать, какие файлы точно изображаются вершина (и затем изучают те файлы для наблюдения, который включает, вытягивают).

0
ответ дан Valien 27 November 2019 в 00:58
поделиться
  1. Получают его при управлении версиями.

  2. Выбирают соглашения о присвоении имен и файл/структуру каталогов.

  3. Удостоверяются, что у Вас есть достойные инструменты/IDE.

  4. Настроенный отдельная разработка/тестовая среда, если Вы уже не имеете

ТОГДА...

  1. , К сожалению, необходимо будет отсеять через все них 1, 2, 3 файла и определить, которые используются, и от которого можно избавиться. Никакой другой путь помимо грубой силы не стачивается через, файл файлом.

  2. Даже при том, что я имею в распоряжении RCS, я все еще часто перемещаю то, что я думаю, являются неиспользованными сценариями к скрытому местоположению, говорят .mausoleum и затем имеют RCS, игнорируют то местоположение. Хороший, чтобы быть в состоянии посмотреть локально, не возвращаясь к repo.

  3. Отдельный HTML и PHP до самой большой степени, возможной . Я не могу подчеркнуть это достаточно! Если это сделано в каждом файле, прекрасном. Настолько долго, поскольку у Вас есть отдельные блоки PHP и HTML. Конечно, HTML будет наперчен echos тут и там, но попытка иметь все тесты, переключатели, все остальное переместилось из блока HTML и в блок PHP. Это одно может быть ОГРОМНО когда дело доходит до получения вещей, в которых разбираются.

  4. , Если кодекс является, прежде всего, процессуальным - я принимаю в Вашем случае, который это - вероятно, лучше сделать некоторую уборку сначала, прежде, чем сделать любой серьезный рефакторинг или рефакторинг в классы.

  5. , Поскольку Вы находите файлы/сценарии, которые могут логически быть объединены, сделайте так. (Я видел проекты - вероятно, мало чем отличающийся от Вашего - где общее количество выживающих файлов о 1/4 того, что мы запустили с).

, Как только Вы пошли настолько далеко, тогда можно начать надлежащий рефакторинг или рефакторинг в классы.

шанс Бонны!

2
ответ дан PartialOrder 27 November 2019 в 00:58
поделиться

Я всего прошел это сам.

Моя подсказка номер один не должна пытаться изменить все в день один. Вам нужны друзья, если Вы действительно хотите смочь починить эту вещь. Вам нужно Ваше уважение коллег перед предложением, как изменить все, что они продолжали работать в течение многих месяцев (годы?).

Первый, получите код при управлении версиями как можно скорее. Если это не будет легким для Вас, по крайней мере, начните делать ежедневные резервные копии, даже если это означает просто архивировать файлы и называть zip-файл с датой. Если никто там не знает об управлении версиями, купите книгу Прагматически настроенного Программиста по CVS или SVN, и установите его сами. Книги могут быть прочитаны через день, и можно быть в порядке быстро. Если никто больше не хочет использовать управление версиями, можно использовать его сами... затем, когда кто-то теряет файл, можно спасти положение с копией с repo. Рано или поздно другие будут видеть мудрость, которая является управлением версиями.

114-секундный, погружение в код настолько трудно, как Вы возможно можете. Живой это и вдыхают его в течение месяца. Покажите людям, которые являются там, что Вы собираетесь изучить их код.

В-третьих, поскольку Вы проходите код, делают обильные заметки. Запишите каждую вещь, которая беспокоит Вас о коде. Просто получите свои мысли о бумаге. Можно организовать его позже после Месяца Один.

Четвертый, установите профилировщика кода (такого как xdebug). Это скажет Вам что файлы & функции вызываются на каждой странице, и сколько времени каждая часть кода берет для выполнения. Можно использовать, это для выяснения Вашего включает проблемы, и найдите медленные биты кода. Оптимизируйте их сначала.

После Вашего месяца тяжелой работы, отсеивающей через код и делающей заметки, превращают Ваши примечания в надлежащий документ. Различные разделы могли колебаться от безопасности, к кэшированию, к архитектуре, к тому, что беспокоит Вас. Для каждой критики Вы делаете, предлагаете лучшее решение и оценку на том, сколько времени она взяла бы для фиксации. Это - то, где Вы избавляетесь от всех конкурирующих платформ JavaScript и т.д.

, Пересматривают этот документ как можно больше. я не могу подчеркнуть что достаточно.

Удостоверяются, что Ваша аудитория может сказать, что Вы делаете ее на благо компании, не только Ваших персональных предпочтений.

Существующий это Вашему боссу, лично. Установите время для обсуждения этого.

Они могли уволить Вас за то, что записали это. Если они делают, Вы более обеспечены без них, потому что они не хотят улучшаться, и Ваша карьера застоится.

Они могли бы хотеть реализовать все Ваши рекомендации. Это маловероятно, но это возможно. Затем Вы были бы счастливы (если Ваши рекомендации не перестали работать).

Наиболее вероятный они захотят реализовать несколько Ваших рекомендаций, и это лучше чем ничего. По крайней мере это поможет упростить Ваши проблемы.

Что касается тестирования, установите другой "виртуальный хост" в Apache (поддерживаемый в обоих Windows & Linux). Виртуальные Хосты позволяют Вам выполнить несколько сайтов на единственном сервере. Большинство более крупных сайтов имеет по крайней мере 3 виртуальных хоста (или фактические серверы): dev.domain.com (для ежедневной разработки), staging.domain.com (чтобы люди QA сделали тестирование на непосредственно перед выпуском), и www.domain.com (Ваш рабочий сервер). Необходимо также установить dev, подготовку и производственные версии базы данных, с различными логинами & пароли, таким образом, Вы случайно не путаете их.

альтернативное решение состояло бы в том, чтобы дать каждому разработчику их собственный виртуальный хост на сервере Linux, и они могут работать через FTP/SCP или сетевой ресурс с помощью самбы.

Удачи!

1
ответ дан lo_fye 27 November 2019 в 00:58
поделиться

Это - действительно путаница. Но начните становиться творческими на том, где отрезать некоторые щупальца на этой вещи:

  1. Получают управление версиями. Я рекомендую Мерзавцу.
  2. Настроенный локальный сервер разработки. Найдите, что WAMP, ЛАМПА или пакет MAMP запускают Вас, так как Вы плохо знакомы с этим.
  3. Находят точки входа (index.php, и т.д.). Проверьте свои журналы доступа сервера для наблюдения, каково это.
  4. Закатывают рукава на некоторой черной магии регулярного выражения и разгрузили включать/требовать дерево на всех файлах. Но остерегайтесь любого, включают динамичный ($filename), включает. Если у Вас будет какой-либо из них, то необходимо будет сделать некоторых входящих в систему $filename для обнаружения то, что возможно включено, хотя код вокруг этого должен дать Вам ключ к разгадке. С небольшой удачей можно отобрать все неиспользованные файлы этот путь.
  5. Использование на большее количество regex черной магии проверить функции и методы ссылаются в другом месте в кодовой базе. Может быть IDE, который может помочь Вам с этим. Попробуйте NetBeans (я использовал его, чтобы помочь мне осуществить рефакторинг проект C++ однажды, таким образом, он может помочь здесь.)
  6. , Поскольку кто-то еще ответил, "узнайте, при необходимости, если некоторые классы используются, и некоторые не, можно использовать get_declared_classes в сочетании с get_defined_vars и gettype для наблюдения, какие типы инстанцируют". Вы могли также просто записать некоторый код для нахождения всех новых операторов в кодовой базе.
  7. И так далее... просто думают о том, как можно свести этого монстра на нет. И попытайтесь реорганизовать код, где Вы можете.
2
ответ дан Patrick Hogan 27 November 2019 в 00:58
поделиться

Много полезных сообщений о том, как иметь дело с этим.

, не пытаясь повторить то, что все остальные сказали:

  1. Получают копию выполнения среды напоминания. Это может быть виртуальная машина или другая реальная машина. Но необходимо быть Богом на нем. Если база данных напоминания будет на другом поле, Вам будет нужна dev версия, также.
  2. Бросок все это в управление версиями. На другом поле. Тот, который сохранен, по крайней мере, еженедельно.
  3. Удостоверяются, что Вы знаете как переходящие работы в Вашем приложении управления версиями. Вам, вероятно, будет нужен он.
  4. Заблокировали сервер напоминания вниз. Вы не хотите дальнейших изменений, внесенных в него, которые не выходят из управления версиями.
  5. Создают инструкции для выпуска кода с управления версиями на сервер напоминания. Самая маленькая единица публикуемого изменения должна быть целой кодовой базой.

следующие шаги зависят от того, насколько приложенный к нему пользователи. Если это не может быть изменено на очень по любой причине, Вам будет нужен прогрессивный подход. Если разработка и обслуживание все еще должны произойти, то это - вероятно, Ваша единственная опция. Не забудьте использовать ту переходящую функцию для разделения таких модификаций далеко от усилий перезаписи.

Для помещения смысла в структуру необходимо в основном создать новую структуру вместе с тем, что там. Новый обработчик DB обычно является хорошим местом для запуска, включенный от дженерика включают файл, который должна загрузить каждая страница. Цель здесь состоит в том, чтобы создать минимальное, включают структуру, которая может быть расширена позже, не говоря каждой странице загрузить дополнительные файлы.

Теперь необходимо запустить, движущаяся функциональность к новому включают файлы. Вам будет нужен способ иметь несколько файлов, открытых сразу, таких как многофайловый редактор или screen+vi (или emacs). Запустите со служебных функций и блоков кода, которые повторяются в различных местах. Попытайтесь не быть отвлеченными в фиксацию много сразу. Некоторые типы проблем оказываются перед необходимостью просто перемещать места, поскольку другие проблемы решены. Вы возвратитесь им позже.

не чувствуют, что необходимо добавить стороннюю платформу. Добавление такой вещи быстро приводит к полной перезаписи. На данном этапе это будет намного большим количеством работы, чем просто приручение включать структуру. Поэтому уладьте это сначала.

, Поскольку Вы перемещаете функциональность, у Вас должно будет быть использование файлов, Ваши новые включают файл. Первые несколько файлов Вы делаете это для Вас, будут преследовать конфликты некоторое время. Это будет чувствовать себя приводящим в уныние и бессмысленным, но это - вероятно, самая твердая часть. После нескольких файлов это станет легче. Будут времена, когда можно будет мигрировать, полдюжины страниц к новому включают файлы путем замены дюжины, включает со всего один. Оборот того, что действие состоит в том, что будут файлы, которые можно просто удалить.

, Если Вы упорно продолжаете его, Вы в конечном счете перейдете к сути дела, где все включать файлы - те, Вы записали, и Вы будете через целое, включают расположение. Тем, что точка, будет значительно легче сделать намного более агрессивные изменения, как включение сторонней платформы.

2
ответ дан staticsan 27 November 2019 в 00:58
поделиться

Вот некоторые идеи:

  • PHP и Apache работают просто великолепно в Windows также. Возможно, можно ли сделать установку все-Windows, в конце концов?
  • Попытка grep 'луг (или некоторая альтернатива Windows) для "включает" и "требует" во всех файлах PHP. Тогда составьте список всех включенных найденных файлов. Сравните список с файлами в папке. Необходимо быть в состоянии избавиться от, по крайней мере, НЕКОТОРЫХ не имеющих ссылки файлов.
  • , Кроме того, входят в список всех имен файлов и ищут все файлы их. Вы могли сделать что-то как график зависимости как это.
2
ответ дан Vilx- 27 November 2019 в 00:58
поделиться

Я думаю все 5 из Ваших точек, пораженных в некоторые классические проекты ASP, которые я наследовал, и PHP один также...

я полностью согласен с другими относительно, получают его в управлении исходным кодом как можно скорее и используют VMware, VirtualBox, и т.д. для тестовой среды.

Удостоверяются, что присвоили версию Вашей базе данных также, особенно если процедуры имеют дополнительную логику в них (не, просто прямо вставляют, обновляют, удаляют). Управление версиями DB берет больше внимания тогда php страницы. Необходимо генерировать все объекты к sql сценариям и поместить те сценарии в управление исходным кодом. Тогда, поскольку Вы изменяете структуру дб, процедуры, и т.д. необходимо обновить сценарии, таким образом, у Вас есть история тех изменений также.

Что касается выяснения, что использует то, на что на стороне базы данных я предложил бы смотреть ApexSQL, Чистый . Я использовал это на проекте с несколькими сотнями файлов ASP, 200 + таблицы и приблизительно 400 хранимых процедур. Я смог определить приблизительно 20 таблиц, которые не использовались и приблизительно 25% хранимых процедур. С ApexSQL, Чистым, можно добавить все php файлы в проверку зависимости наряду с таблицами, представления и сохраненный procs. Захватите 30-дневную пробную версию и проверьте ее, она сохранит Вас много времени.

Для того, какие файлы использовались для веб-сайта, я имел журналы веб-сервера в течение предыдущего месяца и запустил поиски против них для чего-либо, на чем я был не уверен. Мне действительно также нравится изменение на том, что Aistina, предложенный при изменении файлов для входа, когда к ним получают доступ. Возможно, имейте его, переходят к таблице в базе данных, которую Вы устанавливаете, который является именем файла и количеством доступа и в течение каждого раза, когда файл загружается, это увеличивает количество. Тогда после промежутка времени можно просмотреть количества и определить то, что может пойти.

2
ответ дан ManiacZX 27 November 2019 в 00:58
поделиться

Первый шаг, конечно, должен был бы подвергнуть его управлению версиями. Таким образом, по крайней мере, можно вернуться к исходной рабочей версии. Во-вторых, это могла бы быть хорошая идея перезаписать включать, потребовать, и т.д. функции к, например, запишите имя файла файла, это включается в некоторый файл журнала, этот способ, которым можно узнать, какие файлы на самом деле включаются (таким образом, надо надеяться, исключающий много index2.php, index3.php, и т.д.

Для обнаружения, при необходимости, если некоторые классы используются и некоторые не, можно использовать get_declared_classes в conjuction с get_defined_vars и gettype для наблюдения, какие типы инстанцируют.

Что касается выпуска 4 и 5, тех, вероятно, немного более трудно решить, но это должно запустить Вас, надо надеяться.

2
ответ дан Aistina 27 November 2019 в 00:58
поделиться

Первая вещь, которую я сделал бы, настраивается тестовая среда с помощью какой-то виртуальной машины. VirtualBox или Виртуальный ПК были бы прекрасным выбором. Тем путем можно начать изменять вещи без страха перед повреждением продуктивной среды. Неважно, сколько работы это кажется, что будет (с базой данных и веб-сервером и всем) в конце, это будет стоить того. Одно из больших преимуществ - Вы, может скопировать VM и дать его кому-то еще, если Вы находите необходимость в помощи.

2
ответ дан Greg Hewgill 27 November 2019 в 00:58
поделиться
  1. Делают резервное копирование кода теперь.

  2. Управление версиями.

  3. Создают испытательную площадку. Сайт работает под Apache? Можно даже установить MySQL Apache + PHP + на собственном компьютере и использование это для тестирования.

  4. Соглашение с проблемами безопасности. Удостоверьтесь, что сайт защищен от внедрения SQL, и от почтовой инжекции. По крайней мере можно сделать поиск вызовов базы данных и добавить вызовы к mysql_real_escape_string() (хорошо, если он использует базу данных MySQL)..., можно сделать реальную фиксацию позже, как только Вы понимаете код лучше. Поскольку почтовая инжекция... пишет функцию фильтра, которая отфильтровывает код спаммера, и удостоверьтесь все поля формы, которые используются в электронном письме, фильтрованы. (Да это добавляет больше кода спагетти, но это собирается требовать времени, прежде чем Вы будете готовы значительно осуществить рефакторинг код.)

  5. После этого, я предлагаю возрастающие обновления. Вы являетесь новыми, и код является путаницей higgleypiggley, таким образом, он собирается требовать времени, чтобы понять все это... и полностью понять домен. Поэтому просто пойдите о своем задании некоторое время, фиксируя что потребности быть зафиксированными, добавив что потребности быть добавленными. Как Вы делаете так, Вы изучаете, как система соединена. Как только Вы знаете, как код организован (или не организован), немного лучше, можно начать планировать основной рефакторинг/перезапись системы. Надо надеяться, можно сделать это компонент компонентом, таким образом, Вы всегда получали новый этап невдалеке.

3
ответ дан Jason Plank 27 November 2019 в 00:58
поделиться

Рассмотрите перезапись и используйте старый сайт как спецификацию

функции Удивительно, никто даже не упомянул это, насколько я вижу, но существует другая альтернатива: разочаровываются в коде и просто используют функциональность самого сайта как спецификация набора новой возможности (т.е. первая когда-либо для этого проекта) и затем восстанавливают сайт, на основе тех функций, с установленной платформой (таких как Symfony, Laravel или Drupal).

Да, существуют те, кто съежился бы при злой перезаписи Word ..., но там случаи, когда это - на самом деле лучший способ пойти, и Вы намекнули на некоторые причины:

  • Вы довольно плохо знакомы с разработкой PHP, сами
  • Вы, вероятно, будете более обеспечены начинающийся с чем-то чистый вместо чистого загаженного кода, который Вы наследовали
  • в окончательном анализе, , большинство пользователей не волнует исходный код , и если похоже, что это "работает" им, они могут посмотреть на Вас как, Вы являетесь сумасшедшими, при попытке сказать им, которые что-то ужасно неправильно
  • , то Вы будете развлекаться еще больше и жить более долгой жизнью, если Вы возьмете методы исходного управления версиями и проектирования баз данных в объединенной платформе, которая похожа на кого-то, на самом деле заботился достаточно для присоединения их имени к нему

Несомненно, все в этом положении должны были работать с кодом как это прежде, но иногда хватит, и лучше фрагментировать спагетти и запуститься с новой пластины.

, Если Вы читаете статья Joel о том, почему это плохо, чтобы сделать перезапись, Вы не заметите почти ни одно из обстоятельств, которые он цитирует, относятся к Вам здесь.

4
ответ дан dreftymac 27 November 2019 в 00:58
поделиться

Вы видите, что список весь включал/требовал файлы путем помещения этой близости конец страницы:

<?php var_dump(get_included_files()); ?>
5
ответ дан lo_fye 27 November 2019 в 00:58
поделиться

Я был бы:

  1. Садятся и глубоко вздыхают;
  2. Решают, действительно ли это, где Вы хотите работать;
  3. Принятие да, тогда я свернул бы свои мотки, выбрать одну путаницу, чтобы продолжить работать за один раз и взяться за работу.

я знаю, что мы не можем ограничить нас всего одной задачей за один раз; однако, можно ограничить работу решением одной путаницы за один раз при работе над ежедневными задачами, которые входят.

5
ответ дан NotMe 27 November 2019 в 00:58
поделиться

У других людей на этом потоке есть большой совет. Я был в этой ситуации также. Вероятно, все когда-то в их карьере, обойденной в проект, который похож на него, были поражены торнадо.

Одно предложение, которое я добавил бы, - то, что, прежде чем Вы сделаете любую очистку, описанную другими людьми, необходимо получить закрытие сделки управления.

  • Делают план на основе предложений на этом потоке.
  • Описывают любые новые аппаратные средства или программное обеспечение, необходимо будет создать разработку & тестовая среда и цена они.
  • Фигура, на каких новых навыках Вы должны быть обучены настроить и использовать разработку & тестовая среда. Оцените время и расходы, требуемые для Вас получить те навыки. Например, книги или заплаченное обучение.
  • Оценка график работ для Вас, чтобы сделать очистку. Сколько времени получить код при управлении исходным кодом? Сколько времени понять базу данных? Сколько времени понять PHP и код JavaScript?
  • Существующий это Вашему менеджеру и фразе цель с точки зрения преимущества для его нижней строки. Например, как только все очищено, вносить изменения или развертывание новой функциональности будут более быстрыми, отлаживание ошибок будет более предсказуемым, и увеличивание нового штата будет легче.

Естественно необходимо продолжить работать с текущей путаницей, потому что это - живой сайт. Управление живым сайтом берет приоритет, таким образом, работа очистки должна быть фоновой задачей. Это означает, что возьмет еще дольше. Мои события, очищающие проект умеренного размера как фоновая задача, обычно занимали шесть - двенадцать месяцев. Так как сайт продолжит развиваться за этот период, некоторые Ваши выполненные задачи очистки, возможно, должны быть пересмотрены или восстановлены. Удостоверьтесь, что Ваш менеджер понимает все это также.

, Если менеджер передумал относительно Вашего плана очистить эту путаницу или не оценивает чистку его, по крайней мере, тогда, Вы будете знать, почему все другие разработчики покинули эту компанию!

у меня есть несколько определенных предложений о том, как продолжить двигаться:

  • В дополнение ко всему другому великому совет, я предложил бы использовать Тест Joel как сравнительный тест. Ваш план относительно очистки должен привести к среде задания, которая выиграла бы хорошо на Тесте Joel.
  • Read мой ответ на" , Что лучшие пути состоят в том, чтобы понять незнакомую базу данных? "
  • Позволяют войти в систему веб-сайт, таким образом, можно проанализировать, какие страницы PHP на самом деле называют. По крайней мере, это говорит Вам, которые из index2.php, index3.php, index4.php, и т.д. являются действительно устаревшими.
  • PHP имеет функцию get_included_files() , который возвращает массив всех файлов, включенных во время текущего запроса. Путем входа этой информации можно узнать, какие файлы PHP используются, даже если они не обнаруживаются в журнале веб-сервера.
  • у Вас действительно должно быть тестирование & среда разработки, которая соответствует Вашему рабочему серверу. Это бесполезно, чтобы протестировать в Windows и развернуться на Linux. Это бесполезно для использования MySQL 5.0 во время разработки и MySQL 4.0 в производстве. Можно, вероятно, сойти с рук аппаратная платформа, которая более скромна (хотя совместимый).
6
ответ дан Community 27 November 2019 в 00:58
поделиться

Одна вещь, которую Вы могли бы рассмотреть, состоит в том, чтобы установить PHP "xdebug" расширение в среде разработки, установить его для трассировки всех вызовов функции, и затем максимально полностью, (возможно посредством автоматизированного тестирования UI) осуществляют целое приложение. Вы тогда будете в состоянии анализировать/анализировать xdebug файлы трассировки для нахождения всех файлов/функций используемыми приложением.

7
ответ дан George Jempty 27 November 2019 в 00:58
поделиться

Если это - очень худший случай, код является всем scrampled, и весь дисплей смешивается с логикой и вызовами базы данных, Вы могли бы сделать то, что я имел отношение к одному проекту PHP.

я дал его три, запускается при попытке подхода рефакторинга. Это было похоже на преодоление подъема на мотоцикле и получение 10% пути каждый раз. Таким образом, я проявил другой подход, который закончил тем, что удался намного лучше.

  1. я вошел в систему в качестве пользователя,
  2. и работал через каждый экран и каждый пример использования, который я мог найти.
  3. я сохранил HTML в статические файлы,
  4. и сделал заметки на процедурной операции и очевидные бизнес-правила.

я сделал это в течение 3 твердых дней, и затем сделал мои заметки и имел долгий разговор с заинтересованными сторонами.

После получения соглашения по некоторым первым шагам, я повторно реализовал весь HTML UI правильно, с помощью хорошего последовательного дизайна и абстракции. После получения прокрутки я мог сделать пару экранов день.

Тогда я забрал результат заинтересованным сторонам и пробежал набор вариантов использования. (Заинтересованные стороны были очень рады шагам 1 и 2, потому что им не нравилась первая реализация вообще так или иначе (удивление), и теперь было похоже, что была надежда на улучшение, не только восстановление нормального старого приложения.

, Который оказался концом тяжелой работы (и также конец воспринятого риска проекта для заинтересованных сторон.)

оказалось, что первая команда стала так занятой в их собственных рожденных вне брака спагетти, что было на самом деле сравнительно мало содержания к работе, так дублирование его имело меньше объема, чем все подозревали.

, Но ключевое решение был то, что исходный код, и содержание и структура, был unrefactorable, и я должен был работать от совершенно внешнего представления с новой платформой, которая была правильно разработана.

10
ответ дан dkretz 27 November 2019 в 00:58
поделиться
  1. Настроенный сервер разработки (поскольку Greg Hewgill упомянул, VirtualBox и Виртуальный ПК, является хорошим выбором для этого).

  2. Помещенный текущие файлы сайта (включая соответствующий веб-сервер и конфигурации PHP!) в управление версиями.

  3. Узнают, какие файлы используются - используют Вашу установку сервера разработки, чтобы протестировать путем удаления всех fooN.php файлов и видеть, работает ли она все еще.

  4. Молятся... партии (хорошо, это не требуется, но это кажется на необходимость в нем).

10
ответ дан Harper Shelby 27 November 2019 в 00:58
поделиться

Большую часть времени можно сказать, используется ли файл при помощи grep.

grep -r "index2.php" *

можно также использовать синтаксический анализатор PHP для помощи Вам очистка. Вот сценарий в качестве примера, который распечатывает функции, которые объявляются и вызовы функции:

#!/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";
        }
    }
}
16
ответ дан grom 27 November 2019 в 00:58
поделиться

Ну, первые вещи сначала. Я был в ситуации, в которой Вы находитесь, и она сосет. Я думаю, что Вы на правильном пути с желанием разбудить среду разработки и выполнение.

Среда разработки

Это будет включать веб-сервер / механизм выполнения сценария / стопка механизма базы данных и IDE, скорее всего.

Для установщик стека LAMP , я рекомендую использовать один из них:

Дополнительные материалы для чтения на стеке LAMP:

сайт OnLamp O'Reilly

Для пользы PHP IDE, я рекомендую использовать один из них:

о сайте Разработчика IBM сравнение нескольких IDE

Для [1 139] Управление исходным кодом , можно использовать Сервер Основы Команды, SVN, или Мерзавец - просто использует что-то, что Вы знаете. Я рекомендовал бы получить все в управлении исходным кодом сначала (для любого экстренного техобслуживания, которое Вы могли бы иметь), но тогда запланируйте выполнение довольно большой перестройки.

Перестройка

Вы упомянули, что даже не знали, какие файлы привыкают, и что они использовали соглашение о присвоении имен файла в качестве псевдоуправления версиями. Вы могли бы хотеть запустить перестройку там, как только у Вас есть среда разработки и выполнение. Существует несколько вещей, которые могут помочь Вам:

  • Ваши клиенты/пользователи приложения
  • Дотошное и организованное примечание, берущее
  • А хорошая платформа журналирования

, Ваши клиенты/пользователи важны , потому что это кажется, что Вы плохо знакомы с проектом, и они собираются знать, как приложение должно вести себя лучше, чем Вы (скорее всего).

Дотошная запись лекций важна , потому что Вы собираетесь быть по существу перезаписью любых требований / дизайн / документация для конечных пользователей с нуля. Необходимо понять внутренности, если Вы собираетесь сделать это. И если Вы соберетесь понять что-нибудь об этой системе, необходимо будет записать его вниз сами (или Вы просмотрели бы предварительно сделанную документацию прямо сейчас вместо того, чтобы читать Переполнение стека);-)

И наконец, платформа журналирования важна , потому что необходимо починить вещи, и Вы не можете починить вещи, которые Вы не знаете, повреждаются. Платформа журналирования дает Вам видимость в части приложения, которые не имеют никакого очевидного UI. Вставка его в различные части приложения и затем рассмотрение журналов дают Вам хорошую идею того, когда код выполняется и в какой порядок.

Вы захотите сфокусироваться на получении (на бумаге), как приложение должно работать, и затем медленно удаление ненужных файлов при попытке не повредить что-либо. Следите за журналами для помощи с отладкой. Удостоверьтесь, что Ваши клиенты не кричат, что что-то повреждается. Удостоверьтесь, что Ваши примечания соглашаются с тем, что становится зарегистрированным и что говорят Ваши клиенты.

Предотвращение этого в будущем

Перепроверка все назад в управление исходным кодом . Надо надеяться, Вы прибудете в более новую, более нормальную, лучшую структуру каталогов этой точкой.

Получают тестовую структуру на месте . Даже если это просто означает получать среду тестирования основной единицы на месте и делать некоторые основные испытания с помощью дыма после того, как каждый развертывается, это лучше чем ничего. Идеально, у Вас должны быть инженер-испытатель или хорошо осведомленный и защищенный клиент, который может провести время, тестируя после того, как каждый развертывается.

Помещенный процесс развертывания на месте , если Вы выращиваете больше чем одного разработчика. Управление изменением в Вашей продуктивной среде должно быть Вашей первоочередной задачей. (Последняя вещь, которую Вы хотели бы сделать, проходят это снова, правильно?) У Вас должен быть четкий и простой процесс для перемещения между границами среды (как Dev-> Тест тогда Тест-> Производство).

17
ответ дан Dan Esparza 27 November 2019 в 00:58
поделиться

Я сделал это. У Вас есть мое сочувствие. Если Ваш паспорт не является текущим, или по некоторой другой причине Вы не можете избежать выполнения этого, вот то, как я приблизился бы к нему:

Нуль Шага должен получить его в управление версиями, неважно, насколько дрянной это. Это даже вид работ, и при повреждении чего-то необходимо быть в состоянии вернуться к рабочему состоянию - или по крайней мере сравнить изменения в нем для выяснения то, что пошло не так, как надо. Действительно часто посещайте, маленькие регистрации, поскольку Вы осуществляете рефакторинг, и у Вас будет меньше кода для отката, когда вещи загадочно пойдут не так, как надо. (Вещи загадочно пойдут не так, как надо.)

После этого, я запустил бы в базе данных. Удостоверьтесь, что все относительно хорошо нормализовано, столбцы ясно называют, и т.д.

Делают код PHP затем. Если бы код является действительно так большой частью пэчворка, я шел бы вперед и соответствовал бы ему к платформе. Изучите CakePHP или Symfony - их способ выхода направляющих разделения проблем делает вопрос, "куда эта часть кода должна пойти?" легкий ответить. Это не маленькая задача, но как только Вы сделали его, Вы, вероятно, лучше, чем на полпути к наличию нормально созданного приложения. Кроме того, встроенные тестовые средства хорошей веб-платформы делают FAR рефакторинга легче - пишут тест для покрытия существующей части функциональности перед изменением его, и Вы будете знать, повредили ли Вы что-нибудь после изменения.

, Как только Вам отсортировали Вашу базу данных и имеете типовой кодекс в моделях и код контроллера в контроллерах, тогда можно волноваться о материале уровня представления как стандартизация на единственной библиотеке JS/AJAX, CSS чистки, и т.д.

Что касается dev среды: необходимо абсолютно настроить локальную dev среду. Существует тюремщик пакеты WAMP там, или Вы могли установить на Linux box/VM (я рекомендую VirtualBox для виртуализации). У Вас должна также быть отдельная среда интеграционного теста, которая подражает живому серверу. Только живой код должен работать на живом сервере.

До инструментов отладки/профилирования, я знаю, что Symfony идет с довольно гладким набором инструментов, включая небольшую панель инструментов JS, которая подходит на Ваших страницах (только в режиме отладки) с входом & профильная информация.

Удача.

30
ответ дан bradheintz 27 November 2019 в 00:58
поделиться

Вам определенно нужна среда разработки. Если Вы не хотите смешивать с выполнением сайта на Вашем поле окон, Вы могли захватить изображение VMware некоторого дистрибутива Linux.

2
ответ дан Kevin Tighe 27 November 2019 в 00:58
поделиться

Я знаю, как Вы чувствуете. Я наследовал разработку такого проекта. Это оставалось со мной в течение года, и быть честным это сделало меня разработчиком, который я сегодня. Нет никакой лучшей возможности для персонального продвижения, чем работа по колено в дерьме.

Вот вещи, которые помогли мне к большинству:

  • определите, которые являются файлами ключей системы. Вы найдете их, потому что большая часть Вашей работы будет сделана в них
  • создайте локальную версию проекта (включая базу данных) и подвергните его управлению версиями
  • работайте только над небольшим количеством файлов с небольшими изменениями
  • ничего не помещайте в производственной версии, пока Вам не протестируют ее полностью, и затем быть готовы отложить старую версию
  • узнайте, как пользователи системы обрабатываются (сессии, cookie). Создайте суперпользователь и затем когда необходимо протестировать код, живой в системе, помещает его в блок как это:

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

    другая пользовательская привычка смочь чувствовать изменения. Эта техника помогла мне много, когда я не мог заменить состояние системы на своей локальной машине

  • тест записи, и следует строгим техническим инструкциям для всего кода, который Вы пишете

2
ответ дан Jason Plank 27 November 2019 в 00:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: