PHP经典实例读书笔记--Web基础

来源:互联网 发布:宁波旅游 知乎 编辑:程序博客网 时间:2024/06/10 00:13

1、Web编程

  • PHP第一版是为了Web编程而写,所以能一直流行下来
  • HTTP请求是“无状态的”,每个请求与前一个状态并无连接
  • Cookie可以连接同一个用户的多个请求,可以跟踪用户的浏览历史,如购物车
  • Cookie存储在浏览器中,是服务器指示浏览器随请求发送的一个小文本串

2、设置cookie

问题

希望设置一个cookie,使网站能识别来自同一个Web浏览器的后续请求。

解决方案

调用setcookie()并提供一个cookie名和值。

setcookie('flavor','chocolate chip');//PHP将cookie随HTTP首部发送给浏览器,如果没有使用输出缓冲,必须在没有输出之前调用setcookie()//函数原型bool setcookie(string $name [,string $value[,int $expire=0[,string $path[,string $domain[,bool $secure=false[,bool $httponly=false ]]]]]])//第一个参数:cookie的键//第二个参数:cookie的值//第三个参数:cookie过期时间,默认在浏览器关闭时过期//第四个参数:只有当页面请求的页面以指定的字符串开头才会发送给服务器//第五个参数:只有当所请求的页面的主机名以指定的域名结尾时才会发送给服务器//第六个参数:是否只允许使用HTTPS协议才发送//第七个参数:是否只允许使用http协议发送请求

扩展:setcookie() 的有关文档http://www.php.net/setcookie


3、读取和删除cookie

问题

希望读取之前设置的一个cookie的值,或者删除已经存在的一个cookie。

解决方案

查看$_COOKIE超级全局变量数组。

if(isset($_COOKIE['flavor'])){    print "You ate a {$_COOKIE['flavor']} cookie";}//浏览器向服务器发送一个cookie时,它只发送值。无法通过$_COOKIE访问cookie的域、路径、到期时间、安全状态,因为浏览器没有发送。//删除一个cookie,只需要将指定的cookie的值设置为空,过期时间设置为过去时间setcookie('flavor','',1);//删除cookie时,必需具有相同的参数,包括路径、域和安全标志。

扩展:setcookie() 的有关文档http://www.php.net/setcookie


4、构建查询字符串

问题

需要构造一个链接,其中的查询字符串中包含键/值对。

解决方案

使用 http_build_query() 函数。

$vars = array('name'=>'Oscar th Grouch',              'color'=>'green',              'favorite_puctuation'=>'#');$query_string = http_build_query($vars);$url = '/muppet/select.php?'.$query_string;//使用http_build_query()函数,能够将特殊的字符进行转义编码//编码时可能与HTML实体冲突,破坏构造的URL,常用的两种选择//1、选择不会与实体混淆的变量名,如_amp而不是amp//2、输出URL之前将对应HTML实体的字符转换为相应的实体,使用htmlentities()$url = '/muppet/select.php?'.htmlentities($query_string);

扩展:http_build_query() 的有关文档http://www.php.net/http_build_query


5、读取POST请求

问题

希望直接访问一个请求体,而不是访问PHP放在$_POST中的解析后的数据。例如希望处理一个XML文档,这个文档作为Web服务器请求的一部分提交。

解决方案

读取php://input流。

//读取全部请求内容,而不是几个参数的内容$body = file_get_contents('php://input');//函数原型 string file_get_contents ( string $filename [, bool $use_include_path = false [, resource $context [, int $offset = -1 [, int $maxlen ]]]] )

扩展:php://input 的有关文档http://www.php.net/wrappers


6、使用HTTP基本或摘要认证

问题

希望利用PHP用密码保护网站的某些部分。不是将密码保存在外部服文件中,让服务器来验证,而是希望在一个PHP程序中实现密码验证逻辑。

解决方案

使用$_SERVER[‘PHP_AUTH_USER’]和 $_SERVER[‘PHP_AUTH_PW’] 超级全局变量提供的用户名和密码,如果拒绝访问可发送一个WWW-Authenticate首部,用来标识认证安全域的响应,而且响应的HTTP状态码为401。

//这是采用系统自带的基本认证方式,基本认证用户名和密码用明文传输,不安全if(!valid($_SERVER['PHP_AUTH_USER'],$_SERVER['PHP_AUTH_PW'])){    http_response_code(401);    header('WWW-Authenticate: Basic realm="My Website"');    echo 'you need to enter a valid username and password';    exit();}//使用摘要认证时,密码本身不会从浏览器发送到服务器,而是发送一些散列值

扩展:HTTP认证 的有关文档http://www.php.net/feature.http-auth


7、使用cookie认证

问题

希望更多的控制用户登录过程,如提供自己登录的表单。

解决方案

将认证状态存储在一个cookie中,或者存储为一个会话的一部分,用户登录成功时,存储用户名,散列值和一个密语。使用户无法由用户名建立cookie

//发送cookie之前,将cookie加盐之后再用md5加密$secret_word = 'if i ate spinach';if(validate($_POST['username'],$_POST['password'])){    setcookie('login',$_POST['username'].','.md5($_POST['username'].$secret_word));}//为了方便用户使用,可以使用会话机制,将相应的信息存在服务器中

扩展:md5() 的有关文档http://www.php.net/md5


8、读写HTTP首部

问题

读写一个HTTP请求首部。

解决方案

要读取一个首部,可以使用$_SERVER超级全局变量或者使用header()函数来写

