设为首页 收藏本站
查看: 630|回复: 0

[经验分享] Learning PHP -数据的存储与检索

[复制链接]

尚未签到

发表于 2017-4-1 10:35:56 | 显示全部楼层 |阅读模式
存储数据有两种基本方法:保存到普通文件,或者保存到数据库中。
数据写入:

  • 1、打开文件。如果文件不存在,需要先创建它。
  • 2、将数据写入这个文件。
  • 3、关闭这个文件。

数据读出:

  • 1、打开文件。如果这个文件不能开,就应该意识到这一点并且正确地推出。
  • 2、从文件中读出数据。
  • 3、关闭这个文件。

选择文件模式:
当打开一个文件的时候,有以下三种选择。

  • 1、打开文件为了只读、只写或者读和写。
  • 2、如果要写一个文件,你可能希望覆盖已有的文件内容,或者仅仅将新的数据追加到未见末尾。如果该文件已经存在,也可以终止程序的执行而不是覆盖该文件。
  • 3、如果希望在一个区分了二级制方式和纯文本方式的系统上写一个文件,还必须指定采用的方式。

函数fopen()支持以上三种方式的组合。
根据服务器设置不同,可以通过如下三种方式得到文档根目录:

  • $_SERVER['DOCUMENT_ROOT']
  • $DOCUMENT_ROOT
  • $HTTP_SERVER_VARS['DOCUMENT_ROOT']

对于表单数据,第一个风格是首选的。
打开文件fopen(path,mode)
写文件:fwrite($fp, &outputstring)
关闭文件:fclose($fp)
fopen()函数的文件模式

  • r   只读  读模式——打开文件,从文件头开始读
  • r+  只读  读写模式——打开文件,从文件头开始读写
  • w   只写  写模式——打开文件,从文件头开始读。如果该文件已经存在,将删除所有文件已有内容。如果该文       件不存在,函数将创建这个文件。
  • x   谨慎写 写模式打开文件,从文件头开始写。入如果文件已经存在,该文件将不会被打开,fopen()函数将返回false,而且PHP将产生一个警告。
  • x+  谨慎写 读/写模式打开文件,从文件头开始写。入如果文件已经存在,该文件将不会被打开,fopen()函数将返回false,而且PHP将产生一个警告。
  • a   追加   追加模式——打开文件,如果该文件已有内容,将从文件末尾开始追加(写),如果该文件不存在,函数将创建这个文件
  • a+  追加   追加模式——打开文件,如果该文件已有内容,将从文件末尾开始追加(写),如果该文件不存在,函数将创建这个文件
  • b   二进制 二进制模式——用于与其他模式进行连接。如果文件系统能够区分二进制文件和文本文件,你可能会使用它。可以获得最大程度的可移植性。二进制模式是默认的模式。
  • t   文本  用于与其他模式的结合。这个模式只是windows系统下一个选项。

以只读模式打开文件:fopen()
知道何时读完文件:feof()
每次读取一行数据:fgets()fgetss()fgetcsv()   
读取整个文件:readfile()fpassthru()file()

  • 第一种方式是readfile()。readfile($path);调用readfile()函数将打开这个文件,并且将文件内容输出到标准输出中,然后再关闭这个文件。
  • 第二种方式是fpassthru()。要使用这个函数,必须先使用fopen()打开文件。然后将文件指针作为参数传递给fpassthru(),这样就可以把文件指针所指向的文件内容发送到标准输出。然后再将这个文件关闭。如果读操作成功,函数返回true,否则返回false。
  • 第三种读取整个文件的函数是file().它和readfile一样。不过它是把结果发送到一个数组中。$filearray = file($path);
  • 第四种选择是使用file_get_contents()函数。这个函数与readfile()相同,但是该函数将以字符串的形式返回文件内容,而不是将文件内容回显到浏览器中。

读取一个字符:fgetc()

