推荐六个鲜为人知的 Composer 命令

2019-07-23 09:26:05

Composer 是 PHP 的一个依赖管理工具。 如果你是一名 PHP 开发人员,那么你很可能每天都在使用它并且频繁的运行命令 `require`, `install` 和 `update`。也许你并没有意识到, 我们可以使用一些其他的 Composer 命令,来更加轻松的使用它。 它有许多的命令可以使用,但今天我将分享我使用的并且每天都有帮助的 6 个命令。 ## show 先说下 `show` 命令。它允许您查看项目的所有已安装包(包括依赖项),以及查看相关包的说明。所有这些信息都可以在Composer锁文件(composer.lock)中找到, 但是使用 `show` 命令相对来说是一种更简单、更方便的一种查看包信息的方法。 要列出所有已安装的包及其版本号和说明,只需使用 `show`: ``` composer sh...

阅读全文

thinkphp 漏洞记录

2019-06-18 16:12:14

thinkphp 漏洞记录:漏洞环境:5.0.20以下版本描述:ThinkPHP5.0在核心代码中实现了表单请求类型伪装的功能,该功能利用$_POST['_method']变量来传递真实的请求方法,当攻击者设置$_POST['_method']=__construct时,Request类的method方法便会将该类的变量进行覆盖,攻击者利用该方式将filter变量覆盖为system等函数名,当内部进行参数过滤时便会进行执行任意命令。引用:ThinkPHP 5.0命令执行漏洞分析及复现漏洞环境:v5.0.23及v5.1.31以下版本描述:ThinkPHP官方2018年12月9日发布重要的安全更新,修复了一个严重的远程代码执行漏洞。该更新主要涉及一个安全更新,由于框架对控制器名没有进行足够的检测会导致在没有开启强制路由的情况下可能的...

阅读全文

Laravel 实用小技巧

2019-05-05 11:40:18

1. 更新父表的  timestamps 如果需要在更新关联表的同时,更新父表的 timestamps,只需在关联表的 model 中添加 touches 属性 protected $touches = ['parentModel']; 2. 关联时使用 withDefault()  使用模型关联时,如果关联的模型不存在,如:  $post->user->name  $post->user 会返回 null, 继续访问 name 会抛出致命异常,  使用 withDefault 则会返回一个 User Model 的实例,访问 name 会变成 null   withDefault 可以接受参数(数组、闭包) 3. 跳转到指定控制器并附带参数 return redirect()->action('SomeController@method', ['param' => $value]); 4. Eloquent 中的日期时...

阅读全文

数据库二进制图片输出到前端

2018-08-18 17:21:23

在维护老项目时,发现有的项目居然把图片存在数据库,而不是图片链接,数据库里的图片字段类型是:`mediumblob`现在的需求是:从数据库取出图片在前端列表显示。大学是,老师就开始教导我们不要把图片存在数据库里,不方便维护,而且很占数据库体积。然后就没有碰到过存取数据库的二进制图片,突然碰到有点懵。估计大多数人没有这样的习惯,然后网上的资料也是大量重复过时的方法。目前接触到的前端渲染图片有两种:1、URL地址;2、 data:image/jpeg;base64  。于是想到在后端先用base64进行编码,然后在前端输出,果然可以!    代码如下:PHP:$base64Img = base64_encode($blobImg);HTML:<img src="data:image/jpe...

阅读全文

laravel-admin必填项加星号

2018-08-03 15:27:27

1.文件修改,vendor/encore/laravel-admin/src/Form/Field.php 新增:/** * Form element label classes. * * @var array */ protected $elementLabelClass = [];/** * Add the element label class. * * @param $class * * @return $this */ public function addElementLabelClass($class) { if (is_array($class) || is_string($class)) { $this->elementLabelClass = array_merge($this->elementLabelClass, (array) $class); $this->elementLabelClass = array_unique($this->elementLabelClass); } return $this; } 修改方法(约740行左右)getViewElemen...

