当前位置: 首页 > 后端技术 > PHP

PHP问题

时间:2023-03-30 04:30:11 PHP

1.PHP的垃圾回收机制PHP可以自动管理内存,清除不需要的对象。PHP使用引用计数(referencecounting)GC机制。每个对象都包含一个引用计数器refcount,每个引用都连接到该对象,计数器加1。当引用离开生存空间或设置为NULL时,计数器减1。当引用计数器的一个对象达到零,PHP知道你将不再需要使用这个对象并释放它占用的内存空间。二、session和cookie的区别和连接区别:1、存储位置:Session保存在服务端,Cookie保存在客户端。2、存储形式:Session以对象的形式存储在服务器端,Cookie以字符串的形式存储在客户端。3、用途:Cookie适合保存用户的个人设置、爱好等,Session适合客户认证4、路径:Session不能区分路径。当同一个用户访问一个网站时,所有的Session都可以在任何地方访问。但是如果在cookie中设置了路径参数,则同一个网站中不同路径下的cookie是不能互相访问的。5.安全性:Cookie不是很安全。其他人可以分析和欺骗本地存储的cookie。考虑到安全性,应该使用session6。大小及数量限制:每个域名包含的cookie数量:IE7/8、FireFox:50个、Opera30个;cookie总大小:Firefox和Safari允许cookie最大为4097字节,Opera允许cookie最大为4096字节,InternetExplorer允许cookie最大为4095字节;一般认为Session没有大小和数量的限制。关系:Session需要cookies才能正常工作。如果客户端完全禁止cookies,Session就会失效!由于Session是由应用服务器维护的服务器端存储空间,当用户连接到服务器时,服务器会生成一个唯一的SessionID,并以SessionID为标识访问服务器端Session存储空间。SessionID数据保存到客户端,和Cookie一起保存。当用户提交页面时,会将SessionID提交给服务器,以访问Session数据。此过程不需要开发人员干预。所以一旦client禁用了Cookie,Session也会失效。3、如何修改SESSION的生命周期设置浏览器保存的sessionid过期时间setcookie(session_name(),session_id(),time()+$lifeTime,"/");可以使用SESSION自带的session_set_cookie_params(86400);设置会话的生命周期。您可以通过修改php.ini中的session.gc_maxlifetime参数的值来更改会话的生命周期。数据库抽象层是指PHP逻辑程序代码和数据库之间封装数据库底层操作的中间件。PDO是基于PHP5.1设计的。它使用C语言进行底层开发。设计遵循PHP的特点,以简单易用为原则。严格来说,PDO应该归为PHP5的SPL库之一,而不应该归于数据抽象层,因为它类似于MySQL和MySQLi扩展库的功能。PDO不适合在计划或可能更改数据库的系统中使用。无论后端数据库如何,ADODB访问数据库的方式都是一样的;迁移数据库平台时,程序代码不需要改动太多,实际上只需要改动数据库配置文件即可。提供了大量的汇编方法,目的是针对不同的数据库,在抽象层的底层对这些语句进行针对性的翻译,以适应不同的数据库方言!但是这个抽象层好像体积太大了,整个文件大概有500K。如果你做一个小网站,使用它似乎有点矫枉过正。PHPLib可能是最古老的伴随PHP一起成长的数据库抽象层(但它类似于ADODB。比如它只是一个MySQL抽象类库),这个抽象类使用起来相当简单,体积小,是一个很好的小型网站开发的选择。PDO提供准备语句查询、错误和异常处理、查询结果的灵活访问(返回数组、字符串、对象、回调函数)、防止SQL攻击的字符过滤、事务处理和存储过程。ADODB支持缓存查询、移动记录集、(HTML、分页、选择菜单生成)、事务处理、输出到文件。6、长连接和短连接的区别和长连接的使用:客户端和服务端先建立连接,连接建立后不会断开连接,然后收发消息。这样,通信连接始终存在。这种方式常用于P2P通信。短连接:客户端和服务器每次发送和接收消息时都进行通信,事务完成后立即断开连接。这种方法常用于点对多点的通信。C/S通信。何时使用长连接和短连接:长连接:短连接多用于操作频繁,点对点通信,连接数不宜过多。每个TCP连接的建立需要三次握手,每个TCP连接的断开需要四次握手。如果每次操作都需要建立连接,然后再操作,处理速度会降低,所以每次操作和下一次操作直接发送数据就可以了,不需要建立TCP连接。例如:与数据库的连接使用长连接,如果使用短连接进行频繁通信,会造成socket错误,而且频繁创建socket也是一种资源浪费。短连接:网站的HTTP服务一般使用短连接。因为长连接对服务器有一定的消耗。对于网站等几万甚至上亿的客户端连接,使用短连接可以节省一些资源。试想一下,如果同时使用长连接和几千个用户,每个用户占用一个连接,服务器的压力有多大,可想而知。所以并发量大,但是每个用户在不需要频繁操作的时候需要一个短连接。HTTP协议详解及应用http(HypertextTransferProtocol)是一种基于请求和响应模式的、无状态、短连接、灵活的应用层协议,通常基于TCP连接模式。参考http://blog.csdn.net/gueter/a...(http协议详解)(HTTP响应状态码)HTTP响应状态码状态码由三位数字组成,第一个数字定义了类型response,and有五个可能的值:1xx:Instructions--表示请求已经收到并继续处理2xx:Success--表示请求已经被成功接收、理解和接受3xx:Redirection--进一步的操作必须被执行完成请求4xx:clienterror--请求有语法错误或请求无法执行5xx:server-sideerror--服务器未能执行合法请求常见状态码,状态描述,描述:200OK//客户端请求成功400BadRequest//客户端请求有语法错误,服务端无法理解401Unauthorized//请求未授权,此状态码必须与WWW-Authenticateheade一起使用r字段403Forbidden//服务器收到请求,但拒绝提供服务404NotFound//请求的资源不存在,eg:输入了错误的URL500InternalServerError//服务器发生意外错误503ServerUnavailable//服务器超时//可能恢复正常304NotModifed//自上次请求以来,请求的页面没有被修改过。//服务器返回此响应时,不会返回任何网页内容。9、Socket连接步骤Socket(套接字)概念Socket(套接字)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含了网络通信所必需的五种信息:连接使用的协议、本地主机的IP地址、本地进程的协议端口、IP地址远程主机的名称,以及远程进程端口的协议。Socket连接过程建立一个Socket连接至少需要一对套接字,其中一个运行在客户端,称为ClientSocket,另一个运行在服务器端,称为ServerSocket。套接字之间的连接过程可以分为三个步骤:服务器监听、客户端请求、连接确认。服务器监控:服务器端套接字不定位具体的客户端套接字,而是处于等待连接状态,实时监控网络状态。客户端请求:指客户端的socket发出的连接请求,要连接的目标是服务端的socket。为此,客户端的套接字首先要描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后向服务器端套接字发出连接请求。连接确认:表示服务器端socket监听或接收到客户端socket的连接请求时,响应客户端socket的请求,创建新的线程,将客户端的连接请求传递出去server-sidesocket将描述发送给客户端,一旦客户端确认了描述,连接就建立了。服务器端套接字继续处于监听状态,并继续接收来自其他客户端套接字的连接请求。10、TCP协议,三次握手,四次握手TCP协议(TransmissionControlProtocol)是一种主机到主机层的传输控制协议,提供可靠的连接服务。它使用三次握手来确认连接的建立,并使用四次握手来断开连接。位码就是tcp标志,有6个标志:SYN(同步连接建立)同步ACK(确认确认)PSH(推送传输)FIN(finish结束)RST(reset复位)URG(urgent紧急)12.posix和perl兼容的正则表达式比较和函数性能分析POSIX正则表达式和PCRE正则表达式之间最显着的区别:PCRE函数要求模式以定界符结束。POSIX兼容的正则表达式没有修饰符。与POSIX不同,PCRE扩展没有用于区分大小写匹配的专用函数。相反,支持/i模式修饰符来完成相同的工作。其他模式修饰符也可以用来改变匹配策略。POSIX函数从最左边开始寻找最长的匹配,但PCRE在第一个合法匹配后停止。如果字符串不匹配也没有关系,但如果它们匹配,结果和速度都会有所不同。为了说明差异,请考虑以下示例(来自JeffreyFriedl的书《精通正则表达式》)。使用模式一(自我)?(自给自足)?要匹配字符串oneselfsufficient,PCRE将匹配自身,但使用POSIX,结果将是整个字符串本身足够。两个子字符串都匹配原始字符串,但POSIX将取最长的作为结果。可用于PCRE的修饰符:(i,s,m)13。实现PERL正则表达式抓取html文件标签中的所有href超链接:/