我一直在学习php,只需插上它即可。
我希望有人能指出我在安全,流程和一般最佳实践方面的正确方向?
感谢。
编辑 -
我想用一种更好的方式来表达我想要问的是......
最佳做法是什么:
1.)使用php处理表单时,获取vs post,$ _REQUEST vs $ _GET& $ _ POST
2.)动态创建HTML文件时(例如下面)
3.)登录&在与表单创建者相同的文件中进行身份验证
4.)使用php发送电子邮件
来自上面的#2
<?php
echo "<h1> Welcome </h1>";
if ($_SESSION['type'] == "admin")
{
//lots of html in the echo statment
echo "tables and admin interface here";
} else
{
//lots of html in the echo statment
echo "tables and user dashboard here";
}
?>
--VS--
<h1> Welcome </h1>
<?php
if ($_SESSION['type'] == "admin")
{
?>
lots of html in the echo statment
tables and admin interface here
<?php
} else
{
?>
lots of html in the echo statment
ables and user dashboard here
<?php
}
?>
--VS--
<?php if($_SESSION['username']): ?>
<p>You are logged in as <?=$_SESSION['username']?></p>
<p><a href="?logout=1">Logout</a></p>
<?php endif; ?>
PS: 感谢所有已经回复的人。 我还可以询问框架适合哪里?我参加了OOP课程,但我们并没有熟悉任何框架。
我在Symfony和zend框架上阅读了很多内容,但我仍感到困惑。
再次感谢。答案 0 :(得分:9)
良好的编程与语言无关。我建议你开始研究软件开发概念,如面向对象编程,设计模式,关注点分离,重用,封装,测试和重构。从任何一个开始,继续“堵塞”列表,你会变得更好。
PHP特定 - 学习可接受的编码标准,例如PEAR或Zend。在你理解了一些概念之后,选择一个很好的参考,比如其他答案中提到的顶级框架之一 - Zend Framework,CakePHP,Symfony等。
答案 1 :(得分:5)
答案 2 :(得分:5)
PHP社区从未真正提供任何开发指南或倡导最佳实践。在前框架期间,大多数开发人员编写的典型PHP代码非常业余且杂乱无章 - 请参阅Wordpress源代码。但PHP是一种很好的Web应用程序语言。它是为网络制作的,如果你愿意,你可以用它编写好的专业代码。打击它是时髦的,但忽略了那些东西。
无论如何,就像其他人在这里说的那样,你最好的选择是使用一个框架。作为一个新手,重要的是你选择一个文档齐全的框架,并有一个强大的社区来帮助你克服困难。这是我对主要php框架的概述:
Codeigniter =&gt;流行,快速,优秀的文档和社区。很容易学习。 v2.0尚未正式发布,但已准备好投入生产,仅限php5。您可以使用CI站点上的相同文档v1.7。版本非常相似,除了最终2.0滴php 4支持。这是2.0的下载:http://bitbucket.org/ellislab/codeigniter/
YII =&gt;尽管名声太高,但真的获得了动力。它是一个快速执行者,拥有GREAT文档和大量功能。一本新书也出版了。社区是一般的,但正在增长。这个框架imo需要很多来自rails。有一个基于网络的代码 生成工具,它使用活动记录。 http://yiiframework.com/
由于代码生成和活动记录,您可以使用YII更快地构建应用程序但是它比CI更难学习。当你尝试以YII的方式做所有事情的时候,你可能会发现它也会受到影响。 CI更灵活 - 为您提供所需的基础,而不是妨碍您。所以现在我推荐codeigniter。
祝你好运!答案 3 :(得分:4)
看看一个声誉良好的开源软件,这个软件以良好的代码着称。
查看Kohana's source或Billy ONeal's answer中的任何其他人。
我不建议使用CI的源代码作为指导 - 因为我认为它仍然支持PHP4,因此一些代码将无用学习 - 除非你打算编写PHP4代码,如果你是一个坏主意现在才学习。
不要看WordPress,你会发现一些可怕的习惯。
此外,虽然我想到了,但要了解OO,以及与程序代码的区别。
答案 4 :(得分:3)
为什么每个人都在攻击php?许多优秀的网站都有它。至少在他们变得足够大以至于值得进行大修之前。
与Facebook或亚马逊等网站相比,99%的互联网只是扔掉了没有太多流量的网站,所以为什么他们要关心学习更复杂,稳定或严格的语言,如果php得到了以符合成本效益的方式完成工作,对所需要的工作同样稳定或安全?
我建造的大多数网站都是靠Kohana运行的 - 来自codeigniter的分支。两者都很有用。谁在乎CI是否使用php4。如果您被拥有古老网站的网络公司聘用怎么办?猜猜看 - 你需要知道php4。这种抱怨就像是说你不再需要知道表格的HTML ...直到你必须为一些大公司设计和编写新闻稿模板。那又怎样?谷歌搜索崩溃当然?
我说使用PHP的正确方法是遵循示例。是的wordpress有一些可怕的习惯,但它有效,并且只是那里最成功的平台之一。这告诉你什么?
我想说你可以从像Kohana这样的框架中学到很多东西 - 甚至CI - 因为它们都有不错的安全方法,这些方法并不难理解。像数据库转义和xss过滤之类的东西。如果您不熟悉并且两者都拥有不错的用户群,那么它会让您进入OO编程,这样您就不会遇到任何答案。
不要让这些家伙吓唬你。对于初学者来说PHP是一个很好的举措。最终,像Java或目标C这样的东西对于工作和应用程序会更有益,但是当你到达那里时可以学习它。
答案 5 :(得分:3)
可以在PHP中很好地编码。可能是迄今为止我在StackOverflow中看到的最好的资源:浏览标记为PHP的问题。
没有特别的顺序,一些特定的东西可以帮助你完成我在PHP编程的过程:
启用通知,然后确保不编写触发它们的代码。 PHP的默认安装不启用Notices,这对于生产环境来说很好,但对于开发环境则不好。不幸的是,他们的默认php.ini
文件似乎不知道它是哪个例子。
同样,请确保您已关闭magic_quotes
和register_globals
。它们都是为更简单和天真的编程时间而设计的,现在产生的问题比他们解决的更多。
在使用变量之前初始化变量。这也意味着数组元素。如果您的代码不确定变量或元素是否存在,请使用isset()
和array_key_exists()
。
选择或开发一种合理的编码风格并坚持下去。您不需要节省空格或换行符。
检查您要求的变量。这是一个棘手的问题。一个很好的例子是处理可能包含大量可变元素的HTTP POST。弄清楚应该在$_POST
中的内容并寻找它。不要认为提交的内容总是应该提交的内容。
沿着相同的行,检查正确的值,而不是错误的值。如果需要变量具有有效值,请在继续之前查找构成有效值的内容,而不是丢弃的无效值。例如,如果您需要将提交的变量作为整数,那么检查它是否为整数,不要检查空字符串,因为空字符串不是唯一的无效值!
单独的数据库访问,逻辑和表示(这通常称为模型 - 视图 - 控制器编程)。另一种方法是,您不应该将处理最后POST请求的代码与使用SQL查询发出的HTML标记混合在一起。大多数框架都会强制执行此操作。
如果您没有使用提供Object层的框架,那么您将使用自己的SQL。要么使用预准备语句,要么使用DB自己的字符串引用函数,而不是addslashes()
。
在PHP 4中很容易使用大量内存,因为结构被复制,没有被引用。 PHP 5在很大程度上解决了这个特定的问题,但它仍然可以发生在字符串中。这也没有解决某些API创建大型结构的趋势。
答案 6 :(得分:2)
除了提供“使用框架”或“查看框架”之外,还提供了一些快速的经验法则,我发现这些做法可以带来很大的不同。
PDO
并将其抽象为类(或使用现有类)。请勿使用mysql_query
或此类功能。<?php if($x) { ?> HTML here <?php } ?>
之类的事情(使用HEREDOC语法对此有很大帮助)。__autoload
魔法限制包含仅这些就是我看到的许多丑陋的PHP代码的夜间转换。然后有明显的语言不可知规则,如一致的命名约定,自我记录代码等。