이 글은 제가 실제 개발 경험을 요약한 것일 뿐입니다. 유명한 격언은 아닙니다. 두 가지 목적으로 작성되었습니다. 하나는 항상 이러한 지식 포인트에 따라 나만의 코드를 작성하라는 것입니다. 다른 하나는 공유하고 말하는 것입니다. 어쩌면 그것이 당신에게 도움이 될 것입니까? 혹시라도 그렇죠. . .
1. 1차 인식: 안전
우리가 개발하는 웹 프로그램은 대부분 데이터베이스를 다루어야 하기 때문에 SQL 인젝션은 피할 수 없는 문제이자 논의가 필요한 문제라고 볼 수 있습니다. 그리고 최근에는 XSS 및 CSRF와 같은 공격이 인기를 끌면서 "해커"에게 새로운 무기 세트를 제공하는 것처럼 보이지만 우리는 항상 수동적 상태에 있습니다. 하지만 우리는 다음 두 가지 원칙을 기억해야 합니다.
1. 사용자가 입력한 내용을 절대 신뢰하지 마세요. (옛말이지만 사실입니다)
2. 출력해야 하는 데이터를 탈출하십시오.
간단히 말하면 필터 입력, 이스케이프 출력
초보자라면 다음과 같은 쿼리문을 사용하지 마세요.
사용자 이름 = $_POST['username'] AND 비밀번호 = $_POST['password'];
또한 구식 mysql 작업 대신 PDO 또는 Mysqli를 사용하세요.
CSRF 솔루션의 경우 현재 솔루션은 각 양식 제출에 대해 토큰 값을 설정한 다음 양식이 제출될 때 이를 확인하는 것입니다.
2. 비교연산자의 차이점을 확실히 알아두세요
PHP의 비교 연산자는 사실 작은 주의점이라고 할 수 있지만 어떤 때는 정말 중요합니다. 예를 들어 ==를 사용할지 ===를 사용할지 명확하게 생각해야 할 경우가 많습니다. strpos() 함수를 사용해 본 적이 있다면 다음 코드가 직관적인 느낌을 줄 수 있습니다.
<?php $authors = 'Chris & Sean'; if (strpos($authors, 'Chris')) { echo 'Chris is an author.'; } else { echo 'Chris is not an author.'; }
위 코드의 실행 결과는 실제로 Chris가 작성자가 아니라고 출력하지만 실제로는 Chris와 Sean이 실제로 작성자인 이유는 무엇입니까? 실제로는 다음과 같습니다. Chris & Sean의 시작 부분인 0번 위치에 우연히 Chris가 나타나므로 substr()은 조건 판단문의 bool 판단으로 인해 0이 false로 처리되므로 프로그램 출력 Chris는 작성자가 아니지만 이 상황을 어떻게 처리해야 합니까? 실제로 다음과 같이 할 수 있습니다.
<?php if (strpos($authors, 'Chris') !== FALSE) { echo 'Chris is an author.'; } else { echo 'Chris is not an author.'; }
!==와 !=의 차이점이 여기에 반영되어 있습니다.
3. else 사용을 줄일 수 있다면 else 사용을 줄여보세요
이것은 프로그래밍을 처음 접했을 때부터 가지고 있던 생각인 것 같습니다. 왜냐하면 if(){}else{}를 볼 때마다 이 단락이 실제로 더 잘 작성될 수 있다는 느낌이 들기 때문입니다. else 키워드 사용을 줄이면 코드가 두 줄로 줄어듭니다! 예, 두 줄도 우리가 추구하는 것입니다. 내 경험에 따르면 다른 코드가 적은 코드가 더 읽기 쉬운 것 같습니다.
if( this condition ) { $x = 5; } else { $x = 10;
$x의 기본값이 10이라면 이렇게 작성하는 것이 좋습니다.
$x = 10; if( this condition ) { $x = 5; }
4. 불필요한 괄호 제거
여기서의 목적은 실제로 else 키워드 부분과 동일합니다. 더 짧은 코드와 더 나은 가독성을 위해 다음과 같은 상황에서는 코드 최적화를 고려해야 합니다.
if ($gollum == 'halfling') { $height --; }
실제로 다음과 같을 수 있습니다.
if ($gollum == 'halfling') $height --;
이렇게 할 수도 있습니다:
if ($gollum == 'halfling') $height --; else $height ++; if ($frodo != 'dead') echo 'Gosh darnit, roll again Sauron'; foreach ($kill as $count) echo 'Legolas strikes again, that makes' . $count . 'for me!';
짧고 명확한 느낌이 드시나요?
5. str_replace()를 자주 사용하세요
많은 경우 일부 문자열을 교체해야 합니다. PHP에는 이 목적을 달성할 수 있는 여러 함수가 있습니다.
str_replace() ereg_replace() preg_replace()
꼭 정규 매칭을 사용해야 한다면 preg_replace()를 사용하고, 교체가 가능하다면 str_replace()를 사용하세요. 불완전한 통계에 따르면 str_replace()의 효율성이 세 가지 중 가장 높기 때문입니다. 그중에서.
6. 삼항 연산자를 사용하세요
많은 사람들이 이런 느낌을 가질 수 있습니다. 삼항 연산자를 사용한 후에는 if else 문을 여러 개 제거할 수 있으며 코드가 짧고 멋집니다.
$host = strlen($host) > 0 ? $host : htmlentities($host);
7.使用缓存
目前PHP热门的缓存技术可能就是Redis和Memcached了,在PHP的官方文档中,也有Memcached的使用教程,至于Redis,我最近在研究中,后续会给出一些教程,如果一切顺利的话。
8.使用框架
框架的好处很多,可能是在性能方面有所损失外,貌似找不到不用框架的理由了,框架即可以加快你的开发速度,也可以让你在写代码的过程中撸的舒舒服服,而且想很多安全问题,你都会得到很好的解决。我这里首推Laravel,不过像Yii2 Slim Symfony都是非常棒的框架,除了Symfony没有尝过过之外,剩下的三个我都有使用经历,最后就基本是用Laravel了。不过我建议的Laravel可能不适合你,这还是得看个人喜好。
9.用isset()代替strlen()
如果你需要在项目代码中需要根据一个字符串的长度来做条件判断,这个时候非常推荐你直接使用isset(),因为在同等条件之后,isset()的速度是strlen()的五倍左右,所以:
<?php if (isset($username[5])) { // The username is at least six characters long. } if (strlen($username) >= 6) { // The username is at least six characters long. }
以上的两个条件判断都是可以达到相同的目的,但是我推荐使用的是第一种。
以上所述就是本文的全部内容了,希望大家能够喜欢