分类目录归档:PHP

清空日志文件 php-fpm.log 和 slow.log

php-fpm.log 和 slow.log 这两个日志文件都比较重要,它们是在目录 /usr/local/php/var/log,我发现 php-fpm.log 已经很大了,打开可以翻很多很多页,最早还是14年的记录了。它们可以清空,但不要删除。清空方法很简单,退到/usr/local/php/var/log后,执行:
cat /dev/null > php-fpm.log
cat /dev/null > slow.log

  同样的方法,可以清空 Linux 系统日志。一般系统日志在/var/log/ 下,可以ls -lh /var/log/ 看一下占用的大小。
cat /dev/null > /var/log/syslog
cat /dev/null > /var/adm/sylog
cat /dev/null > /var/log/wtmp
cat /dev/null > /var/log/maillog
cat /dev/null > /var/log/messages
cat /dev/null > /var/log/maillog
cat /dev/null > /var/log/mail.info

原文:https://ihacksoft.com/1315.html

Win10下启动Nginx+php cgi 的代码笔记

I:\php\nginx-1.18.0>
start nginx 启动
nginx.exe -s stop 停止
nginx.exe -s quit 退出
nginx.exe -s reload 重新加载配置

打开windows命令窗口,执行以下命令,查看nginx的进程:
tasklist /fi “imagename eq nginx.exe”

I:\php\php-7.4.9-Win>php-cgi.exe -b 127.0.0.1:9000

ts : thread-safe
nts : no-thread-safe

I:
cd php\nginx-1.18.0
start nginx
cd ..
cd php-7.4.9-Win
php-cgi.exe -b 127.0.0.1:9000

php将字符串转为二进制数据串

/**
    * 将字符串转换成二进制
    * @param type $str
    * @return type
    */
    function StrToBin($str){
        //1.列出每个字符
        $arr = preg_split('/(?<!^)(?!$)/u', $str);
        //2.unpack字符
        foreach($arr as &$v){
            $temp = unpack('H*', $v);
            $v = base_convert($temp[1], 16, 2);
            unset($temp);
        }

        return join(' ',$arr);
    }

    /**
    * 将二进制转换成字符串
    * @param type $str
    * @return type
    */
    function BinToStr($str){
        $arr = explode(' ', $str);
        foreach($arr as &$v){
            $v = pack("H".strlen(base_convert($v, 2, 16)), base_convert($v, 2, 16));
        }
        return join('', $arr);
    }

原文:https://www.cnblogs.com/chenggege/p/7761287.html

php接口返回xml格式

在头部加上

  header("Content-type: application/xml");

范例:

$res = $this->arrayToXml($data,$amount['count'],$page_count,$page);
header("Content-type: text/xml");
echo $res;
//数组转XML
    public function arrayToXml($data,$amount,$page_count,$page)
    {
//    	var_dump($data);die;
        $xml = "<response><code>0</code><msg>成功</msg><total_results>{$amount}</total_results><total_page>{$page_count}</total_page><current_page>{$page}</current_page><order_list>";
 
        foreach ($data as $key=>$val)
        {
            $xml.= "<order><modified></modified><receiver_zip>-</receiver_zip><is_tax>false</is_tax><invoice_type></invoice_type><invoice_title></invoice_title><buyer_cod_fee>0.0</buyer_cod_fee><point_fee></point_fee><coupon_pay></coupon_pay><payments></payments>";
            foreach($val['order'] as $k=>$v){
                if (is_numeric($v)){
                    $xml.="<".$k.">".$v."</".$k.">";
                }else{
                    $xml.="<".$k.">".$v."</".$k.">";
                }
            }
            $xml.= "<itemlist>";
            foreach($val['itemlist'] as $key=>$vv){
                $xml.= "<item>";
                foreach($vv as $kk=>$vs){
                    $xml.="<".$kk.">".$vs."</".$kk.">";
                }
                $xml.= "<shop_sku_id></shop_sku_id><sku_name></sku_name><oid></oid><amount></amount></item>";
            }
            $xml.= "</itemlist>";
            $xml.= "</order>";
 
        }
        $xml.="</order_list></response>";
        return trim($xml);
    }

