PHP用户名/手机号/IP指定位星号显示
例子,用户名
代码如下 | 复制代码 |
function cut_str($string, $sublen, $start = 0, $code = 'UTF-8') if(count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen)); for($i=0; $i< $strlen; $i++) |
示例
代码如下 | 复制代码 |
$str = "如来神掌"; |
下面附两个IP地址与手机号星号显示
初学PHP,看到别人是通过合并和拆分数组进行这个操作!所以转过来!!
代码如下 | 复制代码 |
<?php $ip =$_SERVER['REMOTE_ADDR']; $ip_arr= explode('.', $ip); $ip_arr[3]='*'; $ip= implode('.', $ip_arr); echo $ip; ?> |
手机号的
代码如下 | 复制代码 |
<?php |
测试环境
OS: win7 64
PHP: 5.4.25 ts
pthreads: 0.1.0
1.性能问题
2.PDO等某些类型不能serialize所以就不能传递到线程。
这两个问题是能通过其他凡是解决的,解决方法仁者见仁智者见智。
另外,可以通过传递匿名函数到线程中,但是有个bug,匿名函数不能赋值给线程中的属性,导致传递的匿名函数只能在线程的构造方法中才能使用(call_user_fun*系列函数调用)。
Thread属性定义一定要注意必须在构造方法中初始化,否则必定为null。__construct()和run()里面的代码不在一个次元,如果属性不是PHP标量在run()中不能修改,例如构造方法中初始化一个对象,然后run()中修改对象属性不会生效。
正确写法:
代码如下 | 复制代码 |
abstract class Task extends Thread { |
错误写法:
代码如下 | 复制代码 |
abstract class Task extends Thread { |
这样也是错的,无论stdClass还是数组
代码如下 | 复制代码 |
abstract class Task extends Thread { private $info; public function __construct($task) { $this->info = array(); $this->info ['task'] = $task; $this->info ['finished'] = false; $this->info ['terminate'] = false; $this->info ['terminated'] = false; $this->info ['error'] = false; $this->info ['info'] = array (); } } |
后来研究又发现,复合类型的数据整体赋值貌似能起作用。
如果程序有很多回调函数在线程内部用的话就是找死啊。
表单可以把自己定义成数组形式,这样我们就能利用post接收用户多选过来的值了,下面一聚教程小编给各位整理了几个例子。
今天写php的时候发现$_POST["arr"]无法获取参数arr的数组,记录一下。
例如有以下表单需要提交:
代码如下 | 复制代码 |
<input type="checkbox" name="arr" value="" /> |
使用$_POST["arr"]只能获得最后选择的复选框的值,要获得全部选中的复选框的值需要把表单修改成下面:
代码如下 | 复制代码 |
<input type="checkbox" name="arr[]" value="" /> |
这样就可以使用$_POST["arr"]获得全部选中的checkbox的值,那这样获取值了我们要怎么解析出来呢。
第一中方法
代码如下 | 复制代码 |
<form action="test1.php" method="post"> test1.php <?php |
?>
第二种用法
test3.php
代码如下 | 复制代码 |
<?php if(isset($_POST['submit'])){ |
悲剧,刚提交的既然服务器挂了没成功,又得重写....
这几天在写一个PHP防盗链外部资源下载处理函数,昨天晚上刚完成编写,中间遇到了些问题,这里就不详述了;
以下是自写的简单的PHP防盗链处理类(重新整理编写成类文件,以便后期改进);
代码如下 | 复制代码 |
<?php 002 /** 003 * 004 * 防盗链外部资源下载处理类 005 * 006 * @author 清风 <xrcc_bk@126.com> 007 * @link http://blog.emtalk.net 008 * 009 */ 010 class BurglarDow{ 011 /** 012 * 初始许可下载状态 013 * @var allow 014 * @access private 015 */ 016 private $allow = false; 017 /** 018 * 初始下载地址 019 * @var dowUrl 020 * @access private 021 */ 022 private $dowUrl = null; 023 /** 024 * 初始来路域名 025 * @var RemoteUrl 026 * @access private 027 */ 028 private $RemoteUrl = null; 029 /** 030 * 初始许可资源取用域名列表 031 * @var allowUrl 032 * @access private 033 */ 034 private $allowUrl = array(); 035 /** 036 * 初始转跳地址 037 * @var Location 038 * @access private 039 */ 040 private $Location = null; 041 042 public function __construct($dowUrl,$Location,array $allowUrl){ 043 // 初始下载地址 044 $this->dowUrl = $dowUrl; 045 // 初始许可资源取用域名列表 046 $this->allowUrl = $allowUrl; 047 // 初始转跳地址 048 $this->Location = $Location; 049 050 $this->RemoteUrl = @parse_url($_SERVER['HTTP_REFERER']); // 获取来路域名 051 if(!is_array($this->RemoteUrl)) 052 header("HTTP/1.1 301 Moved Permanently"); 053 header("Location: ".$this->Location); 054 055 if(isset($this->RemoteUrl['host'])){ 056 if(in_array($this->RemoteUrl['host'],$this->allowUrl)){ // 判断是否来至许可域名 057 $this->allow = true; // 下载许可状态为:真 058 } 059 } 060 unset($this->allowUrl,$this->RemoteUrl); // 释放内存变量 061 } 062 063 /** 064 * 防盗链资源下载 065 * @access public 066 * @return mixed 067 */ 068 public function dow(){ 069 $FileInfo = get_headers($this->dowUrl,1); // 获取远程文件头部信息 070 071 if(true === $this->allow){ // 判断是否许可下载资源 072 //判断配置文件是否存在 073 if(is_file('Config.ini')){ 074 $FileCon = parse_ini_file('Config.ini'); 075 }else{ 076 $FileName = basename($FileInfo['Content-Location']); 077 $FileConStr = "FileName = {$FileName}rnFileUrl = {$FileInfo['Content-Location']}rnFileSize = {$FileInfo['Content-Length']}"; 078 $handle = fopen ('Config.ini', "wb"); // Config.ini文件不存在则创建文件 079 if (fwrite ($handle, $FileConStr) == FALSE) { // 数据写入文件 080 echo "File creation failed ..."; 081 } 082 fclose ($handle); // 关闭一个已打开的文件指针 083 $FileCon = parse_ini_file('Config.ini'); 084 } 085 if(!empty($$this->dowUrl)){ 086 $fp = @fopen($$this->dowUrl, "rb"); // 二进制模式读取文件 087 if (!$fp) 088 exit("Download a mistake.nn"); 089 090 // 输出远程资源 091 header("Content-type:text/html;charset=utf-8"); 092 header('Content-Description: File Transfer'); 093 header('Content-Type: application/octet-stream'); 094 header('Content-Disposition: attachment; filename='.$FileCon['FileName']); 095 header("Accept-Ranges: bytes"); 096 header('Content-Transfer-Encoding: binary'); 097 header('Expires: 0'); 098 header('Cache-Control:must-revalidate,post-check=0,pre-check=0'); 099 header('Pragma: public'); 100 header('Content-Length: '.$FileCon['FileSize']); 101 while (!feof($fp)){ 102 set_time_limit(0); // 设置文件最长执行时间 103 echo fread($fp, 1024); // 输出文件 104 flush(); // 输出缓冲 105 ob_flush(); // 输出缓冲区中的内容 106 } 107 fclose($fp); 108 }else{ 109 header("HTTP/1.1 404 Not Found"); 110 } 111 }else{ 112 header("HTTP/1.1 301 Moved Permanently"); 113 header("Location: ".$this->Location); 114 } 115 } 116 } 117 // 远程资源地址 118 $dowUrl = '/qq/QQ5.1/10055/QQ5.1.exe'; 119 // 转跳地址 120 $Location = 'http://www.111cn.net'; 121 // 许可来路域名列表 122 $allowUrl = array( 123 'blog.emtalk.net', 124 ); 125 $BurglarDow = new BurglarDow($dowUrl,$Location,$allowUrl); 126 $BurglarDow -> dow(); |
有何不足之处,还望访友们多指点指点;
php中session默认的存储方式是硬盘,php也可以改变默认的存储方式。
主要使用到session_set_save_handler方法,下面分享下如何将session保存到MySql数据库中的具体代码。
1.建session表
代码如下 | 复制代码 |
CREATE TABLE `session` ( `sessionid` varchar(128) NOT NULL, `uid` int(11) NOT NULL, `data` mediumblob NOT NULL, `timestamp` int(11) NOT NULL, `ip` varchar(15) NOT NULL, PRIMARY KEY (`sessionid`), KEY `time_session` (`timestamp`,`sessionid`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; |
uid 是保留字段
2.自定义session类
代码如下 | 复制代码 |
<?php private $conn; public static function getInstance(){ return $instance; public function __construct(){ public function __destruct(){ public function open(){ public function close(){ mysql_close($this->conn); public function read($id){ public function write($id,$data){ public function destroy($id){ public function gc($lifetime){ public function query($query){ ?> |
3.测试程序
代码如下 | 复制代码 |
<?php CustomSession::getInstance(); session_start(); $_SESSION['username']='feng'; print_r($_SESSION); ?> |
运行测试程序后,查看数据库可以发现session表中已经增加了session记录
相关文章
- 支付宝支付在国内算是大家了,我们到处都可以使用支付宝了,下文整理介绍的是在安卓app应用中使用支付宝进行支付的开发例子。 之前讲了一篇博客关与支付宝集成获取...2016-09-20
- PHP+Ajax有许多的功能都会用到它小编今天就有使用PHP+Ajax实现的一个微信登录功能了,下面我们来看一个PHP+Ajax手机发红包的程序例子,具体如下所示。 PHP发红包基本...2016-11-25
- 华为手机怎么恢复已卸载的应用?有时候我们在使用华为手机的时候,想知道卸载的应用怎么恢复,这篇文章主要介绍了华为手机恢复应用教程,需要的朋友可以参考下...2020-06-29
- 很多用安卓智能手机的朋友是用九宫格锁屏,网上也有暴力删除手机图形锁的方法,不过我们可以用程序来破解。本文只提供技术学习,不能干坏事 安卓手机的图形锁(九宫格)...2016-09-20
- 华为手机怎么开启双时钟?华为手机是可以设置双时钟的,如果来回在两个有时差的地方工作,是可以设置双时钟显示,下面我们就来看看华为添加双时钟的技巧,需要的朋友可以参考下...2020-12-08
安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法
手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21- 怎么查询自己的联通手机号码是否已经实名认证?现在手机一批一批的开始实名制了,自己的手机号买的时候没有实名认证,怎么才能知道自己的手机是否被知名认证了呢?认证以后就不能充话费打电话了,下面我们们一起来看看两种查看方法...2016-07-04
- 这是注册程序是一款当用户输入完用户名是,就会自动去数据库中查询用户要注册的用户名是否己经被注册了,如果是返回提示否则提示可以注册。 conn.php文件 代...2016-11-25
华为手机蓝牙可以连接几个设备?华为设置蓝牙音频连接个数的技巧
华为手机蓝牙可以连接几个设备? 华为手机使用蓝牙的时候,想要知道能连接几个设备,这都是可以设置呢?下面我们就来看看华为设置蓝牙音频连接个数的技巧,需要的朋友可以参考下...2020-12-08- 小米手机负一屏该怎么设置?小米手机最近推出了负一屏的功能,集成了很多信息,可以放一些需要知道的信息,下面我们就来看看详细的教程,需要的朋友可以参考下。 最新的开...2016-12-15
oppo手机怎么设置充电提示音 oppo手机充电提示音设置方法
oppo手机充电提示音怎么关闭?用户要学会充电提示音的设置方法,这样才能熟练的操作更换提示音或者是关掉提示音,关于OPPO手机充电提示音的设置下面会有具体的介绍,各位用户一起来看看详细的操作方法吧...2020-12-08- 钉钉怎么双开登录两个账号?钉钉中想要双开登录两个账号,该怎么登录呢?下面我们就来看看小米手机双开钉钉的技巧,需要的朋友可以参考下...2020-06-29
- 保千里打令VR手机怎么样?什么时候发布?全球首款VR手机保千里打令VR手机将于10月24日在深圳大梅沙国际水上运动中心隆重发布,对保千里打令VR手机不太了解朋友可以看看...2016-11-01
- 明明我的手机配置那么高(都八核了)为什么玩游戏还会卡?对安卓手机来说玩游戏卡顿的原因一般有两种;性能不足导致的卡顿以及CPU发热降频导致的卡顿,详情我们来看看吧...2017-07-06
- 您是否遇到过孩子想要玩手机又不好拒绝,或者是您想要给孩子配一个联系用的手机有担心孩子玩手机上瘾?如果您购买的是小米手机,那么MIUI的儿童模式就能很好地解决这个问题...2016-12-21
- wifi上网 几乎是不需要什么设置了,我们只要简单的输入wifi密码与用户名就可以自动连接wifi上网了,下面我以安卓4.1系统为实例 具体步骤 1.在安卓手机中点击“...2016-09-20
- Recovery模式是安卓系统特有的一个功能,进入Recovery模式可以刷机,也可以恢复出厂设置,同时进入Recovery模式的方法有很多,下面我来介绍利用手机助手快速进入Recovery模式...2016-09-20
- 小米手机如今也都为手机配备了越来越大容量的电池,但很多小米用户表示,自己手机电池容量明明很大,但费电仍然很快,这很可能是以为你有两个耗电大户的设置项目没关。下面就...2016-12-15
- 小编给大家带来一篇关于安卓手机缓存怎么清理的问题解答,有需要的可以参考一下   安卓手机怎么清理缓存 android清除程序缓存的方法  一,...2017-07-06
- 现在移动互联网越来越发达,很多的网站都普及了手机端浏览,为了更好的让网页在手机端显示,我们都选择了使用CSS媒体查询制作响应式模版,但这也有弊端,例如某些网站的结构是CMS类型的,太多的内容要显示...2015-10-21