soarli

php问题总结
多个空格只显示一个问:下列是我试过的所有方法,都不能在页面输出空格,我所希望的页面显示出来就是123 注意这里有...
扫描右侧二维码阅读全文
05
2020/02

php问题总结

多个空格只显示一个

问:
下列是我试过的所有方法,都不能在页面输出空格,我所希望的页面显示出来就是

123

注意这里有空格

1、<?php     echo '  123'; ?>
在页面上输出‘123‘;没有空格

2、<?php     echo '  ';echo'123'; ?>
在页面输出还是没有空格,直接就是123;

怎样才能在页面输出空格??求方法

答:
其实你的输出是有空格的,只不过浏览器帮你把他过滤掉了,你可以查看源码来看真正的输出.如果想直接看到效果,需要将空格转义:

echo '&nbsp;123';

json解析

<?php

$data = file_get_contents('www.lylme.com');  // 获取数据

$arr = json_decode($data,true);  // 将获取到的 JSON 数据解析成数组

echo $arr['code'];  //将输出301 

echo $arr['text'];  //将输出Moved Permanently

echo $arr['ip'];  //将输出  123.123.123.123

// 输出数组中的 “text” 值(也就是之前 JSON 中的“text”键值中的内容,"ip" 值也同理)

?>

php中post的提交

php发送post请求的三种方法,分别使用curl、file_get_content、fsocket来实现post提交数据,需要的朋友可以参考下

方法一:

/**
 * 发送post请求
 * @param string $url 请求地址
 * @param array $post_data post键值对数据
 * @return string
 */
function send_post($url, $post_data) {
  
  $postdata = http_build_query($post_data);
  $options = array(
    'http' => array(
      'method' => 'POST',
      'header' => 'Content-type:application/x-www-form-urlencoded',
      'content' => $postdata,
      'timeout' => 15 * 60 // 超时时间(单位:s)
    )
  );
  $context = stream_context_create($options);
  $result = file_get_contents($url, false, $context);
  
  return $result;
}
  
//使用方法
$post_data = array(
  'username' => 'stclair2201',
  'password' => 'handan'
);
send_post('http://www.jb51.net', $post_data);

方法二:Socket版本

/**
 * Socket版本
 * 使用方法:
 * $post_string = "app=socket&version=beta";
 * request_by_socket('chajia8.com', '/restServer.php', $post_string);
 */
function request_by_socket($remote_server,$remote_path,$post_string,$port = 80,$timeout = 30) {
  $socket = fsockopen($remote_server, $port, $errno, $errstr, $timeout);
  if (!$socket) die("$errstr($errno)");
  fwrite($socket, "POST $remote_path HTTP/1.0");
  fwrite($socket, "User-Agent: Socket Example");
  fwrite($socket, "HOST: $remote_server");
  fwrite($socket, "Content-type: application/x-www-form-urlencoded");
  fwrite($socket, "Content-length: " . (strlen($post_string) + 8) . "");
  fwrite($socket, "Accept:*/*");
  fwrite($socket, "");
  fwrite($socket, "mypost=$post_string");
  fwrite($socket, "");
  $header = "";
  while ($str = trim(fgets($socket, 4096))) {
    $header .= $str;
  }
  
  $data = "";
  while (!feof($socket)) {
    $data .= fgets($socket, 4096);
  }
  
  return $data;
}
?>

方法三:Curl版本

/**
 * Curl版本
 * 使用方法:
 * $post_string = "app=request&version=beta";
 * request_by_curl('http://www.jb51.net/restServer.php', $post_string);
 */
function request_by_curl($remote_server, $post_string) {
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $remote_server);
  curl_setopt($ch, CURLOPT_POSTFIELDS, 'mypost=' . $post_string);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_USERAGENT, "jb51.net's CURL Example beta");
  $data = curl_exec($ch);
  curl_close($ch);
  
  return $data;
}
?>

PHP禁止本文件被单独访问

<?php
 if(basename($_SERVER['PHP_SELF']) == basename(__FILE__)) return;
?>

为什么上传文件的表单需要设置enctype="multipart/form-data"

PHP中如何正确统计中文字数

echo strlen("你好ABC") . "";
//输出 9
echo mb_strlen("你好ABC", 'UTF-8') . "";
// 输出 5
echo mb_strwidth("你好ABC") . "";
//输出 7

