php小型数据库(不用mysql做网站)

 更新时间:2016年11月25日 15:51  点击:2135

php教程小型数据库教程(不用mysql教程做网站)
include 'pdbm.php';

$timestart = explode(' ', microtime());
$timestart = $timestart[0] + $timestart[1];

$pdbm = new pdbm('test');
$pdbm->open(pdbm_creat | pdbm_rewd);

for ($i = 0; $i < 100000; $i++) {
    $pdbm->insert("key{$i}", "value{$i}");
}

$timetime = explode(' ', microtime());
$timetime = $timetime[0] + $timetime[1];

echo $timetime - $timestart;
//*/

读取数据方法

include 'pdbm.php';

$timestart = explode(' ', microtime());
$timestart = $timestart[0] + $timestart[1];

$pdbm = new pdbm('test');
$pdbm->open(pdbm_rewd);

$val = $pdbm->fetch('key9999');
if ($val == null) {
    echo 'not found</br>';
} else {
    echo $val."<br/>";
}

//$pdbm->delete('key100'); //delete data

$val = $pdbm->fetch('key100');
if ($val == null) {
    echo 'not found</br>';
} else {
    echo $val."<br/>";
}

$timetime = explode(' ', microtime());
$timetime = $timetime[0] + $timetime[1];

echo $timetime - $timestart;
//*/

php教程 pcre正则表达式完全教程
预定义常量

preg_pattern_order

结果按照”规则”排序, 仅用于preg_match_all, 即$matches[0]是完整规则的匹配结果, $matches[1]是第一个子组匹配的结果
preg_set_order:

结果按照”集合”排序, 仅用于preg_match_all, 即$matches[0]保存第一次匹配结果的所有结果(包含子组)信息, $matches[1]保存第二次的结果信息
preg_offset_capture

在捕获的结果中, 不仅包含结果子串, 还会包含子串在原字符串中的位置.
preg_split_no_empty

告知preg_split仅返回非空的部分
preg_split_delim_capture

告知preg_split同时捕获规则中的括号表达式匹配到的内容
preg_split_offset_capture

如果设置了这个标记, 每次匹配得到的结果的offset位置将会被同时返回.
preg_no_error

如果preg_last_error调用后返回此值, 则表明正则没有错误
preg_internal_error

如果preg_last_error调用后返回此值, 则表明发生了pcre内部错误
preg_backtrack_limit_error

如果回溯次数超过预设的值, preg_last_error函数返回此值
preg_recursion_limit_error

如果递归次数超过预设的值, preg_last_error函数返回此值
preg_bad_utf8_error

如果preg的最后错误是由于异常的utf-8数据(仅在运行在utf-8模式正则表达式情况下)导致的, 那么preg_last_error返回此值
 

preg_bad_utf8_offset_error

如果偏移量与合法的utf-8代码(仅在运行在utf-8模式正则表达式情况下)的开始点不匹配, preg_last_error的调用返回此值
pcre_version

返回pcre版本号和发布日期.

模式修饰符

