PHP和MySQL开发の 第二章数据的存储与检索

第二章 数据的存储与检索

1.关于时区的设置

  • PHP5开始都需要自己设置时区了,具体设置方法如下:
    1.可以通过修改php.ini文件中的date.timezone = PRC;来显示(这种方法修改之后要保存并重启Apache
    2.通过在PHP代码页面开头输入date_default_timezone_set('PRC');来解决。(此种方法麻烦在于每写一个新的页面就得重新写一个放开头。)
    2. fopen()函数
    • 打开文件或者URL;需要传递2、3或4个参数。通常代码如下:

      • $fp=fopen("$DOCUMENT_ROOT/../orders/oreders.txt",'ab');

      • 后面ab可能取值为
    • fopen()函数第3个参数是可选的,如果要在include_path中搜索某个文件,就可以使用,具体用法是将这个参数设置为1(true)。

      • $fp=fopen("$DOCUMENT_ROOT/../orders/oreders.txt",'ab',true);
    • 第4个参数是允许fopen()函数的文件名称可以以协议名称开始(如http://或ftp:// 等),并且可以远程打开该文件。

      • 如果不想使用该参数,可以通过php.ini文件中的allow_url_fopen指令来禁用。
  • URL中的域名是不区分大小写,但是路径和文件名可能会区分大小写。
  • 出现Warning: fopen(D:/myblog/../orders/orders.txt): failed to open stream: No such file or directory in D:\myblog\PHP&MYSQL\first clas.php on line 65情况的解决方法。
    • 原代码如下:

      • $fp=fopen("$DOCUMENT_ROOT/../orders/orders.txt",'ab');
    • 运行之后会报出如下警告:

      • Warning: fopen(D:/myblog/../orders/orders.txt): failed to open stream: No such file or directory in D:\myblog\PHP&MYSQL\first clas.php on line 65
        -大致意思是该fopen语句没有找到正确的文件或路径。
    • 解决办法:

      • 由于我是在windows下使用PHP所以需要再"$DOCUMENT_ROOT/../orders/orders.txt"这部分中所有的符号都加上转义字符,这样windows才会认为路径正确。
      • 尤其需要注意的是"$"符号前也要加入转义字符,不然依旧会报错。
  • 修改后的代码如下,正反斜线均可以,但前面一定要加入转义字符
    • 1.$fp=fopen("\$DOCUMENT_ROOT\\..\\orders\\orders.txt",'ab');
    • 2.$fp=fopen("\$DOCUMENT_ROOT\/..\/orders\/orders.txt",'ab');

3.fwrite()函数

  • 在PHP中写文件。
  • int fwrite(respice handle,string string[,int length])
  • length这个参数是写入的最大字符数,可选。
  • fputs()也是写文件,其可以看做是fwrite()的别名函数。

4.feof()函数

  • 测试文件指针(1)是否到了文件结束的位置

5.fgets()、fgetss()、fgetcsv()

  • fgets()函数

    • 可以从文件中每次读取一行内容,直到遇到换行字符位置"windo: \r\n;Linux: \n"
    • 如果指定了长度,则实际读取的长度是指定长度减1B
  • fgetss()函数

    • 和fgets()函数一样,也是从文件每次读取每行内容,但区别在于它可以过滤字符串中包含的PHP和HTML标记。
    • 如果想要在此之上过滤其他特殊标记,需要把其包含在allowable_tags字符串中
    • 出于安全性的考虑,在读取别人所编写的文件或者用户所输入的文件时,推荐使用fgetss()函数,这是因为:
      • 允许无限制的HTML代码出现在文件中可能会破坏之前所设计的格式;
      • 而允许无限制的PHP代码出现在文件中则可能造成安全方面的问题。
  • fgetcsv()函数

    • array fgetcsv (resource fp, int length [, string delimiter[, string enclosure]])
    • 如果在文件中使用了定界符(2),如制表符或者,可以用fgetcsv()函数将文件分成多行。
    • 可以像使用fgets()函数一样使用它,不同的是必须向这个函数传递一个用于 分隔表单域的定界符。
    • length的长度应该比要读的文件最长数据行的字符数大。
    • enclosure用来制定每行中封闭每一个域的字符。如果没有制定任何字符,则默认是"

6.readfile()、fpassthru()、file()

  • readfile()

    • int readfile(string filename, [int use_include_path [, resource context]]);
    • 使用readfile()函数将会打开所指定的文件,并且将文件内容输出到浏览器中,然后再关闭这个文件。
    • use_include_path参数可选,其制定了PHP是否应该再include_path中查找文件。
    • context参数只有在文件被远程(http://或ftp://)打开时才使用。具体是指该函数返回值从文件中读出的字节总数。
  • fpassthru()

    • 使用该函数必须先使用fopen()打开文件。然后文件指针作为参数传递给fpassthru()。这样就可以把文件指针所指向的文件内容发给浏览器。最后 再关闭该文件。
  • flie()

    • 出了和readfile()一样可以将读取的文件内容显示到浏览器上之外
    • 该函数特殊之处在于,它其实是把结果发送到一个数组中,文件中的每一行都将作为一个元素保存在该数组中。

7.fgetc()

  • fgets()函数是一行一行读取内容,fgetc()函数则是每次读取一个字符。
  • 该函数的一个缺点在于它会返回文件结束符EOF.

8.fread()

  • string fread(resource fp, int length);
  • 从文件中读取任意长度的字节
  • 使用该函数,要么它读满length参数所制定的字节,要么就是读到了文件的末尾,要么是网络数据包的结束。

9.file_exists()

  • 该函数可以在不打开文件的前提下,检查一个文件是否存在

10.filesize()

  • 该函数以字节为单位返回一个文件的大小。

11.unlink()

  • 删除相应的文件。
  • 如果无法删除该文件,则函数返回false;同时,如果对该文件的访问权限不够或者该文件不存在,该函数也会返回false。

12.rewind()、fseek()、ftell()

  • rewind()

    • 该函数可以将文件指针复位到文件的开始。
  • ftell()

    • 该函数可以以字节为单位报告文件指针当前在文件中的位置。
  • fseek()

    • int feek(resource fp, int offset [, int whence])
    • 该函数可以将文件指针fp从whence位置移动offset个字节。
    • 其默认值SEEK_SET表示文件的开始处。
    • 该参数的其他可能值为SEEK_CUR(文件指针的当前位置)和SEEK_END(文件的结束)
    • rewind()函数其实等价于调用一个具有零偏移量的fseek()函数

13.flock()

  • bool flock(resource fp, int operation [,int & wouldblock])
  • 该函数是将文件进行锁定的方法。
  • operation的值如下之一:
    • LOCK_SH:取得共享锁定(读操作锁定。意味着文件可以共享,其他人可以读该文件)
    • LOCK_EX:取得独占锁定(写操作锁定。这是互斥的。该文件不能被共享)
    • LOCK_UN:释放锁定(无论共享或独占)
    • LOCK_NB:防止在请求加锁时发生阻塞(windows上暂不支持)
  • 至于wouldblock值:
    • 如果锁定会堵塞的话(EWOULDBLOCK 错误码情况下),可选的第三个参数会被设置为 TRUE。(Windows 上暂不支持)

相关词语

1.文件指针:

  • 在C语言中用一个指针变量指向一个文件,这个指针称为文件指针。通过文件指针就可对它所指的文件进行各种操作。
  • 而在PHP中,所谓文件指针个人的理解是类似于我们平时操作文档时鼠标指针的位置,如图所示:
    • 竖线就是指针

2.定界符:

  • 定界符的出现是为了能够在PHP中输入大量文字而不使用转移符。
  • 简单来说就是允许程序猿自己定义出了单双引号之外的字符串边界。
    • 一般来说在PHP中,我们都是使用""或者''来定义字符串。
    • 但是PHP还可以允许程序猿自己定义字符串边界标记
    • 使用定界符是以<<<开头,来宣告进入定界符模式。
    • <?php echo<<<EEE 为了能够在PHP中输入大量文字而不是用转义符,人们发明出了定界符。 定界符可能一开始"有点难以理解,学会之后是很有用处的"。 简单来说,'定界符就是允许你自己定义除了单双引号之外的字符串的边界'。 实际使用定界符的时候,要注意字符串的分隔符需要自己单独一行,也就是说,在它前后都不能加空格或tab。 EEE; ?>
    • 实际输出效果
  • 特别需要注意!
    • 虽然使用定界符之后可以随意使用""''而不用加转义符,但如果是使用$依旧需要加转义符"\$"
    • 注意字符串的分隔符需要自己单独一行
    • 定界符的前后都不能有其他符号或者空格,也就是说开始的EEE这个后面不能有空格或者任意符号,结束的EEE也只能加上个;来表示定界符结束。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容

  • 1、文件处理流程 文件处理流程:写入文件流程: 打开文件,文件不存在就创建; 将数据写入文件; 关闭文件。读文件流...
    ManZb阅读 460评论 0 0
  • php是一种服务器端解释的脚本语言。 什么是PHPPHP是一种服务器端脚本语言,他是专门为Web而设计的。 第一篇...
    vernwang阅读 1,525评论 1 49
  • 一、php可以做什么 php是一种可以在服务器端运行的编程语言,可以运行在Web服务器端。 php是一门后台编程语...
    空谷悠阅读 3,086评论 4 97
  • C/C++输入输出流总结 前两天写C++实习作业,突然发现I/O是那么的陌生,打了好长时间的文件都没有打开,今天终...
    LuckTime阅读 1,706评论 0 6
  • 那些工作起来就跟疯了一样的人,反正我是一点也不羡慕,一点也不。 朋友圈里有各种很忙的人,忙兼职,管社团活动,...
    繁樱之处灼灼银花阅读 940评论 3 1