常用的基础函数总结

//PHP设置跨域
header("Access-Control-Allow-Origin:*");

//PHP设置JSON头 以JSON格式输出
header("Content-type:application/json; charset=utf-8");

//正则取字符串
preg_match_all('/字符串(.*?)字符串/i',$data,$out);

// PHP把JSON对象转字符串不转码输出
json_encode($results, JSON_UNESCAPED_UNICODE);

//PHP设置最大运行时间 0 是永久
set_time_limit(0);

//PHP设置最大运行内存 1024M 是1G
ini_set('memory_limit', '1024M');

//返回数组中元素的个数,可以理解为返回数组的长度
count();

//获取变量中的字符串值,可以理解为把变量转换成字符串类型
strval();

//查询数组里是否存在着指定的健名,返回true和false
array_key_exists(键名,数组);

//特殊字符转换,可有效的防止xss注入
htmlspecialchars(addslashes(变量));

//清除字符串两旁的空格
trim();

// 向文件追加写入内容
// 使用 FILE_APPEND 标记,可以在文件末尾追加内容
// LOCK_EX 标记可以防止多人同时写入
file_put_contents(文件路径, 要写入的内容, FILE_APPEND | LOCK_EX);

//查询数组里是否存在该键值,存在返回该键值的键名,如果有多个匹配,那么返回最先匹配到的键值的键名
//false代表不限类型,键值数据相同即可
//true代表完全匹配,要求数据类型和键值完全相同,默认为false
array_search("键值", 数组, false);

//把变量转换为整数类型,如果有小数,则删除小数,不执行四舍五入
//失败或者变量为空时返回0,否则返回1;
intval();

//往数组尾部插入一个或多个元素
//返回新数组
array_push($a, "要插入的元素", "要插入的元素");

//把变量类型转换为字符串类型
//返回该字符串
strval();

// 查询数组里是否存在该键值,存在返回true,反之返回false
//false代表不限类型,键值数据相同即可
//true代表完全匹配,要求数据类型和键值完全相同,默认为false
in_array('键值', 数组, false);

//新建mysql服务器连接,可理解为新建数据库连接
$mysql = mysqli_connect("ip", "用户名", "密码", "数据库", "端口(默认为3306)");

//修改数据库连接的字符集
mysqli_set_charset($mysql, "utf8");

//对数据库进行sql操作
mysqli_query($mysql, sql语句);

//返回结果集的中行的数量,可理解为返回结果集的长度
mysqli_num_rows();

//从结果集中获取一条数据,并作为数组返回
mysqli_fetch_row();

//以切割符为断点切割字符串,组成数组并返回,
//数组的数目也就是长度
//大于0,返回相对数值的数组,如1,返回的数组只有一个元素, 0也返回只有一个元素的数组
//小于0,从数组尾部开始,去除 (-x) 的绝对值个元素,返回
explode("分割符", 变量, 返回数组元素的数目);

//把数组里的元素打乱随机排序
shuffle();

//截取保留结果集的第 n 条数据,其他删除,并返回
//n为0时截取第一条,为1时截取第二条,以此类推,n为-1时截取最后一条
mysqli_data_seek($xx, n);

//将数组转为json格式
json_encode();

//将json格式转为数组对象
json_decode($xxx);

//检测变量是否为数字,返回 true false
is_numeric(变量);

//将json格式转为数组
json_decode($xxx, true);

//清除指定的变量
unset($a);

//字符串替换指定值
//搜索$pic字符串里的\符号,全部替换成/
str_replace("\\", "/", $pic);

//设置时区 PRC为中国时区
date_default_timezone_set("PRC");

//获取当前时间
date('Y-m-d H:i:s', time());

//获取当前0点的时间戳
strtotime(date("Y-m-d"), time());

//下个月现在的时间戳
strtotime('+1 month');

//获取当前时间戳
time();

//获取当前时间的微秒
microtime();

//把日期时间转换成时间戳
strtotime();
//例:strtotime("2019-01-01 00:00:00");

//检查变量是否存在
isset();

//检查当前文件是否存在
file_exists();

//延迟下面的程序执行,1为延迟一秒后再执行后面的程序
sleep(1);