i        pcre_classes
大小写不敏感的修饰符
m      pcre_multiline
多行匹配, 默认情况下, pcre认为目标字符串是一组单行字符组成的(然而实际上它可能会包含多行). 元字符^仅匹配字符串的开始位置, 而元字符$则仅匹配字符串的末尾, 或者新行之前(除非设置了d修饰符). 这个修饰符和perl中工作一直, 使用后, ^和$会匹配每一行的开始和结尾
如果目标字符串中没有n字符或者模式中没有出现^和$, 则设置此修饰符是没有任何影响的.
s       pcre_dotall
用来增强字符类.(点号)的功能, 默认情况下, 点号匹配任意字符, 但不包括换行符及以后内容. 使用此修饰符后, 可以匹配任意字符包括换行符
x       pcre_extended
如果设置了这个修饰符, 模式中的空白字符, 除非被转义或者在一个字符类中, 否则都被忽略. 在一个未转义的#之后直到下一个换行符之间的内容都会被正则表达式引擎忽略以方便添加注释.
e       preg_replace_eval
使用此修饰符后, preg_replace的$replacement参数除了可以使用正常的反向引用来取得匹配值, 还可以在其中书写eval语法允许的字符串进行求值, 并将返回结果用于最终的替换.
a       pcre_anchored
如果设置了此修饰符, 模式被强制成为”anchored”(锚点), 也就是说约束使其始终从字符串的嘴前面开始搜索. 这个影响也可以通过构造适当的规则来实现(perl中只能这样实现)
d      pcre_dollar_endonly
如果设置了这个修饰符, $会匹配目标字符串的结尾之前, 而如果没有设置这个修饰符, 如果目标字符串最后一个字符时换行符, $就会匹配该换行符之前而不是字符串结尾之前.
如果设置了m修饰符, 则这个修饰符会被忽略. 这一点和perl不一致
s
当一个模式需要多次使用的时候, 我们为了获得更高的匹配效率, 值得花费一些时间对其进行分析. 如果设置了这个修饰符, 将会进行这个额外的分析. 当前, 这种对一个模式的分析仅仅适用于非锚点的匹配(即没有一个单一固定的开始字符)
u      pcre_ungreedy
这个修饰符逆转了贪婪的模式, 如果没有这个设置, 默认情况下的正则匹配时贪婪的, 量词后增加了?的模式是非贪婪的, 但是如果设置了这个修饰符, 则刚好相反.
这个规则与perl是不兼容的.
也可以在模式中使用?u来达到同样的效果
x       pcre_extra
这个修饰符启用了一个pcre中与perl不兼容的额外功能. 任意反斜线后面跟一个没有特殊含义的字符会导致一个错误, 以此来保留这些组合以备后期扩展.
默认情况下, 和perl一样, 反斜线后跟一个没有特殊含义的字符会以该字符原意解释.
当前没有任何其他特性受此修饰符控制
j        pcre_info_jchanged
与内部选项?j相同, 用来改变本地pcre_dupnames选项. 允许子组有重复的名字
u       pcre8
这个修饰符打开一个pcre中与perl不兼容的额外功能. 模式字符串被认为是utf-8的.

下面提供二款关于php教程文件上传代码,有需要的朋友可以参考一下。

<?php
if ($_files['file']['error'] > 0) {
echo '!problem:';
switch ($_files['file']['error']) {
case 1 :
echo '文件大小超过服务器限制';
break;
case 2 :
echo '文件太大!';
break;
case 3 :
echo '文件只加载了一部分!';
break;
case 4 :
echo '文件加载失败!';
break;
}

exit;
}
if ($_files['file']['size'] > 1000000) {
echo '文件过大!';
exit;
}
if ($_files['file']['type'] != 'image/jpeg' && $_files['file']['type'] != 'image/gif') {
echo '文件不是jpg或者gif图片!';
exit;
}
$today = date("ymdhis");
$filetype = $_files['file']['type'];
if ($filetype == 'image/jpeg') {
$type = '.jpg';
}
if ($filetype == 'image/gif') {
$type = '.gif';
}
$upfile = 'upfile/' . $today . $type;
if (is_uploaded_file($_files['file']['tmp_name'])) {
if (!move_uploaded_file($_files['file']['tmp_name'], $upfile)) {
echo '移动文件失败!';
exit;
}
} else {
echo 'problem!';
exit;
}
echo '<h1>success!</h1><br>';
echo '文件大小:' . $_files['file']['size'] . '字节' . '<br>';
echo '文件路径:' . $upfile;
echo '<hr with="100%" />' . '<p>';
$dirr = 'upfile/';
$dir = opendir($dirr);
echo $dirr . '--listing:<ul>';
while ($file = readdir($dir)) {
echo "<li>$file</li>";
}
echo '</ul>';
closedir($dir);
?>

 

第二种:

<?php
if (empty ($_get[submit])) {
?>
<form enctype="multipart/form-data" action="<?php $_server['php_self']?>?submit=1" method="post">
send this file: <input name="filename" type="file">
<input type="submit" value="确定上传">
</form>
<?php

} else {
$path = "uploadfiles/"; //上传路径

//echo $_files["filename"]["type"];

if (!file_exists($path)) {
//检查是否有该文件夹,如果没有就创建,并给予最高权限
mkdir("$path", 0700);
} //end if
//允许上传的文件格式
$tp = array (
"image/gif",
"image/pjpeg",
"image/png"
);
//检查上传文件是否在允许上传的类型
if (!in_array($_files["filename"]["type"], $tp)) {
echo "格式不对";
exit;
} //end if
if ($_files["filename"]["name"]) {
$file1 = $_files["filename"]["name"];
$file2 = $path . time() . $file1;
$flag = 1;
} //end if
if ($flag)
$result = move_uploaded_file($_files["filename"]["tmp_name"], $file2);
//特别注意这里传递给move_uploaded_file的第一个参数为上传到服务器上的临时文件
if ($result) {
//echo "上传成功!".$file2;
echo "<script language='网页特效'>";
echo "alert("上传成功!");";
echo " location='add_aaa.php?pname=$file2'";
echo "</script>";
} //end if

}
?>
 