使用php://input接收数据流(还有多个参数的解决办法)

最近的工作中接触到一个手机上传图片到服务器的小程序,刚开始一直在想该用怎样的方式去接收数据,最后在网上看到大家都用php://input来接收。就去查了下php://input的官方介绍,确实可以,除了在enctype=”multipart/form-data”情况下,是无法接收到流的,其他情况下都可以。既然这个可以,我就在本地先写个测试文件

上传文件
<?php
//@file phpinput_post.php
$data=file_get_contents(‘btn.png’);
$http_entity_body = $data;
$http_entity_type = ‘application/x-www-form-urlencoded’;
$http_entity_length = strlen($http_entity_body);
$host = ‘127.0.0.1’;
$port = 80;
$path = ‘/image.php’;
$fp = fsockopen($host, $port, $error_no, $error_desc, 30);
if ($fp) {
fputs($fp, “POST {$path} HTTP/1.1\r\n”);
fputs($fp, “Host: {$host}\r\n”);
fputs($fp, “Content-Type: {$http_entity_type}\r\n”);
fputs($fp, “Content-Length: {$http_entity_length}\r\n”);
fputs($fp, “Connection: close\r\n\r\n”);
fputs($fp, $http_entity_body . “\r\n\r\n”);

while (!feof($fp)) {
$d .= fgets($fp, 4096);
}
fclose($fp);
echo $d;
}
?>

接收文件

运行test.php你就可以看到相应的结果,成功了,也在相应目录下看到了我刚才上传的文件。如果你做服务端,就只需要接收文件里面的php代码了。我上面模拟的上传就需要根据客户端来相应构造了,我后面也和客户端对接上了。所以是可以用的,还有就是客户端上传的时候可能会一些数据问题,因为我们在这个过程中出现了各种状况。

下文转自:http://www.0377joyous.com/archives/1135.html

今天公司要求用APP发送一个图片到PHP程序接收并保存起来,而且中间还需要很多参数!
以前没有做过APP和PHP交互,这次算是一个挑战吧(对一个没有人指导实习生来说)

