在php8 中+/-优先级高于php连接符,需要用括号来强制分隔

使用 strtotime() 时,使用了+ 号报错。错误信息为

The behavior of unparenthesized expressions containing both '.' and '+'/'-' will change in PHP 8: '+'/'-' will take a higher precedence
strtotime( "+" . $i-$week .' days', $time)
应该修改为
strtotime( "+" . ($i-$week) .' days', $time)

在php8 中+/-的优先及要高于php 连接符。所以这里使用括号来强制分隔避免意想不到的问题。

php向redis list一次性lPush多个值

php redis扩展没有介绍向list中一次性push多个值的用法,但其实lPush和rPush是支持push多个值的,文档中有介绍

lPush - Prepend one or multiple values to a list

rPush - Append one or multiple values to a list

用法也很简单,看示例代码:

<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->del('foo');
var_dump($redis->lPush('foo', 'aaaa', 'bbbb', 'cccc', 'dddd'));
print_r($redis->lRange('foo', 0, -1));

运行结果:

int(4)
Array
(
[0] => dddd
[1] => cccc
[2] => bbbb
[3] => aaaa
)

但更多时候我们是希望lPush一个数组,但lPush不支持直接传入数组,但我们可以使用以下两种方式来实现:

    1. 利用 call_user_func_array 可以使用数组来当参数列表的特性:

<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->del('foo');
var_dump(call_user_func_array([$redis, 'lPush'], ['foo', '1111', '2222', '3333', '4444']));
print_r($redis->lRange('foo', 0, -1));

执行结果

int(4)
Array
(
[0] => 4444
[1] => 3333
[2] => 2222
[3] => 1111
)

2. 使用 php5.6+ 支持的可变参数,在数组前加 '...' 实现把数组当作函数的参数列表You can also use ... when calling functions to unpack an array or Traversable variable or literal into the argument list:

<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->del('foo');
var_dump($redis->lPush('foo', ...['AAAA111', 'BBBB222', 'CCCC333', 'DDDD444']));
print_r($redis->lRange('foo', 0, -1));

运行返回

int(4)
Array
(
[0] => DDDD444
[1] => CCCC333
[2] => BBBB222
[3] => AAAA111
)

 

一般推荐第二种方式

Java URIBuilder的使用记录

import org.apache.http.client.utils.URIBuilder;

URIBuilder uriBuilder = new URIBuilder(location);

uriBuilder.setParameters  添加参数,会覆盖重复的

uriBuilder.addParameters 添加参数,不会覆盖重复的

uriBuilder.build() 会将拼接好的接口地址输出

和PHP  http_build_query有异曲同工之妙

php调用https

<?php

function curl_get_https($url)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); // 跳过证书检查
$tmpInfo = curl_exec($curl);
curl_close($curl);
return $tmpInfo;
}

$url = "https://www.baidu.com";

$result = curl_get_https($url);

var_dump($result);

PHP文件上传error的错误类型 – $_FILES[‘file’][‘error’]

假设文件上传字段的名称video,则:

$_FILES['video']['error']有以下几种类型

1、UPLOAD_ERR_OK

其值为 0,没有错误发生,文件上传成功。
 

2、UPLOAD_ERR_INI_SIZE

其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize选项限制的值。
 

3、UPLOAD_ERR_FORM_SIZE

其值为 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
 

4、UPLOAD_ERR_PARTIAL

其值为 3,文件只有部分被上传。
 

5、UPLOAD_ERR_NO_FILE

其值为 4,没有文件被上传。
 

6、UPLOAD_ERR_NO_TMP_DIR

其值为 6,找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进。
 

7、UPLOAD_ERR_CANT_WRITE

其值为 7,文件写入失败。PHP 5.1.0 引进。

网页创建快捷方式到桌面

php实现方法:

实现以下PHP文件,放入服务器生成链接地址,将生成的链接地址放入你的网页中,用户点击即下载该快捷方式。

<?php

$Shortcut = "[InternetShortcut]

