首页
统计
壁纸
追番记录
优秀博主
关于
推荐
导航
工具
音乐解锁
Search
1
NAS的简单介绍
708 阅读
2
网站环境一键部署工具推荐
504 阅读
3
tp5-模型数据处理
394 阅读
4
第20200225期-电脑壁纸-P10
350 阅读
5
PHP常用系统函数速查表
341 阅读
PHP
闲谈杂料
硬件系统
美图
ThinkPHP
笔记
数据库
Lua
登录
Search
标签搜索
ThinkPHP
MySQL
Laravel
PHP
API
GIT
Windows10
markdown
Web
跨域
ajax
小程序
壁纸
Linux
jsonp
try
异常
Dcat
UEFI
win10
phpfunny
累计撰写
104
篇文章
累计收到
24
条评论
首页
栏目
PHP
闲谈杂料
硬件系统
美图
ThinkPHP
笔记
数据库
Lua
页面
统计
壁纸
追番记录
优秀博主
关于
推荐
导航
工具
音乐解锁
搜索到
30
篇与
的结果
2021-12-03
API接口对称非对称加密【编辑中】
API接口对称,非对称加密https://blog.csdn.net/weixin_42109071/article/details/102565325前言接口项目为了保证数据的安全可靠性一般都会采取数据加密方式。虽然不是最安全的方案但确实最优的。你会想问那什么是最安全的方式呢?既然黑客可以通过接口攻击修改数据信息,那就从接口源头掐掉不对外提供接口不就完啦。哈哈哈开个玩笑,回归正传。加密算法百度百科给的定义是:数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码为“密文”,使其只能在输入相应的密钥之后才能显示出原容,通过这样的途径来达到保护数据不被非法人窃取、阅读的目的。 该过程的逆过程为解密,即将该编码信息转化为其原来数据的过程。加密算法中的加密方式也是不计其数的。可以简单归为两个方向,对称加密和非对称加密。对称加密定义:采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK等常见的有:优缺点:对称加密算法的优点是算法公开、计算量小、加密速度快、加密效率高。对称加密算法的缺点是在数据传送前,发送方和接收方必须商定好秘钥,然后使双方都能保存好秘钥。其次如果一方的秘钥被泄露,那么加密信息也就不安全了。另外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的独一秘钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担。非对称加密数据来源对称加密
2021年12月03日
194 阅读
0 评论
0 点赞
2021-11-25
MySQL时间统计
来源于互联网,收集整理时间戳格式SELECT FROM_UNIXTIME(create_time,'%Y%u') weeks,COUNT(id) COUNT FROM role GROUP BY weeks; SELECT FROM_UNIXTIME(create_time,'%Y%m%d') days,COUNT(id) COUNT FROM role GROUP BY days; SELECT FROM_UNIXTIME(create_time,'%Y%m') months,COUNT(id) COUNT FROM role GROUP BY months DATE格式#按年汇总,统计: select sum(mymoney) as totalmoney, count(*) as sheets from mytable group by date_format(col, '%Y'); #按月汇总,统计: select sum(mymoney) as totalmoney, count(*) as sheets from mytable group by date_format(col, '%Y-%m'); #按季度汇总,统计: select sum(mymoney) as totalmoney,count(*) as sheets from mytable group by concat(date_format(col, '%Y'),FLOOR((date_format(col, '%m')+2)/3)); select sum(mymoney) as totalmoney,count(*) as sheets from mytable group by concat(date_format(col, '%Y'),FLOOR((date_format(col, '%m')+2)/3)); #按小时: select sum(mymoney) as totalmoney,count(*) as sheets from mytable group by date_format(col, '%Y-%m-%d %H '); #查询 本年度的数据: select * FROM mytable WHERE year(FROM_UNIXTIME(my_time)) = year(curdate()) #查询数据附带季度数: select id, quarter(FROM_UNIXTIME(my_time)) FROM mytable; #查询 本季度的数据: select * FROM mytable WHERE quarter(FROM_UNIXTIME(my_time)) = quarter(curdate()); #本月统计: select * from mytable where month(my_time1) = month(curdate()) and year(my_time2) = year(curdate()) #本周统计: select * from mytable where month(my_time1) = month(curdate()) and week(my_time2) = week(curdate()) #N天内记录: WHERE TO_DAYS(NOW())-TO_DAYS(时间字段)<=N
2021年11月25日
176 阅读
0 评论
0 点赞
2021-10-25
PHP中常用的两种请求接口方法
GET方式的直接使用$file_contents = file_get_content('http://localhost/operate.php?act=get_user_list&type=json')POST方式得用下面的(需要开启PHP curl支持)。$url = 'http://localhost/operate.php?act=get_user_list&type=json'; $ch = curl_init (); curl_setopt ( $ch, CURLOPT_URL, $url ); curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt ( $ch, CURLOPT_CONNECTTIMEOUT, 10 ); curl_setopt ( $ch, CURLOPT_POST, 1 ); //启用POST提交 $file_contents = curl_exec ( $ch ); curl_close ( $ch );
2021年10月25日
84 阅读
0 评论
0 点赞
2021-10-22
区分online和dev项目配置文件
项目中一般常常会有两种服务器环境,最常见就是dev测试服务器环境和online正式服务器环境两个不同得服务器那么就会有两套不同得配置文件(mysql,redis...)不同的配置文件名config_dev.phpconfig_online.php相同的链接方式mysql,redis...这个时候就可以搞一个小判断来判断当前环境是哪一个?一。读取当前是哪一个环境?define('EDITION', isset($_SERVER['EDITION']) ? $_SERVER['EDITION'] : 'online'); define('ROOT_PATH', realpath(__DIR__ . '/../')); define('CORE_PATH', ROOT_PATH . '/Core'); $configFileName = (EDITION == 'online') ? 'config_online' : 'config_dev'; include_once CORE_PATH . DIRECTORY_SEPARATOR . $configFileName . '.php';如果这个 $_SERVER['EDITION'] 不存在直接读online的配置文件。存在就在判断一下 EDITION == 'online' 来决定读哪个配置文件。二。设置配置环境$_SERVER['EDITION']cat /home/www/nginx/conf/servers/xx.phpfunny.server查看项目配置的params/home/www/nginx/conf/servers location ~ \.php$ { root /data/htdocs/dev.phpla.com/public; fastcgi_pass 127.0.0.1:9000; include fastcgi_params; include params/dev.phpla.com.params; }cat /home/www/nginx/conf/params/xx.phpfunny.cn.params填写这个 EDITIONfastcgi_param EDITION "dev";这样在测试站配置好 $_SERVER['EDITION'] 第一步就可以判断啦。以上思路仅供参考。
2021年10月22日
124 阅读
0 评论
0 点赞
2021-10-19
PHP错误和异常处理的学习
错误和异常处理的学习在某些编程语言(例如JAVA)在特定的情况下将自动抛出异常,但是在PHP中异常必须手动抛出。异常处理的概念利用try,Exception,throw写一个简单抛出并捕捉的异常try{ throw new \Exception('发生了不可描述的错误', '500'); }catch(\Exception $e){ echo 'Exception '.$e->getCode().' : '.$e->getMessage().'<br/>'.' in '.$e->getFile().' On Line '.$e->getLine(); }提示109行异常代码就是 throw new \Exception('发生了不可描述的错误', '500');简单解释一下try,Exception,throw一般是try{}代码块和catch(){}代码块配套使用,一个try{}代码块可以配合多个catch代码块捕捉不同类型的异常。有一点需要注意:当有多个catch代码块时,传递给每一个catch代码块的对象必须具有不同的类型,这样php才能找到具体是哪个catch代码块。throw关键字触发异常处理机制。他是一个语言结构而不是函数,所以必须要给他传一个值。throw new \Exception('message', code);这个类的构造函数需要两个参数:一个消息和一个错误代码。Exception类
2021年10月19日
120 阅读
0 评论
0 点赞
2021-10-19
Docker介绍篇
介绍什么是docker 1.通俗的解释Docker的思想从他的logo上就能看出来,一条大鲸鱼上面有好多个箱子。就好一比将各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会相互影响。2.百度百科的解释Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。docker中三个重要概念 Dockerfile, Image/镜像,Container/容器image/镜像相当于虚拟中的快照,镜像里面包含了部署的应用程序以及它所关联的所有库。通过镜像,我们可以创建许多个不同的Container容器。容器就像是一台运行起来的虚拟机,每个容器都是独立的它们相互之间不影响。Dockerfile就像是一个自动化脚本,用来创建镜像的指令。基本运行指令:列举所有容器:docker ps停止容器:docker stop <容器 ID>重启容器:docker restart <容器 ID>删除容器:docker rm <容器ID>启动一个远程Shell:docker exec -it <容器 ID> /bin/bash容器的生命周期拉取,创建,运行,重启,停止,删除docker help 翻译用法: docker [选项] 命令一个容器自动运行所需选项: --config string 客户端配置文件位置 (默认 "/root/.docker") -c, --context string 用于连接守护进程的上下文的名称(用“docker.conf”覆盖DOCKER_HOST环境变量和默认上下文设置上下文使用”) -D, --debug 启用调试模式 -H, --host list socket链接进程守护 -l, --log-level string 设置日志级别("debug"|"info"|"warn"|"error"|"fatal") (default "info") --tls Use TLS; implied by --tlsverify --tlscacert string ca证书远程用 (default "/root/.docker/ca.pem") --tlscert string 私钥远程用 (default "/root/.docker/cert.pem") --tlskey string 公钥远程用 (default "/root/.docker/key.pem") --tlsverify 远程链接验证 -v, --version 打印版本信息并退出管理 命令: app* Docker App (Docker Inc., v0.9.1-beta3) builder 管理构建 buildx* Build with BuildKit (Docker Inc., v0.5.1-docker) config 管理docker配置文件 container 管理容器 context Manage contexts image 管理镜像 manifest 管理Docker映像清单和清单列表 network 联网管理 node 管理集群节点 plugin 插件管理 secret docker秘钥管理 service 服务管理 stack docker堆载管理 swarm 管理集群 system 管理docker trust 管理对Docker映像的信任 volume 管理卷命令: attach 将本地标准输入、输出和错误流附加到正在运行的容器 build 从Dockerfile生成映像 commit 根据容器的更改创建新镜像 cp 在容器和本地文件系统之间复制文件/文件夹 create 创建一个新容器 diff 检查对容器文件系统上的文件或目录的更改 events 从服务器获取实时事件 exec 在正在运行的容器中运行命令 export 将容器的文件系统导出为tar归档 history 显示镜像的历史记录 images 镜像列表 import 从tarball导入内容以创建文件系统映像 info 显示系统范围的信息 inspect 返回有关Docker对象的低级信息 kill 杀死一个或多个正在运行的容器 load 从tar存档或STDIN加载镜像 login 登录到Docker注册表 logout 从Docker注册表注销 logs 获取容器的日志 pause 暂停一个或多个容器中的所有进程 port 列出容器的端口映射或特定映射 ps 列出容器 pull 从注册表中提取镜像或存储库 push 将映像或存储库推送到注册表 rename 重命名容器 restart 重新启动一个或多个容器 rm 移除一个或多个容器 rmi 删除一个或多个镜像 run 在新容器中运行命令 save 将一个或多个镜像保存到tar存档(默认情况下流式传输到STDOUT) search 在Docker Hub中搜索镜像 start 启动一个或多个停止的容器 stats 显示容器资源使用统计信息的实时流 stop 停止一个或多个正在运行的容器 tag 创建引用源镜像的标记目标镜像 top 显示容器的运行进程 unpause 取消暂停一个或多个容器中的所有进程 update 更新一个或多个容器的配置 version 显示Docker版本信息 wait 阻止,直到一个或多个容器停止,然后打印其出口代码 有关命令的详细信息,请运行 'docker COMMAND --help' 。 要获得有关docker的更多帮助,请访问我们的指南 https://docs.docker.com/go/guides/
2021年10月19日
206 阅读
0 评论
0 点赞
2021-06-01
Laravel配合crontab指令创建定时任务
Laravel 配合crontab指令创建定时任务我工作中的项目使用的是Lumen框架,和laravel创建定时任务一样首先要定义调度,也是我们常说的脚本文件在App\Console\Commands下创建Test.php指令创建:php artisan make:command Test手动创建:<?php namespace App\Console\Commands; use Illuminate\Console\Command; class Test extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'test'; /** * The console command description. * * @var string */ protected $description = '测试创建脚本'; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * Execute the console command. * * @return int */ public function handle() { echo '开始执行test脚本'; echo "脚本执行结束"; } } 第二步、编辑 app/Console/Kernel.php 文件,将新生成的类进行注册:protected $commands = [ \App\Console\Commands\Test::class, ];然后就可以直接使用运行脚本指令啦 常用的指令有://查看所有的脚本以及框架自带的一些调度 php artisan list //手动执行指定脚本 php artisan test 参考一下 list指令Laravel Framework 8.41.0 Usage: command [options] [arguments] Options: -h, --help Display help for the given command. When no command is given display help for the list command -q, --quiet Do not output any message -V, --version Display this application version --ansi Force ANSI output --no-ansi Disable ANSI output -n, --no-interaction Do not ask any interactive question --env[=ENV] The environment the command should run under -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug Available commands: clear-compiled Remove the compiled class file db Start a new database CLI session down Put the application into maintenance / demo mode env Display the current framework environment help Display help for a command inspire Display an inspiring quote list List commands migrate Run the database migrations optimize Cache the framework bootstrap files serve Serve the application on the PHP development server test Run the application tests test_cmd 测试创建脚本 tinker Interact with your application up Bring the application out of maintenance mode auth auth:clear-resets Flush expired password reset tokens cache cache:clear Flush the application cache cache:forget Remove an item from the cache cache:table Create a migration for the cache database table config config:cache Create a cache file for faster configuration loading config:clear Remove the configuration cache file db db:seed Seed the database with records db:wipe Drop all tables, views, and types event event:cache Discover and cache the application's events and listeners event:clear Clear all cached events and listeners event:generate Generate the missing events and listeners based on registration event:list List the application's events and listeners key key:generate Set the application key make make:cast Create a new custom Eloquent cast class make:channel Create a new channel class make:command Create a new Artisan command make:component Create a new view component class make:controller Create a new controller class make:event Create a new event class make:exception Create a new custom exception class make:factory Create a new model factory make:job Create a new job class make:listener Create a new event listener class make:mail Create a new email class make:middleware Create a new middleware class make:migration Create a new migration file make:model Create a new Eloquent model class make:notification Create a new notification class make:observer Create a new observer class make:policy Create a new policy class make:provider Create a new service provider class make:request Create a new form request class make:resource Create a new resource make:rule Create a new validation rule make:seeder Create a new seeder class make:test Create a new test class migrate migrate:fresh Drop all tables and re-run all migrations migrate:install Create the migration repository migrate:refresh Reset and re-run all migrations migrate:reset Rollback all database migrations migrate:rollback Rollback the last database migration migrate:status Show the status of each migration notifications notifications:table Create a migration for the notifications table optimize optimize:clear Remove the cached bootstrap files package package:discover Rebuild the cached package manifest queue queue:batches-table Create a migration for the batches database table queue:clear Delete all of the jobs from the specified queue queue:failed List all of the failed queue jobs queue:failed-table Create a migration for the failed queue jobs database table queue:flush Flush all of the failed queue jobs queue:forget Delete a failed queue job queue:listen Listen to a given queue queue:prune-batches Prune stale entries from the batches database queue:restart Restart queue worker daemons after their current job queue:retry Retry a failed queue job queue:retry-batch Retry the failed jobs for a batch queue:table Create a migration for the queue jobs database table queue:work Start processing jobs on the queue as a daemon route route:cache Create a route cache file for faster route registration route:clear Remove the route cache file route:list List all registered routes sail sail:install Install Laravel Sail's default Docker Compose file sail:publish Publish the Laravel Sail Docker files schedule schedule:list List the scheduled commands schedule:run Run the scheduled commands schedule:test Run a scheduled command schedule:work Start the schedule worker schema schema:dump Dump the given database schema session session:table Create a migration for the session database table storage storage:link Create the symbolic links configured for the application stub stub:publish Publish all stubs that are available for customization vendor vendor:publish Publish any publishable assets from vendor packages view view:cache Compile all of the application's Blade templates view:clear Clear all compiled view files要是实现脚本自动定时执行需要配合crontab 指令第三步、创建一个该项目的定时任务* * * * * php /www/blog.phpfunny.cn/artisan schedule:run >> /dev/null 2>&1 //注意:* * * * *分别代表 分 时 日 月 周 (定时任务的时间) /为你的项目位置第四步、指定脚本执行时间(周期)protected function schedule(Schedule $schedule) { $schedule->command('test')//Test.php中的name ->everyFiveMinutes();//每五分钟执行一次 }常用的执行周期:->cron('* * * * *'); 在自定义Cron调度上运行任务 ->everyMinute(); 每分钟运行一次任务 ->everyFiveMinutes(); 每五分钟运行一次任务 ->everyTenMinutes(); 每十分钟运行一次任务 ->everyThirtyMinutes(); 每三十分钟运行一次任务 ->hourly(); 每小时运行一次任务 ->daily(); 每天凌晨零点运行任务 ->dailyAt('13:00'); 每天13:00运行任务 ->twiceDaily(1, 13); 每天1:00 & 13:00运行任务 ->weekly(); 每周运行一次任务 ->monthly(); 每月运行一次任务 ->monthlyOn(4, '15:00'); 每月4号15:00运行一次任务 ->quarterly(); 每个季度运行一次 ->yearly(); 每年运行一次 ->timezone('America/New_York'); 设置时区
2021年06月01日
263 阅读
0 评论
0 点赞
2021-05-30
[PHP基础]使用each+list+while遍历数组
while()+list()+each() 遍历数组要想使用 while()+list()+each() 必须要先搞明白list和each函数的作用。each() 函数的作用:先取得一个数组的‘当前单元’的下标和值(并存放一个数组)然后将指针移到下一个单元。例如:$a = array("bilibili", "youtube", "pornhub", "v2ex"); $arr1 = each($a); $arr2 = each($a); $arr3 = each($a); $arr4 = each($a); echo "<pre>"; print_r ($arr1); echo "</pre>"; echo "<pre>"; print_r ($arr2); echo "</pre>"; echo "<pre>"; print_r ($arr3); echo "</pre>"; echo "<pre>"; print_r ($arr4); echo "</pre>";结果:Array ( [1] => bilibili [value] => bilibili [0] => 0 [key] => 0 ) Array ( [1] => youtube [value] => youtube [0] => 1 [key] => 1 ) Array ( [1] => pornhub [value] => pornhub [0] => 2 [key] => 2 ) Array ( [1] => v2ex [value] => v2ex [0] => 3 [key] => 3 )要注意的是each()函数已自 PHP 7.2.0 起废弃。强烈建议不要使用本函数。list() 的作用:把数组中的值赋给一组变量例如:list($a,$b,$c,$d) = array("bilibili", "youtube", "pornhub", "v2ex"); echo "我最喜欢的视频网站是".$a.',我也经常会去看'. $b.'。<br />程序员网站'.$d.'。<br />'.$c.'只有老司机才会知道。';结果:我最喜欢的视频网站是bilibili,我也经常会去看youtube。 程序员网站v2ex。 pornhub只有老司机才会知道。注意:像 array() 一样,这不是真正的函数,而是语言结构。 list() 可以在单次操作内就为一组变量赋值。在 PHP 7.1.0 之前的版本,list() 仅能用于数字索引的数组,并假定数字索引从 0 开始。PHP 5 里,list() 从最右边的参数开始赋值; PHP 7 里,list() 从最左边的参数开始赋值。如果你用单纯的变量,不用担心这一点。 但是如果你用了具有索引的数组,通常你期望得到的结果和在 list() 中写的一样是从左到右的,但在 PHP 5 里实际上不是, 它是以相反顺序赋值的。通常而言,不建议依赖于操作的顺序,在未来可能会再次发生修改。最后结合使用来遍历数组栗子:<?php $fruit = array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry'); reset($fruit); while (list($key, $val) = each($fruit)) { echo "$key => $val\n"; } ?>结果:a => apple b => banana c => cranberry注意例子中使用了一个reset()函数因为将一个数组赋值给另一个数组时会重置原来的数组指针,因此在上边的例子中如果我们在循环内部将 $fruit 赋给了另一个变量的话将会导致无限循环。
2021年05月30日
224 阅读
0 评论
2 点赞
2021-04-11
Linux基础指令速查【转载】
一、文件和目录1. cd命令它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径:cd /home 进入 '/ home' 目录cd .. 返回上一级目录cd ../.. 返回上两级目录cd 进入个人的主目录cd ~user1 进入个人的主目录cd - 返回上次所在的目录2. pwd命令pwd 显示工作路径3. ls命令查看文件与目录的命令,list之意:ls 查看目录中的文件ls -l 显示文件和目录的详细资料ls -a 列出全部文件,包含隐藏文件ls -R 连同子目录的内容一起列出(递归列出),等于该目录下的所有文件都会显示出来ls [0-9] 显示包含数字的文件名和目录名4. cp 命令用于复制文件,copy之意,它还可以把多个文件一次性地复制到一个目录下:-a :将文件的特性一起复制-p :连同文件的属性一起复制,而非使用默认方式,与-a相似,常用于备份-i :若目标文件已经存在时,在覆盖时会先询问操作的进行-r :递归持续复制,用于目录的复制行为-u :目标文件与源文件有差异时才会复制5. mv命令用于移动文件、目录或更名,move之意:-f :force强制的意思,如果目标文件已经存在,不会询问而直接覆盖-i :若目标文件已经存在,就会询问是否覆盖-u :若目标文件已经存在,且比目标文件新,才会更新6. rm 命令用于删除文件或目录,remove之意:-f :就是force的意思,忽略不存在的文件,不会出现警告消息-i :互动模式,在删除前会询问用户是否操作-r :递归删除,最常用于目录删除,它是一个非常危险的参数二、查看文件内容7. cat命令用于查看文本文件的内容,后接要查看的文件名,通常可用管道与more和less一起使用:cat file1 从第一个字节开始正向查看文件的内容tac file1 从最后一行开始反向查看一个文件的内容cat -n file1 标示文件的行数more file1 查看一个长文件的内容head -n 2 file1 查看一个文件的前两行tail -n 2 file1 查看一个文件的最后两行tail -n +1000 file1 从1000行开始显示,显示1000行以后的cat filename | head -n 3000 | tail -n +1000 显示1000行到3000行cat filename | tail -n +3000 | head -n 1000 从第3000行开始,显示1000(即显示3000~3999行)三、文件搜索8. find命令()find / -name file1 从 '/' 开始进入根文件系统搜索文件和目录find / -user user1 搜索属于用户 'user1' 的文件和目录find /usr/bin -type f -atime +100 搜索在过去100天内未被使用过的执行文件find /usr/bin -type f -mtime -10 搜索在10天内被创建或者修改过的文件whereis halt 显示一个二进制文件、源码或man的位置which halt 显示一个二进制文件或可执行文件的完整路径删除大于50M的文件:find /var/mail/ -size +50M -exec rm {} \;四、文件的权限 使用 "+" 设置权限,使用 "-" 用于取消9. chmod 命令ls -lh 显示权限chmod ugo+rwx directory1 设置目录的所有人(u)、群组(g)以及其他人(o)以读(r,4 )、写(w,2)和执行(x,1)的权限chmod go-rwx directory1 删除群组(g)与其他人(o)对目录的读写执行权限10. chown 命令改变文件的所有者:chown user1 file1 改变一个文件的所有人属性chown -R user1 directory1 改变一个目录的所有人属性并同时改变改目录下所有文件的属性chown user1:group1 file1 改变一个文件的所有人和群组属性11. chgrp 命令改变文件所属用户组:chgrp group1 file1 改变文件的群组五、文本处理12. grep 命令分析一行的信息,若当中有我们所需要的信息,就将该行显示出来,该命令通常与管道命令一起使用,用于对一些命令的输出进行筛选加工等等:grep Aug /var/log/messages 在文件 '/var/log/messages'中查找关键词"Aug"grep ^Aug /var/log/messages 在文件 '/var/log/messages'中查找以"Aug"开始的词汇grep [0-9] /var/log/messages 选择 '/var/log/messages' 文件中所有包含数字的行grep Aug -R /var/log/* 在目录 '/var/log' 及随后的目录中搜索字符串"Aug"sed 's/stringa1/stringa2/g' example.txt 将example.txt文件中的 "string1" 替换成 "string2"sed '/^$/d' example.txt 从example.txt文件中删除所有空白行(搜索公众号Java知音,回复“2021”,送你一份Java面试题宝典)13. paste 命令paste file1 file2 合并两个文件或两栏的内容paste -d '+' file1 file2 合并两个文件或两栏的内容,中间用"+"区分14. sort 命令sort file1 file2 排序两个文件的内容sort file1 file2 | uniq 取出两个文件的并集(重复的行只保留一份)sort file1 file2 | uniq -u 删除交集,留下其他的行sort file1 file2 | uniq -d 取出两个文件的交集(只留下同时存在于两个文件中的文件)15. comm 命令comm -1 file1 file2 比较两个文件的内容只删除 'file1' 所包含的内容comm -2 file1 file2 比较两个文件的内容只删除 'file2' 所包含的内容comm -3 file1 file2 比较两个文件的内容只删除两个文件共有的部分六、打包和压缩文件16. tar 命令对文件进行打包,默认情况并不会压缩,如果指定了相应的参数,它还会调用相应的压缩程序(如gzip和bzip等)进行压缩和解压:-c :新建打包文件-t :查看打包文件的内容含有哪些文件名-x :解打包或解压缩的功能,可以搭配-C(大写)指定解压的目录,注意-c,-t,-x不能同时出现在同一条命令中-j :通过bzip2的支持进行压缩/解压缩-z :通过gzip的支持进行压缩/解压缩-v :在压缩/解压缩过程中,将正在处理的文件名显示出来-f filename :filename为要处理的文件-C dir :指定压缩/解压缩的目录dir压缩:tar -jcv -f filename.tar.bz2 要被处理的文件或目录名称查询:tar -jtv -f filename.tar.bz2解压:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录bunzip2 file1.bz2 解压一个叫做 'file1.bz2'的文件bzip2 file1 压缩一个叫做 'file1' 的文件gunzip file1.gz 解压一个叫做 'file1.gz'的文件gzip file1 压缩一个叫做 'file1'的文件gzip -9 file1 最大程度压缩rar a file1.rar test_file 创建一个叫做 'file1.rar' 的包rar a file1.rar file1 file2 dir1 同时压缩 'file1', 'file2' 以及目录 'dir1'rar x file1.rar 解压rar包zip file1.zip file1 创建一个zip格式的压缩包unzip file1.zip 解压一个zip格式压缩包zip -r file1.zip file1 file2 dir1 将几个文件和目录同时压缩成一个zip格式的压缩包七、系统和关机 (系统的关机、重启以及登出 )shutdown -h now 关闭系统(1)init 0 关闭系统(2)telinit 0 关闭系统(3)shutdown -h hours:minutes & 按预定时间关闭系统shutdown -c 取消按预定时间关闭系统shutdown -r now 重启(1)reboot 重启(2)logout 注销time 测算一个命令(即程序)的执行时间八、进程相关的命令17 jps命令显示当前系统的java进程情况,及其id号:jps(Java Virtual Machine Process Status Tool)是JDK 1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上简单察看当前java进程的一些简单情况。18 ps命令用于将某个时间点的进程运行情况选取下来并输出,process之意:-A :所有的进程均显示出来-a :不与terminal有关的所有进程-u :有效用户的相关进程-x :一般与a参数一起使用,可列出较完整的信息-l :较长,较详细地将PID的信息列出ps aux # 查看系统所有的进程数据 ps ax # 查看不与terminal有关的所有进程 ps -lA # 查看系统所有的进程数据 ps axjf # 查看连同一部分进程树状态19 kill命令用于向某个工作(%jobnumber)或者是某个PID(数字)传送一个信号,它通常与ps和jobs命令一起使用:20 killall命令(向一个命令启动的进程发送一个信号)21 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。如何杀死进程:图形化界面的方式kill -9 pid (-9表示强制关闭)killall -9 程序的名字pkill 程序的名字查看进程端口号:netstat -tunlp|grep 端口号来源:www.nowcoder.com/discuss/151562chattr文件上锁//1. 查看文件状态(如果文件带i代表已经上锁状态) lsattr 文件 //2. 上锁 chattr +i 文件 //3. 解锁 chattr -i 文件
2021年04月11日
217 阅读
0 评论
1 点赞
2021-04-10
60个CSS代码片段【转载】
CSS 中最具诱惑的一个功能是能添加动画效果,除了渐变,你可以给背景色、透明度、元素大小添加动画等。面对不断变化中的行业新趋势,越来越多的网站设计师和前端开发人员已开始全面使用CSS3属性,但是仍然有一些出色的CSS2代码片段和CSS3一起运行。而在本文收藏整理的这60个非常实用的CSS代码片段,我确信网站设计师和前端开发人员都会发现其中一些代码是有用的,也许能帮助我们解决生产环境中的遇到的那些老大难问题。1、垂直对齐如果你用 CSS,则你会有困惑:我该怎么垂直对齐容器中的元素?现在,利用 CSS3 的 Transform,可以很优雅的解决这个困惑:.verticalcenter{ position: relative; top: 50%; -webkit-transform: translateY(-50%); -o-transform: translateY(-50%); transform: translateY(-50%); } 使用这个技巧,从单行文本、段落到box,都会垂直对齐。目前浏览器对Transform的支持是需要关注的,Chrome 4, Opera 10, Safari 3, Firefox 3, and Internet Explorer 9.均支持该属性。2、伸展一个元素到窗口高度在具体场景中,你可能想要将一个元素伸展到窗口高度,基本元素的调整只能调整容器的大小,因此要使一个元素伸展到窗口高度,我们需要伸展顶层元素:html 和 body:html, body { height: 100%; }然后将 100% 应用到任何元素的高:div { height: 100%; }3、基于文件格式使用不同的样式为了更容易知道链接的目标,有时你想让一些链接看起来和其它的不同。下面的片段在文本链接前添加一个图标,对不同的资源使用不同的图标或图片: a[href^="http://"]{ padding-right: 20px; background: url(external.gif) no-repeat center right; } /* emails */ a[href^="mailto:"]{ padding-right: 20px; background: url(email.png) no-repeat center right; } /* pdfs */ a[href$=".pdf"]{ padding-right: 20px; background: url(pdf.png) no-repeat center right; } 看起来是这样的: http://jsfiddle.net/agusesetiyono/3sL1r0mw/light/4、创建跨浏览器的图像灰度灰度有时看起来简约和优雅,能为网站呈现更深层次的色调。在示例中,我们将对一个 SVG 图像添加灰度过滤:<svg xmlns="http://www.w3.org/2000/svg"> <filter id="grayscale"> <feColorMatrix type="matrix" values="0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0"/> </filter> </svg>为了跨浏览器,会用到 filter 属性:img { filter: url(filters.svg#grayscale); /* Firefox 3.5+ */ filter: gray; /* IE6-9 */ -webkit-filter: grayscale(1); /* Google Chrome, Safari 6+ & Opera 15+ */ }5、背景渐变动画CSS 中最具诱惑的一个功能是能添加动画效果,除了渐变,你可以给背景色、透明度、元素大小添加动画。目前,你不能为渐变添加动画,但下面的代码可能有帮助。它通过改变背景位置,让它看起来有动画效果。button { background-image: linear-gradient(#5187c4, #1c2f45); background-size: auto 200%; background-position: 0 100%; transition: background-position 0.5s; } button:hover { background-position: 0 0; } 效果在这里: http://jsfiddle.net/agusesetiyono/gw46dk27/1/light/6、CSS:表格列宽自适用对于表格,当谈到调整列宽时,是比较痛苦的。然后,这里有一个可以使用的技巧:给 td 元素添加 white-space: nowrap; 能让文本正确的换行td { white-space: nowrap; } 查看效果: http://jsfiddle.net/agusesetiyono/1uotj8wv/3/light/7、只在一边或两边显示盒子阴影如果你要一个盒阴影,试试这个技巧,能为任一边添加阴影。为了实现这个,首先定义一个有具体宽高的盒子,然后正确定位:after 伪类。实现底边阴影的代码如下:.box-shadow { background-color: #FF8020; width: 160px; height: 90px; margin-top: -45px; margin-left: -80px; position: absolute; top: 50%; left: 50%; } .box-shadow:after { content: ""; width: 150px; height: 1px; margin-top: 88px; margin-left: -75px; display: block; position: absolute; left: 50%; z-index: -1; -webkit-box-shadow: 0px 0px 8px 2px #000000; -moz-box-shadow: 0px 0px 8px 2px #000000; box-shadow: 0px 0px 8px 2px #000000; } 效果: http://jsfiddle.net/agusesetiyono/1kwhsfvo/light/8、包裹长文本如果你碰到一个比自身容器长的文本,这个技巧对你很有用。在这个示例中,默认时,不管容器的宽度,文本都将水平填充。简单的 CSS 代码就能在容器中调整文本:pre { white-space: pre-line; word-wrap: break-word; }9、制造模糊文本想要让文本模糊?可以使用 color 透明和 text-shadow 实现。.blurry-text { color: transparent; text-shadow: 0 0 5px rgba(0,0,0,0.5); } demo: http://jsfiddle.net/agusesetiyono/n5uh4s0j/light/10、用 CSS 动画实现省略号动画这个片段将帮助你制造一个ellipsis的动画,对于简单的加载状态是很有用的,而不用去使用gif图像。 .loading:after { overflow: hidden; display: inline-block; vertical-align: bottom; animation: ellipsis 2s infinite; content: "\2026"; /* ascii code for the ellipsis character */ } @keyframes ellipsis { from { width: 2px; } to { width: 15px; } }效果:http://jsfiddle.net/agusesetiyono/MDzsR/69/light/11、样式重置html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { margin: 0; padding: 0; border: 0; font-size: 100%; font: inherit; vertical-align: baseline; outline: none; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } html { height: 101%; } body { font-size: 62.5%; line-height: 1; font-family: Arial, Tahoma, sans-serif; } article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { display: block; } ol, ul { list-style: none; } blockquote, q { quotes: none; } blockquote:before, blockquote:after, q:before, q:after { content: ''; content: none; } strong { font-weight: bold; } table { border-collapse: collapse; border-spacing: 0; } img { border: 0; max-width: 100%; } p { font-size: 1.2em; line-height: 1.0em; color: #333; }12、典型的 CSS 清除浮动.clearfix:after { content: "."; display: block; clear: both; visibility: hidden; line-height: 0; height: 0; } .clearfix { display: inline-block; } html[xmlns] .clearfix { display: block; } * html .clearfix { height: 1%; }13、新版清除浮动(2011).clearfix:before, .container:after { content: ""; display: table; } .clearfix:after { clear: both; } /* IE 6/7 */ .clearfix { zoom: 1; }14、跨浏览器的透明.transparent { filter: alpha(opacity=50); /* internet explorer */ -khtml-opacity: 0.5; /* khtml, old safari */ -moz-opacity: 0.5; /* mozilla, netscape */ opacity: 0.5; /* fx, safari, opera */ }15、CSS 引用模板blockquote { background: #f9f9f9; border-left: 10px solid #ccc; margin: 1.5em 10px; padding: .5em 10px; quotes: "\201C""\201D""\2018""\2019"; } blockquote:before { color: #ccc; content: open-quote; font-size: 4em; line-height: .1em; margin-right: .25em; vertical-align: -.4em; } blockquote p { display: inline; }16、个性圆角#container { -webkit-border-radius: 4px 3px 6px 10px; -moz-border-radius: 4px 3px 6px 10px; -o-border-radius: 4px 3px 6px 10px; border-radius: 4px 3px 6px 10px; } /* alternative syntax broken into each line */ #container { -webkit-border-top-left-radius: 4px; -webkit-border-top-right-radius: 3px; -webkit-border-bottom-right-radius: 6px; -webkit-border-bottom-left-radius: 10px; -moz-border-radius-topleft: 4px; -moz-border-radius-topright: 3px; -moz-border-radius-bottomright: 6px; -moz-border-radius-bottomleft: 10px; }17、通用媒体查询/* Smartphones (portrait and landscape) ----------- */ @media only screen and (min-device-width : 320px) and (max-device-width : 480px) { /* Styles */ } /* Smartphones (landscape) ----------- */ @media only screen and (min-width : 321px) { /* Styles */ } /* Smartphones (portrait) ----------- */ @media only screen and (max-width : 320px) { /* Styles */ } /* iPads (portrait and landscape) ----------- */ @media only screen and (min-device-width : 768px) and (max-device-width : 1024px) { /* Styles */ } /* iPads (landscape) ----------- */ @media only screen and (min-device-width : 768px) and (max-device-width : 1024px) and (orientation : landscape) { /* Styles */ } /* iPads (portrait) ----------- */ @media only screen and (min-device-width : 768px) and (max-device-width : 1024px) and (orientation : portrait) { /* Styles */ } /* Desktops and laptops ----------- */ @media only screen and (min-width : 1224px) { /* Styles */ } /* Large screens ----------- */ @media only screen and (min-width : 1824px) { /* Styles */ } /* iPhone 4 ----------- */ @media only screen and (-webkit-min-device-pixel-ratio:1.5), only screen and (min-device-pixel-ratio:1.5) { /* Styles */ }(ps:【译】Responsive Design 常用的媒体查询)18、现代字体栈/* Times New Roman-based serif */ font-family: Cambria, "Hoefler Text", Utopia, "Liberation Serif", "Nimbus Roman No9 L Regular", Times, "Times New Roman", serif; /* A modern Georgia-based serif */ font-family: Constantia, "Lucida Bright", Lucidabright, "Lucida Serif", Lucida, "DejaVu Serif," "Bitstream Vera Serif", "Liberation Serif", Georgia, serif; /*A more traditional Garamond-based serif */ font-family: "Palatino Linotype", Palatino, Palladio, "URW Palladio L", "Book Antiqua", Baskerville, "Bookman Old Style", "Bitstream Charter", "Nimbus Roman No9 L", Garamond, "Apple Garamond", "ITC Garamond Narrow", "New Century Schoolbook", "Century Schoolbook", "Century Schoolbook L", Georgia, serif; /*The Helvetica/Arial-based sans serif */ font-family: Frutiger, "Frutiger Linotype", Univers, Calibri, "Gill Sans", "Gill Sans MT", "Myriad Pro", Myriad, "DejaVu Sans Condensed", "Liberation Sans", "Nimbus Sans L", Tahoma, Geneva, "Helvetica Neue", Helvetica, Arial, sans-serif; /*The Verdana-based sans serif */ font-family: Corbel, "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", "DejaVu Sans", "Bitstream Vera Sans", "Liberation Sans", Verdana, "Verdana Ref", sans-serif; /*The Trebuchet-based sans serif */ font-family: "Segoe UI", Candara, "Bitstream Vera Sans", "DejaVu Sans", "Bitstream Vera Sans", "Trebuchet MS", Verdana, "Verdana Ref", sans-serif; /*The heavier "Impact" sans serif */ font-family: Impact, Haettenschweiler, "Franklin Gothic Bold", Charcoal, "Helvetica Inserat", "Bitstream Vera Sans Bold", "Arial Black", sans-serif; /*The monospace */ font-family: Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace;19、自定义文本选择::selection { background: #e2eae2; } ::-moz-selection { background: #e2eae2; } ::-webkit-selection { background: #e2eae2; }20、为 logo 隐藏 H1h1 { text-indent: -9999px; margin: 0 auto; width: 320px; height: 85px; background: transparent url("images/logo.png") no-repeat scroll; }21、图片边框偏光img.polaroid { background:#000; /*Change this to a background image or remove*/ border:solid #fff; border-width:6px 6px 20px 6px; box-shadow:1px 1px 5px #333; /* Standard blur at 5px. Increase for more depth */ -webkit-box-shadow:1px 1px 5px #333; -moz-box-shadow:1px 1px 5px #333; height:200px; /*Set to height of your image or desired div*/ width:200px; /*Set to width of your image or desired div*/ }22、锚链接伪类a:link { color: blue; } a:visited { color: purple; } a:hover { color: red; } a:active { color: yellow; }23、奇特的 CSS 引用.has-pullquote:before { /* Reset metrics. */ padding: 0; border: none; /* Content */ content: attr(data-pullquote); /* Pull out to the right, modular scale based margins. */ float: right; width: 320px; margin: 12px -140px 24px 36px; /* Baseline correction */ position: relative; top: 5px; /* Typography (30px line-height equals 25% incremental leading) */ font-size: 23px; line-height: 30px; } .pullquote-adelle:before { font-family: "adelle-1", "adelle-2"; font-weight: 100; top: 10px !important; } .pullquote-helvetica:before { font-family: "Helvetica Neue", Arial, sans-serif; font-weight: bold; top: 7px !important; } .pullquote-facit:before { font-family: "facitweb-1", "facitweb-2", Helvetica, Arial, sans-serif; font-weight: bold; top: 7px !important; }24、CSS3:全屏背景html { background: url('images/bg.jpg') no-repeat center center fixed; -webkit-background-size: cover; -moz-background-size: cover; -o-background-size: cover; background-size: cover; }25、内容垂直居中.container { min-height: 6.5em; display: table-cell; vertical-align: middle; }26、强制出现垂直滚动条html { height: 101% }27、CSS3 渐变模板#colorbox { background: #629721; background-image: -webkit-gradient(linear, left top, left bottom, from(#83b842), to(#629721)); background-image: -webkit-linear-gradient(top, #83b842, #629721); background-image: -moz-linear-gradient(top, #83b842, #629721); background-image: -ms-linear-gradient(top, #83b842, #629721); background-image: -o-linear-gradient(top, #83b842, #629721); background-image: linear-gradient(top, #83b842, #629721); }28、@font-face 模板@font-face { font-family: 'MyWebFont'; src: url('webfont.eot'); /* IE9 Compat Modes */ src: url('webfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ url('webfont.woff') format('woff'), /* Modern Browsers */ url('webfont.ttf') format('truetype'), /* Safari, Android, iOS */ url('webfont.svg#svgFontName') format('svg'); /* Legacy iOS */ } body { font-family: 'MyWebFont', Arial, sans-serif; }29、缝合 CSS3 元素p { position:relative; z-index:1; padding: 10px; margin: 10px; font-size: 21px; line-height: 1.3em; color: #fff; background: #ff0030; -webkit-box-shadow: 0 0 0 4px #ff0030, 2px 1px 4px 4px rgba(10,10,0,.5); -moz-box-shadow: 0 0 0 4px #ff0030, 2px 1px 4px 4px rgba(10,10,0,.5); box-shadow: 0 0 0 4px #ff0030, 2px 1px 6px 4px rgba(10,10,0,.5); -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } p:before { content: ""; position: absolute; z-index: -1; top: 3px; bottom: 3px; left :3px; right: 3px; border: 2px dashed #fff; } p a { color: #fff; text-decoration:none; } p a:hover, p a:focus, p a:active { text-decoration:underline; }30、CSS3 斑马线tbody tr:nth-child(odd) { background-color: #ccc; }31、有趣的 &.amp { font-family: Baskerville, 'Goudy Old Style', Palatino, 'Book Antiqua', serif; font-style: italic; font-weight: normal; }32、大字段落p:first-letter{ display: block; margin: 5px 0 0 5px; float: left; color: #ff3366; font-size: 5.4em; font-family: Georgia, Times New Roman, serif; }33、内部 CSS3 盒阴影#mydiv { -moz-box-shadow: inset 2px 0 4px #000; -webkit-box-shadow: inset 2px 0 4px #000; box-shadow: inset 2px 0 4px #000; }34、外部 CSS3 盒阴影#mydiv { -webkit-box-shadow: 0 2px 2px -2px rgba(0, 0, 0, 0.52); -moz-box-shadow: 0 2px 2px -2px rgba(0, 0, 0, 0.52); box-shadow: 0 2px 2px -2px rgba(0, 0, 0, 0.52); }35、三角形列表项目符号ul { margin: 0.75em 0; padding: 0 1em; list-style: none; } li:before { content: ""; border-color: transparent #111; border-style: solid; border-width: 0.35em 0 0.35em 0.45em; display: block; height: 0; width: 0; left: -1em; top: 0.9em; position: relative; }36、固定宽度的居中布局#page-wrap { width: 800px; margin: 0 auto; }37、CSS3 列文本#columns-3 { text-align: justify; -moz-column-count: 3; -moz-column-gap: 12px; -moz-column-rule: 1px solid #c4c8cc; -webkit-column-count: 3; -webkit-column-gap: 12px; -webkit-column-rule: 1px solid #c4c8cc; }38、CSS 固定页脚#footer { position: fixed; left: 0px; bottom: 0px; height: 30px; width: 100%; background: #444; } /* IE 6 */ * html #footer { position: absolute; top: expression((0-(footer.offsetHeight)+(document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight)+(ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop))+'px'); }39、IE6 的 PNG 透明修复.bg { width:200px; height:100px; background: url(/folder/yourimage.png) no-repeat; _background:none; _filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/folder/yourimage.png',sizingMethod='crop'); } /* 1px gif method */ img, .png { position: relative; behavior: expression((this.runtimeStyle.behavior="none")&&(this.pngSet?this.pngSet=true:(this.nodeName == "IMG" && this.src.toLowerCase().indexOf('.png')>-1?(this.runtimeStyle.backgroundImage = "none", this.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + this.src + "', sizingMethod='image')", this.src = "images/transparent.gif"):(this.origBg = this.origBg? this.origBg :this.currentStyle.backgroundImage.toString().replace('url("','').replace('")',''), this.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + this.origBg + "', sizingMethod='crop')", this.runtimeStyle.backgroundImage = "none")),this.pngSet=true)); }40、跨浏览器设置最小高度#container { min-height: 550px; height: auto !important; height: 550px; }41、CSS3 鲜艳的输入input[type=text], textarea { -webkit-transition: all 0.30s ease-in-out; -moz-transition: all 0.30s ease-in-out; -ms-transition: all 0.30s ease-in-out; -o-transition: all 0.30s ease-in-out; outline: none; padding: 3px 0px 3px 3px; margin: 5px 1px 3px 0px; border: 1px solid #ddd; } input[type=text]:focus, textarea:focus { box-shadow: 0 0 5px rgba(81, 203, 238, 1); padding: 3px 0px 3px 3px; margin: 5px 1px 3px 0px; border: 1px solid rgba(81, 203, 238, 1); }42、基于文件类型的链接样式/* external links */ a[href^="http://"] { padding-right: 13px; background: url('external.gif') no-repeat center right; } /* emails */ a[href^="mailto:"] { padding-right: 20px; background: url('email.png') no-repeat center right; } /* pdfs */ a[href$=".pdf"] { padding-right: 18px; background: url('acrobat.png') no-repeat center right; }43、强制换行pre { white-space: pre-wrap; /* css-3 */ white-space: -moz-pre-wrap; /* Mozilla, since 1999 */ white-space: -pre-wrap; /* Opera 4-6 */ white-space: -o-pre-wrap; /* Opera 7 */ word-wrap: break-word; /* Internet Explorer 5.5+ */ }44、在可点击的项目上强制手型a[href], input[type='submit'], input[type='image'], label[for], select, button, .pointer { cursor: pointer; }45、网页顶部盒阴影body:before { content: ""; position: fixed; top: -10px; left: 0; width: 100%; height: 10px; -webkit-box-shadow: 0px 0px 10px rgba(0,0,0,.8); -moz-box-shadow: 0px 0px 10px rgba(0,0,0,.8); box-shadow: 0px 0px 10px rgba(0,0,0,.8); z-index: 100; }46、CSS3 对话气泡.chat-bubble { background-color: #ededed; border: 2px solid #666; font-size: 35px; line-height: 1.3em; margin: 10px auto; padding: 10px; position: relative; text-align: center; width: 300px; -moz-border-radius: 20px; -webkit-border-radius: 20px; -moz-box-shadow: 0 0 5px #888; -webkit-box-shadow: 0 0 5px #888; font-family: 'Bangers', arial, serif; } .chat-bubble-arrow-border { border-color: #666 transparent transparent transparent; border-style: solid; border-width: 20px; height: 0; width: 0; position: absolute; bottom: -42px; left: 30px; } .chat-bubble-arrow { border-color: #ededed transparent transparent transparent; border-style: solid; border-width: 20px; height: 0; width: 0; position: absolute; bottom: -39px; left: 30px; }47、H1-H5 默认样式h1,h2,h3,h4,h5{ color: #005a9c; } h1{ font-size: 2.6em; line-height: 2.45em; } h2{ font-size: 2.1em; line-height: 1.9em; } h3{ font-size: 1.8em; line-height: 1.65em; } h4{ font-size: 1.65em; line-height: 1.4em; } h5{ font-size: 1.4em; line-height: 1.25em; }48、纯 CSS 背景噪音body { background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAMAAAAp4XiDAAAAUVBMVEWFhYWDg4N3d3dtbW17e3t1dXWBgYGHh4d5eXlzc3OLi4ubm5uVlZWPj4+NjY19fX2JiYl/f39ra2uRkZGZmZlpaWmXl5dvb29xcXGTk5NnZ2c8TV1mAAAAG3RSTlNAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAvEOwtAAAFVklEQVR4XpWWB67c2BUFb3g557T/hRo9/WUMZHlgr4Bg8Z4qQgQJlHI4A8SzFVrapvmTF9O7dmYRFZ60YiBhJRCgh1FYhiLAmdvX0CzTOpNE77ME0Zty/nWWzchDtiqrmQDeuv3powQ5ta2eN0FY0InkqDD73lT9c9lEzwUNqgFHs9VQce3TVClFCQrSTfOiYkVJQBmpbq2L6iZavPnAPcoU0dSw0SUTqz/GtrGuXfbyyBniKykOWQWGqwwMA7QiYAxi+IlPdqo+hYHnUt5ZPfnsHJyNiDtnpJyayNBkF6cWoYGAMY92U2hXHF/C1M8uP/ZtYdiuj26UdAdQQSXQErwSOMzt/XWRWAz5GuSBIkwG1H3FabJ2OsUOUhGC6tK4EMtJO0ttC6IBD3kM0ve0tJwMdSfjZo+EEISaeTr9P3wYrGjXqyC1krcKdhMpxEnt5JetoulscpyzhXN5FRpuPHvbeQaKxFAEB6EN+cYN6xD7RYGpXpNndMmZgM5Dcs3YSNFDHUo2LGfZuukSWyUYirJAdYbF3MfqEKmjM+I2EfhA94iG3L7uKrR+GdWD73ydlIB+6hgref1QTlmgmbM3/LeX5GI1Ux1RWpgxpLuZ2+I+IjzZ8wqE4nilvQdkUdfhzI5QDWy+kw5Wgg2pGpeEVeCCA7b85BO3F9DzxB3cdqvBzWcmzbyMiqhzuYqtHRVG2y4x+KOlnyqla8AoWWpuBoYRxzXrfKuILl6SfiWCbjxoZJUaCBj1CjH7GIaDbc9kqBY3W/Rgjda1iqQcOJu2WW+76pZC9QG7M00dffe9hNnseupFL53r8F7YHSwJWUKP2q+k7RdsxyOB11n0xtOvnW4irMMFNV4H0uqwS5ExsmP9AxbDTc9JwgneAT5vTiUSm1E7BSflSt3bfa1tv8Di3R8n3Af7MNWzs49hmauE2wP+ttrq+AsWpFG2awvsuOqbipWHgtuvuaAE+A1Z/7gC9hesnr+7wqCwG8c5yAg3AL1fm8T9AZtp/bbJGwl1pNrE7RuOX7PeMRUERVaPpEs+yqeoSmuOlokqw49pgomjLeh7icHNlG19yjs6XXOMedYm5xH2YxpV2tc0Ro2jJfxC50ApuxGob7lMsxfTbeUv07TyYxpeLucEH1gNd4IKH2LAg5TdVhlCafZvpskfncCfx8pOhJzd76bJWeYFnFciwcYfubRc12Ip/ppIhA1/mSZ/RxjFDrJC5xifFjJpY2Xl5zXdguFqYyTR1zSp1Y9p+tktDYYSNflcxI0iyO4TPBdlRcpeqjK/piF5bklq77VSEaA+z8qmJTFzIWiitbnzR794USKBUaT0NTEsVjZqLaFVqJoPN9ODG70IPbfBHKK+/q/AWR0tJzYHRULOa4MP+W/HfGadZUbfw177G7j/OGbIs8TahLyynl4X4RinF793Oz+BU0saXtUHrVBFT/DnA3ctNPoGbs4hRIjTok8i+algT1lTHi4SxFvONKNrgQFAq2/gFnWMXgwffgYMJpiKYkmW3tTg3ZQ9Jq+f8XN+A5eeUKHWvJWJ2sgJ1Sop+wwhqFVijqWaJhwtD8MNlSBeWNNWTa5Z5kPZw5+LbVT99wqTdx29lMUH4OIG/D86ruKEauBjvH5xy6um/Sfj7ei6UUVk4AIl3MyD4MSSTOFgSwsH/QJWaQ5as7ZcmgBZkzjjU1UrQ74ci1gWBCSGHtuV1H2mhSnO3Wp/3fEV5a+4wz//6qy8JxjZsmxxy5+4w9CDNJY09T072iKG0EnOS0arEYgXqYnXcYHwjTtUNAcMelOd4xpkoqiTYICWFq0JSiPfPDQdnt+4/wuqcXY47QILbgAAAABJRU5ErkJggg==); background-color: #0094d0; }39、持久的列表排序ol.chapters { list-style: none; margin-left: 0; } ol.chapters > li:before { content: counter(chapter) ". "; counter-increment: chapter; font-weight: bold; float: left; width: 40px; } ol.chapters li { clear: left; } ol.start { counter-reset: chapter; } ol.continue { counter-reset: chapter 11; }(PS:可参考 content 属性详解)50、CSS 悬浮提示文本a { border-bottom:1px solid #bbb; color:#666; display:inline-block; position:relative; text-decoration:none; } a:hover, a:focus { color:#36c; } a:active { top:1px; } /* Tooltip styling */ a[data-tooltip]:after { border-top: 8px solid #222; border-top: 8px solid hsla(0,0%,0%,.85); border-left: 8px solid transparent; border-right: 8px solid transparent; content: ""; display: none; height: 0; width: 0; left: 25%; position: absolute; } a[data-tooltip]:before { background: #222; background: hsla(0,0%,0%,.85); color: #f6f6f6; content: attr(data-tooltip); display: none; font-family: sans-serif; font-size: 14px; height: 32px; left: 0; line-height: 32px; padding: 0 15px; position: absolute; text-shadow: 0 1px 1px hsla(0,0%,0%,1); white-space: nowrap; -webkit-border-radius: 5px; -moz-border-radius: 5px; -o-border-radius: 5px; border-radius: 5px; } a[data-tooltip]:hover:after { display: block; top: -9px; } a[data-tooltip]:hover:before { display: block; top: -41px; } a[data-tooltip]:active:after { top: -10px; } a[data-tooltip]:active:before { top: -42px; }51、深灰色的圆形按钮.graybtn { -moz-box-shadow:inset 0px 1px 0px 0px #ffffff; -webkit-box-shadow:inset 0px 1px 0px 0px #ffffff; box-shadow:inset 0px 1px 0px 0px #ffffff; background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #ffffff), color-stop(1, #d1d1d1) ); background:-moz-linear-gradient( center top, #ffffff 5%, #d1d1d1 100% ); filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#d1d1d1'); background-color:#ffffff; -moz-border-radius:6px; -webkit-border-radius:6px; border-radius:6px; border:1px solid #dcdcdc; display:inline-block; color:#777777; font-family:arial; font-size:15px; font-weight:bold; padding:6px 24px; text-decoration:none; text-shadow:1px 1px 0px #ffffff; } .graybtn:hover { background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #d1d1d1), color-stop(1, #ffffff) ); background:-moz-linear-gradient( center top, #d1d1d1 5%, #ffffff 100% ); filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#d1d1d1', endColorstr='#ffffff'); background-color:#d1d1d1; } .graybtn:active { position:relative; top:1px;}52、在可打印的网页中显示 URLs@media print { a:after { content: " [" attr(href) "] "; } }53、禁用移动 Webkit 的选择高亮body { -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; }54、CSS3 圆点图案body { background: radial-gradient(circle, white 10%, transparent 10%), radial-gradient(circle, white 10%, black 10%) 50px 50px; background-size: 100px 100px; }55、CSS3 方格图案body { background-color: white; background-image: linear-gradient(45deg, black 25%, transparent 25%, transparent 75%, black 75%, black), linear-gradient(45deg, black 25%, transparent 25%, transparent 75%, black 75%, black); background-size: 100px 100px; background-position: 0 0, 50px 50px;}56、Github 的 fork 色带.ribbon { background-color: #a00; overflow: hidden; /* top left corner */ position: absolute; left: -3em; top: 2.5em; /* 45 deg ccw rotation */ -moz-transform: rotate(-45deg); -webkit-transform: rotate(-45deg); /* shadow */ -moz-box-shadow: 0 0 1em #888; -webkit-box-shadow: 0 0 1em #888; } .ribbon a { border: 1px solid #faa; color: #fff; display: block; font: bold 81.25% 'Helvetiva Neue', Helvetica, Arial, sans-serif; margin: 0.05em 0 0.075em 0; padding: 0.5em 3.5em; text-align: center; text-decoration: none; /* shadow */ text-shadow: 0 0 0.5em #444;}57、CSS font 属性缩写p { font: italic small-caps bold 1.2em/1.0em Arial, Tahoma, Helvetica; }58、论文页面的卷曲效果ul.box { position: relative; z-index: 1; /* prevent shadows falling behind containers with backgrounds */ overflow: hidden; list-style: none; margin: 0; padding: 0; } ul.box li { position: relative; float: left; width: 250px; height: 150px; padding: 0; border: 1px solid #efefef; margin: 0 30px 30px 0; background: #fff; -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.27), 0 0 40px rgba(0, 0, 0, 0.06) inset; -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.27), 0 0 40px rgba(0, 0, 0, 0.06) inset; box-shadow: 0 1px 4px rgba(0, 0, 0, 0.27), 0 0 40px rgba(0, 0, 0, 0.06) inset; } ul.box li:before, ul.box li:after { content: ''; z-index: -1; position: absolute; left: 10px; bottom: 10px; width: 70%; max-width: 300px; /* avoid rotation causing ugly appearance at large container widths */ max-height: 100px; height: 55%; -webkit-box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3); -moz-box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3); box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3); -webkit-transform: skew(-15deg) rotate(-6deg); -moz-transform: skew(-15deg) rotate(-6deg); -ms-transform: skew(-15deg) rotate(-6deg); -o-transform: skew(-15deg) rotate(-6deg); transform: skew(-15deg) rotate(-6deg); } ul.box li:after { left: auto; right: 10px; -webkit-transform: skew(15deg) rotate(6deg); -moz-transform: skew(15deg) rotate(6deg); -ms-transform: skew(15deg) rotate(6deg); -o-transform: skew(15deg) rotate(6deg); transform: skew(15deg) rotate(6deg); }59、鲜艳的锚链接a { color: #00e; } a:visited { color: #551a8b; } a:hover { color: #06e; } a:focus { outline: thin dotted; } a:hover, a:active { outline: 0; } a, a:visited, a:active { text-decoration: none; color: #fff; -webkit-transition: all .3s ease-in-out; } a:hover, .glow { color: #ff0; text-shadow: 0 0 10px #ff0; }60、带 CSS3 特色的横幅显示.featureBanner { position: relative; margin: 20px } .featureBanner:before { content: "Featured"; position: absolute; top: 5px; left: -8px; padding-right: 10px; color: #232323; font-weight: bold; height: 0px; border: 15px solid #ffa200; border-right-color: transparent; line-height: 0px; box-shadow: -0px 5px 5px -5px #000; z-index: 1; } .featureBanner:after { content: ""; position: absolute; top: 35px; left: -8px; border: 4px solid #89540c; border-left-color: transparent; border-bottom-color: transparent; }本篇文档为转载原帖地址:https://www.moewah.com/archives/3532.html补充:鼠标悬停图片放大效果<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>图片放大</title> <style> .box{ width: 450px; height: 500px; margin: 0 auto; margin-top: 100px; overflow: hidden; border: 1px solid red; } div img{ transition: all .8s; } div img:hover{ transform: scale(1.3); } </style> </head> <body> <div class="box"><img src="https://j1109053660.oss-cn-hangzhou.aliyuncs.com/img/20200409232937.jpg" height="100%" alt=""></div> </body> </html>
2021年04月10日
140 阅读
0 评论
0 点赞
2021-02-28
从零开始学Git-基础篇
目录git commitgit branchgit mergegit rebase设置ssh参考链接1. git commitcommit用于仓库中提交记录 保存的是你目录下所有文件的快照,就好比复制粘贴一份整个目录。git希望提交记录尽可能的轻量,在每次进行提交时他会将当前版本与仓库中的上一个版本进行对比,并把所有的差异打包到一起作为一个提交记录。git还保存提交的历史记录,开发人员维护提交历史。2. git branchgit 的分支也非常轻量它们只是简单地指向某个提交记录。创建再多的分支也不会造成储存或者内存上的开销,并且按逻辑分解工作到不同的分支。简单用一句话来说:‘我想基于这个提交以及它所有的父提交进行的新工作’。git branch newImage /新创建一个newImage分支 git checkout newImage /切换到newImage分支上 git commit /提交当前分支记录 git checzkout -b newImage /创建一个newImage新分支并切换过去3. git merge在git中合并两个分支时会产生一个特殊的提交记录,它有两个父节点。简单来说:“我要把这个两个父节点本身及她们所有的祖先都包含进来”git merge newImage /将newImage分支合并到当前main主分支4. git rebasegit rebase建立基础就是重新分配一系列得提交记录,copy它们然后在另外一个地方逐个放下去,rebase的优势就是可以创造更线性得提交历史。下面用图画来解释一下起初是main和bugFix 两个并行的分支(当前分支指向的是bugFix)将bugFix分支里的工作直接移到main分支上git rebase main移动之后bugFix分支上的工作就在main的最前端。请注意:提交记录C3依然存在(图片上半透明的例程),而C3‘ 是我们rebase到主分支上的C3副本。切换到main分支上,把它rebase到bugFix分支上git rebase bugFix补充:1.配置SSH公钥生成$ ssh-keygen -t rsa -C "1109053660@qq.com"输入三次回车查看$ cat ~/.ssh/id_rsa.pub补充: 2.参考链接前往这个地址https://learngitbranching.js.org/?locale=zh_CN学习git更方便更快捷,有些图例的展示更直观对git操作的理解,还有通俗易懂的解释。
2021年02月28日
242 阅读
0 评论
0 点赞
2020-09-30
GIT指令之项目控制
简介Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目配置文件在git上配置文件config分为三种级别,分别为系统级别,用户级别,项目级别配置检查系统级别,system ,命令# git config -system -l用户级别,global ,命令# git config -global -l项目级别,local ,命令# git config -local -l配置用户#全局配置 git config --global user.name "Your Names" git config --global user.email "Your Email" git config --list #局部配置 $ git config user.name "gitlab’s Name" $ git config user.email "gitlab@xx.com" $ git config --list常用指令//克隆远程仓库指定分支代码(默认分支master) git clone -b 分支名称 git远程仓库地址 //创建跟踪 git branch --set-upstream-to=origin/<远程分支> 本地分支 //创建远程分支然后拉取到本地 git checkout -b feature-branch origin/feature-branch //本地先开好分支然后推送到远程 git checkout -b 分支名 git push origin 本地分支名:远程分支名 //查看修改文件 git status //添加到等待提交列表中(add 后面接要提交的文件名) git add . //添加提交描述信息 git commit -m 'feat: #67364 提交信息' //添加到远程分支 git push --set-upstream origin 远程分支名 //拉取远程分支到本地 git fetch origin 远程分支名 git pull origin --rebase 远程分支名(rebase合并操作) //比较连个版本 git diff //切换分支 git checkout 分支名 //删除暂存区内不想要的文件 git rm --cached <file> //强制提交(合并) git push origin 分支名 --force //回退 git reset --hard HEAD^ 回退到上个版本 git reset --hard HEAD~3 回退到前3次提交之前,以此类推,回退到n次提交之前 git reset --hard commit_id 退到/进到 指定commit的sha码 //暂存本地修改 git stash //暂存缓存回退到本地(有修改回退本地会有冲突) git stash pop|apply //查看多个暂存 git stash list //还原指定版本暂存 git stash pop stash@{?} //清除某个版本暂存 git stash drop stash@{?} //查看各版本时间轴方式 git log --oneline --decorate --graph --all Commit message格式<type>: <subject> //注意冒号后面有空格。type用于说明 commit 的类别,只允许使用下面7个标识。feat:新功能(feature) fix:修补bug docs:文档(documentation)/注释 perf: 优化/性能提升 style: 格式(不影响代码运行的变动) refactor:重构(即不是新增功能,也不是修改bug的代码变动) test:增加测试 revert:撤销修改 types:类型定义文件更改 chore:构建过程或辅助工具的变动 如果type为feat和fix,则该 commit 将肯定出现在 Change log 之中。subjectsubject是 commit 目的的简短描述,不超过50个字符,且结尾不加句号(.)。补充在shll控制台中修改文件拥有者,和属组修改拥有者 chown -R 拥有者名 目录名修改属组 chgrp 组名 文件名将远程git仓库里的指定分支拉取到本地(本地不存在的分支)当我想从远程仓库里拉取一条本地不存在的分支时:git checkout -b 本地分支名 origin/远程分支名这个将会自动创建一个新的本地分支,并与指定的远程分支关联起来。例如远程仓库里有个分支dev2,我本地没有该分支,我要把dev2拉到我本地:若成功,将会在本地创建新分支dev2,并自动切到dev2上。如果出现提示:fatal: Cannot update paths and switch to branch 'dev2' at the same time.Did you intend to checkout 'origin/dev2' which can not be resolved as commit?表示拉取不成功。我们需要先执行git fetch然后再执行git checkout -b 本地分支名 origin/远程分支名即可。.gitignore添加文件失效问题描述:git上传的时候,我们已经将 xxx 文件添加到了.gitignore 中,但是在push 后,远程仓库还是会显示此文件。解决方式:git rm -r --cached 文件/文件夹名字(. 代表所有文件) # 去掉已经托管的文件,然后重新提交 git add . git commit -m 'update .gitignore' git push原因:不要误解了.gitignore的用途,该文件只能作用于未被跟踪的文件,也就是那些从来没有被git记录过的文件(自添加以后,从未add及commit过的文件)。如果文件曾经被git记录过,那么.gitignore就对他们完全无效。【补充】在项目中推荐按着git的规则在需要屏蔽提交文件/文件夹 的目录中单独写入.gitignore.gitignore文件忽略规则ID语法解释1#注释以#开头的行为注释行,不起作用2*.a忽略所有.a结尾文件3!.b排除对于.b文件的忽略4build/忽略build/目录下所有文件5img/*.png忽略img/1.png,但是不忽略img/2023/2.png无本地仓库项目与远程仓库同步实用场景:测试项目搭建,复制项目删除掉.git目录重新跟踪等#1. 创建本地仓库 git init #2. 建立项目跟踪 git remote add origin git@gitee.com:phpfunny/game-website.git #3. 修改当前分支 git checkout -b 本地分支 #4. 还原指定远程分支最新代码 git reset --hard origin/远程分支 #5. 尝试git pull 或者 git push 提示要本地远程分支建立联系 git push --set-upstream origin 远程分支 #或者 git push --set-upstream origin 远程分支 #6. 最后测试 git pull #或者 git pushClone所有分支及其代码和记录实用场景:迁移仓库本地拥有所有远程分支版本代码#创建文件夹 mkdir md cd md #使用bare方式clone代码,并把下载后的文件夹重命名为 .git git clone --bare [远程仓库地址] .git #使用该命令(不用担心core.bare是否存在)或git config --bool core.bare false git config --unset core.bare #同步代码与远程代码保持最新 git reset --hard #查看本地分支 git branch迁移新仓库实用场景:将旧的远程仓库数据 迁移 到新的远程仓库#拉取项目 git clone [旧远程仓库地址] #使用bare方式clone代码,并把下载后的文件夹重命名为 .git git clone --bare [旧远程仓库地址] .git #移除老项目关联仓库 git remote remove origin #关联新仓库地址 git remote add origin [新远程仓库地址] #只推送单个分支 - 推送到新仓库,如果是空项目执行下面那句 git push git push --set-upstream origin master #推送所有分支 - 推送到新仓库 git push --mirro [新远程仓库地址]git clone https 记住密码#永久记住 git config --global credential.helper storegit stash pop stash@{?}报错 error: unknown switch e'`原因:在windows环境下PowerShell和cmd和Git Bash 编辑器中 认定花括号是代码块执行标识符。执行带有花括号序号转义解决方式:git stash pop stash@`{?`}
2020年09月30日
196 阅读
0 评论
0 点赞
2020-08-16
PHP项目中共享域设置
在初始化initialize中写入头信息当无需ajax使用jsonp的时候,可以在初始化initialize下写入头信息,请求源,请求方式的方法解决跨域受同源策略阻拦的问题,注意localhost和127.0.0.1也属于跨域//允许跨域的域名,*代表所有域名都可以访问,可以换成域名,并且多个域名用逗号分割开。 header('Access-Control-Allow-Origin:*'); //请求头中设置允许的请求方法 header('Access-Control-Allow-Headers:X-Requested-With,X_Requested_With,Token,Client,Content-Type,Accept'); //响应标头指定响应访问所述资源到时允许的一种或多种方法预检请求。 header('Access-Control-Allow-Methods:GET,POST,PUT,DELETE');X-Requested-With ,请求头 区分ajax请求还是普通请求可以看到 Ajax 请求多了个 x-requested-with ,可以利用它,request.getHeader(“x-requested-with”); 为 null,则为传统同步请求,为 XMLHttpRequest,则为 Ajax 异步请求。Token(令牌),Client(客户机),Content-Type(在请求中(如POST或PUT),客户端告诉服务器实际发送的数据类型)Accept一般配合input标签使用在文件上传中使用 accept 属性,本例中的输入字段可以接受 GIF 和 JPEG 两种图像:<form> <input type="file" name="pic" id="pic" accept="image/gif, image/jpeg" /> </form>如果不限制图像的格式,可以写为:accept="image/*"。什么是Access-Control-Allow-Origin他是HTML5中定义的一种解决资源跨域的策略。通过服务器端返回带有Access-Control-Allow-Origin标识的Response header,用来解决资源的跨域权限问题。html设置方式:<meta http-equiv="Access-Control-Allow-Origin" content="*">Access-Control-Allow-Origin:*的安全性根据w3c标准,如果b.com域下js要读取到a.com域下的需要登录才能访问的资源,需要a.com域同时设置了 Access-Control-Allow-Credentials: true头(即允许third-party cookie)并且如果设置access-control-allow-origin为*星号(任何域),则Access-Control-Allow-Credentials头是不能设置为true的,参见http://www.w3.org/TR/cors/#resource-requests所以理论上网站设置了Access-control-allow-origin: *,并没有实际危害,因为并不能跨域读取私密数据(登录后才可见数据)(在重复说一下显示重要性)发现许多网站会根据请求头中的Origin值然后设置Access-control-allow-origin,且同时设置了Access-Control-Allow-Credentials为true,导致可以被黑客利用Access-control-allow-origin:null 是可以携带cookie的。也存在特定场景下不需要cookie也能攻击的:基于ip认证的资源跨域读取缓存投毒,增加Vary: Origin http头可以避免使用php函数实现跨域读取资源file_get_contents() 把整个文件读入一个字符串中。语法:file_get_contents(path,include_path,context,start,max_length)参数描述path必需。规定要读取的文件。include_path可选。如果您还想在 include_path(在 php.ini 中)中搜索文件的话,请设置该参数为 '1'。context可选。规定文件句柄的环境。context 是一套可以修改流的行为的选项。若使用 NULL,则忽略。start可选。规定在文件中开始读取的位置。该参数是 PHP 5.1 中新增的。max_length可选。规定读取的字节数。该参数是 PHP 5.1 中新增的。不建议使用,使用这个函数会将资源加载到服务器内存,资源如果过大可能会导致系统假死,宕机情况的发生。最后说一下跨域最好还是使用jsonp来处理,待补充
2020年08月16日
201 阅读
0 评论
0 点赞
2020-08-15
Apache高级内容及优化
加密文章,请前往内页查看详情
2020年08月15日
170 阅读
0 评论
0 点赞
2020-06-14
图片生成base64数据流
介绍PHP+mysql存储照片有两种方式,1是通过数据库中存储图片的路径来实现图片的存储2是把图片数据存储在数据库中本文介绍就是第2种方法,将图片数据存储在数据库中。方法封装//图片生成Base64数据流 public function base64EncodeImage ($image_file) { $base64_image = ''; $image_info = getimagesize($image_file); $image_data = fread(fopen($image_file, 'r'), filesize($image_file)); $base64_image = 'data:' . $image_info['mime'] . ';base64,' . chunk_split(base64_encode($image_data)); return $base64_image; }使用方法//图片真实物理路径 $img=ROOT.DS.'public/images.png'; //调用图片生成base64数据流方法 $base64_img = $this->base64EncodeImage($img); //将数据流存储在数据库中 $i=Db::table('lr_wx_info')->where('name','是滑稽啊')->update(['head'=>$base64_img]);数据表的字段类型字段名类型长度小数点允许空值主键headblob00√
2020年06月14日
119 阅读
0 评论
0 点赞
1
2