1.APP发1.jpg,而且带有两个参数一个是假设是X和另外一个假设是Y
2.PHP负责接受X,Y和1.jpg,并且还要保存1.jpg到服务器
步骤:
1.PHP页面代码
$data = file_get_contents(‘php://input’);//这样可以获取到未经处理的原数据(保持发送的图片流不被破坏),在APP上使用X#Y#图片流使用http发送到PHP页面
//然后PHP页面进行数据处理和分割
2.数据处理
先分割数据流
$vars = explode(“#”,$data,3);//这样防止对图片流造成破坏只分割成三份即可
/省去若干代码/
$img = $vars[2];
$path = ‘/var/www/uploads/’;
$newfilename = time().”.jpg”;
$file = $path.$newfilename;
$handle = fopen($file, “w”);

if ($handle) {fwrite($handle,$img);
fclose($handle);
}

当PHP和C、C++、.net等应用程序进行开发的时候,应用程序使用POST方法传值过来PHP使用 $data=file_get_contents(‘php://input’),$data就是传过来的数据,而php://input不能用于 enctype=”multipart/form-data”。当需要给传值过来的程序 返回值的时候直接用echo返回就可以。

原文:https://blog.csdn.net/lemqs0123/article/details/46858993

php解析xml转数组

php解析xml数据并转换成数组。使用simplexml_load_string()转xml对象,json_encode()把对象转成json,json_decode()转成数组。

        simplexml_load_file()  加载xml url

        simplexml_load_string()  加载xml 字符串

  1. <?php
  2. $xml = ‘<?xml version=”1.0″ encoding=”utf-8″?>
  3. <res>
  4.     <name>test</name>
  5.     <age>10</age>
  6.     <sex>man</sex>
  7. </res>’;
  8. $xml =simplexml_load_string($xml); //xml转object
  9. $xml= json_encode($xml);  //objecct转json
  10. $xml=json_decode($xml,true); //json转array
  11.  
  12. var_dump($xml);

php获取随机字符串的几种方法

方法一:shuffle函数(打乱数组)和mt_rand函数(生成随机数,比rand速度快四倍)

/**
获得随机字符串
@param $len 需要的长度
@param $special 是否需要特殊符号
@return string 返回随机字符串
*/
function getRandomStr($len, $special=true){
$chars = array(
"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
"l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
"w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G",
"H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
"S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2",
"3", "4", "5", "6", "7", "8", "9"
);
if($special){
$chars = array_merge($chars, array(
"!", "@", "#", "$", "?", "|", "{", "/", ":", ";",
"%", "^", "&", "*", "(", ")", "-", "_", "[", "]",
"}", "<", ">", "~", "+", "=", ",", "."
));
}
$charsLen = count($chars) - 1;
shuffle($chars); //打乱数组顺序
$str = '';
for($i=0; $i<$len; $i++){
$str .= $chars[mt_rand(0, $charsLen)]; //随机取出一位
}
return $str;
}

方法二、str_shuffle函数(打乱字符串顺序)和mt_rand函数

//取随机10位字符串 
$strs="QWERTYUIOPASDFGHJKLZXCVBNM1234567890qwertyuiopasdfghjklzxcvbnm";
$name=substr(str_shuffle($strs),mt_rand(0,strlen($strs)-11),10);
echo $name;

方法三、md5(),uniqid(),microtime()生成唯一的32位字符串

$uniqid = md5(uniqid(microtime(true),true)); //microtime(true) 返回系统当前时间戳的毫秒数

其他方法:

/**
     * 方法一:获取随机字符串
     * @param number $length 长度
     * @param string $type 类型
     * @param number $convert 转换大小写
     * @return string 随机字符串
     */
    function random($length = 6, $type = 'string', $convert = 0)
    {
        $config = array(
            'number' => '1234567890',
            'letter' => 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
            'string' => 'abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ23456789',
            'all' => 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'
        );

        if (!isset($config[$type]))
            $type = 'string';
        $string = $config[$type];

        $code = '';
        $strlen = strlen($string) - 1;
        for ($i = 0; $i < $length; $i++) {
            $code .= $string{mt_rand(0, $strlen)};
        }
        if (!empty($convert)) {
            $code = ($convert > 0) ? strtoupper($code) : strtolower($code);
        }
        return $code;
    }

    /**
     * 方法二:获取随机字符串
     * @param int $randLength 长度
     * @param int $addtime 是否加入当前时间戳
     * @param int $includenumber 是否包含数字
     * @return string
     */
    function rand_str($randLength = 6, $addtime = 1, $includenumber = 0)
    {
        if ($includenumber) {
            $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHJKLMNPQEST123456789';
        } else {
            $chars = 'abcdefghijklmnopqrstuvwxyz';
        }
        $len = strlen($chars);
        $randStr = '';
        for ($i = 0; $i < $randLength; $i++) {
            $randStr .= $chars[mt_rand(0, $len - 1)];
        }
        $tokenvalue = $randStr;
        if ($addtime) {
            $tokenvalue = $randStr . time();
        }
        return $tokenvalue;
    }

js过滤emoji表情符号

手机端常常会遇到用户输入框,输入emoji,如果是数据库是UTF8,会遇到报错:SQLException: Incorrect string value: ‘\xF0\x9F\x98\x84’ for column ‘review’ at row 1

原因是:UTF-8编码有可能是两个、三个、四个字节。Emoji表情是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去。

过滤

php过滤emoji表情:

$name = preg_replace('/[^\\u0000-\\uFFFF]/ig', '', $string);

js过滤emoji表情:

name = name.replace(/\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F]/g, "");

原文:https://blog.csdn.net/ugg/article/details/44225723

php 根据实际地址获取对应的经纬度

在php中根据实际地址获取对应的经纬度,这里推荐使用百度地图和腾讯地图提供的现成的接口

这里注意一点:

百度地图和腾讯地图的坐标与真实经纬度是不同的,国际经纬度坐标标准为WGS-84,国内必须至少使用国测局制定的GCJ-02,对地理位置进行首次加密,腾讯使用的就是国测局制定的GCJ-02。百度坐标在此基础上,进行了BD-09二次加密措施

一:百度地图:

根据实际地址获取经纬度的百度接口文档地址:地理编码

1:获取密钥

点击文档左侧的获取密钥按钮,根据提示获取密钥

image.png

2:实现根据实际地址获取到经纬度

<?php
function curl($url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    //参数为1表示传输数据,为0表示直接输出显示。
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    //参数为0表示不带头文件,为1表示带头文件
    curl_setopt($ch, CURLOPT_HEADER,0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false);
    $output = curl_exec($ch);
    curl_close($ch);
    return $output;
}
$data_info=curl("http://api.map.baidu.com/geocoder/v2/?address=实际地址&output=json&ak=你的密钥");
$data_info = json_decode($data_info, true); //数据转换
print_r($data_info);

根据如上的代码就可以获取到实际地址对应的经纬度

二:腾讯地图

腾讯根据实际地址获取经纬度接口文档:https://lbs.qq.com/webservice_v1/guide-geocoder.html

1:获取密钥:

申请密钥地址:https://lbs.qq.com/console/key.html

根据提示获取到所需的密钥

2:获取实际地址的经纬度

接口:https://apis.map.qq.com/ws/geocoder/v1/?address=实际地址&key=您的密钥

代码实现和上面的相同,这里就不写出来了

原文:https://blog.csdn.net/huaweichenai/article/details/90233294

php vs js中判断一个字符串包含另一个字符串的方法

PHP

第一种方法:用php的strpos() 函数判断字符串中是否包含某字符串的方法

if(strpos('www.jb51.net','jb51') !== false){
echo '包含jb51';
}else{
echo '不包含jb51';
}

第二种 使用了explode

用explode进行判断PHP判断字符串的包含代码如下:

<?php 
$name = "001x.gif"; 
$pan = "x"; 
$con = explode($pan,$name); 
if (count($con)>1): 
echo $name."中包含".$pan; 
else: 
echo $name."中没有包含".$pan; 
endif; 
?> 

第三种strstr

strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。
该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。

代码如下:

<?php
  /*如手册上的举例*/
  $email = 'user@example.com';
  $domain = strstr($email, '@');
  echo $domain;
  // prints @example.com
?>

第四种、stristr

stristr() 函数查找字符串在另一个字符串中第一次出现的位置。
如果成功,则返回字符串的其余部分(从匹配点)。如果没有找到该字符串,则返回 false。

它和strstr的使用方法完全一样.唯一的区别是stristr不区分大小写.

JS

String对象的方法

方法一: indexOf()   (推荐)

var str = "123";
console.log(str.indexOf("3") != -1 );  // true
//indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。如果要检索的字符串值没有出现,则该方法返回 -1。

方法二: search() 

var str = "123";
console.log(str.search("3") != -1 );  // true
//search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。如果没有找到任何匹配的子串,则返回 -1。

方法三:match()

var str = "123";
var reg = RegExp(/3/);
if(str.match(reg)){
    // 包含        
}
//match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。

RegExp 对象方法

方法四:test() 

var str = "123";
var reg = RegExp(/3/);
console.log(reg.test(str)); // true
//test() 方法用于检索字符串中指定的值。返回 true 或 false。

方法五:exec()

var str = "123";
var reg = RegExp(/3/);
if(reg.exec(str)){
    // 包含        
}
//exec() 方法用于检索字符串中的正则表达式的匹配。返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。

原文:php-https://www.jb51.net/article/8632.htm

JS-https://www.cnblogs.com/rxbook/p/11820720.html