URL=http://wordpress.roudanstudio.com/

IconFile=http://wordpress.roudanstudio.com/favicon.ico

IconIndex=0

HotKey=1613

IDList=

[{000214A0-0000-0000-C000-000000000046}]

Prop3=19,2";

header("Content-Type: application/octet-stream");

header("Content-Disposition: attachment; filename=Mark天下.url");

echo $Shortcut;

?>

Laravel 之父:让 Laravel、Symfony、 Zend 来一场公平的性能测试

网上充斥着各式各样的 PHP 框架性能对比的文章。然而,他们总是把“苹果”和“橘子”做对比(看上去有点儿像,都是圆的,但其实不是一码事)。这次,我将着重对 Laravel、Symfony 和 Zend 这三个框架做性能对比,并且还要说明为什么这三个框架总是被错误的进行比较。

我给的对比结果你不必全信。读完这篇文章之后,你可以自己搞一个 2GB 的 DigitalOcean 的服务器亲自去检验一下,也就 5 分钟而已。

开始之前,我希望你知道:所有这些框架都足够快,都可以满足你构建任何应用。写这篇文章之前我也犹豫过,我认为做这种层次的对比其实真的挺傻的。我唯一的目的是展示如何在三个框架之间进行公平的比较。

问题的源头

当你在一台全新的 DigitalOcean 服务器上配置 Symfony 或 Zend 项目时,你会发现返回的 http 响应是没有 session 信息的。注意,看下图,cookie 并没有被返回:

然而,Laravel 默认是开启 session 的(另外还有一些中间件)。这样能让基于 Laravel 构建的应用很方便地利用 session 机制将用户状态持久化保存。为了 Laravel 框架的用户更方便而默认开启 session 反倒让 Laravel 在性能对比中很受伤。

另一个常见错误是:要么没有倒出一份优化过的 Composer autoloader ;要么没有用 php artisan config:cache 指令缓存 Laravel 配置信息 -- 这份缓存能够大幅度减少 Laravel 的启动(bootstrap)时间。

设置环境

首先,我通过 Laravel Forge 在 DiginalOcean 上创建了一个 2GB 内存的服务器,安装的是 PHP 7.1 版本。然后安装 Symfony ,优化 Composer autoloader ,配置 Nginx 通过生产环境下的前端控制器(app.php)运行。并且我还按照 Symfony 生产环境调优指南一步步设置到位。对于 Zend 的配置也类似。

接下来,针对 PHP 7.1 的 opcache 设置如下(生产环境):

opcache.enable=1
opcache.memoryconsumption=512
opcache.interned
stringsbuffer=64
opcache.max
acceleratedfiles=20000
opcache.validate
timestamps=0
opcache.savecomments=1
opcache.fast
shutdown=1

安装 Laravel 时,执行 config:cache Artisan 指令,并且在 app/Http/Kernel.php文件中将 web 中间件组注释掉(这些中间件的作用就是让 Laravel 支持 session)。做完上述修改之后就可以让三个框架都在无 session 支持的状态下进行对比了。

对比结果

After configuring the projects, I ran a simple test using Apache benchmark, which anyone can recreate:

三个框架都能正常运行后,终于可以祭出 Apache benchmark 来做简单的测试了。其实任何人都可以很容易地复现这一测试:

ab -t 10 -c 10 [http://server.address/]

下面是测试结果:

无 Session:

  • Laravel: 609.03 次请求/秒 (平均值)
  • Zend: 559.91 次请求/秒 (平均值)
  • Symfony: 532.97 次请求/秒 (平均值)

有 Session:

  • Laravel: 521.64 次请求/秒(平均值)
  • Zend: 484.94 次请求/秒 (平均值)
  • Symfony: 439.37 次请求/秒 (平均值)

中文转自:http://www.golaravel.com/post/benchmarking-laravel-symfony-zend/

原文地址:https://medium.com/@taylorotwell/benchmarking-laravel-symfony-zend-2c01c2b270f8#.kf4gywdmg