//创建目录,并且设置最高权限
mkdir(目录名称, 0700, true);

//创建一个0到100的随机数
mt_rand(0, 100);
rand(0,100);

//根据需求创建一个数组如:
range(0, 100);
//结果 Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 ... [100] => 100 );

//首字母转换为大写
ucwords();

//返回当前内存消耗量
memory_get_usage();

//获取一个数组的全部键名
array_keys(数组);

//获取一个数组的全部健值
array_values(数组);

//php引入php文件
require()、include()、require_once()、include_once()
//require和include相同点:都是引入并执行文件
//require和include不同点:
//require一般只会放在PHP脚本最前面进行使用,因为它会先行执行文件,需等待require引入的文件执行完成方可继续执行下去,如果require执行文件时出现错误,则会返回一个致命错误,并带掉程序。
//include一般是放在脚本中间进行使用,因为它不会先行执行,只会在用到的时候再执行加载,如果include引入的文件执行错误,不会带掉程序,只会返回一个警告,然后程序继续执行下去
//而require_once()和include_once()则跟require和include一样,唯一多出的一点属性就是:检测文件是否已经加载过,如果已经加载过了,就不再进行加载了

//检测ip是否合法
long2ip()和ip2long()
//ip2long():把ip转换成为整形,如:2130706433,如果ip不是合法ip则返回空
//long2ip():把整形转换为ip,如果整形为空则返回0.0.0.0
long2ip(ip2long("127.0.0.1"));

//数组转为字符串
implode(",", 数组);

//查看php设置
phpinfo();

public(公共的、默认)

protected(受保护的)被声明为protected的成员,只允许该类的子类进行访问。

private(私有的 ) 被定义为private的成员,对于类内部所有成员都可见,没有访问限制。对类外部不允许访问。

static 把方法设置成静态方法

interface 定义接口  如
interface a
{
    //抽象方法,里面不添加任何数据及逻辑
    public function b();
}

abstract 可把当前类定义为抽象类,抽象类时不能实例化的,等着被继承

implements 实现接口,和extends不同的是,如果当前类里面实现了这个接口a,但是类里面没有方法b,那么就会报错

extends 继承类,使用过框架的都知道,他的作用就是继承某个类,从而让他更容易的调用里面的方法

paremt::方法名 子类调用父类方法

//检查扩展是否已加载 ,返回布尔值
extension_loaded()

//加载图片的基本信息,返回值为数组
getimagesize()
//输出结果:
array(
        [0]   => 图片宽度的像素值
        [1]   => 图片高度的像素值
        [2]   => 图片的类型,返回的是数字,其中1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel byte order),8 = TIFF(motorola byte order),9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM
        [3]   => 图片的宽高
        [bits] => 图片的每种颜色的位数,二进制格式
        [mime] => 图片的 MIME 信息,此信息可以用来在 HTTP Content - type 头信息中发送正确的信息,如: header("Content-type: image/jpeg");
    )

//获取图片后缀 注:当获取的图片后缀为jpg的时候,将会输出jpeg,当false为true时则输出.png
image_type_to_extension(getimagesize('./01.png')[2], false);

//创建画板,默认背景颜色为黑色
imagecreatetruecolor(宽,高);

//给画板设置背景颜色
imagecolorallocate(imagecreatetruecolor(宽,高), 255, 255, 255);

//压缩
imagecopyresampled(画板,图片,画板X坐标点,画板y坐标点,图片x坐标点,图片y坐标点,要压缩到多宽,要压缩到多高,图片的宽,图片的高);

//销毁图像资源
imagedestroy();

//合并图片,把图片2放到图片1里面
imagecopymerge(图片1,图片2,图片1x坐标点,图片2y坐标点,图片1x坐标点,图片2y坐标点,图片2的宽,图片2的高,透明度);

//设置字体的颜色
imagecolorallocatealpha(图片或者画板,rgb颜色1,rgb颜色2,rgb颜色3,透明度);

//在图片或者画板里设置水印
imagettftext(画板或者图片, 字体大小, 字体倾斜度, 字体的x坐标, 字体的y坐标, 字体的颜色imagecolorallocatealpha(), 字体文件如:'STHUPO.TTF', 要输出的文字);

jQuery Ajax 实现跨域请求JSONP