阅读全文

laravel单点登录-多个子域名站点

2018-06-23 11:02:11

单点登录     单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。  在laravel中实现这一功能非常简单。  首先要知道‘浏览器同源策略’原理: Cookie 是服务器写入浏览器的一小段信息,只有同源的网页才能共享。但是,两个网页一级域名相同,只是二级域名不同,浏览器允许通过设置document.domain共享 Cookie。 于是我们可以把session存在cookie里,然后多个子域名服务使用同样的域,就可以实现共享登录(SSO)。SESSION_DRIVER=cookie SESSION_DOMAIN=baidu.com

阅读全文

异常实时报警

2018-04-17 18:09:48

当线上服务出现异常时,有时候问题很难察觉,需要自己测试,甚至要等用户反馈问题才知道。于是想到能不能线上代码出现问题实时通知给相关负责人?比如:即时通讯工具(微信/QQ)或者邮箱。 答案是肯定的,在laravel中实现起来就很简单。(此方法仅针对业务代码出现异常,或者遭到攻击服务不能正常运行的异常) laravel中所有异常都由 App\Exceptions\Handler 类处理https://d.laravel-china.org/docs/5.4/errors#the-exception-handler 因此,我们只要捕获项目中所有异常并实时通知就简单多了。 本文测试发送163邮箱 先写好发送邮件内容格式,然后在 App\Exceptions\Handler 的 report 里...

阅读全文

php密码加密与验证

2018-04-17 17:53:34

password_hash是crypt()的一个简单封装,并且完全与现有的密码哈希兼容,使用了一个强的哈希算法,来产生足够强的盐值,并且会自动进行合适的轮次。 password_hash会生成60个字符,随时间推移,默认算法可能会有变化,因此需要数据库里储存结果的列可超过60个字符(最好是255个字符)前面7位字符代表hash的相关信息(密码算法类型和密码算法常量),可用password_get_info获取,后面53位为随机字符串。在生成散列(hash)值时,会自动创建安全的随机盐值。(在php5.5至php7.0时可以手动指定盐值,不过强烈建议不要自己为这个函数生成盐值(salt),因为php7.0以后就废除了)生成的hash会返回:使用的算法、cost 和盐值,所以验证散列值的所...

阅读全文

php扩展missing处理

2018-04-17 15:58:08

碰到一个问题: 在phpinfo里能看到mbstring和其他扩展已经安装, 但是使用composer update时却提示:mbstring missing 使用php -m也没有看到mbstring扩展  再三思考和排除法测算后,最后锁定两种可能:1.系统有安装多个php版本,配置不一样;2.php的运行模式不一样,如:php-fpm,cli 使用whereis php查看排除第一种可能然后使用:/usr/local/php/bin/php composer update可以正常安装依赖包,sudo cp -rf /usr/local/php/bin/php /usr/bin/php 主要原因是:两种不同的运行模式加载的php.ini不同 关于php的运行模式:CLI、FastCGI、mod_php参考相关资料:PHP 的命令行模式(cli)FastCgi与PHP-fpm之间是个什么样的关系P...

阅读全文

PHP 身份证号码验证

2017-12-01 16:47:32

身份证号码的结构: 要进行身份证号码的验证,首先要了解身份证号码的编码规则。我国身份证号码多由若干位数字或者数字与字母混合组成。早期身份证由15位数字构成,这主要是在1980年以前发放的身份证,后来考虑到千年虫问题, 因为15位的身份证号码只能为1900年1月1日到1999年12月31日出生的人编号,所以又增加了18位身份证号码编号规则。1>.18位身份证号码各位的含义: 1-2位省、自治区、直辖市代码;3-4位地级市、盟、自治州代码;5-6位县、县级市、区代码;7-14位出生年月日,比如19820426代表1982年4月26日;15-17位为顺序号,其中17位(倒数第二位)男为单数,女为双数;18位为校验码,0-9和X。2>.15位身份证号码各位的含义: ...

