分类 笔记 下的文章

捕获未被捕获的错误,以HTML形式输出

<?php
class Exception_Handle
{
  public static function register()
  {
    error_reporting(E_ALL);
    set_error_handler(['Exception_Handle','noticeErrorCatch']);
    register_shutdown_function(['Exception_Handle','fatalErrorCatch']);
  }

  public static function noticeErrorCatch($type, $message, $file, $line)
  {
    $msg = [
      'Level'     => $type,
      'Message'   => $message,
      'File'      => $file,
      'Line'      => $line
    ];
    return self::outputErrorPage($msg);
  }

  public static function fatalErrorCatch()
  {
    if($error = error_get_last()){
      $msg = [
        'Level'     => $error['type'],
        'Message'   => $error['message'],
        'File'      => $error['file'],
        'Line'      => $error['line']
      ];
      return self::outputErrorPage($msg);
    }
  }

  protected static function outputErrorPage($msg)
  {
    $buildHtml = function($arr){
      $res = '';
      foreach($arr as $k => $v){
        $res .= "<p>{$k}:{$v}</p>";
      }
      return $res;
    };

    $outputMsg = $buildHtml($msg);
    $fileOrder = $buildHtml(get_included_files());
    $classOrder = $buildHtml(get_declared_classes());

?>
<!DOCTYPE HTML>
<html>
  <head>
    <meta charset="utf-8">
    <title>500 - Internal Server Error</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
  </head>
  <style>
    * { margin: 0; padding: 0;}
    body { background-color: #c7c7c7;}
    #message p,hr { margin: 10px 0;}
    #message { width: 45%; margin: 64px auto; padding: 32px 64px; background-color: #FFFFFF;}
    @media only screen and (max-width: 500px) { #message { width: 85%; margin: 32px auto; padding: 32px 5%;}}
  </style>
  <body>
    <div id="message">
      <h2>500 - Internal Server Error</h2>
      <hr>
      <h3>Error Message:</h3>
      <?php echo $outputMsg;?>
      <hr>
      <h3>Included files:</h3>
      <?php echo $fileOrder;?>
      <hr>
      <h3>Declared classes:</h3>
      <?php echo $classOrder;?>
    </div>
  </body>
</html>
<?php
    exit();
  }
}

HTML部分

<form id="uploadForm" enctype="multipart/form-data"><input id="selectFile" type="file" name="file"/></form>
<button type="button" id="upload">确认上传</button>

Js部分

$(document).ready(function(){
  $("#upload").click(function () {
    if($('#selectFile').val().length == 0){
      alert("请选择文件");
      return;
    }
    var formData = new FormData($('#uploadForm')[0]);
    $.ajax({
      type: 'post',
      url: "/",
      data: formData,
      cache: false,
      processData: false,
      contentType: false,
    }).success(function (data) {
      alert("上传成功");
    }).error(function () {
      alert("上传失败");
    });
  });
});

/**
 *
 * Hash操作
 * 哈希操作
 * 可理解为数据库操作
 * 
 */

//为user表中的字段赋值。成功返回1,失败返回0。若user表不存在会先创建表再赋值,若字段已存在会覆盖旧值。
$redis->hSet('user', 'name', '222');

//获取user表中指定字段的值。若user表不存在则返回false。
$redis->hGet('user', 'realname');

//查看user表的某个字段是否存在,存在返回true,否则返回false。
$redis->hExists('user', 'realname');

//删除user表的一个字段,不支持删除多个字段。成功返回1,否则返回0。
$redis->hDel('user', '222');

//同时设置某个user表的多个字段值。成功返回true。
$redis->hMset('user', ['name' => 'jet', 'age' => 18]);

//同时获取某个user表的多个字段值。其中不存在的字段值为false。
$redis->hMget('user', ['name', 'age']);

//获取某个user表所有的字段和值。
$redis->hGetAll('user');

//获取某个user表所有字段名。user表不存在时返回空数组,key不为user表时返回false。
$redis->hKeys('user');

//获取某个user表所有字段值。
$redis->hVals('user');

//为user表中不存在的字段赋值。若user表不存在则先创建,若字段已存在则不做任何操作。设置成功返回true,否则返回false。
$redis->hSetNx('user', 'realname', 'jetwu');

//获取某个user表的字段数量。若user表不存在返回0,若user不是hash表则返回false。
$redis->hLen('user');

//为user表中的指定字段加上指定的数值,若user表不存在则先创建,若字段不存在则先初始化值为0再进行操作,若字段值为字符串则返回false。设置成功返回字段新值。
$redis->hIncrBy('user', 'age', 10);

//为user表中的指定字段加上指定浮点数值。
$redis->hIncrBy('user', 'age', 1.5);

本文转载自:https://www.cnblogs.com/junyi-bk/p/10898242.html

要将数组作为字符串传递,可将其序列化转换为字符串,编码传输后再反序列化得到数组内容。

$arr = [0, 1, 2, 3, 4, 5]; 

$string = serialize($arr);
//执行序列化

echo $string;
//a:6:{i:0;i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:4;i:4;i:5;i:5;}

$arr_2 = unserialize($string);
//反序列化,将字符串转换回数组

print_r($arr_2);
//Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 )

今天在编写程序时有一步需要通过URL携带一长串数据,想到的方法是把数据通过base64编码再进行传输,发现解码后数据变成乱码了。

TIM截图20200129231038.png

查询后得知php有专用于URL传输的编码函数

rawurlencode($string);
//传输前编码

rawurldecode($_GET['string']);
//接收后解码

前不久新域名备案通过了,就把博客的主域名改为新域名了,旧域名做了带参数301,代码如下

<?php
$request_url = 
isset($_SERVER['REQUEST_URL']) ? $_SERVER['REQUEST_URL'] : '';
//如有参数存入变量

header('HTTP/1.1 301 Moved Permanently');
//返回301码

header('Location: https://cwlog.net'.$request_url);
//跳转新域名