今天在做一个api增量的功能的时候出现了一个特别奇怪的问题。我用curl 想tomcat post数据的时候,tomcat竟然报错,所我post的数据
没有正确或得。但是,我用curl post给我自己写的一个页面,就可以在$_post数组中获得数据。
为什么会出现这种问题那?
原因是在构建post 数据的数量出现问题。。。
1 function api_notice_increment($url, $data)
2 {
3 $ch = curl_init();
4 curl_setopt($ch, curlopt_header,0);
5 curl_setopt($ch, curlopt_returntransfer, 1);
6
7 curl_setopt($ch, curlopt_url, $url);
8 curl_setopt($ch, curlopt_post, 1);
9 curl_setopt($ch, curlopt_postfields, $data);
10 $lst['rst'] = curl_exec($ch);
11 $lst['info'] = curl_getinfo($ch);
12 curl_close($ch);
13 return $lst;
14 }
15 $url = "http://localhost/test/post.api.php教程?app=test&act=testact";
16 $data = array (
17 'goods_id' => '1010000001224',
18 'store_id' => '20708',
19 'status' => 'goodsdownshelf',
20 );
//post.api.php的代码
<?php
error_log(var_export($_post,1),3,'d:/post.txt');
执行上面的代码,在我的d:/生成的post.txt文件,其内容如下:
array (
  'goods_id' => '1010000001224',
  'store_id' => '20708',
  'status' => 'goodsdownshelf',
)
说明post的数据可以正常的获得。
修改上的代码
1 <?php
2  function api_notice_increment($url, $data)
3 {
4 $ch = curl_init();
5 curl_setopt($ch, curlopt_header,0);
6 curl_setopt($ch, curlopt_returntransfer, 1);
7
8 curl_setopt($ch, curlopt_url, $url);
9 curl_setopt($ch, curlopt_post, 1);
10 $data = http_build_query($data);
11 curl_setopt($ch, curlopt_postfields, $data);
12 $lst['rst'] = curl_exec($ch);
13 $lst['info'] = curl_getinfo($ch);
14 curl_close($ch);
15 return $lst;
16 }
17 $url = "http://localhost/test/post.api.php?app=test&act=testact";
18 $data = array (
19 'goods_id' => '1010000001224',
20 'store_id' => '20708',
21 'status' => 'goodsdownshelf',
22 );
23
24
25 api_notice_increment($url,$data);
只是在执行 curl_setopt($ch, curlopt_postfields, $data);之前执行下$data = http_build_query($data);操作。
删除d:/post.txt文件
再次运行。
再次打开d:/post.txt文件,其内容如下:
array (
  'goods_id' => '1010000001224',
  'store_id' => '20708',
  'status' => 'goodsdownshelf',
)
如果不将$data 进行http_build_query的话,java代码就不能获得post的数据,http_build_query以后就可以正常的获得了。

php教程常用ip转换与文件下载代码

ip转换
php中将ip转换成整型的函数ip2long()容易出现问题,在ip比较大的情况下,会变成负数。

<?php
$ip = "192.168.1.2";
$ip_n = ip2long($ip);
echo $ip_n;      //得到 -1062731518
?>


由于ip转换成的整型值太大超出了整型的范围,所以变成负数。需写成$ip_n = bindec(decbin(ip2long($ip)));这样便可得到无符号的整型数,如下

<?php
$ip = "192.168.1.2";
$ip_n = bindec(decbin(ip2long($ip)));
echo $ip_n;      //得到 3232235778
?>

文件下载代码

<?php
header("content-type: application/force-download");
header("content-disposition: attachment; filename=ins.jpg");
readfile("imgs/test_zoom.jpg");
?>

第一行代码是强制下载;

第二行代码是给下载的内容指定一个名字;

第三行代码是把下载的内容读进文件中。

 

example #1 forcing a download using readfile()

 

<?php
$file = 'monkey.gif';