阅读全文

php多次自动加载冲突或导致后面加载无效

2017-08-18 16:27:00

使用spl_autoload_register自动加载类时,如果存在2个或多次spl_autoload_register时,当第一次自动载入(require_once文件时),如果文件不存在就抛出异常或者终止时,后面的自动加载(spl_autoload_register)就会失效。 php手册上也有类似说明。 例如:function genericAutoload($class) { if (!require_once($class . '.php')) { throw new Exception("Can't require_once!"); } else { return true; } } function secondaryAutoload($class) { require_once('library/' . $class . '.php'); } spl_autoload_register('genericAutoload'); spl_autoload_register('secondaryAutoload');解决方法有两...

阅读全文

营业执照号正则验证

2017-08-18 15:03:00

市面上现在有2中企业营业执照注册号(统一社会信用代码),一种是15位(从2007年开始),一种是18位(从2015年开始)。 先科普下: 三证合一2015年10月1日起,全国开始推行“三证合一,一照一码”登记模式,即将“营业执照、组织机构代码证、税务登记证”三证合为一证,提高市场准入效率。“一照一码”则是在此基础上更进一步,通过“一口受理、并联审批、信息共享、结果互认”,实现由一个部门核发加载统一社会信用代码的营业执照[2]  。 五证合一在企业和农民专业合作社(以下统称“企业”)“三证合一、一照一码”的基础上,2016年10月1日起,全国开始全面实行“五证合一、一照一码”。即将“营业执照、组织机构代码证、税务登记证、社会保险登...

阅读全文

laravel 访问频率限制

2017-07-31 11:00:00

频率限制经常用在API中,用于限制独立请求者对特定API的请求频率。 例如,如果设置频率限制为每分钟1000次,如果一分钟内超过这个限制,那么服务器就会返回: 429: Too Many Attempts app/Http/Kernel.php中有默认设置:'api' => [ 'throttle:60,1', 'bindings', ],这是laravel的默认设置,如果需要修改可以改这里,或者在路由上加上:Route::group(['prefix'=>'api','middleware'=>'throttle:5'],function(){ Route::get('users',function(){ return \App\User::all(); }); });详情参考:http://laravelacademy.org/post/3566.htm...

阅读全文

laravel 生成中文测试数据

2017-06-23 18:00:54

在做开发是经常要添加一些测试数据,一个个添加未免效率低而且lower好在别人已经造好轮子,使用faker生成测试数据 1.安装:composer require fzaninotto/faker2.在/database/factories/ModelFactory.php里编写数据填充类型 可以按照默认案例编写。默认生成英文数据,如果要中文数据:需设置: $faker = Faker\Factory::create('zh_CN'); 例如:$factory->define(App\Models\Job::class, function ($faker) { $faker = Faker\Factory::create('zh_CN'); return [ 'job_name' => $faker->jobTitle, 'pay_method' => $faker->numberBetween(1, 3), 'salary' => $faker->n...

阅读全文

imagecreatefromjpeg处理图片时内存溢出问题

2017-06-01 11:25:00

有用户反映上传图片失败,于是追根溯源发现是上传图片时内存溢出。可是服务器配置的使用内存是128MB,上传限制是2MB,用户上传的图片只有737KB, 继续往下看,发现在上传图片后生成缩略图时,使用imagecreatefromjpeg这个函数时报的内存溢出, 查看官方文档,才发现imagecreatefromjpeg在动态创建一个新图像时,根据图片的分辨率(宽和高)在内存中生成一个新图像。恍然大悟,虽然用户上传的图片只有737KB,但分辨率却高达7088*4726,使用了159MB内存,超过128MB,很明显会内存溢出。 官方手册:imagecreatefromjpeg — 由文件或 URL 创建一个新图象。imagecreatefromjpeg创建图像时占用内存公式:    总字节数...

阅读全文