php在linux中可能用到的命令
如下所示:
php -i | grep php.ini 查找php.ini的位置
php-cgi -b 127.0.0.1:9000 & 查看php-cgi进程
小编推荐的这篇文章介绍了PHP中使用OpenSSL生成证书及加密解密,非常实用,有兴趣的同学快来参考一下吧。依赖于OpenSSL扩展
代码如下 | 复制代码 |
/*加密解密*/ functionauthcode($string,$operation='E') { $ssl_public=file_get_contents(DATA_PATH."/conf/cert_public.key"); $ssl_private=file_get_contents(DATA_PATH."/conf/cert_private.pem"); $pi_key= openssl_pkey_get_private($ssl_private);//这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id $pu_key= openssl_pkey_get_public($ssl_public);//这个函数可用来判断公钥是否是可用的 if(false == ($pi_key||$pu_key))return'证书错误'; $data=""; if($operation=='D'){ openssl_private_decrypt(base64_decode($string),$data,$pi_key);//私钥解密 }else{ openssl_public_encrypt($string,$data,$pu_key);//公钥加密 $data=base64_encode($data); } return$data; } /*生成证书*/ functionexportOpenSSLFile(){ $config=array( "digest_alg" =>"sha512", "private_key_bits"=> 4096, //字节数 512 1024 2048 4096 等 "private_key_type"=> OPENSSL_KEYTYPE_RSA, //加密类型 ); $res= openssl_pkey_new($config); if($res== false)returnfalse; openssl_pkey_export($res,$private_key); $public_key= openssl_pkey_get_details($res); $public_key=$public_key["key"]; file_put_contents(DATA_PATH."/conf/cert_public.key",$public_key); file_put_contents(DATA_PATH."/conf/cert_private.pem",$private_key); openssl_free_key($res); } |
最近在开发一个PHP程序时遇到了下面的错误:
PHP Fatal error: Allowed memory size of 268 435 456 bytes exhausted
错误信息显示允许的最大内存已经耗尽。遇到这样的错误起初让我很诧异,但转眼一想,也不奇怪,因为我正在开发的这个程序是要用一个foreach循环语句在一个有4万条记录的表里全表搜索具有特定特征的数据,也就是说,一次要把4万条数据取出,然后逐条检查每天数据。可想而知,4万条数据全部加载到内存中,内存不爆才怪。
毕竟编程这么多年,我隐约记得PHP里提供有非一次全部加载数据的API,是像处理流媒体那样,随用随取随丢、数据并不会积累在内存的查询方法。经过简单的搜索,果然在官方网站上找到的正确的用法。缓冲查询和非缓冲查询(Buffered and Unbuffered queries)。PHP的查询缺省模式是缓冲模式。也就是说,查询数据结果会一次全部提取到内存里供PHP程序处理。这样给了PHP程序额外的功能,比如说,计算行数,将指针指向某一行等。更重要的是程序可以对数据集反复进行二次查询和过滤等操作。但这种缓冲查询模式的缺陷就是消耗内存。
另外一种PHP查询模式是非缓冲查询,数据库服务器会一条一条的返回数据,而不是一次全部返回,这样的结果就是PHP程序消耗较少的内存,但却增加了数据库服务器的压力,因为数据库会一直等待PHP来取数据,一直到数据全部取完。
非缓冲查询方法一: mysqli
代码如下 | 复制代码 |
<?php $mysqli=newmysqli("localhost","my_user","my_password","world"); $uresult=$mysqli->query("SELECT Name FROM City", MYSQLI_USE_RESULT);
if($uresult) { while($row=$uresult->fetch_assoc()) { echo$row['Name'] . PHP_EOL; } } $uresult->close(); |
非缓冲查询方法二: pdo_mysql
代码如下 | 复制代码 |
<?php $pdo=newPDO("mysql:host=localhost;dbname=world",'my_user','my_pass'); $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
$uresult=$pdo->query("SELECT Name FROM City"); if($uresult) { while($row=$uresult->fetch(PDO::FETCH_ASSOC)) { echo$row['Name'] . PHP_EOL; } } |
非缓冲查询方法三: mysql
代码如下 | 复制代码 |
<?php $conn= mysql_connect("localhost","my_user","my_pass"); $db = mysql_select_db("world");
$uresult= mysql_unbuffered_query("SELECT Name FROM City"); if($uresult) { while($row= mysql_fetch_assoc($uresult)) { echo$row['Name'] . PHP_EOL; } } |
注:引之 http://www.webhek.com/php-buffered-and-unbuffered-queries
手册资料 http://php.net/manual/zh/mysqlinfo.concepts.buffering.php
小编推荐的这篇文章介绍了PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换),非常实用,有兴趣的同学快来看看吧。本文实例讲述了PHP进制转换。分享给大家供大家参考,具体如下:
可以实现:
10进制转换2、8、16、36、62进制
2、8、16、36、62进制转换10进制
有点要注意下,2、8、16进制转换时,使用的是系统的自己的函数。
所以,不管怎么高精度转换值可能大于2147483646。
另外,
32进制低精转换,最大值:2147483646;
32进制高精转换,最大值:77309411327;
64进制高精转换,最大值:133143986175。
jinzhi.php文件,自带演示功能。
代码如下 | 复制代码 |
<?php $mtime1=explode(" ", microtime()); $startTime=$mtime1[0] +$mtime1[1]; ?> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type"content="text/html; charset=gb2312"/> <title>进制转换/title> </head> <body> <form id="jzh"name="jinzhih"method="post"action=""> <input name="go"type="hidden"value="100"> <table width="482"border="1"cellpadding="0"cellspacing="0"bordercolor="#FFE8E8"bgcolor="#F4F8FB"> <tr> <td width="194"><select name="jinzhi0"id="jinzhi0"> <option value="2">2</option> <option value="8">8</option> <option value="10"selected="selected">10</option> <option value="16">16</option> <option value="36">36</option> <option value="62">62</option> </select> 进制</td> <td width="275"><input name="zhi"type="text"id="zhi"/></td> </tr> <tr> <td>进行<input name="lx"type="radio"value="0"checked="checked"/> 普通<input type="radio"name="lx"value="1"/>高精</td><td> </td> </tr> <tr> <td>转换为 <select name="jinzhi1"id="jinzhi1"> <option value="2"selected="selected">2</option> <option value="8">8</option> <option value="10">10</option> <option value="16">16</option> <option value="36">36</option> <option value="62">62</option> </select>进制,</td><td>总长度为 <input name="changdu"type="text"id="changdu"value="10"size="4"maxlength="2"/> 字符。</td></tr><tr> <td><input type="submit"name="Submit"value="提交"/></td> <td><input type="reset"name="Submit2"value="重置"/></td> </tr></table> <p>注意:仅能进行10进制转换为2、8、16、36、62进制;或反转换。</p></form> <?php classjinzhi_class { //10进制转2、8、16、36、62进制 functionjinzhih_0($shu,$jinzhi,$w) { $zifu=""; while($shu!=0){ $linshi=$shu%$jinzhi; switch($jinzhi){ case2: $zifu=decbin($shu); return$zifu; case8: $zifu=decoct($shu); return$zifu; case16: $zifu=dechex($shu); return$zifu; case36: if($linshi>=10) { $zifu.=chr(($linshi+55)); }else{ $zifu.=$linshi;} break; case62: if(($linshi>=10) && ($linshi36)) {$zifu.=chr($linshi+55);break;} if(($linshi>=36) && ($linshi62)) {$zifu.=chr($linshi+61);break;} $zifu.=$linshi;break; default: $zifu.=$linshi; break; } $shu=intval($shu/$jinzhi); } for($i=strlen($zifu);$i$w;$i++) $zifu.="0"; returnstrrev($zifu);} //2、8、16、36、62进制转10进制 functionjinzhih_1($zifu,$jinzhi,$w) {$shu=0; for($i=0;$i=strlen($zifu)-1;$i++) { $linshi=substr($zifu,$i,1); switch($jinzhi){ case2: $shu=bindec($zifu); $i=strlen($zifu)+1; break; case8: $shu= octdec($zifu); $i=strlen($zifu)+1; break; case16: $shu= hexdec($zifu); $i=strlen($zifu)+1; break; case36: if(ord($linshi)=57) {$shu+=(ord($linshi)-48)*pow($jinzhi,strlen($zifu)-$i-1); }else{ $shu=$shu+ (ord($linshi)-55)*pow($jinzhi,strlen($zifu)-$i-1);} break; case62: if(ord($linshi)=57) {$shu+=$linshi*pow($jinzhi,strlen($zifu)-$i-1); }elseif((ord($linshi)>=65) && (ord($linshi)=90)){ $shu+= (ord($linshi)-55)*pow($jinzhi,strlen($zifu)-$i-1); }else{ $shu+= (ord($linshi)-61)*pow($jinzhi,strlen($zifu)-$i-1);} break; } } return$shu; } //10进制高精度转换2、8、16、36、62进制 functionjinzhih_G0($shu,$jinzhi,$w) { $zifu=""; while($shu!=0){ $linshi=bcmod($shu,$jinzhi); switch($jinzhi){ case2: $zifu=decbin($shu); return$zifu; case8: $zifu=decoct($shu); return$zifu; case16: $zifu=dechex($shu); return$zifu; case36: if($linshi>=10) { $zifu.=chr(($linshi+55)); }else{ $zifu.=$linshi;} break; case62: if(($linshi>=10) && ($linshi36)) {$zifu.=chr($linshi+55);break;} if(($linshi>=36) && ($linshi62)) {$zifu.=chr($linshi+61);break;} $zifu.=$linshi;break; default: $zifu.=$linshi; break; } $shu=intval(bcdiv($shu,$jinzhi)); } for($i=strlen($zifu);$i$w;$i++) $zifu.="0"; returnstrrev($zifu);} //2、8、16、36、62进制高精度转换10进制 functionjinzhih_G1($zifu,$jinzhi,$w) {$shu=""; for($i=0;$i=strlen($zifu)-1;$i++) { $linshi=substr($zifu,$i,1); switch($jinzhi){ case2: $shu=bindec($zifu); $i=strlen($zifu)+1; break; case8: $shu= octdec($zifu); $i=strlen($zifu)+1; break; case16: $shu= hexdec($zifu); $i=strlen($zifu)+1; break; case36: if(ord($linshi)=57) {$shu=bcadd($shu,bcmul((ord($linshi)-48),bcpow($jinzhi,strlen($zifu)-$i-1))); }else{ $shu=bcadd($shu,bcmul((ord($linshi)-55),bcpow($jinzhi,strlen($zifu)-$i-1)));} break; case62: if(ord($linshi)=57) {$shu=bcadd($shu,bcmul($linshi,bcpow($jinzhi,strlen($zifu)-$i-1))); }elseif((ord($linshi)>=65) && (ord($linshi)=90)){ $shu=bcadd($shu,bcmul((ord($linshi)-55),bcpow($jinzhi,strlen($zifu)-$i-1))); }else{ $shu=bcadd($shu,bcmul((ord($linshi)-61),bcpow($jinzhi,strlen($zifu)-$i-1))); } break; } } return$shu;} } if(isset($_GET["p"])) {if($_GET["p"]==="1"){ echo""; echo"提示: "; echo"32进制低精转换,最大值:2147483646 "; echo"32进制高精转换,最大值:77309411327 "; echo"64进制高精转换,最大值:133143986175 "; echo""; echo"值为:"; $Fs=newjinzhi_class(); if($_POST['lx']=="0"&&$_POST['jinzhi0']=="10") {echo$Fs->jinzhih_0($_POST['zhi'],$_POST['jinzhi1'],$_POST['changdu'])." ";} if($_POST['lx']=="1"&&$_POST['jinzhi0']=="10") {echo$Fs->jinzhih_G0($_POST['zhi'],$_POST['jinzhi1'],$_POST['changdu']);} if($_POST['lx']=="0"&&$_POST['jinzhi0']>"10") {echo$Fs->jinzhih_1($_POST['zhi'],$_POST['jinzhi0'],$_POST['changdu']);} if($_POST['lx']=="1"&&$_POST['jinzhi0']>"10") {echo$Fs->jinzhih_G1($_POST['zhi'],$_POST['jinzhi0'],$_POST['changdu']);} } echo"";} $mtime1=explode(" ", microtime()); $endTime=$mtime1[0] +$mtime1[1]; printf ("页面执行时间:%.6fs.",$endTime-$startTime); ?> |
相关文章
- 这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
- PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
使用percona-toolkit操作MySQL的实用命令小结
1.pt-archiver 功能介绍: 将mysql数据库中表的记录归档到另外一个表或者文件 用法介绍: pt-archiver [OPTION...] --source DSN --where WHERE 这个工具只是归档旧的数据,不会对线上数据的OLTP查询造成太大影响,你可以将...2015-11-24- index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
- 网上文章中,在linux下安装node.js都是使用源码编译,其实node的github上已经提供了各个系统下使用各自的包管理器(package manager)安装node.js的方法。...2015-03-15
Linux安装Pytorch1.8GPU(CUDA11.1)的实现
这篇文章主要介绍了Linux安装Pytorch1.8GPU(CUDA11.1)的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-25- grep命令是Linux系统中最重要的命令之一,功能是从文本文件或管道数据流中筛选匹配的行和数据,如果再配合正则表达式,功能十分强大,是Linux运维人员必备的命令,这篇文章主要介绍了Linux中grep详解,需要的朋友可以参考下...2023-02-15
- 这篇文章主要介绍了C#隐式运行CMD命令(隐藏命令窗口),本文实现在winform窗口中运行CMD命令,需要的朋友可以参考下...2020-06-25
- 本文实例讲述了PHP实现连接设备、通讯和发送命令的方法。分享给大家供大家参考。具体如下:开发的BS架构的软件(PHP),需要跟设备进行通讯,在此记录一下,欢迎各位指正:1. 采用php socket技术使用TCP/IP连接设备参数$service_po...2015-10-21
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
复制代码 代码如下:<?php function jb51(){ print_r(func_get_args()); echo "<br>"; echo func_get_arg(1); echo "<br>"; echo func_num_args(); } jb51("www","j...2013-10-04- MySQL日志主要包含:错误日志、查询日志、慢查询日志、事务日志、二进制日志;日志是mysql数据库的重要组成部分。日志文件中记录着mysql数据库运行期间发生的变化;也就是说用来记录mysql数据库的客户端连接状况、SQL语句...2015-11-24
- 这篇文章主要介绍了Linux环境变量配置全攻略,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-03-31
- 这篇文章主要介绍了Linux 下使用shell脚本定时维护数据库,本文通过案例分析给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-11
- 这篇文章主要介绍了PHP编程 SSO详细介绍及简单实例的相关资料,这里介绍了三种模式跨子域单点登陆、完全跨单点域登陆、站群共享身份认证,需要的朋友可以参考下...2017-01-25
- 这篇文章主要介绍了linux服务器快速卸载安装node环境(简单上手),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-22
- 一、连接Mysql格式: mysql -h主机地址 -u用户名 -p用户密码1、连接到本机上的MYSQL。首先打开DOS窗口,然后进入目录mysql/bin,再键入命令mysql -u root -p,回车后提示你输密码.注意用户名前可以有空格也可以没有空格,但是密...2015-11-08
- 这篇文章主要介绍了PHP实现创建以太坊钱包转账等功能,对以太坊感兴趣的同学,可以参考下...2021-04-20
- Redis 是一个开源、高性能的Key-Value数据库,被广泛应用在服务器各种场景中。本文介绍几个查看Redis内存信息的命令,包括常用的info memory、info keyspace、bigkeys等。...2021-01-15
- 这篇文章主要为大家详细介绍了php微信公众账号开发之五个坑,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-10-02
- 这篇文章主要介绍了解决jmap命令打印JVM堆信息异常的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-04