while(!feof($fp)){
$char = fgetc($fp);
if(!feof($fp)){
echo ($char == "\n "? "<br /> ": $char);
}
}
读取任意长度:fread()
读取一个文件的最后一种方法是使用fread()函数从文件中读取任意长度的字节。
查看文件是否存在:file_exists()
确定文件大小:filesize()
删除一个文件:unlink()(PHP中没有名为delete的函数)
在文件中定位:rewind()fseek()ftell()
rewind()函数可以将指针复位到文件的开始。
ftell()函数可以以字节为单位报告文件指针当前在文件中的位置。
调用fseek()函数可以将文件指针fp从whence位置移动offset个字节。
rewind()函数等价于调用一个具有零偏移量的fseek()函数。
文件的锁定:
为了避免多个方法同时操作一个文件,可以使用文件锁定的方法。
文件锁定是通过flock()函数来实现的。
如果打算使用flock()函数,必须将其添加到所有使用文件的脚本中;否则,就没有任何意义。
flock()的操作值

  • LOCK_SH  读操作锁定。这意味着文件可以共享,其他人可以读该文件
  • LOCK_EX  写操作锁定。这是互斥的。该文件不能被共享。
  • LOCK_UN  释放已有的锁定
  • LOCK_NB  防止在请求加锁时发生阻塞

数据库管理系统

  • RDBMS提供了比普通文件更快的数据访问。
  • RDBMS可以很容易地查找并检索满足特定条件的数据集合。
  • RDBMS具有内置的处理并发访问的机制。
  • RDBMS可以随机访问数据。
  • RDBNS具有内置的权限系统。

vieworders.php
<?php
$DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"];
?>
<html>
<head>
<title>Bob's Auto Parts - Customer Orders</title>
</head>
<body>
<h1]]>Bob's Auto Parts</h1>
<h2]]>Customer Orders</h2>
<?php
@$fp = fopen("$DOCUMENT_ROOT/orders/orders.txt", 'rb');
if(!$fp){
echo "<p><strong>No orders pending.Please try again later.</strong></p>";
exit;
}
while (!feof($fp)){
$order = fgets($fp,999);
echo $order."<br />";
}
?>
</body>
</html>
proccessorder.php

<?php
$tireqty = $_POST['$tireqty'];
$oilqty = $_POST['$oilqty'];
$sparkqty = $_POST['$sparkqty'];
$address = $_POST['address'];
$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
$date = date('H:i, jS F Y');
?>
<html>
<head>
<title>Bob's Auto Parts-Order Results</title>
</head>
<body>
<h1>Bob's Auto Parts</h1>
<h2>Order Results</h2>
<?php
echo "<p>Order processed at ".date('H:i, jS F Y')."</p>";
echo "<p>Your order is as follows: </p>";
$totalqty = 0;
$totalqty = $tireqty + $oilqty + $sparkqty;
echo "Items ordered: ".$totalqty."<br />";
if($totalqty == 0){
echo "You did not order anything on the previous page!<br />";
}else{
if($tireqty > 0){
echo $tireqty." tires<br />";
}
if($oilqty > 0){
echo $oilqty." bottles of oil<br />";
}
if($sparkqty > 0){
echo $sparkqty." spark plugs<br />";
}
}
$totalamount = 0.00;
define("TIREPRICE", 100);
define("OILPRICE", 10);
define("SPARKPRICE", 4);
$totalamount = $tireqty * TIREPRICE
+ $oilqty * OILPRICE
+ $sparkqty * SPARKPRICE;
$totalamount=number_format($totalamount, 2, '.', ' ');
echo "<p>Total of order is $.$totalamount.</p>";
echo "<p>Address to ship to is ".$address."</p>";
$outputstring = $date."\t".$tireqty." tires \t".$oilqty." oil\t"
.$sparkqty." spark plugs\t\$".$totalamount."\t".$address."\n";
@ $fp= fopen("$DOCUMENT_ROOT/orders/orders.txt", 'ab');
flock($fp, LOCK_EX);
if(!$fp){
echo "<p><strong>Your orde could not be processed at this time.
Please try again later.</strong></p></body></html>";
exit;
}
fwrite($fp, $outputstring, strlen($outputstring));
flock($fp, LOCK_UN);
fclose($fp);
echo "<p>Order written.</p>";
?>
</body>
</html>
参考资料:
PHP&MySQL.Web

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-358551-1-1.html 上篇帖子: [转]PHP程序中的汉字编码探讨 下篇帖子: 支付宝php支付接口说明
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表