首页
时事
归档
壁纸
更多
留言
关于
邻里
Search
1
使用必应Bing每日图片做网站背景(自动)
2,987 阅读
2
vue的输入值校验规则整理
1,662 阅读
3
VUE `ERR_CONNECTION_TIMED_OUT`的解决办法
1,628 阅读
4
好站推荐-https://wangchujiang.com/linux-command/
1,598 阅读
5
微信支付开发前准备(小程序、公众号、App、H5)
1,582 阅读
文章
图说
代码
吐槽
登录
Search
标签搜索
Linux
laravel
windows
TYPO3
php
shell脚本
git
微信
好站
vue
第三方登录
centos
linxu
centos7
thinkPHP
微信支付
api
MySQL
桌面
必应首图
Beer
累计撰写
114
篇文章
累计收到
22
条评论
首页
栏目
文章
图说
代码
吐槽
页面
时事
归档
壁纸
留言
关于
邻里
搜索到
59
篇与
代码
的结果
2022-01-20
Laravel避免重复的查询判断
常用查询方案if ($request->type) { $query = $query->where('type', $request->type); } if ($request->wave) { $query = $query->where('wave', $request->wave); } if ($request->spu) { $query = $query->where('spu','like', "%".$request->spu."%"); } if ($request->sku) { $query = $query->where('sku','like', "%".$request->sku."%"); }优化查询方案foreach(['type', 'wave'] as $where){ if ($request->{$where}) { $query = $query->where($where, $request->{$where}); } } foreach(['spu', 'sku'] as $where){ if ($request->{$where}) { $query = $query->where($where, 'like',"%".$request->{$where}."%"); } }
2022年01月20日
734 阅读
0 评论
0 点赞
2022-01-20
Laravel修改.env配置文件
要修改的数据$data=[ 'BAN_STATUS'=>'false', 'PASSPORT_CLIENT'=>1, ];修改方法public function updateEnv(array $data) { $envPath = base_path() . DIRECTORY_SEPARATOR . '.env'; $contentArray = collect(file($envPath, FILE_IGNORE_NEW_LINES)); $contentArray->transform(function ($item) use ($data){ foreach ($data as $key => $value){ if(str_contains($item, $key)){ return $key . '=' . $value; } } return $item; }); $content = implode("\n", $contentArray->toArray()); \File::put($envPath, $content); }
2022年01月20日
619 阅读
0 评论
0 点赞
2021-11-09
Typecho插件-每日简报
Demo体验菜单:时事使用1.无插件实现1.在你的主题目录下 ~root/usr/themes/your-theme/ 创建一个单页模板文件2.文件名随意,然后在文件中你想要展示的地方添加如下代码<?php $content = file_get_contents('https://news.topurl.cn?ip='.get_real_ip()); echo $content; ?>3.在typecho后台添加单页,选择刚添加的页面作为模板即可
2021年11月09日
956 阅读
0 评论
0 点赞
2021-09-04
Laravel 常用命令收集
创建项目laravel new blog || composer create-project --prefer-dist laravel/laravel blog安装组件composer install刷新组件composer update删除组件composer remove chensuilong/toastr composer dump-autoload查看artisan命令php artisan php artisan list启动PHP的Web服务php artisan serve查看某个帮助命令php artisan help make:model php artisan make:model User --migration 创建模型并创建新迁移查看laravel版本php artisan --version使用 PHP 内置的开发服务器启动应用php artisan serve生成一个随机的 key,并自动更新到 app/config/app.php 的 key 键值对(刚安装好需要做这一步)php artisan key:generate开启Auth用户功能(开启后需要执行迁移才生效)php artisan make:auth开启维护模式和关闭维护模式(显示503)php artisan down php artisan up进入tinker工具php artisan tinker列出所有的路由php artisan route:list生成路由缓存以及移除缓存路由文件php artisan route:cache php artisan route:clear重新生成签名php artisan passport:install自动生成Laravel密钥php artisan key:generateAuth 系统php artisan make:auth创建控制器php artisan make:controller StudentController创建Rest风格资源控制器(带有index、create、store、edit、update、destroy、show方法)php artisan make:controller PhotoController --resource创建模型php artisan make:model Student php artisan make:model User --migration //创建模型并创建新迁移创建新建表的迁移和修改表的迁移php artisan make:migration create_users_table --create=students //创建students表 php artisan make:migration add_votes_to_users_table --table=students//给students表增加votes字段执行迁移php artisan migrate php artisan migrate:rollback //回滚最新一次迁移创建模型的时候同时生成新建表的迁移php artisan make:model Student -m回滚上一次的迁移php artisan migrate:rollback回滚所有迁移php artisan migrate:reset php artisan migrate:refresh //更新表结构创建填充php artisan make:seeder StudentTableSeeder执行单个填充php artisan db:seed --class=StudentTableSeeder执行所有填充php artisan db:seed创建中间件(app/Http/Middleware 下)php artisan make:middleware Activity创建队列(数据库)的表迁移(需要执行迁移才生效)php artisan queue:table创建队列类(app/jobs下):php artisan make:job SendEmail创建请求类(app/Http/Requests下)php artisan make:request CreateArticleRequest php artisan:显示详细的命令行帮助信息,同 php artisan list php artisan –help:显示帮助命令的使用格式,同 php artisan help php artisan –version:显示当前使用的 Laravel 版本 php artisan changes:列出当前版本相对于上一版本的主要变化 php artisan down:将站点设为维护状态 php artisan up:将站点设回可访问状态 php artisan optimize:优化应用程序性能,生成自动加载文件,且产生聚合编译文件 bootstrap/compiled.php php artisan dump-autoload:重新生成框架的自动加载文件,相当于 optimize 的再操作 php artisan clear-compiled:清除编译生成的文件,相当于 optimize 的反操作 php artisan migrate:执行数据迁移 php artisan routes:列出当前应用全部的路由规则 php artisan serve:使用 PHP 内置的开发服务器启动应用 【要求 PHP 版本在 5.4 或以上】 php artisan tinker:进入与当前应用环境绑定的 REPL 环境,相当于 Rails 框架的 rails console 命令 php artisan workbench 组织名/包名:这将在应用根目录产生一个名为 workbench 的文件夹,然后按 组织名/包名 的形式生成一个符合 Composer 标准的包结构,并自动安装必要的依赖【需要首先完善好 app/config/workbench.php 文件的内容】 php artisan cache:clear:清除应用程序缓存 php artisan command:make 命令名:在 app/commands 目录下生成一个名为 命令名.php 的自定义命令文件 php artisan controller:make 控制器名:在 app/controllers 目录下生成一个名为 控制器名.php 的控制器文件 php artisan db:seed:对数据库填充种子数据,以用于测试 php artisan key:generate:生成一个随机的 key,并自动更新到 app/config/app.ph 的 key 键值对 php artisan migrate:install:初始化迁移数据表 php artisan migrate:make 迁移名:这将在 app/database/migrations 目录下生成一个名为 时间+迁移名.php 的数据迁移文件,并自动执行一次 php artisan dump-autoload 命令 php artisan migrate:refresh:重置并重新执行所有的数据迁移 php artisan migrate:reset:回滚所有的数据迁移 php artisan migrate:rollback:回滚最近一次数据迁移 php artisan session:table:生成一个用于 session 的数据迁移文件
2021年09月04日
767 阅读
0 评论
0 点赞
2021-06-22
vue的输入值校验规则整理
1、是否合法IP地址export function validateIP(rule, value,callback) { if(value==''||value==undefined||value==null){ callback(); }else { const reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/; if ((!reg.test(value)) && value != '') { callback(new Error('请输入正确的IP地址')); } else { callback(); } } }2、是否手机号码或者固话export function validatePhoneTwo(rule, value, callback) { const reg = /^((0\d{2,3}-\d{7,8})|(1[34578]\d{9}))$/;; if (value == '' || value == undefined || value == null) { callback(); } else { if ((!reg.test(value)) && value != '') { callback(new Error('请输入正确的电话号码或者固话号码')); } else { callback(); } } }3、是否固话export function validateTelphone(rule, value,callback) { const reg =/0\d{2,3}-\d{7,8}/; if(value==''||value==undefined||value==null){ callback(); }else { if ((!reg.test(value)) && value != '') { callback(new Error('请输入正确的固定电话)')); } else { callback(); } } }4、是否手机号码export function validatePhone(rule, value,callback) { const reg =/^[1][3-9][0-9]{9}$/; if(value==''||value==undefined||value==null){ callback(); }else { if ((!reg.test(value)) && value != '') { callback(new Error('请输入正确的电话号码')); } else { callback(); } } }5、是否身份证号码export function validateIdNo(rule, value,callback) { const reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/; if(value==''||value==undefined||value==null){ callback(); }else { if ((!reg.test(value)) && value != '') { callback(new Error('请输入正确的身份证号码')); } else { callback(); } } }6、是否邮箱export function validateEMail(rule, value,callback) { const reg =/^([a-zA-Z0-9]+[-_\.]?)+@[a-zA-Z0-9]+\.[a-z]+$/; if(value==''||value==undefined||value==null){ callback(); }else{ if (!reg.test(value)){ callback(new Error('请输入正确的邮箱')); } else { callback(); } } }7、合法urlexport function validateURL(url) { const urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/; return urlregex.test(url); }8、验证内容是否包含英文数字以及下划线export function isPassword(rule, value, callback) { const reg =/^[_a-zA-Z0-9]+$/; if(value==''||value==undefined||value==null){ callback(); } else { if (!reg.test(value)){ callback(new Error('仅由英文字母,数字以及下划线组成')); } else { callback(); } } }9、自动检验数值的范围export function checkMax20000(rule, value, callback) { if (value == '' || value == undefined || value == null) { callback(); } else if (!Number(value)) { callback(new Error('请输入[1,20000]之间的数字')); } else if (value < 1 || value > 20000) { callback(new Error('请输入[1,20000]之间的数字')); } else { callback(); } }10、验证数字输入框最大数值export function checkMaxVal(rule, value,callback) { if (value < 0 || value > 最大值) { callback(new Error('请输入[0,最大值]之间的数字')); } else { callback(); } }11、验证是否1-99之间export function isOneToNinetyNine(rule, value, callback) { if (!value) { return callback(new Error('输入不可以为空')); } setTimeout(() => { if (!Number(value)) { callback(new Error('请输入正整数')); } else { const re = /^[1-9][0-9]{0,1}$/; const rsCheck = re.test(value); if (!rsCheck) { callback(new Error('请输入正整数,值为【1,99】')); } else { callback(); } } }, 0); }12、验证是否整数export function isInteger(rule, value, callback) { if (!value) { return callback(new Error('输入不可以为空')); } setTimeout(() => { if (!Number(value)) { callback(new Error('请输入正整数')); } else { const re = /^[0-9]*[1-9][0-9]*$/; const rsCheck = re.test(value); if (!rsCheck) { callback(new Error('请输入正整数')); } else { callback(); } } }, 0); }13、验证是否整数,非必填export function isIntegerNotMust(rule, value, callback) { if (!value) { callback(); } setTimeout(() => { if (!Number(value)) { callback(new Error('请输入正整数')); } else { const re = /^[0-9]*[1-9][0-9]*$/; const rsCheck = re.test(value); if (!rsCheck) { callback(new Error('请输入正整数')); } else { callback(); } } }, 1000); }14、 验证是否是[0-1]的小数export function isDecimal(rule, value, callback) { if (!value) { return callback(new Error('输入不可以为空')); } setTimeout(() => { if (!Number(value)) { callback(new Error('请输入[0,1]之间的数字')); } else { if (value < 0 || value > 1) { callback(new Error('请输入[0,1]之间的数字')); } else { callback(); } } }, 100); }15、 验证是否是[1-10]的小数,即不可以等于0export function isBtnOneToTen(rule, value, callback) { if (typeof value == 'undefined') { return callback(new Error('输入不可以为空')); } setTimeout(() => { if (!Number(value)) { callback(new Error('请输入正整数,值为[1,10]')); } else { if (!(value == '1' || value == '2' || value == '3' || value == '4' || value == '5' || value == '6' || value == '7' || value == '8' || value == '9' || value == '10')) { callback(new Error('请输入正整数,值为[1,10]')); } else { callback(); } } }, 100); }16、验证是否是[1-100]的小数,即不可以等于0export function isBtnOneToHundred(rule, value, callback) { if (!value) { return callback(new Error('输入不可以为空')); } setTimeout(() => { if (!Number(value)) { callback(new Error('请输入整数,值为[1,100]')); } else { if (value < 1 || value > 100) { callback(new Error('请输入整数,值为[1,100]')); } else { callback(); } } }, 100); }17、验证是否是[0-100]的小数export function isBtnZeroToHundred(rule, value, callback) { if (!value) { return callback(new Error('输入不可以为空')); } setTimeout(() => { if (!Number(value)) { callback(new Error('请输入[1,100]之间的数字')); } else { if (value < 0 || value > 100) { callback(new Error('请输入[1,100]之间的数字')); } else { callback(); } } }, 100); }18、验证端口是否在[0,65535]之间export function isPort(rule, value, callback) { if (!value) { return callback(new Error('输入不可以为空')); } setTimeout(() => { if (value == '' || typeof(value) == undefined) { callback(new Error('请输入端口值')); } else { const re = /^([0-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/; const rsCheck = re.test(value); if (!rsCheck) { callback(new Error('请输入在[0-65535]之间的端口值')); } else { callback(); } } }, 100); }19、验证端口是否在[0,65535]之间,非必填,isMust表示是否必填export function isCheckPort(rule, value, callback) { if (!value) { callback(); } setTimeout(() => { if (value == '' || typeof(value) == undefined) { //callback(new Error('请输入端口值')); } else { const re = /^([0-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/; const rsCheck = re.test(value); if (!rsCheck) { callback(new Error('请输入在[0-65535]之间的端口值')); } else { callback(); } } }, 100); }20、小写字母export function validateLowerCase(val) { const reg = /^[a-z]+$/; return reg.test(val); }22、两位小数验证const validateValidity = (rule, value, callback) => { if (!/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/.test(value)) { callback(new Error('最多两位小数!!!')); } else { callback(); } };23、是否大写字母export function validateUpperCase(val) { const reg = /^[A-Z]+$/; return reg.test(val); }24、是否大小写字母export function validatAlphabets(val) { const reg = /^[A-Za-z]+$/; return reg.test(val); }25、密码校验export const validatePsdReg = (rule, value, callback) => { if (!value) { return callback(new Error('请输入密码')) } if (!/^(?![\d]+$)(?![a-zA-Z]+$)(?![^\da-zA-Z]+$)([^\u4e00-\u9fa5\s]){6,20}$/.test(value)) { callback(new Error('请输入6-20位英文字母、数字或者符号(除空格),且字母、数字和标点符号至少包含两种')) } else { callback() } }26、中文校验export const validateContacts = (rule, value, callback) => { if (!value) { return callback(new Error('请输入中文')) } if (!/^[\u0391-\uFFE5A-Za-z]+$/.test(value)) { callback(new Error('不可输入特殊字符')) } else { callback() } }27、身份证校验export const ID = (rule, value, callback) => { if (!value) { return callback(new Error('身份证不能为空')) } if (! /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(value)) { callback(new Error('请输入正确的二代身份证号码')) } else { callback() } }`28、 账号校验export const validateCode = (rule, value, callback) => { if (!value) { return callback(new Error('请输入账号')) } if (!/^(?![0-9]*$)(?![a-zA-Z]*$)[a-zA-Z0-9]{6,20}$/.test(value)) { callback(new Error('账号必须为6-20位字母和数字组合')) } else { callback() } }29 、纯数字校验export const validateNumber = (rule, value, callback) => { let numberReg = /^\d+$|^\d+[.]?\d+$/ if (value !== '') { if (!numberReg.test(value)) { callback(new Error('请输入数字')) } else { callback() } } else { callback(new Error('请输入值')) } }30、最多一位小数const onePoint = (rule, value, callback) => { if (!/^[0-9]+([.]{1}[0-9]{1})?$/.test(value)) { callback(new Error('最多一位小数!!!')); } else { callback(); } };31、大于0的所有数字const onePoint = (rule, value, callback) => { if (!/^[0-9]+([.]{1}[0-9]{1})?$/.test(value)) { callback(new Error('最多一位小数!!!')); } else { callback(); } };
2021年06月22日
1,662 阅读
2 评论
0 点赞
2021-06-04
VUE的input框赋值后无法进行编辑
问题情况data中有定义对应字段,input框也进行绑定对了v-model 但进行赋值后,input输入框无法进行操作(select下拉选框也有同样的问题),不晓得是不是我半路出家搞前端哪块出问题了,问了不少人都说是直接model赋值,但我就是不行。。。解决:使用vue的全局方法:this.$set(data, property, value) //data为要修改的对象,property为要添加的属性,value就是这个属性的值//例如: this.$set(this.addForm, "provider", '张三的店');结语这个问题说实话我不清楚是什么原因导致的,网上找说是没有绑定get,set方法,暂且就先相信这种方法吧
2021年06月04日
1,175 阅读
0 评论
0 点赞
2021-05-25
Laravel 数据迁移字段类型&字段长度综合表
Laravel 数据迁移字段类型&字段长度综合表数值类型命令大小描述范围用途最大存储单位$table->tinyInteger('votes');1 字节相当于 TINYINT(-128,127)小整数值127b$table->tinyIncrements('id');1 字节相当于 自动递增 UNSIGNED TINYINT(0,255)小整数值255b$table->unsignedTinyInteger('votes');1 字节相当于 不递增 UNSIGNED TINYINT(0,255)小整数值255b$table->smallInteger('votes');2 字节相当于 SMALLINT(-32 768,32 767)大整数值31.99kb$table->unsignedSmallInteger('votes');2 字节相当于 不递增 UNSIGNED SMALLINT(0,65 535)大整数值63.99kb$table->mediumInteger('votes');3 字节相当于 MEDIUMINT(-8 388 608,8 388 607)大整数值 $table->unsignedMediumInteger('votes');3 字节相当于 Unsigned MEDIUMINT(0,16 777 215)大整数值 $table->integer('votes');4 字节相当于 INTEGER(-2 147 483 648,2 147 483 647)大整数值 $table->increments('id');4 字节递增的 ID (主键),相当于「UNSIGNED INTEGER」(0,4 294 967 295)大整数值 $table->bigInteger('votes');8 字节相当于 BIGINT(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)极大整数值 $table->unsignedBigInteger('votes');8 字节相当于 UNSIGNED BIGINT(0,18 446 744 073 709 551 615)极大整数值 $table->float('amount', 8, 2);4 字节相当于带有精度与基数 FLOAT(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)单精度浮点数值 $table->double('column', 8, 2);8 字节相当于带有精度与基数 DOUBLE(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)双精度浮点数值 $table->decimal('amount', 8, 2);对DECIMAL(M,D)相当于带有精度与基数 DECIMAL依赖于M和D的值小数值 字符串类型类型大小描述用途$table->char('name', 4);0-255字节相当于带有长度的 CHAR定长字符串$table->string('name', 100);0-65535 字节相当于带长度的 VARCHAR变长字符串TINYBLOB0-255字节 不超过 255 个字符的二进制字符串TINYTEXT0-255字节 短文本字符串$table->binary('data');0-65 535字节相当于 BLOB二进制形式的长文本数据$table->text('description');0-65 535字节相当于 TEXT长文本数据MEDIUMBLOB0-16 777 215字节 二进制形式的中等长度文本数据$table->mediumText('description');0-16 777 215字节相当于 MEDIUMTEXT中等长度文本数据LONGBLOB0-4 294 967 295字节 二进制形式的极大文本数据$table->longText('description');0-4 294 967 295字节相当于 LONGTEXT极大文本数据日期和时间类型命令大小描述范围格式用途$table->date('created_at');3字节相当于 DATE1000-01-01/9999-12-31YYYY-MM-DD日期值$table->time('sunrise');3字节相当于 TIME'-838:59:59'/'838:59:59'HH:MM:SS时间值或持续时间$table->year('birth_year');1字节相当于 YEAR1901/2155YYYY年份值$table->dateTime('created_at');8字节相当于 DATE1000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值$table->timestamp('added_on');4字节相当于 TIMESTAMP1970-01-01 00:00:00/2038 结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07YYYYMMDD HHMMSS混合日期和时间值,时间戳//================================================================================= /* 表引擎 */ $table->engine = 'InnoDB'; /* 类型 */ // - 数字 $table->bigInteger('id'); $table->integer('id'); $table->mediumInteger('id'); $table->smallInteger('id'); $table->tinyInteger('id'); $table->decimal('balance', 15, 8); $table->float('balance'); $table->double('balance', 15, 8); $table->real('balance'); // - 时间 $table->date('created_at'); $table->dateTime('created_at'); $table->timeStamp('created_at'); $table->time('sunrise'); // - 字符串 $table->char('name', 4); // 等同于 VARCHAR $table->string('name'); // 等同于 VARCHAR(100) $table->string('name', 100); $table->text('description'); $table->mediumText('description'); $table->longText('description'); // 等同于 BLOB $table->binary('data'); $table->enum('choices', ['foo', 'bar']); $table->boolean('confirmed'); // - 不经常用的 $table->json('options'); // 等同于数据库中的 JSON 类型 $table->jsonb('options'); // 等同于数据库中的 JSONB 类型 $table->uuid('id'); // 等同于数据库的UUID // 自增ID,类型为 bigint $table->bigIncrements('id'); // 自增ID,类型为 int $table->increments('id'); // 添加一个 INTEGER类型的 taggable_id 列和一个 STRING类型的 taggable_type列 $table->morphs('taggable'); // 和 timestamps() 一样,但允许 NULL 值 $table->nullableTimestamps('created_at'); // 添加一个 'remember_token' 列:VARCHAR(100) NULL $table->rememberToken(); // 添加 'created_at' 和 'updated_at' $table->timeStamps(); // 新增一个 'deleted_at' 列,用于 '软删除' $table->softDeletes(); /* 列修改器 */ ->first(); // 将列置于表第一个列(仅限于MYSQL) ->after('列名'); // 将列置于某一列后(仅限于MYSQL) ->nullable(); // 允许列为NULL ->defalut($value); // 指定列默认值 ->unsigned(); // 设置整型列为 UNSIGNED /* 修改列 需安装 doctrine/dbal,composer require doctrine/dbal */ // change() - 修改列 $table->string('name', 30)->nullable()->change(); // renameColumn() - 重命名列 $table->renameColumn('name', 'title'); /* 删除列 需安装 doctrine/dbal,composer require doctrine/dbal */ // 删除单个列 $table->dropColumn('name'); // 删除多个列 $table->dropColumn(['name', 'age']); /* 创建索引 * 每种索引,都有3种方式: * 一个string参数 * 一个array参数 - 组合索引 * 2个参数 - 允许自定义索引名 * 注意: * laravel自动分配的索引名: * 表名_列名_索引类型:users_mobile_unique // users表的mobile字段为unique 索引 */ $table->primary('id'); // 主键索引 $table->primary(['first', 'last']); // 混合索引(这个不太清楚) $table->primary('first', 'first_primary_index']); // 自定义索引名 $table->unique('mobile'); // 唯一索引 $table->index('state'); // 普通索引 /* 删除索引 */ $table->dropPrimary('索引名') $table->dropUnique('索引名') $table->dropIndex('索引名') /* 外键约束 * 注意: * laravel自动分配的外键名: * 表名_列名_foreign:posts_user_id_foreign // posts表的user_id字段添加foreign */ // 添加外键,当前表的user_id,外键关联users表的id列 $table->foreign('user_id')->references('id')->on('users'); // 约束 'on delete' 和 'on update' 时,才关联外键 $table->foreign('user_id')->references('id')->on('users')->onDelete; // 删除外键 $table->dropForeign('posts_user_id_foreign');
2021年05月25日
844 阅读
0 评论
0 点赞
2021-02-01
php单页面实现密码访问(typecho可用)
前言喜讯:&(蛆音娘_大笑) 我的宝贝快要出生了:@(脸红) 所以我在博客中加了个相册的单页 用来存放我的大宝贝和小宝贝的生活点滴,但是为了家人们的信息安全 我需要设置个只有我们知道的密码进行访问代码<?php //密码访问本页面 $password = "20200106";//密码 $p = ""; if(isset($_COOKIE["isview"]) and $_COOKIE["isview"] == $password){ $isview = true; }else{ if(isset($_POST["pwd"])){ if($_POST["pwd"] == $password){ setcookie("isview",$_POST["pwd"],time()+60);$isview = true;}else{$p = (empty($_POST["pwd"])) ?"请输入密码." : "<div style=\"color:#F00;\">密码不正确.</div>";} }else{ $isview = false;$p = "此页面加密访问请输入密码。"; }}?> <?php if($isview){?> <!-- html模板加载开始 --> <!DOCTYPE HTML> <html> 输入密码后正常显示的内容 </html> <!-- html模板加载结束 --> <?php }else{?> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <title><?php echo $p;?>!</title> <style type="text/css"> body{background-image: url(https://cdn.jsdelivr.net/gh/WHBLeer/Gallery@master/img/20210128092033.jfif);} .passport{background-color:rgba(255, 255, 255, 0.5);width:400px;height:100px;position:absolute;left:49.9%;top:49.9%;margin-left:-200px;margin-top:-55px;font-size:14px;text-align:center;line-height:30px;color:#746A6A;} input {padding: 7px;text-align: center;border-radius: 5px;} .tips {background-color:rgba(255, 0, 0, 0.3);color: #fff;text-align: center;padding: 2px 16px;font-size: 15px;} </style> </head> <body> <div class="passport"> <div style="padding-top:20px;"> <form action="" method="post" style="margin:0px;"> <input type="password" name="pwd" /> <input type="submit" value="确定" /> </form> <span class="tips"><?php echo $p;?></span> </div> </div> </body> </html> <?php }?>次页面适用于所有php加载html的页面
2021年02月01日
613 阅读
0 评论
0 点赞
2021-01-28
TYPO3功能API解析 - GeneralUtility
API介绍这个API是基于TYPO3,且只能使用在TYPO3-CMS中的功能性辅助函数集合,它将PHP的功能函数做了优化,使得这些函数搭配TYPO3使用更方便,更简单,更准确。可以说是TYPO3开发中的必要工具。该API在TYPO3-CMS中的位置:(项目根目录)/typo3/sysext/core/Classes/Utility/GeneralUtility.php。使用方法方法1:该API不需要实例化就可以使用。使用 \TYPO3\CMS\Core\Utility\GeneralUtility:: 型的函数名前缀就可以调用成功。eg. :\TYPO3\CMS\Core\Utility\GeneralUtility::milliseconds(); //获取unix毫秒时间戳。;eg. :\TYPO3\CMS\Core\Utility\GeneralUtility::_GET(); //获取GET提交数据。;方法2:使用 use 导入该API的命名空间后进行使用。使用 在类(class)的上方,use TYPO3\CMS\Core\Utility\GeneralUtility 就可以在类中直接调用成功了。eg. :GeneralUtility::milliseconds(); //获取unix毫秒时间戳。;eg. :GeneralUtility::_GET(); //获取GET提交数据。;详细1、GET/POST 变量 //返回指定变量的 $_GET/$_POST 数据 public static function _GP($var) //返回指定变量 $_GET和$_POST合并数据集,$_POST优先。 public static function _GPmerged($parameter) //返回指定变量的 $_GET 数据 public static function _GET($var = null) //返回指定变量的 $_POST 数据 public static function _POST($var = null)2、字符串处理 //兼容中文的字符串截断和拼接 public static function fixed_lgd_cs($string, $chars, $appendString = '...') //验证IP地址是否合法 public static function validIP($ip) //验证IPv4地址是否合法 public static function validIPv4($ip) //验证IPv6地址是否合法 public static function validIPv6($ip) //用通配符字符串匹配列表中完全合格的域名 public static function cmpFQDN($baseHost, $list) //检查给定的URL是否与当前发起HTTP请求的主机相匹配。 public static function isOnCurrentHost($url) //检查以逗号分隔的项目列表中存在的项 public static function inList($list, $item) //删除列表中的一项 public static function rmFromList($element, $list) //扩大以逗号分隔的与范围的整数列表(例如1,3-5,7变为1,3,4,5,7)。扩大范围最大为间隔的1000倍 public static function expandList($list) //从输入的md5哈希值的前7个字符中得出一个正整数哈希值 public static function md5int($str) /返回MD5hash的前$len个字符(默认为10个) public static function shortMD5($input, $len = 10) //在给定的输入字符串和TYPO3加密密钥上返回正确的HMAC。 public static function hmac($input, $additionalSecret = '') //删除使用逗号分隔的列表和数组中的所有重复项 public static function uniqueList($in_list, $secondParameter = null) //获取文件详情 [path], [file], [filebody], [fileext], [realFileext] public static function split_fileref($fileNameWithPath) //返回路径的目录部分,后面不带斜杠 public static function dirname($path) /如果$str的第一部分与字符串$partStr匹配,则返回TRUE public static function isFirstPartOfStr($str, $partStr) //文件大小格式化为人类可读数据 public static function formatSize($sizeInBytes, $labels = '', $base = 0) //简单的数学运算 /+-* // string $string 计算公式 eg "123 + 456 / 789 - 4 // string $operators 运算符 "/+-* // return array 运算符和操作数分开的数组。 public static function splitCalc($string, $operators) //验证邮箱地址是否合法 public static function validEmail($email) //字符串转为ASCII字符串(unicode) public static function idnaEncode($value) //下划线命名转为首字母大写的驼峰命名 public static function underscoredToUpperCamelCase($string) //下划线命名转为首字母小写的驼峰命名 public static function underscoredToLowerCamelCase($string) //驼峰命名转为下划线命名 public static function camelCaseToLowerCaseUnderscored($string) //验证给定链接是否合法(是否可访问) public static function isValidUrl($url) 3、数组处理 //分解由$delimiter分隔的$string并将数组中的每个项目强制转换为(int)。 public static function intExplode($delimiter, $string, $removeEmptyValues = false, $limit = 0) //解释不来,看例子:GeneralUtility::revExplode('[]', '[my][words][here]', 2) 输出:array('[my][words', 'here]') public static function revExplode($delimiter, $string, $count = 0) //把$string按照指定字符$delim转为数组,并去掉空白值 public static function trimExplode($delim, $string, $removeEmptyValues = false, $limit = 0) /数组转为Url参数 public static function implodeArrayForUrl($name, $theArray, $str = '', $skipBlank = false, $rawurlencodeParamName = false) //Url参数转为数组 public static function explodeUrl2Array($string) //返回键名为$varList列表的数组 // string $varList 变量/键名列表 // array $getArray 来源数组 // bool $GPvarAlt get/post数据作为来源数组 public static function compileSelectedGetVarsFromArray($varList, array $getArray, $GPvarAlt = true) //从ts配置文件中删除'.' public static function removeDotsFromTS(array $ts) 4、HTML/XML 处理方式 //以键值对格式返回指定html标签 public static function get_tag_attributes($tag) //数组转为HTML参数:输入eg. "bgcolor"=>"red", "border"=>0;输出eg. 'bgcolor="red" border="0"' public static function implodeAttributes(array $arr, $xhtmlSafe = false, $dontOmitBlankAttribs = false) //使用<script>标签 包装JavaScript代码XHTML public static function wrapJS($string) //XML转为树结构数组 public static function xml2tree($string, $depth = 999, $parserOptions = []) //数组转为xml public static function array2xml(array $array, $NSprefix = '', $level = 0, $docTag = 'phparray', $spaceInd = 0, array $options = [], array $stackData = []) //xml转为数组 public static function xml2array($string, $NSprefix = '', $reportDocTag = false) //压缩 JavaScript public static function minifyJavaScript($script, &$error = '') 5、FILES 处理函数 //读取文件或URL $url并返回内容 public static function getUrl($url, $includeHeader = 0, $requestHeaders = null, &$report = null) //在文件$file中写入内容$content public static function writeFile($file, $content, $changePermissions = false) //设置文件系统模式和文件或文件夹的组所有权 public static function fixPermissions($path, $recursive = false) //在文件$filepath中写入内容$content 文件存放在 typo3temp/ 目录下 public static function writeFileToTypo3tempDir($filepath, $content) //创建目录 public static function mkdir($newFolder) //创建目录-必要时包括父目录,并在新创建的目录上设置权限 public static function mkdir_deep($directory) //删除目录;递归删除子目录及文件 public static function rmdir($path, $removeNonEmpty = false) //通过首先移至临时资源,然后触发删除过程来刷新目录。这样可以更快地刷新目录,以防止在并发进程访问同一目录时出现争用情况。 public static function flushDirectory($directory, $keepOriginalDirectory = false, $flushOpcodeCache = false) /返回具有特定路径中文件夹名称的数组。如果读取目录内容时出错,将返回“错误”(字符串)。如果提供的路径为false,则将返回null public static function get_dirs($path) //查找给定路径中的所有文件,并将它们作为数组返回。每个数组键都是文件完整路径的md5哈希。这样做是因为诸如导入/导出扩展之类的“某些”扩展依赖于此。 public static function getFilesInDir($path, $extensionList = '', $prependPath = false, $order = '', $excludePattern = '') //递归查找目录中的所有文件和文件夹 public static function getAllFilesAndFoldersInPath(array $fileArr, $path, $extList = '', $regDirs = false, $recursivityLevels = 99, $excludePattern = '') //删除$fileArr中所有文件/文件夹的绝对部分 public static function removePrefixPathFromList(array $fileArr, $prefixToRemove) //修复Windows反斜杠的路径,并将双斜杠减少为单斜杠 public static function fixWindowsFilePath($theFile) //解析路径中的 "../" public static function resolveBackPath($pathStr) //返回可跳转的链接 public static function locationHeaderUrl($path) //获取最大文件上传大小(KB) public static function getMaxUploadFileSize() //(G,M,K,)转为字节 public static function getBytesFromSizeMeasurement($measurement) //文件添加静态版本号 public static function createVersionNumberedFilename($file) //将JavaScript字符串写入以该字符串的md5-hash命名的临时文件 public static function writeJavaScriptContentToTemporaryFile(string $content) //将Css字符串写入以该字符串的md5-hash命名的临时文件 public static function writeStyleSheetContentToTemporaryFile(string $content) 6、系统信息 //返回完整链接 public static function linkThisScript(array $getParams = []) //$getParams中的参数添加到$url中并返回完整链接 public static function linkThisUrl($url, array $getParams = []) //存储一个自定义变量,仅做测试用 public static function setIndpEnv($envName, $value) //获取指定参数值 SCRIPT_NAME, SCRIPT_FILENAME, REQUEST_URI, PATH_INFO, REMOTE_ADDR, REMOTE_HOST, HTTP_REFERER, HTTP_HOST, HTTP_USER_AGENT, HTTP_ACCEPT_LANGUAGE, QUERY_STRING, TYPO3_DOCUMENT_ROOT, TYPO3_HOST_ONLY, TYPO3_HOST_ONLY, TYPO3_REQUEST_HOST, TYPO3_REQUEST_URL, TYPO3_REQUEST_SCRIPT, TYPO3_REQUEST_DIR, TYPO3_SITE_URL, _ARRAY public static function getIndpEnv($getEnvName) //获取unix毫秒时间戳。 public static function milliseconds() 7、TYPO3 特殊功能函数 //解析'EXT:'为文件绝对路径 public static function getFileAbsFileName($filename) //检查恶意文件 public static function validPathStr($theFile) //检查$path是绝对路径还是相对路径(检测'/'或'x:/'作为字符串的第一部分),如果是,则返回TRUE public static function isAbsPath($path) //如果路径是绝对路径,没有反向路径".."并且在TYPO3的项目或公用文件夹中,或者在lockRootPath中,则返回TRUE public static function isAllowedAbsPath($path) //根据"fileDenyPattern"验证输入文件名。如果确定,则返回TRUE。 public static function verifyFilenameAgainstDenyPattern($filename) //递归复制目录下的所有文件和子目录 public static function copyDirectory($source, $destination) //将$source文件上传到$destination目录(如果已上传),否则尝试进行复制 public static function upload_copy_move($source, $destination) //将文件移动到临时目录 public static function upload_to_tempfile($uploadedFileName) //删除 var/ 或者 typo3temp 目录中的临时文件 public static function unlink_tempfile($uploadedTempFileName) //创建临时文件名(使用唯一的文件名创建文件) public static function tempnam($filePrefix, $fileSuffix = '') //标准身份验证代码 public static function stdAuthCode($uid_or_record, $fields = '', $codeLength = 8) //如果不存在翻译,则响应输入的本地化设置值是否应隐藏其来源页面 public static function hideIfNotTranslated($l18n_cfg_fieldValue) //如果未将“ l18n_cfg”字段值设置为隐藏,则返回true public static function hideIfDefaultLanguage($localizationConfiguration) //在类中调用用户定义的函数/方法 public static function callUserFunction($funcName, &$params, &$ref) //刷新内部运行时缓存 public static function flushInternalRuntimeCaches() //引用一个用作JS参数的字符串。 public static function quoteJSvalue($value)
2021年01月28日
643 阅读
0 评论
0 点赞
2021-01-28
CentOS7+Nginx+MariaDB+PHP7.2+composer 安装TYPO3 v9*
前言最近感觉nginx比apache好,不要问我为什么,我就是这么认为的,我也不知道为什么。。。以下所有代码均为我自己安装时的命令,按照顺序 Ctrl+c Ctrl+v 期间敲几个 yes 就完成了。注意:以下安装步骤及命令仅在全新服务器测试安装,服务器上已有数据的同僚请不要轻易试探更新系统 yum -y update安装 nginx yum install epel-release yum install nginx systemctl start nginx systemctl enable nginx安装 mariadb yum install mariadb-server mariadb systemctl start mariadb配置数据库 mysql_secure_installation systemctl enable mariadb验证数据库 mysql -uroot -p安装php yum install epel-release yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm yum install yum-utils yum-config-manager --enable remi-php72 yum install epel-release rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm yum install php72w* --skip-broken //完整安装 yum install php72-php-pecl-zip* //安装包中貌似没有包含php扩展,但是项目中必用到,建议执行安装 yum install php-pecl-zip.x86_64 //同上修改php.ini配置 sudo sed -i 's/memory_limit.*/memory_limit = 128M/g' /etc/php.ini sudo sed -i 's/upload_max_filesize.*/upload_max_filesize = 128M/g' /etc/php.ini sudo sed -i 's/post_max_size.*/post_max_size = 128M/g' /etc/php.ini sudo sed -i 's/max_execution_time.*/max_execution_time = 30000/g' /etc/php.ini sudo sed -i 's/max_input_time.*/max_input_time = 30000/g' /etc/php.ini sudo sed -i 's/;date.timezone =/date.timezone = Asia\/Shanghai/g' /etc/php.ini sudo sed -i 's/; max_input_vars.*/max_input_vars = 1500/g' /etc/php.ini systemctl start php-fpm systemctl enable php-fpm配置php vim /etc/php-fpm.d/www.conf找到以下地方进行替换 # 找到以下地方进行替换: listen.owner = nginx listen.group = nginx user = nginx group = nginx配置nginx vim /etc/nginx/nginx.conf示例: user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; include /etc/nginx/conf.d/*.conf; index index.php index.html index.htm; server { listen 80 default_server; listen [::]:80 default_server; server_name _; root /var/www/html; include /etc/nginx/default.d/*.conf; location / { } location ~ .php$ { try_files $uri =404; root /var/www/html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi.conf; } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } }配置虚拟主机 vim /etc/nginx/conf.d/typo3.whongbin.cn.conf注意:使用composer进行安装时,需要将虚拟主机web目录设置到项目目录中的public目录才可以,解压安装的可以直接配置到项目目录示例: server { listen 80; server_name typo3.whongbin.cn; root /var/www/html/typo3.whongbin.cn/public; location / { } location ~ .php$ { try_files $uri =404; root /var/www/html/typo3.whongbin.cn/public; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi.conf; } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }重载配置 nginx -t nginx -s reload cd /var/www/html/切换用户安装 typo3 v9 useradd composer passwd composer composer config -g repo.packagist composer https://packagist.phpcomposer.com su root cd /var/www/html/my.whongbin.cn/ composer create-project typo3/cms-base-distribution typo3.whongbin.cn ^9.5 chown -R nginx:nginx /var/www/html/ chmod -R 775 /var/www/html/ cd /var/www/html/typo3.whongbin.cn/public/ & touch FIRST_INSTALL重载php服务为了保险起见,最后配置完成后把服务都重启下 service restart php-fpm nginx -s reload最后整个安装过程大概半小时左右吧,时间浪费比较多的是 安装composer 的时候,毕竟composer是国外的服务,国内安装起来毕竟隔道墙,安装完成后建议把源换成国内的,否则你可能会渐渐的对Linux失去兴趣
2021年01月28日
666 阅读
0 评论
0 点赞
2021-01-28
TYPO3项目代码打包备份
原文链接:https://www.whongbin.cn/article-detail/140.html打包备份项目代码完整项目打包目录下所有文件全部进行打包tar -zcvf web_20200520.tar.gz --exclude=/wwwroot/www.whongbin.cn/demo --exclude=/wwwroot/www.whongbin.cn/fileadmin --exclude=/wwwroot/www.whongbin.cn/typo3temp --exclude=/wwwroot/www.whongbin.cn/uploads --exclude=/wwwroot/www.whongbin.cn/*.log /wwwroot/www.whongbin.cn/* 过滤指定目录后打包例:上传目录和缓存目录不进行打包tar -zcvf web_20200520.tar.gz --exclude=/wwwroot/www.whongbin.cn/typo3temp --exclude=/wwwroot/www.whongbin.cn/uploads /wwwroot/www.whongbin.cn/* 过滤指定文件后打包例:已备份的包及日志文件不进行打包tar -zcvf web_20200520.tar.gz --exclude=/wwwroot/www.whongbin.cn/*.gz --exclude=/wwwroot/www.whongbin.cn/*.log /wwwroot/www.whongbin.cn/* 过滤指定文件或目录后打包例:自定义目录(demo),文件管理目录(fileadmin),缓存目录(typo3temp),上传目录(uploads),所有自定义输出的日志文件(.log),所有已打包的(.gz),所有已打包的(*.zip)不进行打包tar -zcvf web_20200520.tar.gz --exclude=/wwwroot/www.whongbin.cn/demo --exclude=/wwwroot/www.whongbin.cn/fileadmin --exclude=/wwwroot/www.whongbin.cn/typo3temp --exclude=/wwwroot/www.whongbin.cn/uploads --exclude=/wwwroot/www.whongbin.cn/*.log --exclude=/wwwroot/www.whongbin.cn/*.gz --exclude=/wwwroot/www.whongbin.cn/*.zip /wwwroot/www.whongbin.cn/*
2021年01月28日
556 阅读
1 评论
0 点赞
2020-04-17
TYPO3安装系统要求及配置
系统要求TYPO3需要一个Web服务器,需要PHP和数据库系统。TYPO3需要一个可以运行PHP 的Web服务器(Apache/httpd,Nginx,Microsoft IIS)。如果使用Apache Web服务器,则必须激活某些模块(例如mod_rewrite)。TYPO3 V10 要求 PHP >= 7.2 <= 7.4 .对于PHP,需要几个PHP扩展,文档中会具体介绍扩展和配置。您可能要调整内存限制。TYPO3可以与许多 数据库系统 一起使用(MariaDB> = 10.2 <= 10.3,Microsoft SQL Server,MySQL> = 5.7 <= 8.1,PostgreSQL,SQLite)。如果要TYPO3自动执行 图像处理(例如缩放或裁剪),则需要在服务器上安装 GraphicsMagick(1.3版或更高版本)或 ImageMagick(6版或更高版本)。(推荐 GraphicsMagick) 操作系统Linux,Windows或Mac或常见的云基础架构设置WEB服务器Apache httpd,Nginx,Microsoft IIS,Caddy服务器数据库MariaDB >= 10.0 <= 10.3, Microsoft SQL Server,MySQL >= 5.0 <= 5.7,PostgreSQL,SQLite硬件最低1核CPU,2G内存,5M带宽;建议2核4G5M带宽支持的浏览器Chrome (最新),Edge (最新),Firefox (最新),Internet Explorer >= 11,Safari (最新)PHPPHP >= 7.2 <= 7.4数据库环境TYPO3与上述版本中的数据库管理系统一起使用。如果使用MySQL ,必须启用InnoDB引擎。数据库权限供TYPO3使用的数据库需要以下权限:SELECT, INSERT, UPDATE, DELETECREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES另外建议同时赋予以下权限:CREATE VIEW, SHOW VIEWEXECUTE, CREATE ROUTINE, ALTER ROUTINEWeb服务器环境Apache如果使用Apache作为Web服务器使用的话,请确保Web服务器配置.htaccess中的 AllowOverride 包括 Indexes 和 FileInfo 。在文件.htaccess 中启用Apache模块 mod_rewrite:模块介绍备注mod_alias:Block access to vcs directories(strongly recommended for security reasons).mod_authz_core:Block access to specific files and directories(strongly recommended for security reasons).mod_autoindex:Used for disabling directory listings(strongly recommended for security reasons).mod_deflate:Used for compression, better performance. mod_expires:Adds HTTP headers for browser caching and betterperformancemod_filter:Used with mod_deflate. For Apache versions belowversion 2.3.7 you don't need to enable mod_filter.mod_headers:Used in combination with mod_deflate. mod_rewrite:Enable human readable urls. mod_setenvif:Also used with mod_deflate. 在安装过程中(首次安装),如果默认 .htaccess 文件不存在,则将其复制到项目的文档根文件夹中。NGINXNGINX服务用不了默认的 .htaccess 文件配置,所以需要自行去配置下. The NGINX configuration has to be setup manually.示例配置: # Compressing resource files will save bandwidth and so improve loading speed especially for users # with slower internet connections. TYPO3 can compress the .js and .css files for you. # *) Set $GLOBALS['TYPO3_CONF_VARS']['BE']['compressionLevel'] = 9 for the Backend # *) Set $GLOBALS['TYPO3_CONF_VARS']['FE']['compressionLevel'] = 9 together with the TypoScript properties # config.compressJs and config.compressCss for GZIP compression of Frontend JS and CSS files. location ~ \.js\.gzip$ { add_header Content-Encoding gzip; gzip off; types { text/javascript gzip; } } location ~ \.css\.gzip$ { add_header Content-Encoding gzip; gzip off; types { text/css gzip; } } # TYPO3 - Rule for versioned static files, configured through: # - $GLOBALS['TYPO3_CONF_VARS']['BE']['versionNumberInFilename'] # - $GLOBALS['TYPO3_CONF_VARS']['FE']['versionNumberInFilename'] if (!-e $request_filename) { rewrite ^/(.+)\.(\d+)\.(php|js|css|png|jpg|gif|gzip)$ /$1.$3 last; } # TYPO3 - Block access to composer files location ~* composer\.(?:json|lock) { deny all; } # TYPO3 - Block access to flexform files location ~* flexform[^.]*\.xml { deny all; } # TYPO3 - Block access to language files location ~* locallang[^.]*\.(?:xml|xlf)$ { deny all; } # TYPO3 - Block access to static typoscript files location ~* ext_conf_template\.txt|ext_typoscript_constants\.txt|ext_typoscript_setup\.txt { deny all; } # TYPO3 - Block access to miscellaneous protected files location ~* /.*\.(?:bak|co?nf|cfg|ya?ml|ts|typoscript|tsconfig|dist|fla|in[ci]|log|sh|sql|sqlite)$ { deny all; } # TYPO3 - Block access to recycler and temporary directories location ~ _(?:recycler|temp)_/ { deny all; } # TYPO3 - Block access to configuration files stored in fileadmin location ~ fileadmin/(?:templates)/.*\.(?:txt|ts|typoscript)$ { deny all; } # TYPO3 - Block access to libraries, source and temporary compiled data location ~ ^(?:vendor|typo3_src|typo3temp/var) { deny all; } # TYPO3 - Block access to protected extension directories location ~ (?:typo3conf/ext|typo3/sysext|typo3/ext)/[^/]+/(?:Configuration|Resources/Private|Tests?|Documentation|docs?)/ { deny all; } location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+?\.php)(/.*)$; if (!-f $document_root$fastcgi_script_name) { return 404; } fastcgi_buffer_size 32k; fastcgi_buffers 8 16k; fastcgi_connect_timeout 240s; fastcgi_read_timeout 240s; fastcgi_send_timeout 240s; fastcgi_pass typo3:9000; fastcgi_index index.php; include fastcgi.conf; }PHP 环境memory_limit 至少设置为 256Mmax_execution_time 至少设置为 30 (建议设置为240)max_input_vars 至少设置为 1500PHP 扩展PHP需要支持以下扩展。安装过程中会检查这些扩展的可用性。以下扩展可能在安装php时自动安装序号扩展名1PDO2json3pcre >= 8.38 (Mac users: see warning a the end of this document)4session5xml5filter6hash7mbstring8SPL9standard以下扩展需要单独安装加载序号扩展名1fileinfo2gd3zip4zlib5openssl5intl6mysqli (if you use MySQL, MariaDB as DBMS)7postgresql (if you use PostgreSQL as DBMS)8sqlsrv (if you use SQL Server as DBMS)9sqlite (if you use SQLite as DBMS)
2020年04月17日
558 阅读
0 评论
0 点赞
1
2
...
5