inheritance一个PHP的恶梦,从哪里开始?
我inheritance了一个PHP项目,这是一个噩梦。 以下是要点:
- 所有的原始开发者都离开了
- 该代码没有版本控制
- 所有的开发和testing都是通过重命名和编辑PHP文件在活动服务器上完成的。 有每个文件index.php,index2.php,index3.php等的多个副本,并不清楚哪些文件真正被使用
- 每个文件中包含多个包含其他文件(包括其他文件等)的文件
- 项目中有多个开发人员,每个人都有自己的做事方式。 例如,有一个JavaScript框架大杂烩,一些数据库查询使用SQL,其他一些XML接口和其他人调用数据库中的程序function。
由于所有这些问题,发展速度令人沮丧。 除了发泄我堆叠溢出的挫折,任何build议如何开始这个混乱? 我自己对PHP开发相当陌生,但似乎设置了某种开发环境,以便在不破坏活动服务器的情况下testing更改是第一步。 有关如何从这里开始的任何提示? 什么是testing的典型方法? 在我的桌面上设置本地版本的网站似乎很多工作(服务器是Linux,但这里的桌面是Windows)。 我可以在现场服务器上创build一个子目录进行testing吗? 数据库呢?
其次,是否有某种types的configuration文件可以用来跟踪服务器上的哪些文件实际上正在使用? 我想删除那些实际上没有包含的东西的重命名副本。 更好的是,有没有办法告诉一个文件的哪个部分没有被执行? 有很多复制function和垃圾,我怀疑还没有被使用。 同样,对于包括,在理清乱七八糟的任何提示?
那么,我会停止在这里发泄,把自己摆在这里的每个人的怜悯。 🙂
- 在一切之前,按照原样获取版本控制中的文件。 不要过去#1,直到完成。
- build立testing环境。
- 清理文件
我已经做到了 你有我的同情 如果你的护照不是最新的或者其他原因,你不能逃避这个,下面是我的方法:
第零步是把它进入版本控制,不pipe它有多糟糕。 如果它甚至有些作品,而且你破坏了一些东西,你就需要能够回到工作状态,或者至less比较一下你的改变,找出错误的原因。 在重构过程中频繁进行小型签入,而当事情出现问题时,代码会减less。 (事情会神秘地出错。)
之后,我将开始在数据库。 确保一切都相对正常化,列明确命名等。
接下来执行PHP代码。 如果代码真的是拼凑的东西,我会继续,并将其适应框架。 看看CakePHP或Symfony – 他们的Rails-ish分离问题的方式使问题“这段代码应该去哪里? 容易回答。 这不是一个小任务,但是一旦你完成了这个任务,你可能还不如完成一个合理构build的应用程序。 而且,一个好的web框架的内置testing工具使得FAR更容易重构 – 在你修改之前编写一个testing来覆盖现有的一个function,你会知道你在修改之后是否破坏了任何东西。
一旦你的数据库被sorting了,模型中的模型代码以及控制器中的控制器代码,你就可以担心performance层的东西了,比如标准化一个JS / AJAX库,清理CSS等等。
至于开发环境:你绝对应该build立一个本地开发环境。 那里有一个完整的WAMP软件包,或者你可以安装到一个Linux机箱/虚拟机(我build议VirtualBox进行虚拟化)。 您还应该有一个模拟实时服务器的单独集成testing环境。 活的服务器上只能运行实时代码。
就debugging/分析工具而言,我知道Symfony带有一套非常漂亮的工具,包括一个JS工具栏,只要在你的页面上出现(只有在debugging模式下),才能logging和分析信息。
祝你好运。
那么,首先要做的事情。 我一直处于你所处的状况,而且很糟糕。 我想你正想走上正轨,希望开发环境正常运行。
开发环境
这将包括Web服务器/脚本引擎/数据库引擎堆栈和最有可能的IDE。
对于LAMP堆栈安装程序 ,我build议使用下列之一:
- http://www.apachefriends.org/en/xampp-windows.html
- http://www.easyphp.org/
- http://www.nucleex.com/nucserv/
进一步阅读LAMP堆栈:
O'Reilly的OnLamp网站
对于一个好的PHP IDE ,我推荐使用下面的一个:
- Zend Studio
- ActiveState Komodo
- Jetbrains PhpStorm
在IBM的开发人员网站上比较几个IDE的文章
对于源代码pipe理 ,您可以使用Team Foundation Server,SVN或Git – 只需使用您所知道的内容即可。 我build议先让源代码控制(对于任何可能的紧急维护),然后计划做一个相当大的修改。
大修
你提到你甚至不知道哪些文件正在被使用,而且他们使用文件命名约定作为伪版本控制。 一旦开发环境启动并运行,您可能需要在那里开始大修。 有几件事可以帮助你:
- 您的应用程序客户/用户
- 一丝不苟,组织笔记
- 一个很好的日志框架
您的客户/用户是非常重要的 ,因为这听起来像是您对这个项目的新手,他们会知道应用程序的行为应该如何(最可能)。
细致的笔记非常重要 ,因为您将基本上从头开始重写任何需求/devise/最终用户文档。 如果你打算这么做的话,你需要了解内部的东西。 如果你要了解这个系统的任何内容,你需要自己写下来(或者你现在正在阅读预制文档,而不是阅读Stack Overflow);-)
最后, 日志框架非常重要,因为您需要修复一些事情,而且您不能修复您不知道的事情。 日志框架使您可以查看应用程序中没有任何明显UI的部分。 将其插入到应用程序的各个部分,然后查看日志,可以了解代码执行的时间以及顺序。
您需要专注于捕获(在纸上)应用程序应该如何工作,然后慢慢删除不必要的文件,同时不要破坏任何东西。 留意日志以帮助进行debugging。 确保你的客户不会尖叫有什么东西坏了。 确保您的笔记与所logging的内容以及您的客户的意见一致。
预防未来
重新检查一切回到源代码pipe理 。 希望你能在这一点上达到更新,更好,更好的目录结构。
获得一个testing结构 。 即使这只意味着获得一个基本的unit testing框架,并在每次部署后进行一些基本的烟雾testing,总比没有好。 理想情况下,您应该有一名testing工程师或知识丰富且值得信赖的客户,每次部署后都可以花费时间进行testing。
如果你成长了一个以上的开发者,那么就需要build立一个部署过程 控制生产环境的变化应该是您的首要任务。 (你想做的最后一件事是再次通过这个,对吧?)你应该有一个清晰和简单的过程来在环境边界之间移动(如开发 – >testing,然后testing – >生产)。
大多数情况下,您可以通过使用grep来判断文件是否正在被使用。
grep -r "index2.php" *
您也可以使用PHPparsing器来帮助您清理。 以下是一个脚本示例,它列出了声明和函数调用的函数:
#!/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"; } } }
-
设置一个开发服务器(就像Greg Hewgill所说的那样,VirtualBox和Virtual PC是很好的select)。
-
将当前站点文件(包括相关的Web服务器和PHPconfiguration!)放入版本控制。
-
找出正在使用哪些文件 – 使用您的开发服务器设置进行testing,通过删除所有fooN.php文件,看看它是否仍然工作。
-
祈祷…很多(好的,这不是必需的,但听起来像你需要它)。
如果是最糟糕的情况,那么代码全部被打乱,所有的显示都与逻辑和数据库调用混杂在一起,你可能会做我所要做的一个PHP项目。
我尝试了重构的方法,从三个开始。 这就像爬上摩托车爬山,每次只有10%的路程。 所以我采取了另一种方法,结果工作得更好。
- 我以用户身份login,
- 并通过每个屏幕和每个使用案例,我可以find。
- 我将html保存为静态文件,
- 并logging了程序操作和明显的业务规则。
我做了三天的工作,然后拿起笔记,和利益相关者进行了长时间的交谈。
在获得了一些第一步的协议之后,我使用良好的一致性devise和抽象,重新实现了所有的HTML UI。 滚动后,我可以每天做几个屏幕。
然后我把结果返回给了利益相关者,并且经历了一堆用例。 (利益相关者对第1步和第2步非常满意,因为他们根本不喜欢第一个实现(惊喜),现在看起来有改进的希望,而不仅仅是恢复理智的应用程序。
事实certificate,这是艰苦工作的结束(也是利益相关者所感知的项目风险的终结)。
事实certificate,第一批船员在他们自己的意大利面条上受到如此的束缚,实际上工作的内容相对较less,所以重复它的范围比任何人都怀疑的要小。
但关键的决定是原始的代码,无论是内容还是结构,都是不可能的,我需要从一个完全外部的angular度来看,用一个devise得当的新框架。
你可能会考虑的一件事是在开发环境中安装PHP“xdebug”扩展,将其设置为跟踪所有函数调用,然后尽可能完全(可能通过自动UItesting)来运行整个应用程序。 然后,您将能够分析/parsingxdebug跟踪文件,以查找应用程序使用的所有文件/function。
这个线程的其他人有很好的build议。 我也曾经遇到过这种情况。 在他们的职业生涯中,大概每个人都可能走进一个看起来像被龙卷风袭击的项目。
我想补充的一个build议是,在你做任何其他人描述的清理之前,你需要得到pipe理层的认可。
- 根据这个线程的build议制定一个计划。
- 描述您需要创build开发和testing环境所需的任何新硬件或软件,并对其进行定价。
- 找出需要培训的新技能,以build立和使用开发和testing环境。 估算你获得这些技能所需的时间和费用。 如书籍或付费培训。
- 估算一个工作时间表,供您进行清理。 在源代码控制下获取代码需要多长时间? 理解数据库需要多长时间? 了解PHP和JavaScript代码需要多长时间?
- 把这个呈现给你的经理,用他的底线来说明目标。 例如,一旦所有内容都被清理完毕,更新或者推出新function的速度会更快,debugging错误将更加可预测,并且增加新员工的工作将更加容易。
当然,你需要继续与当前的混乱,因为它是一个活的网站。 pipe理活网站优先,所以清理工作必须是后台任务。 这意味着它会花更长的时间。 清理一个中等规模的项目作为背景任务的经验通常需要六到十二个月的时间。 由于该网站将在此期间继续发展,因此可能需要修改或重新完成一些已完成的清理任务。 确保你的经理也了解这一切。
如果经理对您的计划感到厌倦,或者不重视清理,至less您会知道为什么所有其他开发人员都离开了这家公司!
我有几个关于如何进行的具体build议:
- 除了所有其他伟大的build议,我build议使用乔尔testing作为基准。 你的清理计划应该会导致一个工作环境,在Joeltesting上得分会很高。
- 阅读我的答案:“ 了解陌生数据库的最佳方法是什么?
- 在网站上启用日志loggingfunction,以便分析实际调用哪个PHP页面。 至less可以告诉你哪个index2.php,index3.php,index4.php等是真正过时的。
- PHP有一个函数
get_included_files()
,返回当前请求期间包含的所有文件的数组。 通过logging这些信息,您可以找出哪些PHP文件正在使用,即使它们没有显示在Web服务器日志中。 - 您确实需要有一个与您的生产服务器相匹配的testing和开发环境。 在Windows上testing并在Linux上部署是不好的。 在开发过程中使用MySQL 5.0和在生产中使用MySQL 4.0并不好。 你可能会逃避一个更适度(尽pipe兼容)的硬件平台。
我会:
- 坐下来深吸一口气
- 决定是否真的在哪里工作;
- 如果是的话,那么我会卷起我的小辫子,一次挑一个烂摊子去上class。
我知道我们不能一次只限于一项任务, 然而,在处理进来的日常任务的同时,您可以限制您的工作一次解决一个混乱。
您可以通过将其放在页面的底部附近来查看所有包含/必需文件的列表:
<?php var_dump(get_included_files()); ?>
考虑重写并使用旧网站作为function规范
令人惊讶的是,就我所知,还没有人提到这一点,但还有另外一种select: 放弃代码,只是使用网站本身的function作为一个新的function设置规范 (即有史以来第一个项目),然后根据这些function,利用已build立的框架(如Symfony,Laravel或Drupal)重新构build网站。
是的,有些人会对重写的恶语感到畏惧……但是有些情况下,这实际上是一个更好的办法,而且你暗示了一些原因:
- 你自己对PHP开发相当陌生
- 你可能会更好的开始与干净的东西,而不是你inheritance的纯粹的垃圾代码
- 在最后的分析中, 大多数用户并不在乎源代码 ,如果它看起来对他们“起作用”,他们可能会认为你疯了,如果你试图告诉他们一些可怕的错误
- 如果你在一个统一的框架内采用了源代码修改控制和数据库devise的实践,那么你将会获得更多的乐趣和更长的寿命,这个框架看起来像是一个真正关心自己的名字的人
当然,在这个位置上的每个人都必须使用这样的代码,但是有时候这已经足够了,最好是放弃意大利面条,然后从新鲜的盘子开始。
如果你阅读乔尔的文章 ,说为什么做一个重写是不好的,你会注意到他引用的几乎没有任何情况适用于你。
我要做的第一件事是使用某种虚拟机来build立一个testing环境。 VirtualBox或虚拟PC将是很好的select。 这样你就可以开始改变,而不用担心打破生产环境。 无论有多less工作(数据库和Web服务器以及所有的东西),最终都是值得的。 其中一个很大的好处就是可以复制虚拟机,并把它交给其他人,如果你觉得你需要帮助的话。
你绝对需要一个开发环境。 如果你不想在Windows上运行该网站,你可以抓取一些Linux发行版的VMWare镜像。
第一步当然是把它放在版本控制之下。 这样至less你可以回到原来的工作版本。 其次,覆盖include,require等函数可能是一个好主意,例如,将包含的文件的文件名写入某个日志文件,这样就可以找出哪些文件实际上包含在内了(因此希望排除了很多index2.php,index3.php等等
如果需要的话,如果需要的话,如果有些类被使用,有些不是,你可以使用get_declared_classes和get_defined_vars和gettype来查看哪些types被实例化。
至于问题4和问题5,这些可能有点难以解决,但这应该让你开始有希望。
我想所有的5点你的点击我inheritance了一些经典的ASP项目,还有一个PHP项目…
我完全同意其他人在ASAP中使用源码控制,并使用VMWare,VirtualBox等来testing环境。
确保你的数据库版本太高,特别是如果程序有额外的逻辑(不只是直接插入,更新,删除)。 数据库版本需要更多的关注,然后在PHP页面。 您需要将所有对象生成到sql脚本,并将这些脚本放到源代码pipe理中。 然后当你改变数据库结构,程序等你需要更新脚本,所以你也有这些变化的历史。
至于搞清楚什么是在数据库端使用什么,我会build议看看ApexSQL Clean 。 我使用这个项目有几百个ASP文件,200多个表和大约400个存储过程。 我能够确定20个左右没有使用的表,大约25%的存储过程。 使用ApexSQL Clean,您可以将所有的php文件与表,视图和存储过程一起添加到依赖项检查中。 抓住30天的审判,并检查出来,它会为您节省很多时间。
对于网站使用的文件,我有上个月的Web服务器日志,并针对他们search我不确定的任何东西。 我也喜欢Aistina在修改要访问的日志时build议的变化。 也许有它到你设置的数据库中的一个表是文件名和访问计数,并且每次该文件被加载它递增计数。 然后过了一段时间,你可以查看计数,并确定可以去。
这里有一些想法:
- PHP和Apache也可以在Windows上正常工作。 也许你可以做一个全Windows安装?
- 尝试在所有PHP文件中使用“include”和“require”grep'ing(或者一些Windows选项)。 然后列出所有包含的文件。 将列表与文件夹中的文件进行比较。 你应该能够摆脱至less一些未被引用的文件。
- 或者制作所有文件名的列表,并search所有文件。 你可以像这样做一个像依赖图。
这确实是一团糟。 但是,开始创造性地去掉这个东西的一些触手:
- 获取版本控制。 我推荐Git。
- 设置一个本地开发服务器。 find一个WAMP,LAMP或MAMP包让你开始,因为你是新手。
- find入口点(index.php等)。 检查您的服务器访问日志,看看这些是什么。
- 卷起你的袖子上的一些正则expression式黑魔法,并转储出所有文件包括/需要树。 但要小心任何包括($文件名)dynamic包括。 如果你有这些,你需要在$ filename上做一些logging来找出可能包含的内容,尽pipe它周围的代码应该给你提供线索。 有一点点运气,你可以用这种方法剔除所有未使用的文件。
- 使用更多的正则expression式黑魔法来检查函数和方法在代码库中的其他地方被引用。 可能有一个IDE可以帮助你。 试试NetBeans(我曾经用它来帮助我重构一个C ++项目,所以在这里可能会有所帮助。)
- 正如其他人所回答的那样,“如果有必要的话,找出一些类是否被使用,而另一些类是否被使用,你可以使用get_declared_classes和get_defined_vars和gettype来查看哪些types被实例化。 您也可以编写一些代码来查找代码库中的所有新语句。
- 等等…只要想想你如何可以减less这个怪物。 并尝试重新组织代码,你可以。
很多有用的职位关于如何处理这个。
不要试图重复其他人所说的话:
- 获取正在运行的prod环境的副本。 它可以是一台虚拟机,或者另一台真机。 但是你需要成为上帝。 如果prod数据库位于另一个盒子上,则还需要一个dev版本。
- 把它全部投入到版本控制中。 在另一个盒子上。 一个至less每周备份一次。
- 确保你知道在你的版本控制应用程序中分支是如何工作的。 你可能需要它。
- 获取prod服务器locking。 您不希望对版本控制不做任何进一步的更改。
- 创build从版本控制向prod服务器发布代码的说明。 可释放更改的最小单位应该是整个代码库。
接下来的步骤取决于用户如何连接到它。 如果无论出于何种原因都无法改变,那么就需要一种渐进的方法。 如果开发和维护仍然需要发生,那么这可能是您唯一的select。 请记住使用该分支function将这些模块从重写工作中分离出来。
要理解这个结构,你必须基本上创造一个新的结构。 一个新的数据库处理程序通常是一个很好的开始,包括从每个页面应加载的通用包含文件。 这里的目标是创build一个最小的包含结构,可以稍后扩展,而不必告诉每个页面加载额外的文件。
现在您需要开始将function转移到新的包含文件。 您将需要一次打开多个文件的方式,如多文件编辑器或屏幕+ vi(或emacs)。 从在各个地方重复的效用函数和代码块开始。 尽量不要一下子把注意力分散到一大堆。 一些types的问题将不得不随着其他问题的解决而移动。 你以后会回来的
不要觉得你需要添加第三方框架。 快速添加这样的事情会导致完整的重写。 在这一点上,这将是一个比驯服其包含结构更多的工作。 所以先sorting一下。
在移动function时,您需要使用新的包含文件。 你为你做的前几个文件将会追逐冲突一段时间。 它会感到沮丧和毫无意义,但这可能是最难的部分。 几个文件后,它会变得更容易。 有时候,你可以通过用一个包含十几个包含文件来将六个页面迁移到新的包含文件。 该行动的另一面是将有文件,你可以删除。
如果你坚持下去,你最终会达到所有包含文件都是你写的那些文件,你将会覆盖整个包含的布局。 到那个时候,做更多的入侵式的改变,比如放入第三方框架,将会容易得多。
-
得到修订控制。
-
决定命名约定和文件/目录结构。
-
确保你有体面的工具/ IDE。
-
如果你还没有build立一个独立的开发/testing环境
然后 …
-
不幸的是,您需要筛选所有这些1,2,3文件,并确定哪些文件正在使用,哪些可以处理。 除了暴力破解之外别无其他办法,依靠档案。
-
即使我有一个RCS,我仍然经常把我认为是未使用的脚本移动到一个隐藏的位置,比如.mausoleum,然后让RCS忽略这个位置。 很高兴能够在本地偷看,而不必回到回购。
-
尽最大可能分开HTML和PHP 。 我无法强调这一点! 如果这是在每个文件中完成,没问题。 只要你有单独的PHP和HTML块。 当然,HTML将会随处可见,但是尝试将所有testing,切换,其他所有内容从HTML块移出并放入PHP块中。 当把事情弄清楚的时候,这本身就可能是巨大的 。
-
如果代码主要是程序性的 – 我假设你的情况是 – 在进行任何严重的重构或重构类之前,最好先清理一下。
-
当你发现可以逻辑组合的文件/脚本时,就这样做。 (我曾经看过一些项目 – 可能与您的项目没有什么不同,在这里,存活文件的总数大约是我们开始的1/4)。
一旦你走了这么远,那么你可以开始适当的重构或重构类。
Bonne的机会!
我知道你的感受。 我inheritance了这样一个项目的发展。 它和我在一起呆了一年,说实话这让我成了今天的开发者。 没有更好的个人进步的机会,比膝盖深的工作。
以下是对我最有帮助的事情:
- 确定哪些是系统的关键文件。 你会发现他们,因为你的大部分工作将在他们身上完成
- 创build项目的本地版本(包括数据库)并将其置于版本控制之下
- 仅对less量文件进行小改动
- 在生产版本中不要放入任何东西,直到完成testing,然后准备将旧版本放回原来的版本
-
了解如何处理系统的用户(会话,cookie)。 创build一个超级用户,然后当你需要在系统上testing你的代码时,把它放在这样一个块中:
if($_POST['your_registered_user_name']{ //Your live code being tested, which will be visible only to you when you are logged in }
其他用户将无法感受到这种变化。 当我无法replace本地机器上的系统状态时,这种技术帮助了我很多
-
写testing,并遵循严格的工程指南,你正在写的所有代码
-
立即备份代码。
-
版本控制。
-
创build一个testing网站。 该网站是否在Apache下运行? 你甚至可以在你自己的计算机上安装Apache + PHP + MySQL,并使用它进行testing。
-
处理安全问题。 确保网站免受sql注入和电子邮件注入。 至less,您可以search数据库调用,并将调用添加到
mysql_real_escape_string()
(如果它使用的是MySQL数据库,那么…)一旦您更好地理解代码,您可以稍后再做一个真正的修复。 对于电子邮件注入…编写filterfunction,过滤掉垃圾邮件发送者代码,并确保过滤了电子邮件中使用的所有表单字段。 (是的,它增加了更多的spagetti代码,但是要准备好重构代码需要一段时间。) -
之后,我build议增量升级。 你是新的,代码是一个higgleypiggley混乱,所以这将需要一段时间来理解这一切…并充分了解域。 所以,只需简单地找出你的工作,确定需要修正的部分,添加需要添加的部分。 当你这样做时,你正在学习如何将系统放在一起。 一旦你知道代码如何组织(或没有组织)好一点,你可以开始计划一个主要的重构/重写系统。 希望你可以按部件分组来做,所以你总是会有新的里程碑。
我刚刚经历过这个。
我的第一要诀是在第一天不要试图改变一切。 如果你真的想要解决这个问题,你需要朋友。 你需要你的同事们尊重,然后才build议如何改变他们已经工作了几个月(几年?)的一切。
首先,尽快获得版本控制下的代码。 如果这对你来说不是件容易的事情,至less要开始做每日备份,即使这意味着只需要压缩文件并用date命名zip文件即可。 如果没有人知道版本控制,那么购买一本关于CVS或SVN的实用程序员的书,并自己设置。 这些书可以在一天之内阅读,并且可以快速启动。 如果没有其他人想要使用版本控制,你可以自己使用它…然后当有人丢失一个文件,你可以用你的回购副本保存一天。 其他人迟早会看到版本控制的智慧。
其次,尽可能努力地深入代码。 活它,呼吸一个月。 向在场的人展示你将要学习他们的代码。
第三,当你阅读代码时,请记下大量的笔记。 写下所有困扰你的代码。 把你的想法写在纸上。 你可以在第一个月之后再组织它。
第四,安装一个代码分析器(如xdebug)。 这将告诉你在每个页面上调用的文件和函数,以及每段代码需要运行多长时间。 你可以使用它来找出你的包含问题,并find代码的慢位。 先优化那些。
经过一个月的努力工作,筛选代码并logging笔记之后,请将笔记转换为适当的文档。 不同部分的范围可以从安全性,caching,架构到其他任何困扰您的事情。 对于你所做的每一个批评,提供一个更好的解决scheme,并估计需要多长时间才能解决。 这是你摆脱所有竞争的JavaScript框架等
尽可能修改这个文件。 我不能强调这一点。
确保你的观众可以告诉你,这是为了公司的利益,而不仅仅是你的个人喜好。
亲自向你的老板介绍。 设置一个时间来讨论它。
他们可能会因为写下来而解雇你。 如果他们这样做了,没有他们,你最好没有他们,因为他们不想改善,你的职业生涯将停滞不前。
他们可能想要实现所有的build议。 这是不可能的,但是这是可能的。 那么你会很高兴(除非你的build议失败)。
他们很可能会想要实施你的一些build议,那总比没有好。 至less,这将有助于缓解您的担忧。
至于testing,在Apache中设置另一个“虚拟主机”(在Windows和Linux上都支持)。 虚拟主机可让您在单台服务器上运行多个站点。 大多数大型网站至less有3个虚拟主机(或实际服务器):dev.domain.com(用于日常开发),staging.domain.com(用于QA人员在发布之前进行testing)和www.domain。 com(您的生产服务器)。 您还应该设置数据库的开发,分期和生产版本,使用不同的login名和密码,以免意外混淆它们。
另一种解决办法是给每个开发者在Linux服务器上给自己的虚拟主机,他们可以通过FTP / SCP或使用samba的networking共享工作。
祝你好运!
是的,版本控制绝对是第0步。
我也推荐一个好的代码search工具 。
代理Ransack是相当不错的(假设你在Windows上) http://www.mythicsoft.com/agentransack/Page.aspx?page=download
我会在没有代码search的情况下盲目飞行。
- 开始在项目中使用版本控制(我推荐git)
- 编写所有代码的unit testing
- 开始使用ORM(我强烈推荐学说)
- 开始使用一些框架(我推荐symfony / nette)
- 开始重构php代码
尝试获取网站的详细统计信息,并找出进入和退出点的位置。 一个体面的方式来找出什么文件被击中顶部(然后看看这些文件,看看哪些包括被拉)。
做什么哈珀·谢尔比说…
但是,我还要补充一点,如果你没有得到pipe理层的支持来清理这个问题,你可能想要接受这样的事实,因为这个原因。 … 只是在说。 😉
除了其他人所说的优秀之外,为了第一次使用哪些文件,你可以在你的开发服务器(甚至是生产服务器上)安装一个像APC或eaccelerator这样的操作码caching,这不会中断任何东西)。 然后,单击开发服务器上的Web应用程序(或让用户在生产服务器上执行)。
现在看看cachingpipe理页面中的caching文件列表。 如果一个文件没有被caching在你的操作码caching中,那么很有可能它没有被任何东西加载。
这不是一个完整的解决scheme,但是如果每个目录有10个index.php文件(例如index.php,index2.php等),至less你会知道你的应用正在使用哪个文件。