说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

技术杂项PHP教程结束篇 -PHP初学入门教程13

HTML文档下载 WORD文档下载 PDF文档下载
图像生成、cookie操作等内容。

 

13.1 生成图像 

 

  PHP可以操作处理图像。如果你已经安装了GD库,你甚至可以利用PHP生成图像。

 

<?Header("Content-type: image/gif");$string=implode($argv," ");$im = imagecreatefromgif("images/button1.gif");$orange = ImageColorAllocate($im, 220, 210, 60);$px = (imagesx($im)-7.5*strlen($string))/2;ImageString($im,3,$px,9,$string,$orange);ImageGif($im);ImageDestroy($im);?>
(译者注:以上代码段缺少注释,请读者参考PHP Manual的图像处理函数部分)
  这段代码在其他页面中通过以下标记<img src="button.php3?text">调用,然后以上的那段button.php3代码取得text值并在另外取得的图像文件中加上该值--在以上的代码中该图像文件是images/button1.gif--最后输出到浏览器。假如你想在表单域中使用图像按钮,但是又不希望在每次按钮上的文字改变后不得不重新生成新的图像,就可以利用这样简单的方法动态生成图像文件。
13.2 Cookies
  PHP支持基于HTTP的cookies。在需要时你可以像使用一般变量一样方便的使用cookie。Cookies是浏览器保存于客户端的一些信息片段,由此你可以知道是否一台特定PC上的任何人都访问过你的站点,浏览者者在你的站点上的踪迹等等。使用cookies的典型例子就是对浏览者偏好的甄别。Cookies由函数setcookie()设定。与输出HTTP标头的函数header()一样,setcookie()必须在任何实际内容杯输出到浏览器之前调用。以下是一个简单例子:
<?if (empty($VisitedBefore)) {// 如果没有设定cookie,为cookie赋上当前时间值// 函数中的最后一个参数声明了该cookie保存的时间// 在这个例子中是1年// time()函数返回自1970年1月1日以来的以秒数计的时间SetCookie("VisitedBefore",time(), time()+(60*60*24*365));} else {// 欢迎浏览者再次光临 echo "Hello there, welcome back<BR>"; // 读取cookie并判断if ( (time() - $VisitedBefore) >= "(60*60*24*7)" ) echo "Why did you take a week to come back. You should be here more often!? "; } ?>
13.3 常用函数
我们简单来看看一些常用的函数。
数组
array - 生成数组 
count - 数组元素个数 
sort - 数组排序,另有其他几种排序函数可供使用 
list - 列出数组元素 
each - 返回下一个key/value对 
current - 返回当前数组元素 
next,prev - 传回当前数组元素前后指针 
日期和时间
checkdate - 验证日期/时间格式 
date - 生成日期/时间格式 
time - 当前时间信息 
strftime - 格式化日期/时间 
目录、文件系统
chdir - 改变目录 
dir - 目录类别 
opendir, readdir, closedir - 开启、读取、关闭目录 
fopen, fclose - 开启、关闭文件 
fgets, fgetss - 逐行读取内容 
file - 将整个文件读入一个数组变量中 
正则表达式
ereg - 匹配正则表达式 
eregi - 大小写非敏感匹配正则表达式 
ereg_replace -匹配正则表达式并替换 
eregi_replace -大小写非敏感匹配正则表达式并替换 
split - 依规则切开字符串并以数组形势存储
字符串
AddSlashes - 加上斜杠后使用字符串 
echo - 输出一个或多个字符串 
join, implode - 将数组元素合并为字符串 
htmlentities, htmlspecialchars - 将HTML特殊字符转换为HTML标记形式 
split - 依规则切开字符串并以数组形势存储 
13.4 扩展我们的范例主页
  我们将使用以上提到的一些函数和思想为我们的范例主页添加更多的动态内容。我们可以在每个页面的顶部加上导航栏,同时使得当前页自动的不被链接显示;同时还可以添加一个用户验证表单以便上传音乐、图像等文件并自动更新页面。
导航栏
  实际上就是在footer.inc文件中加上一段代码。假设你的web站点中所有后缀为.php3的文件都会出现在导航栏中,以下就是被存为include/navbar.inc的代码:
<?/* 输出该导航栏,链接所有除当前页的站内.php3文件 */# 读取目录$d = dir("./");echo "<P ALIGN="CENTER"> | \n";while($entry = $d->read()){// 忽略无文件情况if ( !is_file($entry) )continue;/* 将文件名与扩展名分开。由于.是正则表达式特殊字符,应该用引出 */list($filenm, $fileext) = split(".",$entry, 2);// 忽略非.php3文件情况if( $fileext != "php3" )continue;/* 现在我们已经把.php3文件都选出,下面搜寻文件中的第一行(标题)类似$title="something";并将以上标题内容分开,用作链接文字 */$linknm = "";$fp=fopen($entry,"r");while($buffer=fgets($fp, 4096)){$buffer = trim($buffer);// 我们已经把每个文件的标题放在文件的第一行以便搜索// 但是当你改变变量名称时可能会带来大麻烦if (ereg("title *= *"", $buffer)){/* 我们已经取得了标题内容并可以在此基础上进行去除空格等处理。必须以PHP代码方式处理,比如$title = "blah blah" */eval($buffer);// 然后将链接文字显示为标题文字$linknm = $title;break;}}fclose($fp);if ( $entry == basename($PHP_SELF) )echo "$linknm";elseecho "<A HREF="$entry">$linknm</A>";echo " | ";}$d->close();echo " </P>\n";?>
照片收藏夹
  我们将引用基于HTTP的验证、文件系统函数和文件上传功能维护放置图像文件的目录。
同时我们需要建立一个可以列出在该目录下所有照片的页面。
文件上传
<?include("include/common.inc");// 我们在这里再做一次用户验证if(!isset($PHP_AUTH_USER)) {Header("WWW-Authenticate: Basic realm="$MySiteName"");Header("HTTP/1.0 401 Unauthorized");echo "Sorry, you are not authorized to upload filesn";exit;} else {if ( !($PHP_AUTH_USER==$MyName && $PHP_AUTH_PW==$MyPassword ) ){// 如果是错误的用户名称/密码对,强制再次认证Header("WWW-Authenticate: Basic realm="My Realm"");Header("HTTP/1.0 401 Unauthorized");echo "ERROR : $PHP_AUTH_USER/$PHP_AUTH_PW is invalid.<P>";exit;} }if ( $cancelit ) {// 当浏览者按下"取消"按钮则转向首页面header ( "Location: front_2.php3" );exit;}function do_upload () {global $userfile, $userfile_size, $userfile_name, $userfile_type;global $local_file, $error_msg;global $HTTP_REFERER;if ( $userfile == "none" ) {$error_msg = "You did not specify a file for uploading.";return;}if ( $userfile_size > 2000000 ) {$error_msg = "Sorry, your file is too large.";return;}// Wherever you have write permission below...$upload_dir = "photos";$local_file = "$upload_dir/$userfile_name";if ( file_exists ( $local_file ) ) {$error_msg = "Sorry, a file with that name already exists";return;};// 你还可以由此检查文件名称/类型对以确定是何种文件:gif,jpg,mp3…rename($userfile, $local_file);echo "The file is uploaded<BR>n";echo "<A HREF="$HTTP_REFERER">Go Back</A><BR>\n";}$title = "Upload File";include("include/header.inc");if (empty($userfile) || $userfile=="none") {// 输出以下表单?><FORM ACTION="<? echo "$PHP_SELF"; ?>" ENCTYPE="multipart/form-data" METHOD=POST><INPUT TYPE="HIDDEN" NAME="MAX_FILE_SIZE" VALUE="2000000"><INPUT TYPE="FILE" NAME="userfile" SIZE="24" MAXLENGTH="80"><BR><BR><INPUT TYPE="SUBMIT" VALUE="Upload File!" NAME="sendit"><INPUT TYPE="SUBMIT" VALUE="Cancel" NAME="cancelit"><BR></FORM><I><FONT SIZE="2">(You may notice a slight delay while we upload your file.)</FONT></I><?} else {if ( $error_msg ) { echo "<B>$error_msg</B><BR><BR>"; }if ( $sendit ) {do_upload ();} }include("include/footer.inc");?>照片图库<?include("include/common.inc");$title = "Gallery";include("include/header.inc");?><P>Here are some of our family photos. This PHP script can reallybe made better, by splitting into multiple pages.</P><?$d = dir("photos");while($entry = $d->read()){if (is_file("photos/$entry"))echo "<IMG SRC="photos/$entry">\n";}$d->close();?><?include("include/footer.inc");?>
另外,你可以在文件上传的表单中加上一个输入元素去描述该上传的文件。这个元素将被存储在文件中,然后被以上的照片图库的那段代码所读出并显示出来。

 

 

华为FusionCube开启全球规模商用 黑暗架构:以最少时间完成系统升级并获客户认可的开发之道 Hadoop Summit 2013见闻:创业与Hadoop 2.0不可阻挡 Facebook的清洁能源改革——革命尚未成功,仍需努力 YARN或将成为Hadoop新发力点 主流编程语言属性一览(多图) 粉碎硬件复杂论:开发者不懂硬件运行的方式怎么可以?! 最新版Chrome OS加入Word和Excel编辑功能 直指微软 传诺基亚将购诺西全部股份,疑为出售手机业务做准备? 优秀技术领导者的修成之道 直接拿来用!最火前端开源项目(三) 第八届开源中国开源世界高峰论坛成功举办 曾经那些主流的API,而今风光已不再! Android 4.3本月9日亮相 新功能汇总 移动游戏的国际化运营技巧 Google的Janus与Facebook的McDipper:将闪存用于数据中心 拥抱开源还是坚守阵地:传统数据库供应商面临抉择 超棒的30款JS类库和工具 立场坚定:惠普仍然密谋回到智能手机市场 6月份浏览器份额:Chrome成市场份额增长最快浏览器 关于PHP的十大误解 你中了几个? 专访西电朱虎明:异构计算硬件架构呈现百花齐放 百家争鸣 GSMA行纪:各种神器、好玩的、好看的全搜罗 大数据初创企业WibiData将Hadoop“打包”,谷歌董事长施密特两次参投 赚钱不忘环保 苹果计划为数据中心兴建太阳能发电厂 深度解析:清理烂代码 电信开放平台发布短信验证码API 创业教父Paul Graham谈创业投资趋势 挖掘Linux人才,打造Power生态系统!IBM启动“天合应用服务器定义未来挑战赛” 请不要忽略API的安全性 发布将近?苹果在多地注册“iWatch”商标 请问在HTML中加了function document.onkeydown() if (event.keyCode == 13) event.keyCode =9; 为什么必输框的验证,不起作用了? web service 的安全问题(讨论) 帮帮忙,SQL语句问题 动态加载用户控件,怎么设置参数,使用户控件有所变化 大家来讨论讨论这种怪事 WIN2000和LINUX与PHP的搭配的困惑 求助ActiveReport! DBGrid 中字段显示问题,如果对应字段在数据库中是bit性,在用户界面显示时需要显示是“是”或“否”,请各位大侠指点一二,先谢那!! ★★★★如何打开.hxs文件★★★★ DBGrid 中字段显示问题,如果对应字段在数据库中是bit性,在用户界面显示时需要显示是“是”或“否”,请各位大侠指点一二,先谢那!! WIN2000和LINUX与PHP的搭配的困惑 继续帮忙!!! 菜鸟:使用adapter对dataset fill()时提示出错,不知道什么原因 入门问题 CString的find函数 哪位高手能解决Visual C++ Extensions for ADO之AddNew(&rs)的问题?(可惜无分可赠!!!) 在一个对话框中怎么得到另外一个对话框的某个控件的指针? 谁有delphi连接sql server的技术资料文章 谁有delphi6网络编程一书的代码???????????? 超级简单的问题!答了就给分!快快来! 谁有《delphi6网络编程》一书的原代码??????????? AMD xp cpu的性能是怎么样的 请大家帮忙,一个LPTCSTR的数据问题 散分,散分,高手在哪?新买的165上网卡无法拨号上网,救命,喔,救命 请问一个问题。 赛扬1.7G,256M内存打“传奇”有点卡!!!!!!!!帮我,快 如何 将数字字符串 转换为整数? 千万火急----如何把从组件中取的记录集在VB中赋给FPSpread控件? 探讨方法 有些不懂,请帮帮忙,有分。 大哥哥进来看看小妹这个问题好吗? socket高手请进!可以解决吗? java 的帮助文件哪儿可以找到? 很多页面都链接到同一页面,在返回时如何判断返回到原先的页面?(不用histroy.back())? jbuilder9中开发web services,import wsdl文件出错 很多页面都链接到同一页面,在返回时如何判断返回到原先的页面?(不用histroy.back()) 要调用某个DLL中函数,应如何申明? 有问题急? jb8中类找不到了??? 哪位可以告诉我在哪里可以改动网论坛首页上方的banner广告的路径? 救命啊!!为什么在DBASE4里执行“ALTER TABLE TableName ADD COLUMN AAA C(10)”发生异常?!,该语句不兼容啊! 如果当初你没遇到Java,你会选择什么 欢迎参加微软新闻组 & Diyinside Windows User Group离线技术沙龙 访问access数据库怎么不能查日期? Dll问题! 这个异常是什么回事? 小小问题。。。 為深麼我的Wizard模式的PreportyPage的OnWizardNext函數實現後,不能出現第二個頁面,how to. 那一个有的高程模拟试题 简单问题,请指点 在线等待求助:win2000缠人问题 ALLEGATO MINORI PERMESSO DI SOGGIORNO 意大利外国证件上的!求翻译! 广州亚运会游泳馆有一个游泳池长105米、宽10米、深1.6米,在游泳池的四周和池底砌瓷砖,如果瓷砖的边长1分米的正方形,那么至少需要这种瓷砖多少块?列算式 以双曲线的焦点为圆,实轴长为半径的圆与双曲线的渐近线相切,则双曲线的离心率为多少 已知反比例函数y=k/x图像过第二象限内的点A(-2,m)AB⊥x轴于B,Rt△AOB面积为3,若直线y=ax+b经过点A,并且经过反比例函数y=k/x的图像上另一点C(n,-3/2)(2)求△AOC的面积.(3)在y轴上是否存在一点P,使△PAO filesystem crashed during construction什么意思 composition的用法 composition的音标如题 英语翻译 SOS!帮忙改下这篇composition!I did a survey of how long we play sports on weekends.Here are the results.There are 40 students in my class,about 5 students play sports 3-4 hours a day,23 students play sports 1-2 hours a day.There are 10 students 英语翻译也就是 Sandy经常被妈妈叫不要忘记做家庭作业 我妈妈经常给我买衣服.改为被动语态(2种) 用英语写 西湖手划船调价后零投诉 灵隐野导\"媒体称广州公务员年收入超17万 不少人大信访局原副局长辞职当律师 称不是北京天坛公园频发虐猫事件 已致数十只福州旅游局官博骂记者为狗 回应:非官消费者保护法首次大修:网购7日内可无明星进入考题屡见不鲜 “杨幂题”引争环保部:上半年新疆青海等省区氨氮排放北京5药店今起“自助”卖奶粉 可刷银广州公示积分入户入围者 申请者成功率“局长爆粗口”视频为4年前拍摄国研中心专家:负面清单是政府管理经济静安别墅门禁系统还居民清净 封闭管理我省开始推荐2014年度省列重大项目兰州市已下达市级节能改造金1308万今日速览我国提高新建煤矿准入门槛全国3800万人今年弃缴社保金价一月降23元兰州大妈不再出手囤金我省私营企业首次突破10万户新疆尼勒克县“155111工程”强村新疆和静县500名种植业科技示范户喜大流歌异界之宅男传说宇宙雇佣军英雄无敌之异能觉醒神魔日记九州问道维多利亚的秘密星锁神秘档案馆紫云仙超级宠物制造池重生之火神降世旺角电脑中心旅游大鹏所城旅游般若寺旅游净月潭旅游古北口长城旅游白河峡谷旅游成都欢乐谷旅游红叶岭旅游喇叭沟门森林公园旅游黄草梁旅游海坨山旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