Laravel 清除表单字段前后空白的Middleware

1. 在Middleware目录创建类BeforeAutoTrimmer.php

<?php

namespace App\Http\Middleware;

use Closure;

class BeforeAutoTrimmer {
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next){
$input = $request->all();
if ($input) {
array_walk_recursive($input, function (&$item, $key) {
// RULES 1 FOR STRING AND PASSWORD
if (is_string($item) && !str_contains($key, ‘password’)) {
$item = trim($item);
}
// RULES 2 FOR NULL VALUE
$item = ($item == “”) ? null : $item;
});
$request->merge($input);
}
return $next($request);
}
} read more

阅读全文

Laravel5 如何验证路由中的变量

1. 将路由中的变量添加到请求对象中,默认laravel的请求对象中不包含路由中的变量,我们重写all()方法即可
/**
 * @return array
 */
public function rules(){
    return [
        'slug' => 'required|exists:articles,slug',
    ];
}

/**
 * Add parameters to be validated
 * 
 * @return array
 */
public function all(){
    return array_replace_recursive(
        parent::all(),
        $this->route()->parameters()
    );
}
2. 使用路由-模型绑定

Route::bind(‘article_slug’, function ($slug) {
return Article::published()->whereSlug($slug)->firstOrFail();
});

Route::get(‘articles/{article_slug}’, ‘ArticleController@show’); read more

阅读全文

Laravel5.1 表单数组验证

Laravel5.2已经改进了表单的数组验证,所以该方法只针对Laravel5.1。

创建Form Request类,可以使用Laravel的命令php artisan make:request创建

修改rules函数,添加自定义验证

public function rules(){
    $rules = array();
    $rules['content'] = 'required';
    $rules['attachments'] = 'array';

    $attachments = Input::file('attachments');
    foreach ($attachments as $key => $attachment) {
        $rules['attachments.' . $key] = 'image';
    }
    return $rules;
}

修改messages函数,添加自定义提示消息

public function messages(){
$messages = array();
$messages[‘content.required’] = trans(‘users.form.content.required’);
$messages[‘attachments.array’] = trans(‘users.form.attachments.array’);

$attachments = Input::file(‘attachments’);
foreach ($attachments as $key => $attachment) {
$messages[‘attachments.’ . $key . ‘.image’] = trans(‘users.form.attachments.image’);
}
return $messages;
} read more

阅读全文

使用 OPcache 加速 PHP

1. 什么是 OPcache?

OPcache 通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能, 存储预编译字节码的好处就是 省去了每次加载和解析 PHP 脚本的开销。

PHP 5.5.0 及后续版本中已经绑定了 OPcache 扩展。 对于 PHP 5.2,5.3 和 5.4 版本可以使用 » PECL 扩展中的 OPcache 库。

2. 安装 OPcache
PHP 5.2, 5.3 和 5.4 版本
通过网址 http://pecl.php.net/package/ZendOpcache 下载最新稳定版。

tar -xvf zendopcache-7.0.5.tgz
cd zendopcache-7.0.5
/usr/local/php5.3/bin/phpize
./configure --with-php-config=/usr/local/php5.3/bin/php-config
make
make install

修改PHP配置文件, 添加如下配置:

zend_extension=/usr/local/php5.3/lib/php/extensions/no-debug-non-zts-20090626/opcache.so
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=0
opcache.validate_timestamps=1
opcache.fast_shutdown=1
opcache.enable_cli=1

重启Apache服务,通过phpinfo即可确认 OPcache 是否安装成功。

3. OPcache 的最佳设置

opcache.revalidate_freq
这个选项用于设置缓存的过期时间(单位是秒),当这个时间达到后,opcache会检查你的代码是否改变,如果改变了PHP会重新编译它,生成新的opcode,并且更新缓存。值为“0”表示每次请求都会检查你的PHP代码是否更新(这意味着会增加很多次stat系统调用,译注:stat系统调用是读取文件的状态,这里主要是获取最近修改时间,这个系统调用会发生磁盘I/O,所以必然会消耗一些CPU时间,当然系统调用本身也会消耗一些CPU时间)。可以在开发环境中把它设置为0,生产环境下不用管,因为下面会介绍另外一个设置选项。

opcache.validate_timestamps
当这个选项被启用(设置为1),PHP会在opcache.revalidate_freq设置的时间到达后检测文件的时间戳(timestamp)。

如果这个选项被禁用(设置为0),opcache.revalidate_freq会被忽略,PHP文件永远不会被检查。这意味着如果你修改了你的代码,然后你把它更新到服务器上,再在浏览器上请求更新的代码对应的功能,你会看不到更新的效果,你必须得重新加载你的PHP(使用kill -SIGUSR2强制重新加载)。

这个设定是不是有些蛋疼,但是我强烈建议你在生产环境中使用,why?因为当你在更新服务器代码的时候,如果代码较多,更新操作是有些延迟的,在这个延迟的过程中必然出现老代码和新代码混合的情况,这个时候对用户请求的处理必然存在不确定性。

opcache.max_accelerated_files
这个选项用于控制内存中最多可以缓存多少个PHP文件。这个选项必须得设置得足够大,大于你的项目中的所有PHP文件的总和。我的代码库大概有6000个PHP文件,所以我把这个值设置为一个素数7963(译注:不知道这哥们为什么要设置这个数,7963也不是大于6000的最小素数)。

你可以运行“find . -type f -print | grep php | wc -l”这个命令来快速计算你的代码库中的PHP文件数。