if (file_exists($file)) {
    header('content-description: file transfer');
    header('content-type: application/octet-stream');
    header('content-disposition: attachment; filename='.basename($file));
    header('content-transfer-encoding: binary');
    header('expires: 0');
    header('cache-control: must-revalidate, post-check=0, pre-check=0');
    header('pragma: public');
    header('content-length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
}
?>

 

[!--infotagslink--]

相关文章

  • php漏洞之跨网站请求伪造与防止伪造方法

    今天我来给大家介绍在php中跨网站请求伪造的实现方法与最后我们些常用的防止伪造的具体操作方法,有需要了解的朋友可进入参考。 伪造跨站请求介绍 伪造跨站请求...2016-11-25
  • PHP 数据库缓存Memcache操作类

    操作类就是把一些常用的一系列的数据库或相关操作写在一个类中,这样调用时我们只要调用类文件,如果要执行相关操作就直接调用类文件中的方法函数就可以实现了,下面整理了...2016-11-25
  • C#连接SQL数据库和查询数据功能的操作技巧

    本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
  • php简单数据操作的实例

    最基础的对数据的增加删除修改操作实例,菜鸟们收了吧...2013-09-26
  • C#从数据库读取图片并保存的两种方法

    这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
  • 解决Mybatis 大数据量的批量insert问题

    这篇文章主要介绍了解决Mybatis 大数据量的批量insert问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-09
  • Antd-vue Table组件添加Click事件,实现点击某行数据教程

    这篇文章主要介绍了Antd-vue Table组件添加Click事件,实现点击某行数据教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-17
  • 详解如何清理redis集群的所有数据

    这篇文章主要介绍了详解如何清理redis集群的所有数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-18
  • Intellij IDEA连接Navicat数据库的方法

    这篇文章主要介绍了Intellij IDEA连接Navicat数据库的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借价值,需要的朋友可以参考下...2021-03-25
  • 在数据库里将毫秒转换成date格式的方法

    在开发过程中,我们经常会将日期时间的毫秒数存放到数据库,但是它对应的时间看起来就十分不方便,我们可以使用一些函数将毫秒转换成date格式。 一、 在MySQL中,有内置的函数from_unixtime()来做相应的转换,使用如下: 复制...2014-05-31
  • 如何获取网站icon有哪些可行的方法

    获取网站icon,常用最简单的方法就是通过website/favicon.ico来获取,不过由于很多网站都是在页面里面设置favicon,所以此方法很多情况都不可用。 更好的办法是通过google提供的服务来实现:http://www.google.com/s2/favi...2014-06-07
  • vue 获取到数据但却渲染不到页面上的解决方法

    这篇文章主要介绍了vue 获取到数据但却渲染不到页面上的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-19
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • 如何解决局域网内mysql数据库连接慢

    通过内网连另外一台机器的mysql服务, 确发现速度N慢! 等了大约几十秒才等到提示输入密码。 但是ping mysql所在服务器却很快! 想到很久之前有过类似的经验, telnet等一些服务在连接请求的时候,会做一些反向域名解析(如果...2015-10-21
  • MySQL快速复制数据库数据表的方法

    某些时候,例如为了搭建一个测试环境,或者克隆一个网站,需要复制一个已存在的mysql数据库。使用以下方法,可以非常简单地实现。假设已经存在的数据库名字叫db1,想要复制一份,命名为newdb。步骤如下:1. 首先创建新的数据库newd...2015-10-21
  • php把读取xml 文档并转换成json数据代码

    在php中解析xml文档用专门的函数domdocument来处理,把json在php中也有相关的处理函数,我们要把数据xml 数据存到一个数据再用json_encode直接换成json数据就OK了。...2016-11-25
  • mybatis-plus 处理大数据插入太慢的解决

    这篇文章主要介绍了mybatis-plus 处理大数据插入太慢的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-18
  • mysqldump命令导入导出数据库方法与实例汇总

    mysqldump命令的用法1、导出所有库系统命令行mysqldump -uusername -ppassword --all-databases > all.sql 2、导入所有库mysql命令行mysql>source all.sql; 3、导出某些库系统命令行mysqldump -uusername -ppassword...2015-10-21
  • node.js如何操作MySQL数据库

    这篇文章主要介绍了node.js如何操作MySQL数据库,帮助大家更好的进行web开发,感兴趣的朋友可以了解下...2020-10-29
  • Mysql数据库错误代码中文详细说明

    1005:创建表失败1006:创建数据库失败1007:数据库已存在,创建数据库失败1008:数据库不存在,删除数据库失败1009:不能删除数据库文件导致删除数据库失败1010:不能删除数据目录导致删除数据库失败1011:删除数据库...2013-09-23