관련 추천: "2019 PHP 면접 질문 요약(모음)"
1. PHP의 가비지 수집 메커니즘
PHP는 자동으로 메모리 관리를 수행하고 불필요한 개체를 지울 수 있습니다.
PHP는 참조 카운팅 GC 메커니즘을 사용합니다.
각 개체에는 참조 카운터 참조 횟수가 포함되어 있으며 각 참조는 개체에 연결되어 있으며 카운터는 1씩 증가합니다. 참조가 생활 공간을 벗어나거나 NULL로 설정되면 카운터가 1씩 감소합니다. 객체의 참조 카운터가 0에 도달하면 PHP는 더 이상 객체를 사용할 필요가 없다는 것을 알고 객체가 차지하는 메모리 공간을 해제합니다.
참조: https://www.php.net/manual/zh/features.gc.refcounting-basics.php
2 세션과 쿠키의 차이점과 연결
차이:
1. location : 세션은 서버에 저장되고, 쿠키는 클라이언트에 저장됩니다.
2. 저장 형태: 세션은 객체 형태로 서버에 저장되고, 쿠키는 문자열 형태로 클라이언트에 저장됩니다.
3. 목적: 쿠키는 사용자의 개인 설정, 취미 등을 저장하는 데 적합하며, 세션은 고객 신원 확인에 적합합니다.
4. 세션은 동일한 사용자가 웹 사이트를 방문하는 동안 경로를 구분할 수 없습니다. 모든 세션은 언제든지 한 곳에서 액세스할 수 있습니다. 쿠키에 경로 매개변수가 설정되어 있으면 동일한 웹사이트의 다른 경로에 있는 쿠키가 서로 접근할 수 없습니다.
5. 보안: 쿠키는 그다지 안전하지 않습니다. 보안을 고려하여 다른 사람이 COOKIE를 속일 수 있습니다.
6. 크기 및 수량 제한: 각 도메인 이름에 포함된 쿠키 수: IE7 /8, FireFox: 50, Opera 30; 총 쿠키 크기: Firefox 및 Safari는 최대 4097바이트의 쿠키를 허용하고, Opera는 최대 4096바이트의 쿠키를 허용하며, Internet Explorer는 최대 4095바이트의 쿠키를 허용합니다. 일반적으로 세션 크기나 수량은 없습니다. 제한.
관계:
세션이 제대로 작동하려면 쿠키가 필요합니다. 클라이언트가 쿠키를 완전히 비활성화하면 세션이 무효화됩니다! Session은 애플리케이션 서버가 유지하는 서버측 저장공간이므로 사용자가 서버에 접속하면 서버에서 고유한 SessionID가 생성되며, 이 SessionID는 서버측 Session 저장공간에 접근하기 위한 식별자로 사용된다. .
SessionID의 데이터는 클라이언트에 저장되고 쿠키와 함께 저장됩니다. 사용자가 페이지를 제출하면 SessionID가 세션 데이터에 액세스하기 위해 서버에 제출됩니다. 이 프로세스에는 개발자 개입이 필요하지 않습니다. 따라서 클라이언트가 쿠키를 비활성화하면 세션도 무효화됩니다.
3. SESSION
3. 브라우저 setcookie에 저장된 세션 ID의 만료 시간을 설정하는 방법(session_name(), session_id(), time() + $lifeTime, "/");
2. SESSION과 함께 제공되는 session_set_cookie_params(86400)를 사용하여 세션의 수명을 설정할 수 있습니다
3 php.ini
에서 session.gc_maxlifetime 매개변수의 값을 수정하여 세션의 수명을 변경할 수 있습니다.4. PHP 페이지 리디렉션 방법은 무엇입니까
header('Location: http://www.baidu.com/') ; echo ''; echo '';
5. PDO, adoDB 및 PHPLib 데이터베이스 추상화 레이어 비교
PHP 데이터베이스 추상화 레이어는 PHP 논리 프로그램 코드와 데이터베이스 간의 미들웨어를 나타냅니다. 데이터베이스의 기본 작업을 캡슐화합니다.
PDO는 PHP 5.1을 기반으로 설계되었습니다. 기본 개발을 위해 C 언어를 사용합니다. 설계는 PHP의 특성을 계승하고 있으며 엄밀히 말하면 PDO는 PHP 5의 SPL 라이브러리 중 하나로 분류되어야 합니다. , MySQL 및 MySQLi 확장 라이브러리와 유사한 기능을 갖고 있기 때문에 데이터 추상화 계층에 속해서는 안 됩니다. PDO는 데이터베이스 변경이 계획되어 있거나 가능한 시스템에서 사용하기에 적합하지 않습니다.
ADODB 백엔드 데이터베이스가 무엇이든 데이터베이스에 액세스하는 방법은 동일합니다.
데이터베이스 플랫폼을 이전할 때 프로그램 코드는 실제로 데이터베이스 구성만 크게 변경할 필요가 없습니다. 파일을 변경해야 합니다. 다양한 어셈블리 방법이 제공됩니다. 목적은 다양한 데이터베이스 방언에 맞게 추상화 계층의 맨 아래에서 이러한 명령문을 변환하는 것입니다.
하지만 이 추상화 계층은 크기가 너무 큰 것 같습니다. 총 파일이 약 500K입니다. 작은 웹 사이트를 만드는 경우 이는 과잉인 것 같습니다. PHPLib는 PHP와 함께 성장한 가장 오래된 데이터베이스 추상화 계층일 수 있습니다. 그러나 ADODB와 비교하면 이는 단지 MySQL 추상 클래스 라이브러리일 뿐입니다. 이 추상 클래스는 사용이 매우 간단하고 크기가 작습니다. 소규모 웹 사이트 개발에 적합합니다.
PDO는 준비된 명령문 쿼리, 오류 및 예외 처리, 유연한 쿼리 결과 획득(배열, 문자열, 개체, 콜백 함수 반환), SQL 공격 방지를 위한 문자 필터링, 트랜잭션 처리 및 저장 프로시저를 제공합니다.
ADODB는 캐시된 쿼리, 모바일 레코드 세트(HTML, 페이징, 선택 메뉴 생성), 트랜잭션 처리 및 파일로 출력을 지원합니다.
참조: http://apps.hi.baidu.com/share/detail/463678
6 긴 연결과 짧은 연결의 차이점과 사용법긴 연결: 클라이언트와 서버가 먼저 연결을 설정한 후 연결이 끊어지지 않고 메시지를 보내고 받습니다. 이런 식으로 통신 연결은 항상 존재합니다. 이 방법은 P2P 통신에 자주 사용됩니다. 짧은 연결: 클라이언트와 서버는 각 메시지 송수신 트랜잭션에 대해서만 서로 통신하며, 트랜잭션이 완료되면 연결이 즉시 끊어집니다. 이 방법은 지점 대 다중 지점 통신에 자주 사용됩니다. C/S통신. 긴 연결과 짧은 연결을 사용하는 타이밍: 긴 연결: 짧은 연결은 주로 빈번한 작업, 지점 간 작업에 사용됩니다. 포인트 통신, 연결 개수가 너무 많은 상황은 아닙니다. 각 TCP 연결을 설정하려면 세 번의 핸드셰이크가 필요하고, 각 TCP 연결을 끊으려면 네 번의 핸드셰이크가 필요합니다. 각 작업마다 연결을 설정한 후 다시 작업을 수행해야 하면 처리 속도가 느려지므로 각 작업과 다음 작업 중에 TCP 연결을 설정하지 않고 직접 데이터를 보내는 것으로 충분합니다. 예를 들어 데이터베이스 연결에는 긴 연결이 사용됩니다. 짧은 연결로 자주 통신하면 소켓 오류가 발생합니다. 짧은 연결: 웹사이트 http 서비스는 일반적으로 짧은 연결을 사용합니다. 긴 연결은 서버에 대해 일정량의 리소스를 소비하기 때문입니다. 자주 사용되는 웹 사이트와 같이 수천 또는 수억 개의 클라이언트 연결이 있는 경우 짧은 연결을 사용하면 일부 리소스를 절약할 수 있습니다. 긴 연결을 사용하고 수천 명의 사용자가 동시에 사용되며 각 사용자가 연결을 점유한다고 상상해보십시오. 서버가 얼마나 많은 압력을 받을지 상상할 수 있습니다. 따라서 동시성 양은 크지만, 빈번한 작업이 필요하지 않은 경우 각 사용자는 짧은 연결이 필요합니다. 7. HTTP 프로토콜의 자세한 설명 및 적용 http(Hypertext Transfer Protocol)는 요청 및 응답 모드를 기반으로 하는 상태 비저장 프로토콜입니다. 짧은 연결, 유연한 애플리케이션 계층 프로토콜, 종종 TCP 연결 방법을 기반으로 합니다. (HTTP 응답 상태 코드) HTTP 응답 상태 코드 상태 코드는 세 자리 숫자로 구성되며 5개의 가능한 값이 있습니다: #🎜🎜 ##🎜 🎜#1xx: 표시 정보--요청이 수신되었음을 나타내며 처리를 계속합니다 2xx: 성공--요청이 성공적으로 수신되고 이해되었으며 수락되었음을 나타냅니다 500 내부 서버 오류 // 서버가 발생했습니다. 예상치 못한 오류 503 서버를 사용할 수 없음 // 서버 시간 초과 // 정상으로 돌아올 수 있음 304 수정되지 않음 // 요청한 웹페이지는 마지막 요청 이후 수정되지 않았습니다. // 서버가 이 응답을 반환하면 웹페이지 콘텐츠를 반환하지 않습니다. 참고: https://www.php.cn /php -weizijiaocheng-437530.html Socket(소켓) 개념#🎜##🎜 🎜#Socket은 통신의 초석이자 TCP/IP 프로토콜을 지원하는 네트워크 통신의 기본 작동 단위입니다. 네트워크 통신 과정에서 엔드포인트(Endpoint)를 추상적으로 표현한 것으로, 연결에 사용되는 프로토콜, 로컬 호스트의 IP 주소, 로컬 프로세스의 프로토콜 포트, IP 주소 등 네트워크 통신에 필요한 5가지 정보를 담고 있다. 원격 호스트의 프로토콜과 원격 프로세스의 프로토콜입니다. 소켓 연결 프로세스 소켓 연결을 설정하려면 최소한 한 쌍의 소켓이 필요합니다. 그 중 하나는 ClientSocket이라는 클라이언트에서 실행되고 다른 하나는 서버에서 실행됩니다. Called ClientSocket ServerSocket 소켓 간의 연결 프로세스는 서버 모니터링, 클라이언트 요청, 연결 확인의 세 단계로 나눌 수 있습니다. 서버 모니터링: 서버 측 소켓은 특정 클라이언트 소켓을 찾아내지 않고, 연결을 기다리는 상태로 네트워크 상태를 실시간으로 모니터링합니다. 클라이언트 요청: 클라이언트의 소켓에서 이루어지는 연결 요청을 말하며, 연결 대상은 서버의 소켓입니다. 이를 위해 클라이언트의 소켓은 먼저 연결하려는 서버의 소켓을 기술하고 서버측 소켓의 주소와 포트 번호를 지정한 다음 서버측 소켓에 연결 요청을 해야 합니다. 연결 확인: 서버측 소켓이 클라이언트측 소켓의 연결 요청을 수신하거나 수신할 때 클라이언트에 응답함을 의미합니다 Socket 요청을 하고, 새 스레드를 설정하고, 서버 측 소켓에 대한 설명을 클라이언트에 보냅니다. 클라이언트가 이 설명을 확인하면 연결이 설정됩니다. 서버측 소켓은 계속 수신 대기 상태에 있으며 다른 클라이언트 소켓으로부터 연결 요청을 계속 수신합니다. 10. TCP 프로토콜, 3방향 핸드셰이크, 4방향 웨이브 TCP 프로토콜(Transmission Control Protocol)은 호스트 -호스트 계층 전송 제어 이 프로토콜은 3방향 핸드셰이크를 사용하여 연결 설정을 확인하고 4방향 핸드셰이크를 사용하여 연결을 끊는 등 안정적인 연결 서비스를 제공합니다. 비트 코드는 tcp 플래그이며 6가지 종류의 표시가 있습니다. SYN(동기적 연결 설정) 동기 ACK(승인 확인) )#🎜 🎜# 11. 기능은 유사하지만 성능이 매우 다른 PHP에서 일반적으로 사용되는 기능의 구별 및 예 12. posix 및 perl 호환성 정기 비교 및 기능 성능 분석#🎜 🎜#POSIX 일반 알아야 할 PCRE 정규식과의 가장 중요한 차이점: 1. PCRE 함수를 사용하려면 패턴을 2로 닫아야 합니다. POSIX 호환 정규식에는 수정자가 없습니다. POSIX와 달리 PCRE 확장에는 대소문자를 구분하지 않는 일치를 위한 전용 기능이 없습니다. 대신 지원팀에서는 /i 모드 수정자를 사용하여 동일한 작업을 수행합니다. 다른 패턴 수정자를 사용하여 일치 전략을 변경할 수도 있습니다. 3 POSIX 함수는 가장 왼쪽부터 시작하여 가장 긴 일치 항목을 찾지만 PCRE는 첫 번째 적법한 일치 항목 이후에 중지됩니다. 문자열이 일치하면 차이가 없지만 일치하면 결과와 속도에 차이가 있습니다. 차이점을 설명하기 위해 Jeffrey Friedl의 Mastering Regular Expressions 책에 있는 다음 예를 고려하십시오. one (self)?(selfsufficient)? 패턴을 사용하여 oneselfsufficient 문자열을 일치시키면 PCRE는 self와 일치하지만 POSIX를 사용하면 결과는 다음과 같습니다. 전체 문자열 자체는 충분합니다. 두 하위 문자열 모두 원래 문자열과 일치하지만 POSIX는 결과적으로 가장 오래 걸립니다. PCRE 사용 가능한 수정자: (i,s,m)# 🎜🎜# 정규식: /< ;as+.?href=[' "](.?)['" >]/is
참고: https://www.php.cn/faq/437523.html(http 프로토콜 상세 설명)
9. 소켓 연결 단계
$html = <<HTML;
$matches = array();
?>#🎜🎜 #
14. 사전 정의된 변수, 매직 변수, 매직 메소드 및 그 효과의 예 비교
$GLOBALS$_SERVER
$_GET
$_POST
$_COOKIE# 🎜🎜#
$_SESSION$_REQUEST$_ENV매직 메소드 http://apps.hi .baidu.com/share/detail/17851228
construct 및 destruct__autoload__invokeget and set
# ㅋㅋㅋ
Magic 변수 http://apps.hi.baidu.com/share/detail/17851228
LINE# 🎜🎜#FILE
DIR
CLASS
FUNCTION
METHOD
# 🎜 🎜#NAMESPACE15.spl 공통 데이터 구조 클래스
16. PHP 디자인 패턴
#🎜🎜 #팩토리 패턴
팩토리(함수 또는 클래스 메서드)를 구축하여 새로운 객체 만들기
팩토리 패턴은 새로운 객체를 생성할 수 있는 클래스입니다. 당신을 위한 객체 객체의 일부 메소드. new를 직접 사용하지 않고도 팩토리 클래스를 사용하여 객체를 생성할 수 있습니다. 이렇게 하면 생성된 객체의 유형을 변경하려면 팩토리만 변경하면 됩니다. 이 팩토리를 사용하는 모든 코드는 자동으로 변경됩니다.
단일 사례 패턴
이 유형의 리소스는 하나만 있기 때문에 일부 애플리케이션 리소스는 배타적입니다. 예를 들어, 데이터베이스 핸들을 통한 데이터베이스 연결은 배타적입니다. 연결을 열거나 닫을 때 오버헤드가 발생하기 때문에 애플리케이션 전체에서 데이터베이스 핸들을 공유하려고 합니다. 단일 페이지를 가져오는 프로세스 중에는 더욱 그렇습니다.
단일 요소 모드는 이 요구 사항을 충족할 수 있습니다.
PHP의 싱글톤 패턴: PHP 애플리케이션 범위 내에서 지정된 클래스의 인스턴스를 하나만 생성하는 것을 의미합니다. PHP에서 싱글턴 패턴을 사용하는 클래스에는 일반적으로 사용자가 객체를 생성하거나 복제하여 클래스를 인스턴스화하는 것을 방지하기 위한 전용 생성자와 전용 복제 기능이 있습니다. 정적 전용 멤버 변수 $instance와 정적 메서드 getInstance도 있습니다. getInstance는 자신을 인스턴스화한 다음 $instance 정적 멤버 변수에 이 객체를 저장하여 인스턴스가 하나만 생성되도록 하는 역할을 합니다.
관찰자 모드명령 체인 모드
전략 모드
17. youku와 같은 디자인#PHP를 사용한 로드 밸런싱 가이드다음 문제를 어떻게 처리할지 고민 중이신가요?参考:https://www.php.cn/php-weizijiaocheng-437532.html
在 Apache 负载均衡的情况下,做 PHP 开发如何考虑一下几方面:
PHP 源文件在服务器、PHP 文件上传处理、相关配置文件、Session 会话放置、日志放置
Apache 负载均衡的原则
轮询均衡策略 (轮询转发请求)
按权重分配均衡策略 (按响应数量转发请求)
权重请求响应负载均衡策略 (按响应流量转发请求)
18. 如何优化前端性能
1) 页面内容的优化
a) 降低请求数
合并 css、js 文件,集成 CSS 图片
b) 减少交互通信量
压缩技术:压缩 css、js 文件,优化图像,减少 cookie 体积;
合理利用缓存:使用外部 js/css 文件,缓存 ajax;
减少不必要的通信量:剔除无用脚本和样式、推迟加载内容、使用 GET 请求
c) 合理利用 “并行” 尽量避免重定向
慎用 Iframe 样式表置于顶部 脚本放到样式后面加载
d) 节约系统消耗
避免 CSS 表达式、滤镜
2) 服务器的优化
a) b)
c)
d)
19. yahoo 的 34 条前端优化法则
减少 HTTP 请求、利用 CDN 技术、 设置头文件过期或者静态缓存、Gzip 压缩、把 CSS 放顶部、 把 JS 放底部、避免 CSS 表达式、将 JS 和 CSS 外链、减少 DNS 查找、减小 JS 和 CSS 的体积、 避免重定向、删除重复脚本、 配置 ETags、缓存 Ajax、尽早的释放缓冲、
用 GET 方式进行 AJAX 请求、延迟加载组件、 预加载组件、减少 DOM 元素数量、跨域分离组件、
减少 iframe 数量、不要出现 404 页面、减小 Cookie、 对组件使用无 Cookie 的域名、减少 DOM 的访问次数、开发灵活的事件处理句柄、使用 而非 @import、避免过滤器的使用、优化图片、优化 CSS Sprites、 不要在 HTML 中缩放图片、缩小 favicon. ico 的大小并缓存它、保证组件在 25K 以下、将组件打包进一个多部分的文档中
20. 数据库缓存的基本理论,参考 memcached
什么是 Memcached?
memcached 是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态 Web 应用的速度、提高可扩展性。
虽然 memcached 使用了同样的 “Key=>Value” 方式组织数据,但是它和共享内存、APC 等本地缓存有非常大的区别。Memcached 是分布式的,也就是说 它不是本地的。它基于网络连接(当然它也可以使用 localhost)方式完成服务,本身它是一个独立于应用的程序或守护进程(Daemon 方式)
PHP 与 Memcached
Memcached 使用 libevent 库实现网络连接服务,理论上可以处理无限多的连接,但是它和
基于反向代理的 Web 缓存;
基于反向代理的 Web 缓存
21. PHP 安全模式
php 安全模式:safe_mode=on|off
启用 safe_mode 指令将对在共享环境中使用 PHP 时可能有危险的语言特性有所限制。可以将 safe_mode 是指为布尔值 on 来启用,或者设置为 off 和脚本尝试访问的文件的 UID,以此作为限制机制的基础。如果 UID 相同,则执行脚本;否则,脚本失败。
当启用安全模式时,一些限制将生效
1、 所有输入输出函数(例如 fopen ()、file () 和 require ())的适用会受到限制,只能用于与调用这些函数的
脚本有相同拥有者的文件
2、 如果试图通过函数 popen ()、system () 或 exec () 等执行脚本,只有当脚本位于 safe_mode_exec_dir
配置指令指定的目录才可能
3、HTTP 验证得到进一步加强,因为验证脚本用于者的 UID 划入验证领域范围内。此外,当启用安
全模式时,不会设置 PHP_AUTH。
4、如果适用 MySQL 数据库服务器,链接 MySQL 服务器所用的用户名必须与调用 mysql_connect ()
的文件拥有者用户名相同。
以下是一些和安全模式相关的配置选项
safe_mode_gid=on|off safe_mode_include_dir=string safe_mode_env_vars=string safe_mode_exec_dir=string safe_mode_protected_env_vars=string
22. 常见的 web 攻击方式
常见攻击
XSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往 Web 页面里插入恶意 html 代码,当用户浏览该页之时,嵌入的恶意 html 代码会被执行,从而达到恶意用户的特殊 目的。
XSS는 수동적 공격이며 악용이 어렵기 때문에 많은 사람들이 그 유해성을 무시하는 경우가 많습니다. 그러나 프론트엔드 기술의 지속적인 발전과 리치 클라이언트의 애플리케이션 수가 증가함에 따라 이 문제는 점점 더 많은 관심을 끌고 있습니다.
간단한 예:
현재 sns 사이트 사용자라면 js를 실행할 수 있는 정보 공개 기능에 취약점이 있습니다. 이때 악성 스크립트를 입력하면 모든 사람의 브라우저가 작동하게 됩니다. 현재 귀하의 새로운 정보를 보는 사람은 이 스크립트를 실행하면 프롬프트 상자가 나타날 것입니다(아주 멋진 팝업 광고:). 좀 더 급진적인 행동을 한다면 그 결과는 상상할 수 없을 것입니다.
CSRF(Cross Site Request Forgery), 교차 사이트 요청 위조. 이름에서 알 수 있듯이 사용자는 자신의 ID를 사용하여 사용자가 모르는 사이에 연결 요청을 위조함으로써 공격자가 달성해야 하는 목표 중 일부를 달성할 수 있습니다. csrf의 공격은 공격자의 활성 행동에 의해 트리거되어야 하는 xss csrf의 공격과 다릅니다. '낚였다'는 의혹이 있는 것 같습니다.
다중 창 브라우저는 열린 새 창에 현재 세션이 모두 포함되어 있기 때문에 폭정에 기여한 것으로 의심되는 것 같습니다. IE6과 유사한 단일 브라우저 창이라면 각 창이 독립적인 프로세스이기 때문에 그러한 문제는 없을 것입니다. .
간단한 예: White Society를 플레이하고 있는데 누군가 링크를 보내는 것을 봅니다. 그러면 이 링크에 선물 보내기 양식이 위조됩니다. 이것은 단지 간단한 예일 뿐이며 문제는 일반적입니다. .
쿠키 하이재킹. 해당 페이지의 권한을 획득하여 해당 페이지에 악성 사이트에 대한 간단한 요청을 작성하고, 사용자의 쿠키를 가지고 다니면, 쿠키를 획득한 후 해당 쿠키를 통해 해당 사이트에 훔친 사용자로 직접 로그인할 수 있습니다. 쿠키 하이재킹입니다.
간단한 예를 들자면, 어떤 사람이 아주 흥미로운 일기를 써서 모두와 공유했습니다. 많은 사람들이 일기를 보기 위해 클릭하고 공유했습니다. 모든 것이 정상인 것처럼 보였지만, 일기를 쓴 사람은 다른 의도를 가지고 있었습니다. 사이트 외부는 로그에 비밀리에 숨겨져 있으며, 이 로그를 읽는 모든 사람은 자신도 모르게 누군가에게 쿠키를 보내고, 그러면 그 사람은 누구의 쿠키를 통해 로그인할 수 있습니다.
SQL 주입 공격
SQL 주입 공격에서는 사용자가 양식이나 GET 쿼리 문자열을 조작하여 데이터베이스 쿼리에 정보를 추가합니다.
DNS 공격
서비스 거부 공격
서비스 거부 공격은 공격자가 대상 시스템에서 서비스 제공을 중단하도록 시도하는 것을 의미하며 해커가 사용하는 일반적인 공격 방법 중 하나입니다.
공격자는 서비스 거부 공격을 수행하여 실제로 서버가 두 가지 효과를 얻도록 합니다. 하나는 서버의 버퍼를 가득 채우고 새로운 요청을 수락하지 않도록 하는 것입니다. 다른 하나는 IP 스푸핑을 사용하여 서버가 다음을 수행하도록 하는 것입니다. 합법적인 사용자의 연결을 재설정하여 합법적인 사용자의 연결에 영향을 줍니다
23. PHP 안티 핫링크 방지의 기본 아이디어
핫링크란 무엇인가요?
핫링크란 서비스 제공자가 자체적으로 서비스를 제공하지 않는 콘텐츠를 말하며, 기술적 수단을 통해 최종 사용자에게 유익한 다른 인터페이스(광고 등)를 우회하고, 다른 서비스 제공자의 서비스 콘텐츠를 자체 웹사이트에서 최종 사용자에게 직접 제공하는 것을 말합니다. . 최종 사용자의 탐색 및 클릭률을 속이는 행위입니다. 수혜자는 자원을 전혀 또는 거의 제공하지 않는 반면, 실제 서비스 제공자는 아무런 혜택도 받지 못합니다.
웹사이트 핫링크는 도난당한 웹사이트의 대역폭을 대량으로 소모하며, 실제 클릭률은 매우 낮을 수 있어 도난당한 웹사이트의 이익을 심각하게 훼손할 수 있습니다. 핫링크를 방지하는 방법은 무엇입니까?
가끔 파일이나 디렉터리 이름을 바꾸세요
참조 페이지 제한
서버는 사용자가 제출한 정보의 웹사이트 주소를 획득한 다음 이를 실제 서버 주소와 비교하는 것이 원칙입니다. 사이트 내에서 제출되었거나 자체적으로 신뢰되는 사이트를 제출하세요. 그렇지 않으면 핫 링크로 간주됩니다. 구현할 때 HTTP_REFERER1 및 htaccess 파일(mod_Rewrite를 활성화해야 함)을 정규식과 결합하여 사용자의 각 액세스 요청과 일치시킬 수 있습니다.
파일 위장
파일 위장은 현재 가장 일반적으로 사용되는 거머리 방지 기술로, 일반적으로 서버 측 동적 스크립트(PHP/JSP/ASP)와 결합됩니다. 실제로 사용자가 요청한 파일 주소는 위장된 스크립트 파일일 뿐입니다. 이 스크립트 파일은 사용자의 요청을 인증하고 일반적으로 핫링크인지 여부를 판단하는 기준으로 세션, 쿠키 또는 HTTP_REFERER를 확인합니다. 실제 파일은 실제로 사용자가 접근할 수 없는 곳에 숨겨져 있습니다. 사용자가 인증을 통과한 후에만 사용자에게 반환됩니다
암호화된 인증
이 안티 리칭 방법은 먼저 클라이언트로부터 사용자 정보를 얻은 다음 이를 기반으로 합니다. 이 정보와 사용자가 요청한 파일 이름은 인증을 위해 문자열(세션 ID)로 암호화됩니다. 인증이 성공한 후에만 서버는 사용자에게 필요한 파일을 클라이언트로 보냅니다. 일반적으로 우리는 URL 매개변수의 일부로 암호화된 세션 ID를 서버에 전달합니다. 이 세션 ID는 사용자의 정보와 연결되어 있으므로 다른 사람이 링크를 도용하더라도 세션 ID는 신원 인증을 통과할 수 없으므로 안티를 달성합니다. - 목적. 이 방법은 분산된 핫링크에 매우 효과적입니다.
임의 추가 코드
每次,在页面里生成一个附加码,并存在数据库里,和对应的图片相关,访问图片时和此附加码对比,相同则输出图片,否则输出 404 图片
加入水印
24. HTTP 请求头信息和响应头信息
请求头信息
POST /scp1.1.0/prs/new_rnaseqtask/run_go HTTP/1.1 Host: 172.30.4.102 User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20100101 Firefox/6.0 Accept: / Accept-Language: zh-cn,zh;q=0.5 Accept-Encoding: gzip, deflate Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7 Connection: keep-alive Content-Type: application/x-www-form-urlencoded; charset=UTF-8 X-Requested-With: XMLHttpRequest Referer: http://172.30.4.102/scp1.1.0/index.php/prs... Content-Length: 1819 Cookie: ci_session=a%3A4%3A%7Bs%3A10%3A%22session_id%22%3Bs%3A32%3A%22e31556053ff9407a454f6a1e146d43eb%22%3Bs%3A10%3A%22ip_address%22%3Bs%3A12%3A%22172.16.23.42%22%3Bs%3A10%3A%22user_agent%22%3Bs%3A50%3A%22Mozilla%2F5.0+%28Windows+NT+6.1%3B+rv%3A6.0%29+Gecko%2F2010010%22%3Bs%3A13%3A%22last_activity%22%3Bi%3A1314955607%3B%7D664b51a01ef99bac95f3e2206e79cb00;PHPSESSID=v33mlm1437lmop1fquta675vv4;username=linjinming; tk=1314955601855 Pragma: no-cache Cache-Control: no-cache
响应头信息
HTTP/1.1 200 OK Date: Fri, 02 Sep 2011 09:27:07 GMT Server: Apache/2.2.3 (Red Hat) X-Powered-By: PHP/5.1.6 Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Vary: Accept-Encoding Content-Encoding: gzip Content-Length: 31 Connection: close Content-Type: text/html; charset=UTF-8
25. MySQL
MySQL 数据库性能优化
使用 mysqlreport;
正确使用索引:explain 分析查询语句,组合索引,索引副作用(占空间、update)
开启慢查询日志、使用慢查询分析工具 mysqlsla;
索引缓存、索引代价(插入更新索引);
表锁,行锁,行锁副作用(update 多时候变慢),在 select 和 update 混合的情况下,行锁巧妙解决了读写互斥的问题;
开启使用查询缓存;
修改临时表内存空间;
开启线程池;
MySQL Query 语句优化的基本思路和原则
1、优化需要优化的 Query;
2、定位优化对象的性能瓶颈;
3、明确优化目标;
4、从 Explaing 入手;
5、多使用 Profile;
6、永远用小结果集推动大的结果集;
7、尽可能在索引中完成排序;
8、只取自己需要的 Columns;
9、仅仅使用最有效的过滤条件;
10、尽可能避免复杂的 Join 和子查询。
MySQL 中 MyISAM 引擎和 InnoDB 引擎的区别以及它们的性能
1:Innodb 支持事物,Myisam 不支持
2:锁定机制不一样,Myisam 支持表锁定,而 Innodb 支持行锁
3:Myisam 不支持外键,Innodb 能支持
4:Myisam 能在特定环境下支持全文索引,而 Innodb 不支持
5:Myisam 支持数据压缩,Innodb 不支持
6:在数据存储上,Myisam 占用的空间少,Innodb 相对多些
7:Myisam 在批量插入和查询方面速度上有优势,而 Innodb 由于支持行锁,所以在数据修改方面更胜一筹
MySQL 存储引擎
MyISAM:不支持事务、表锁和全文索引,操作速度快
InnoDB:行锁设计、支持外键、支持安全事务
HEAP:数据存放在内存中,临时表
NDB Cluster:MySQL 的簇式数据库引擎
CSV: 存储引擎把数据以逗号分隔的格式存储在文本文件中。
FEDERATED:存储引擎表并不存放数据,它只是指向一台远程 MySQL 数据库服务器上的表 Archive: 只支持 INSERT 和 SELECT 操作,压缩后存储,非常适合存储归档数据
Merge:允许将一系列等同的 MyISAM 表以逻辑方式组合在一起,并作为 1 个对象引用它们 表类型,区分表类型
优化表设计的常用思路
负载均衡的数据库设计
数据类型及详细定义,区分
26. Apache
性能优化,配置,fastCGI 等几种工作模式
27. Ajax
用 JS 实现 Ajax 功能
var createXHR = function(){ } var addURLParam = function(url, name, value){ } var xhr = createXHR(); xhr.onreadystatechange = function(){ } var url = 'testAjax.php'; addURLParam(url, 'name', 'linjm'); xhr.open('get',url,true); xhr.send(NULL); if(xhr.readyState == 4){ } if(xhr.status > 200 && xhr.status < 300 || xhr.status == 304){ } alert(xhr.responseText); url += (url.indexOf('?') == -1 ? '?' : '&'); url += encodeURIComponent(name) + '=' + encodeURIComponent(value); return url; if(window.XMLHttpRequest){ } return new XMLHttpRequest(); return new ActiveXObject('Microsoft.XMLHTTP'); throw new Error('No XMLHttpRequest available'); }else{ }else{}
28. Javascript
变量、作用域、作用域链.