opcache.memory_consumption
这个选项的默认值为64MB,我把它设置为192MB,因为我的代码很大。你可以通过调用opcachegetstatus()来获取opcache使用的内存的总量,如果这个值很大,你可以把这个选项设置得更大一些。

opcache.interned_strings_buffer
这是一个很有用的选项,但是似乎完全没有文档说明。PHP使用了一种叫做字符串驻留(string interning)的技术来改善性能。例如,如果你在代码中使用了1000次字符串“foobar”,在PHP内部只会在第一使用这个字符串的时候分配一个不可变的内存区域来存储这个字符串,其他的999次使用都会直接指向这个内存区域。这个选项则会把这个特性提升一个层次——默认情况下这个不可变的内存区域只会存在于单个php-fpm的进程中,如果设置了这个选项,那么它将会在所有的php-fpm进程中共享。在比较大的应用中,这可以非常有效地节约内存,提高应用的性能。

这个选项的值是以兆字节(megabytes)作为单位,如果把它设置为16,则表示16MB,默认是4MB,这是一个比较低的值。

opcache.fast_shutdown
另外一个很有用但也没有文档说明的选项。从字面上理解就是“允许更快速关闭”。它的作用是在单个请求结束时提供一种更快速的机制来调用代码中的析构器,从而加快PHP的响应速度和PHP进程资源的回收速度,这样应用程序可以更快速地响应下一个请求。把它设置为1就可以使用这个机制了。

最终我们对于opcache在php.ini的设置如下:

opcache.revalidate_freq=0
opcache.validate_timestamps=0 (在开发环境可以把这一行注释掉)
opcache.max_accelerated_files=7963
opcache.memory_consumption=192
opcache.interned_strings_buffer=16
opcache.fast_shutdown=1
read more

阅读全文

Linux下查看系统版本号信息的方法

一、查看Linux内核版本命令(两种方法):

1、cat /proc/version

[root@localhost ~]# cat /proc/version
Linux version 2.6.18-194.8.1.el5.centos.plus (mockbuild@builder17.centos.org) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-48)) #1 SMP Wed Jul 7 11:50:45 EDT 2010

2、uname -a

[root@localhost ~]# uname -a
Linux localhost.localdomain 2.6.18-194.8.1.el5.centos.plus #1 SMP Wed Jul 7 11:50:45 EDT 2010 i686 i686 i386 GNU/Linux

二、查看Linux系统版本的命令(3种方法):

1、lsb_release -a,即可列出所有版本信息:

[root@localhost ~]# lsb_release -a
LSB Version: :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch
Distributor ID: CentOS
Description: CentOS release 5.5 (Final)
Release: 5.5
Codename: Final
read more

阅读全文

CentOS5.6编译lua-5.3.4遇到问题“libreadline.so: undefined reference to `PC’”

在编译lua-5.3.4的时候遇到下面的问题:

/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libreadline.so: undefined reference to `PC’
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libreadline.so: undefined reference to `tgetflag’
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libreadline.so: undefined reference to `tgetent’
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libreadline.so: undefined reference to `UP’
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libreadline.so: undefined reference to `tputs’
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libreadline.so: undefined reference to `tgoto’
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libreadline.so: undefined reference to `tgetnum’
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libreadline.so: undefined reference to `BC’
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libreadline.so: undefined reference to `tgetstr’
collect2: ld returned 1 exit status
make[2]: *** [lua] Error 1
make[2]: Leaving directory `/usr/local/src/lua-5.3.4/src’
make[1]: *** [linux] Error 2
make[1]: Leaving directory `/usr/local/src/lua-5.3.4/src’
make: *** [linux] Error 2

通过搜索,解决方案是修改/src/Makefile中Linux编译target=linux,在SYSLIBS变量中追加’-lncurses’即可。即:

linux:
        $(MAKE) $(ALL) SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -ldl -lreadline -lncurses"

重新执行编译即可,Lua安装成功

阅读全文

Git分支相关命令

1. 创建分支并切换到该分支:git checkout -b <branchName>

$ git checkout -b trunk
Switched to a new branch 'trunk'

相当于执行以下命令:

$ git branch trunk
$ git checkout trunk

2. push分支到远程:

$ git push --set-upstream origin trunk

3. 当开发完成后,合并分支代码至master:git2 merge <branchName>

$ git merge trunk
Updating ac0376e..dbd2d0f
Fast-forward
trunk.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 trunk.txt

4. 有冲突解决冲突,没有则push合并代码至master:git push origin master

$ git2 push origin master
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/maosea0125/imgable-behavior.git
ac0376e..dbd2d0f master -> master

5. 分支任务已完成,删除trunk分支:git branch -d <branchName>

$ git branch -d trunk
Deleted branch trunk (was dbd2d0f).

6. push删除操作至远程:git push origin –delete <branchName>

$ git push origin –delete trunk
To https://github.com/maosea0125/imgable-behavior.git
– [deleted] trunk read more

阅读全文

CKeditor

CKEditor,旧称FCKeditor,是一个专门使用在网页上属于开放源代码的所见即所得文字编辑器。它志于轻量化,不需要太复杂的安装步骤即可使用。它可和PHP、JavaScript、ASP、ASP.NET、ColdFusion、Java、以及ABAP等不同的编程语言相结合。“FCKeditor”名称中的“FCK” 是这个编辑器的作者的名字Frederico Caldeira Knabben的缩写。
FCKeditor从2003年它建立了一个强大的用户群体从而成为市场中用户最多的编辑器。

官网地址:CKEditor
FCKeditor下载:FCKEditor

阅读全文
Pages: 1 2 3