相信好多朋友在使用jQuery进行Ajax请求接口的时候会出现 No 'Access-Control-Allow-Origin' header is present on the requested resource 然后请求失败,下面我们来简单的解决这个问题。

直接上代码

<script type="text/javascript" src="/jquery-1.4.2.min.js"></script>  
<script type="text/javascript">  
$(function(){  
$.ajax(  
    {  
        type:'get',
        url : 'http://你的域名/test.php',
        dataType : 'jsonp',  //这里是重点,dataType 一定为 'jsonp'
        jsonp:"jsoncallback",//这里也是重点,jsonp 后面是返回格式!
        success  : function(data) {
            console.log(data);
        },  
        error : function(error) {
            console.error(error);
        }  
    }  
);  
})  
</script>

这时候去控制台看一下,请求成功了!!!!

如果请求的是自己的接口,比如PHP为例

只需要在PHP接口文件里加入一段代码即可

header("Access-Control-Allow-Origin:*");

END 请求别人的接口无跨域,则用JSONP请求,自己的接口直接加上 header("Access-Control-Allow-Origin:*"); 然后用$.ajax或者$.get或者$.post直接请求即可。

图片与base64相互转换

PHP 将图片转换为 base64 字符串格式

<?php
//Filetype: JPEG,PNG,GIF 
$file = "encode.jpg"; //$file:图片地址
if ($fp = fopen($file, "rb", 0)) {
    $gambar = fread($fp, filesize($file));
    fclose($fp);
    //获取图片base64 
    $base64 = chunk_split(base64_encode($gambar));
    // 输出
    $encode = '<img src="data:image/jpg/png/gif;base64,' . $base64 . '" >';
    echo $encode;
}
?>

base64字符串转换为图片

<?php
//第一个参数图片保存路径以及图片名称 需注意图片后缀 linux请注意文件可写权限
//第二个参数为图片的$base64字符串  ps:下方会贴出图片$base64的格式 以及注意事项
file_put_contents('./test_base2.jpg', base64_decode($base64));
?>

模拟浏览器上传文件(数据流形式上传)

PHP上传文件基本都是临时存储,之后上传,怎么用PHP模拟浏览器以数据流形式上传文件

//网址 参数 文件
function upload($url, $p, $file) {
    $param = [
        //此处根据实际文件的上传的 name 填写
        'fileData' => file_get_contents(realpath($file)),
    ];
    if (!empty($p)) {
        arrary_merge($p, $param);
    }
    $delimiter = uniqid();
    $data = '';
    $eol = "\r\n";
    $upload = $param['fileData'];
    unset($param['fileData']);
    foreach ($param as $name => $content) {
        $data .= "--" . $delimiter . "\r\n"
            . 'Content-Disposition: form-data; name="' . $name . "\"\r\n\r\n"
            . $content . "\r\n";
    }
    // 拼接文件流  name="fileData"; filename="1.png"' 根据实际的文件 name 和名字填写 或写个变量
    //'Content-Type: image/gif'可改为'Content-Type:application/octet-stream' 由于我是测试的网站必须为 gif 所以就这样吧先
    $data .= "--" . $delimiter . $eol
        . 'Content-Disposition: form-data; name="fileData"; filename="1.png"' . "\r\n"
        . 'Content-Type: image/gif' . "\r\n\r\n";
 
    $data .= $upload . "\r\n";
    $data .= "--" . $delimiter . "--\r\n";
    $post_data = $data;
    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($curl, CURLOPT_HTTPHEADER, [
        "Content-Type: multipart/form-data; boundary=" . $delimiter,
        "Content-Length: " . strlen($post_data),
    ]);
    $response = curl_exec($curl);
    curl_close($curl);
    return $response;
}

参考资料:

https://www.jianshu.com/p/a3c71d3f770d

https://www.php.cn/php-weizijiaocheng-395833.html

https://blog.csdn.net/weixin_30820077/article/details/99160367

https://blog.csdn.net/mazhibinit/article/details/49667511

https://blog.csdn.net/ityang521/article/details/53178588

https://www.vvhan.com/phphanshu.html

https://www.vvhan.com/imgbase4.html

https://www.vvhan.com/phpfiledata.html

最后修改:2021 年 11 月 06 日 01 : 26 PM

发表评论