随笔分类 - PHP / Web基础
摘要:用户注册你的网站时,要确认他们提供了一个正确的email地址,这会很有帮助。要验证用户提供的email地址,可以向他们注册时提供的地址发送一个email。如果他们几天后仍未访问email中包含的特殊URL,则撤销他们的帐户。 这个系统包括3个部分。 第一部分是notify-user,php程序,它向
阅读全文
摘要:问题 希望将移动设备或平板设备浏览器重定向到专门为这些设备优化的一个替代网站或替代内容。 解决方案 使用get_browser()返回的对象来确定这是否是一个移动浏览器: if($browser->ismobilebrower){ // 输出移动设备布局 }else{ // 输出桌面计算机布局 }
阅读全文
摘要:问题 希望PHP与Apache请求进程的其他部分通信。这包括在access_log中设置变量 解决方案 使用apache_note(): // 获得值 $session = apache_note('session'); // 设置值 apache_note('session', $session)
阅读全文
摘要:根据环境变量调整行为 $version =(isset($_SERVER['SITE_VERSION']) ? $_SERVER['SITE_VERSION'] : 'guest'); //如果用户未能正确登录,重定向到http://guest.example.com if('members' ==
阅读全文
摘要:问题 希望得到一个环境变量的值。 解决方案 使用getenv(): $path = getenv('PATH'); 如果将PHP作为一个ISAPI模块运行,getenv()数则不可用。
阅读全文
摘要:问题 希望向支持自动解压缩的浏览器发送压缩的内容。 解决方案 将以下设置增加到php.ini文件: zlib.output_compression=1 浏览器通过Accept-Encoding首部告诉服务器它可以接受压缩的响应。如果一个浏览器发送了Accept-Encoding:gzip或Accep
阅读全文
摘要:问题 希望在发送首部或cookie之前就开始生成输出。 解决方案 在页面最上面调用ob_start(),另外在最下面调用ob_end_flush()。这样一来,生成输出的命令和发送首部的命令就可以混杂在一起。调用ob_end_flush()之前不会发送输出。 // ob_start(); I hav
阅读全文
摘要:问题 希望强制将输出发送到浏览器。例如,希望在完成一个可能很慢的数据库查询之前为用户提供一个状态更新。 解决方案 使用flush(): print 'Finding identical snowfakes...'; flush(); $sth = $dbh->query('SELECT shape,
阅读全文
摘要:问题 希望将用户自动重定向到一个新的URL。例如,成功保存表单数据后,希望将用户重定向到一个确认页面,确认数据已经保存。 解决方案 输出后,使用header()发送一个Location首部并指定新URL,然后调用exit(),以避免再输出其他内容: header('Location: http://
阅读全文
摘要:问题 希望显式设置HTTP状态码。例如,希望指示用户没有得到授权来查看这个页面,或者这个页面未找到。 解决方案 使用http_response_code()设置响应: http_response_code(401); 使用http_response_code()时要提供状态码,PHP会负责设置适当的
阅读全文
摘要:问题 希望写一个HTTP首部。 解决方案 调用header()函数: // 指出这是一个PNG header('Content-Type: image/png'); Web服务器和PHP通常会负责为所有必要的首部设置适当的值来支持你的脚本。如果不能让服务器计算首部值,或者希望改变默认行为,可以使用h
阅读全文
摘要:问题 希望读取一个HTTP请求首部。 解决方案 要读取一个首部,可以查看$_SERVER超级全局变量数组: //User-Agent首部 echo $_SERVER['HTTP_USER_AGENT']; 要读取所有首部,可以调用getallheaders(): $headers = getallh
阅读全文
摘要:希望更多地控制用户登录过程,如提供你自己的登录表单。 将认证状态存储在一个cookie中,或者存储为会话的一部分。用户成功登录时,将他的用户名(或另一个唯一值)放在一个cookie中。另外还要包含用户名的一个散列值和一个密语,使用户无法仅由用户名建立认证cookie: $secret_word =
阅读全文
摘要:希望利用PHP用密码保护网站的某些部分。不是将密码保存在一个外部文件中并由Web服务器来处理认证,而是希望在一个PHP程序中实现密码认证逻辑。 function validate($user, $pass){ /*可以替换为适当的用户名和密码检查,如检查一个数据库*/ $users = array(
阅读全文
摘要:希望直接访问一个请求的体,而不是访问PHP放在$POST中的解析后的数据。例如,希望处理一个XML文档,这个文档作为Web服务请求的一部分提交。 解决方案解决方案 读取php://input流: $body = file_get_contents('php://input'); file_get_c
阅读全文
摘要:需要构造一个链接,其中的查询字符串中包含名/值对。 使用http_build_query()函数: $vars = array('name' => 'Oscar the Grouch', 'color' => 'green', 'favorite_punctuation' => '#'); $que
阅读全文
摘要:希望删除一个cookie,不让浏览器将它发回给服务器。例如,使用cookie跟踪网站的用户登录情况时,如果一个用户注销,就可以删除相应的cookie。 调用setcookie(),不过不提供cookie的值,并指定过去的一个时间作为到期时间: setcookie('user','',1); 除了值和
阅读全文
摘要:读取之前设置的一个cookie的值 // 查看$_COOKIE超级全局变量数组: if(isset($_COOKIE['user'])){ print "You ate a {$_COOKIE['user']} cookie."; }else{ print "Please ate a cookie.
阅读全文
摘要:设置一个cookie,使网站能识别来自同一个Web浏览器的后续请求 bool setcookie ( string $name [, string $value = "" [, int $expires = 0 [, string $path = "" [, string $domain = ""
阅读全文