//查看有哪些首部echo "<pre>";print_r($_SERVER);echo $_SERVER['HTTP_USER_AGENT'];//也可以使用getallheades()函数来查看有哪些首部$header = getallheaders();//通过header()函数来指定HTTP的头部header('Content-Type:image/png');

扩展:getallheaders() 的有关文档http://www.php.net/getallheaders


9、发送一个特定的HTTP状态码

问题

希望显示设置HTTP状态码。例如,希望指示用户没有权限访问这个页面,或者页面不存在。

解决方案

使用 http_response_code() 来设置

http_response_code(404);//常用的http状态响应码200 请求成功301 请求的资源已经永久的移动302 重定向,请求的资源被暂时移动304 未修改,与上次请求的内容相同401 未认证,Unauthorized403 禁止访问404 未找到500 服务器故障502 服务器无响应504 网关超时

扩展:http_response_code() 的有关文档http://www.php.net/http_response_code


10、重定向到不同的位置

问题

希望将用户自动重定向到一个新的URL。例如,成功保存表单数据后,希望用户重定向到一个确认页面,确认数据已经保存

解决方案

使用 header() 中的Location首部,并指定新URL,然后调用 exit() 方法

//重定向必须包含协议名和主机名header('Location: http://www.520dxm.top/confirm.php?id=123');//重定向的时候,可以直接传递参数exit();//重定向URL要用GET获取。不能通过POST来获取一个URL,不过可以利用JavaScript,通过POST模拟重定向

扩展:header() 的有关文档http://www.php.net/header


11、浏览器刷新输出

问题

希望强制将输出发送到浏览器。例如,希望在完成一个可能很慢的数据库查询之前为用户提供一个状态更新。

解决方案

使用 flush()

print 'Finding identical snowflakes ...';//强制完成数据输出,不过Web服务器可能有一定的缓存,可以用空白填充flush();$sth = $dbh->query('select * from snowflakes');

扩展:flush() 的有关文档http://www.php.net/flush


12、浏览器缓冲输出

问题

希望在发送首部或cookie之前生成输出。

解决方案

使用 ob_start() ,在最下面调用ob_end_flush(),这样一来生成输出的命令和发送首部的命令可以混合在一起了,调用用ob_end_flush(),之前不会发送输出

ob_start();echo 'hello world';setcookie('name','xujun');ob_flush_end();funcion mangle_email($s){    //对$s中的字符串进行处理}//ob_start还可以传入一个回调函数,用于处理缓冲输出ob_start('mangle_email');I would not like spam sent to xujunrt@163.comob_flush_end();

扩展:ob_start() 的有关文档http://www.php.net/ob-start


13、压缩Web输出

问题

希望向支持自动解压缩的浏览器发送压缩内容。

解决方案

在php.ini文件中,配置 zlib.output_compression=1

浏览器通过Accept-Encoding首部告诉服务器它可以接受压缩响应。zlib.output_compression_level=1...zlib.output_compression_level=9压缩级别越高,消耗服务器CPU资源的时间越多。压缩之后的数据量越小

扩展:zlib 的有关文档http://www.php.net/zlib


14、读写环境变量

问题

希望读写环境变量的值。

解决方案

使用 getenv() 和 putenv()

$path = getenv('PATH');//默认情况下环境变量不会自动加载到$_ENV中,可以到variables_order配置开启$name = $_ENV['USER'];//希望在脚本中动态设置环境变量putenv('ORACLE_SID = ORACLE');//配置oci扩展

扩展:getenv() 的有关文档http://www.php.net/getenv


15、 将移动浏览器重定向到专为移动设备优化的网站

问题

希望将移动设备或平板设备浏览器重定向到专门为这些设备优化的一个替代网站或替代内容。

解决方案

使用 get_browser() 返回的对象来确定这是否是一个移动浏览器

//前提是下载一个php_browscap.ini文件,将其配置到php.ini中if($browser->ismobilebrowser){    //手机浏览器}else{    //网页浏览器}//为了避免麻烦,可以使用$_SERVER['HTTP_USER_AGENT'],来判断

扩展:getenv() 的有关文档http://www.php.net/getenv

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 上古卷轴5不能动怎么办 上古卷轴ol卡死怎么办 小妹妹这么骚长大了怎么办 同事借钱忘了还怎么办 怀了二胎想离婚怎么办 如果闺蜜疏远了怎么办 考上博士但是硕士要延期怎么办 硕士延期也不能毕业怎么办 硕士论文工作量太少被延期了怎么办 竞彩足球比赛延期中断怎么办? 竞彩足球输了怎么办 讯飞语音不兼容百度怎么办 虎牙直播不兼容语音怎么办 为什么手机打开游戏就死机怎么办 2007cad打开时时死机怎么办 手机qq总是无响应怎么办 英雄联盟登录服务器未响应怎么办 苹果7p照相死机怎么办 小米手机qq打不开怎么办啊 电脑qq老是闪退怎么办 微信摄像卡住了怎么办 电脑打开应用程序没反应怎么办 宇飞来手机锁了怎么办 宇飞来手机忘记密码怎么办 vivo手机突然开不了机怎么办 苹果六关不了机怎么办 微信老是无响应怎么办 打游戏被骂了怎么办 微信运动跳转排行榜失败怎么办 小恩爱账号忘了怎么办 华为账号更换后游戏账号怎么办 注册游戏账号需要身份证怎么办 英雄联盟被裁决了怎么办 百度网盘密码重置不了怎么办 sap密码输入被锁怎么办 dnf二级密码错10怎么办 大网卡网速慢了怎么办 小米路由器无线速度慢怎么办 小米手机无线速度慢怎么办 电脑网卡驱动没了怎么办 电脑显示网卡驱动不正常怎么办