Daily Tips: the function array_reduce, which can calculate the sum of the multidimensional array.

网站管理员 Published the article • 0 comments • 41 views • 2019-07-26 00:35 • 来自相关话题

Sometimes, if you need to calculate the sum of an array, you may use the function `array_sum` in PHP.

> But this is the multidimensional array, like following:

### For example
```php 查看全部
Sometimes, if you need to calculate the sum of an array, you may use the function `array_sum` in PHP.

> But this is the multidimensional array, like following:

### For example
```php
$array = [
[
'quantity' => 2,
],
[
'quantity' => 4,
],
[
'quantity' => 5,
],
];

var_dump(array_sum($array)); // the result is 0, incorrect
```

This is incorrect, when you use the function `array_sum` to calculate the array, you will get the result `0`.

For this moment, the function `array_reduce` will help us to calculate the multidimensional array.

### The correct usage
```php
$sum = array_reduce($array, function($init, $datum) {
return $init + $datum['quantity'];
});
var_dump($sum); // int(11)
```

the function `array_reduce` has a callback function, which function has two parameters.

>The first parameter to the callback is an accumulator where the result-in-progress is effectively assembled. If you supply an $initial value the accumulator starts out with that value, otherwise, it starts out null.
The second parameter is where each value of the array is passed during each step of the reduction.
The return value of the callback becomes the new value of the accumulator. When the array is exhausted, array_reduce() returns accumulated value.

### Reference

1. [array_reduce](https://www.php.net/manual/zh/ ... ce.php)

淘小铺邀请码URLF

网站管理员 Published the article • 0 comments • 143 views • 2019-05-22 19:37 • 来自相关话题

今天朋友圈大家都在分享淘小铺,这是阿里巴巴推出的一个分销应用,用来和拼多多抗衡

今天朋友圈大家都在分享淘小铺,这是阿里巴巴推出的一个分销应用,用来和拼多多抗衡

How to install the amqp's extension of php7.2 on Unbuntu

网站管理员 Published the article • 0 comments • 317 views • 2019-04-04 14:35 • 来自相关话题

### 为php7.2安装amqp

安装php的扩展选择使用官方推荐的pecl安装,避免了我们一些繁琐的操作,如果我们需要编译源码来安装amqp扩展,就需要下载源码,构建编译安装文件,当然还需要确保在编译的时候能够找到librabbitmq-dev的依赖。
```
wget https://pecl.php.net/get/amqp-1.9.4.tgz
tar -zvxf amqp-1.9.4.tgz
/usr/bin/phpize
./configure --with-php-config=/usr/bin/php-config
```

其实也没有什么区别,只是帮我们省下了敲前面几个命令的时间
```bash
apt-get install php7.2-dev
pecl install amqp
```
### 遇到问题

1. 安装amqp缺少依赖librabbitmq-dev

```bash
apt-get install librabbitmq-dev
```

2. libtool的版本不对,php7.2需要的版本是2.4.2而ubuntu的版本是2.4.6

> libtool: Version mismatch error. This is libtool 2.4.2 Debian-2.4.2-1.11, but the
> libtool: definition of this LT_INIT comes from libtool 2.4.6.
> libtool: You should recreate aclocal.m4 with macros from libtool 2.4.2 Debian-2.4.2-1.11
> libtool: and run autoconf again.
> Makefile:194: recipe for target 'amqp.lo' failed
> make: *** [amqp.lo] Error 63
> ERROR: `make' failed

遇到这种情况我们只能Ubuntu官网```http://mirrors.ustc.edu.cn```找到该资源的dep包,重新安装一下。

```bash
cd /mnt
wget http://mirrors.ustc.edu.cn/deb ... l.deb
dpkg -i libtool_2.4.2-1.11_all.deb
```

### 总结

1. 处理好上面的两个问题之后我们可以在执行一下命令```pecl install amqp```,既可以编译生成我们需要的```amqp.so```文件,将文件放置ext或者```php.ini```指定的扩展目录,然后在php.ini文件中追加一行导入扩展```extension=amqp.so```。

2. 与其焦头烂额的搜索一通,不如认真的翻译错误提示,思考一下该怎么解决这个问题。 查看全部
### 为php7.2安装amqp

安装php的扩展选择使用官方推荐的pecl安装,避免了我们一些繁琐的操作,如果我们需要编译源码来安装amqp扩展,就需要下载源码,构建编译安装文件,当然还需要确保在编译的时候能够找到librabbitmq-dev的依赖。
```
wget https://pecl.php.net/get/amqp-1.9.4.tgz
tar -zvxf amqp-1.9.4.tgz
/usr/bin/phpize
./configure --with-php-config=/usr/bin/php-config
```

其实也没有什么区别,只是帮我们省下了敲前面几个命令的时间
```bash
apt-get install php7.2-dev
pecl install amqp
```
### 遇到问题

1. 安装amqp缺少依赖librabbitmq-dev

```bash
apt-get install librabbitmq-dev
```

2. libtool的版本不对,php7.2需要的版本是2.4.2而ubuntu的版本是2.4.6

> libtool: Version mismatch error. This is libtool 2.4.2 Debian-2.4.2-1.11, but the
> libtool: definition of this LT_INIT comes from libtool 2.4.6.
> libtool: You should recreate aclocal.m4 with macros from libtool 2.4.2 Debian-2.4.2-1.11
> libtool: and run autoconf again.
> Makefile:194: recipe for target 'amqp.lo' failed
> make: *** [amqp.lo] Error 63
> ERROR: `make' failed

遇到这种情况我们只能Ubuntu官网```http://mirrors.ustc.edu.cn```找到该资源的dep包,重新安装一下。

```bash
cd /mnt
wget http://mirrors.ustc.edu.cn/deb ... l.deb
dpkg -i libtool_2.4.2-1.11_all.deb
```

### 总结

1. 处理好上面的两个问题之后我们可以在执行一下命令```pecl install amqp```,既可以编译生成我们需要的```amqp.so```文件,将文件放置ext或者```php.ini```指定的扩展目录,然后在php.ini文件中追加一行导入扩展```extension=amqp.so```。

2. 与其焦头烂额的搜索一通,不如认真的翻译错误提示,思考一下该怎么解决这个问题。

Ubuntu下安装php7.2的gd库时,解决php7.2-gd : Depends: libjpeg62-turbo (>= 1.3.1) but it is not installable

网站管理员 Published the article • 2 comments • 645 views • 2019-04-03 18:44 • 来自相关话题

### 背景

由于Ubuntu引导区坏了,无法找回boot中的文件,只能重新在虚拟机上重装系统,配置php的环境。

开始学php的时候我比较喜欢折腾源码,编译安装,期间走过很多的坑,这样会有一个问题,比如你需要添加一个扩展的时候你又需要编译一下扩展,有的时候编译源码的时候忘了编译某个模块就需要重新编译源码,比如thread模块,累了倦了,于是就开始用集成环境,或者用源安装。

### 问题

网上有很多的教程,千篇一律,无非都是这里这里复制那里粘贴的,遇到一些细节的问题,就懵逼了。

网上关于Ubuntu用软件源安装php7.2的教程是:
```bash

wget /etc/apt/trusted.gpg.d/php.gpg https://mirror.xtom.com.hk/sury/php/apt.gpg
sh -c 'echo "deb https://mirror.xtom.com.hk/sury/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
apt-get update

apt install php7.2-fpm php7.2-mysql php7.2-curl php7.2-gd php7.2-mbstring php7.2-xml php7.2-xmlrpc php7.2-zip php7.2-opcache -y
sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/' /etc/php/7.2/fpm/php.ini
systemctl restart php7.2-fpm
```

### 解决方案

> 但是这里有些问题:

1. $(lsb_release -sc) 返回的是```zesty```,但是战源根本就没有这个目录,所以这里我们需要写死
. ```sh -c 'echo "deb https://mirror.xtom.com.hk/sury/php/ jessie main" > /etc/apt/sources.list.d/php.list'```

2. 安装php7.2-gd的时候出现如下问题:
```
The following packages have unmet dependencies:
php7.2-gd : Depends: libjpeg62-turbo (>= 1.3.1) but it is not installable
E: Unable to correct problems, you have held broken packages.
root@ubuntu:/mnt# apt-get install libjpeg62-tuls
Reading package lists... Done
Building dependency tree
Reading state information... Done
```

从```https://packages.debian.org/je ... nload```上下载libjpeg62-turbo的deb
```bash
cd /mnt
wget http://security.debian.org/deb ... 6.deb
dpkg -i libjpeg62-turbo_1.3.1-12+deb8u2_i386.deb

apt-get install php7.2-gd
```

### 思考

> 出现问题的时候我们很依赖搜索引擎来帮我们处理问题,有的时候我们很难集中注意力去审查问题,搜索引擎搜索一通之后,发现网上的教程或者解决方案千篇一律,甚至无法解决你的问题。浪费时间和精力。
> 这个时候我们需要静下心来想这个问题,是否以前遇到相同的问题,是否能够举一反三。 查看全部
### 背景

由于Ubuntu引导区坏了,无法找回boot中的文件,只能重新在虚拟机上重装系统,配置php的环境。

开始学php的时候我比较喜欢折腾源码,编译安装,期间走过很多的坑,这样会有一个问题,比如你需要添加一个扩展的时候你又需要编译一下扩展,有的时候编译源码的时候忘了编译某个模块就需要重新编译源码,比如thread模块,累了倦了,于是就开始用集成环境,或者用源安装。

### 问题

网上有很多的教程,千篇一律,无非都是这里这里复制那里粘贴的,遇到一些细节的问题,就懵逼了。

网上关于Ubuntu用软件源安装php7.2的教程是:
```bash

wget /etc/apt/trusted.gpg.d/php.gpg https://mirror.xtom.com.hk/sury/php/apt.gpg
sh -c 'echo "deb https://mirror.xtom.com.hk/sury/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
apt-get update

apt install php7.2-fpm php7.2-mysql php7.2-curl php7.2-gd php7.2-mbstring php7.2-xml php7.2-xmlrpc php7.2-zip php7.2-opcache -y
sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/' /etc/php/7.2/fpm/php.ini
systemctl restart php7.2-fpm
```

### 解决方案

> 但是这里有些问题:

1. $(lsb_release -sc) 返回的是```zesty```,但是战源根本就没有这个目录,所以这里我们需要写死
. ```sh -c 'echo "deb https://mirror.xtom.com.hk/sury/php/ jessie main" > /etc/apt/sources.list.d/php.list'```

2. 安装php7.2-gd的时候出现如下问题:
```
The following packages have unmet dependencies:
php7.2-gd : Depends: libjpeg62-turbo (>= 1.3.1) but it is not installable
E: Unable to correct problems, you have held broken packages.
root@ubuntu:/mnt# apt-get install libjpeg62-tuls
Reading package lists... Done
Building dependency tree
Reading state information... Done
```

从```https://packages.debian.org/je ... nload```上下载libjpeg62-turbo的deb
```bash
cd /mnt
wget http://security.debian.org/deb ... 6.deb
dpkg -i libjpeg62-turbo_1.3.1-12+deb8u2_i386.deb

apt-get install php7.2-gd
```

### 思考

> 出现问题的时候我们很依赖搜索引擎来帮我们处理问题,有的时候我们很难集中注意力去审查问题,搜索引擎搜索一通之后,发现网上的教程或者解决方案千篇一律,甚至无法解决你的问题。浪费时间和精力。
> 这个时候我们需要静下心来想这个问题,是否以前遇到相同的问题,是否能够举一反三。


What the structure format about cookie file?

网站管理员 Published the article • 0 comments • 147 views • 2019-03-17 01:43 • 来自相关话题

I'm trying more times to find the structure format about cookie file in the search engine, but got nothing.

Okay, I'll display it on my blog, maybe it can help your to learn, what's the cookie file.

```
# HTTP cookie file.
# Generated by Wget on 2019-03-17 01:03:59.
# Edit at your own risk.

qc.izhuchuang.com FALSE / FALSE 0 PHPSESSID gb904tuc986ilgrfl9pbt9vh57
```
#### How to save cookie in file?
```bash
wget --save-cookies cookies.txt --keep-session-cookies \
--post-data 'username=yanshi&password=123456' \
http://qc.izhuchuang.com/admin/login/loging.html
```

#### How to use your cookie file?

```bash
wget --load-cookies cookies.txt --keep-session-cookies \
-c -r -npH -k \
http://qc.izhuchuang.com/admin/
``` 查看全部

I'm trying more times to find the structure format about cookie file in the search engine, but got nothing.

Okay, I'll display it on my blog, maybe it can help your to learn, what's the cookie file.

```
# HTTP cookie file.
# Generated by Wget on 2019-03-17 01:03:59.
# Edit at your own risk.

qc.izhuchuang.com FALSE / FALSE 0 PHPSESSID gb904tuc986ilgrfl9pbt9vh57
```
#### How to save cookie in file?
```bash
wget --save-cookies cookies.txt --keep-session-cookies \
--post-data 'username=yanshi&password=123456' \
http://qc.izhuchuang.com/admin/login/loging.html
```

#### How to use your cookie file?

```bash
wget --load-cookies cookies.txt --keep-session-cookies \
-c -r -npH -k \
http://qc.izhuchuang.com/admin/
```


PHP Fatal error: Uncaught TypeError: Return value of PackageVersions

网站管理员 Published the article • 0 comments • 641 views • 2019-02-26 15:20 • 来自相关话题

使用```composer update```更新扩展的时候出现如下错误,大概意识就是未捕获的类型错误,返回的类型必须是void。原来还好好的,怎么突然就不行了。

```
PHP Fatal error: Uncaught TypeError: Return value of PackageVersions\Installer::activate() must be an instance of PackageVersions\void, none returned in /root/.composer/vendor/ocramius/package-versions/src/PackageVersions/Installer.php:62
Stack trace:
#0 phar:///usr/local/bin/composer/src/Composer/Plugin/PluginManager.php(236): PackageVersions\Installer->activate(Object(Composer\Composer), Object(Composer\IO\ConsoleIO))
#1 phar:///usr/local/bin/composer/src/Composer/Plugin/PluginManager.php(205): Composer\Plugin\PluginManager->addPlugin(Object(PackageVersions\Installer))
#2 phar:///usr/local/bin/composer/src/Composer/Plugin/PluginManager.php(261): Composer\Plugin\PluginManager->registerPackage(Object(Composer\Package\CompletePackage))
#3 phar:///usr/local/bin/composer/src/Composer/Plugin/PluginManager.php(79): Composer\Plugin\PluginManager->loadRepository(Object(Composer\Repository\InstalledFilesystemRepository))
#4 phar:///usr/local/bin/composer/src/Composer/Factory.php(384): Composer\Plugin\PluginManager->loadInstalledPlugi in /root/.composer/vendor/ocramius/package-versions/src/PackageVersions/Installer.php on line 62
```

### 解决方案:

1. 执行如下命令,将最后的```:void```删除即可:
```bash
vim /root/.composer/vendor/ocramius/package-versions/src/PackageVersions/Installer.php +62
```

2. 其实出现这个问题是因为php版本过低导致的,php7.0之后支持限定返回类型,如果无返回则是```void```。出现如下问题你应该做的是更新你的php版本,或者```找到该主机上更高的php版本```,然后通过软链的方式,修改```/usr/bin/php```的快捷方式。

### 出现问题的原因
我主机的php版本一直是php7.+,但是由于执行了```apt-get update```和```apt-get upgrade```之后更新了php的依赖,导致php的软链也出现了变化,执行```php -v```得到的版本的是5.6。原来是装了两个php的版本。 查看全部

使用```composer update```更新扩展的时候出现如下错误,大概意识就是未捕获的类型错误,返回的类型必须是void。原来还好好的,怎么突然就不行了。

```
PHP Fatal error: Uncaught TypeError: Return value of PackageVersions\Installer::activate() must be an instance of PackageVersions\void, none returned in /root/.composer/vendor/ocramius/package-versions/src/PackageVersions/Installer.php:62
Stack trace:
#0 phar:///usr/local/bin/composer/src/Composer/Plugin/PluginManager.php(236): PackageVersions\Installer->activate(Object(Composer\Composer), Object(Composer\IO\ConsoleIO))
#1 phar:///usr/local/bin/composer/src/Composer/Plugin/PluginManager.php(205): Composer\Plugin\PluginManager->addPlugin(Object(PackageVersions\Installer))
#2 phar:///usr/local/bin/composer/src/Composer/Plugin/PluginManager.php(261): Composer\Plugin\PluginManager->registerPackage(Object(Composer\Package\CompletePackage))
#3 phar:///usr/local/bin/composer/src/Composer/Plugin/PluginManager.php(79): Composer\Plugin\PluginManager->loadRepository(Object(Composer\Repository\InstalledFilesystemRepository))
#4 phar:///usr/local/bin/composer/src/Composer/Factory.php(384): Composer\Plugin\PluginManager->loadInstalledPlugi in /root/.composer/vendor/ocramius/package-versions/src/PackageVersions/Installer.php on line 62
```

### 解决方案:

1. 执行如下命令,将最后的```:void```删除即可:
```bash
vim /root/.composer/vendor/ocramius/package-versions/src/PackageVersions/Installer.php +62
```

2. 其实出现这个问题是因为php版本过低导致的,php7.0之后支持限定返回类型,如果无返回则是```void```。出现如下问题你应该做的是更新你的php版本,或者```找到该主机上更高的php版本```,然后通过软链的方式,修改```/usr/bin/php```的快捷方式。

### 出现问题的原因
我主机的php版本一直是php7.+,但是由于执行了```apt-get update```和```apt-get upgrade```之后更新了php的依赖,导致php的软链也出现了变化,执行```php -v```得到的版本的是5.6。原来是装了两个php的版本。

如何优雅的解决composer添加扩展之后,提交git项目扩展变成了git子模块

网站管理员 Published the article • 0 comments • 387 views • 2019-02-26 10:45 • 来自相关话题

### 出现composer git submodule背景

在php项目中,使用composer引入新的扩展的时候遇到了一个错误,三方扩展变成了这个项目的子项目,提交代码之后,这个扩展编程了```git submodule```,实际上我们提交之后的不是一个目录,```vendor```里面的这个项目是一个空的文件,导致线上引入资源而出现了故障。

在网上搜索了一下这个问题《composer安装后插件被当成GIT submodule(GIT子项目)》?网上给了三种解答,但是都不能解答我的问题,一方面他们说的不准确,还有可能说的不仔细吧。

### 出现这个问题的原因
composer在添加新的资源你的时候,如果项目是```git```仓库托管的,是通过```git clone```将代码拉至本地```vendor```目录的,所以该文件下会有一个```.git```的目录,这个其实是多余的,如果一个git托管的项目中再次出现git托管的项目,那么这个子项目就会被当做```submodule```被提交,

这里就不介绍```git submodule```了。

### 解决方案
如果解决这个问题呢?当然是直接删除扩展的```.git```目录了啦!需要每次手动将这个目录删除?每次更新之后还要删除?那么多的扩展都要一个一个的删除?

如果你很了解```composer```的处理机制的话,这些事情就变得十分的简单了。

```composer.json```中,我们可以在composer中自定义,composer处理过程中添加自己的钩子函数。脚本如下:找到vendor项目中所有的```.git```文件,然后执行```rm -rf```,即可。
```bash
find vendor -type d -name .git -exec rm -rf '{}' \;
```

composer.json的内容如下,在```post-install-cmd```和```post-update-cmd```执行之后执行我们的shell脚本:
```json
{
"scripts": {
"post-install-cmd": [
"find vendor -type d -name .git -exec rm -rf '{}' \\;",
],
"post-update-cmd": [
"find vendor -type d -name .git -exec rm -rf '{}' \\;",
]
},
}
``` 查看全部
### 出现composer git submodule背景

在php项目中,使用composer引入新的扩展的时候遇到了一个错误,三方扩展变成了这个项目的子项目,提交代码之后,这个扩展编程了```git submodule```,实际上我们提交之后的不是一个目录,```vendor```里面的这个项目是一个空的文件,导致线上引入资源而出现了故障。

在网上搜索了一下这个问题《composer安装后插件被当成GIT submodule(GIT子项目)》?网上给了三种解答,但是都不能解答我的问题,一方面他们说的不准确,还有可能说的不仔细吧。

### 出现这个问题的原因
composer在添加新的资源你的时候,如果项目是```git```仓库托管的,是通过```git clone```将代码拉至本地```vendor```目录的,所以该文件下会有一个```.git```的目录,这个其实是多余的,如果一个git托管的项目中再次出现git托管的项目,那么这个子项目就会被当做```submodule```被提交,

这里就不介绍```git submodule```了。

### 解决方案
如果解决这个问题呢?当然是直接删除扩展的```.git```目录了啦!需要每次手动将这个目录删除?每次更新之后还要删除?那么多的扩展都要一个一个的删除?

如果你很了解```composer```的处理机制的话,这些事情就变得十分的简单了。

```composer.json```中,我们可以在composer中自定义,composer处理过程中添加自己的钩子函数。脚本如下:找到vendor项目中所有的```.git```文件,然后执行```rm -rf```,即可。
```bash
find vendor -type d -name .git -exec rm -rf '{}' \;
```

composer.json的内容如下,在```post-install-cmd```和```post-update-cmd```执行之后执行我们的shell脚本:
```json
{
"scripts": {
"post-install-cmd": [
"find vendor -type d -name .git -exec rm -rf '{}' \\;",
],
"post-update-cmd": [
"find vendor -type d -name .git -exec rm -rf '{}' \\;",
]
},
}
```

解决async.cc -fPIC -DPIC -o .libs/swoole_async.o

网站管理员 Published the article • 0 comments • 302 views • 2019-01-09 17:41 • 来自相关话题

async.cc  -fPIC -DPIC -o .libs/swoole_async.o
In file included from /usr/include/php/20170718/Zend/zend_types.h:27:0,
                 from /usr/include/php/20170718/Zend/zend.h:29,
                 from /usr/include/php/20170718/main/php.h:36,
                 from /mnt/swoole-src/php_swoole.h:25,
                 from /mnt/swoole-src/swoole_async.cc:17:
/usr/include/php/20170718/Zend/zend_operators.h: In function ‘void fast_long_increment_function(zval*)’:
/usr/include/php/20170718/Zend/zend_operators.h:446:68: error: ‘__builtin_saddl_overflow’ was not declared in this scope
  if (UNEXPECTED(__builtin_saddl_overflow(Z_LVAL_P(op1), 1, &lresult))) {
                                                                    ^
/usr/include/php/20170718/Zend/zend_portability.h:312:52: note: in definition of macro ‘UNEXPECTED’
 # define UNEXPECTED(condition) __builtin_expect(!!(condition), 0)
                                                    ^
/usr/include/php/20170718/Zend/zend_operators.h: In function ‘void fast_long_decrement_function(zval*)’:
/usr/include/php/20170718/Zend/zend_operators.h:500:68: error: ‘__builtin_ssubl_overflow’ was not declared in this scope
  if (UNEXPECTED(__builtin_ssubl_overflow(Z_LVAL_P(op1), 1, &lresult))) {
                                                                    ^
/usr/include/php/20170718/Zend/zend_portability.h:312:52: note: in definition of macro ‘UNEXPECTED’
 # define UNEXPECTED(condition) __builtin_expect(!!(condition), 0)
                                                    ^
/usr/include/php/20170718/Zend/zend_operators.h: In function ‘void fast_long_add_function(zval*, zval*, zval*)’:
/usr/include/php/20170718/Zend/zend_operators.h:554:80: error: ‘__builtin_saddl_overflow’ was not declared in this scope
  if (UNEXPECTED(__builtin_saddl_overflow(Z_LVAL_P(op1), Z_LVAL_P(op2), &lresult))) {
                                                                                ^
/usr/include/php/20170718/Zend/zend_portability.h:312:52: note: in definition of macro ‘UNEXPECTED’
 # define UNEXPECTED(condition) __builtin_expect(!!(condition), 0)
                                                    ^
/usr/include/php/20170718/Zend/zend_operators.h: In function ‘void fast_long_sub_function(zval*, zval*, zval*)’:
/usr/include/php/20170718/Zend/zend_operators.h:657:80: error: ‘__builtin_ssubl_overflow’ was not declared in this scope
  if (UNEXPECTED(__builtin_ssubl_overflow(Z_LVAL_P(op1), Z_LVAL_P(op2), &lresult))) {
                                                                                ^
/usr/include/php/20170718/Zend/zend_portability.h:312:52: note: in definition of macro ‘UNEXPECTED’
 # define UNEXPECTED(condition) __builtin_expect(!!(condition), 0)
                                                    ^
Makefile:350: recipe for target 'swoole_async.lo' failed
make: *** [swoole_async.lo] Error 1
 
### 解决方案
 
你的gcc或者g++版本太低升级一下版本即可
 
```bash
apt-get upgrade gcc
apt-get upgrade g++
``` 查看全部
async.cc  -fPIC -DPIC -o .libs/swoole_async.o
In file included from /usr/include/php/20170718/Zend/zend_types.h:27:0,
                 from /usr/include/php/20170718/Zend/zend.h:29,
                 from /usr/include/php/20170718/main/php.h:36,
                 from /mnt/swoole-src/php_swoole.h:25,
                 from /mnt/swoole-src/swoole_async.cc:17:
/usr/include/php/20170718/Zend/zend_operators.h: In function ‘void fast_long_increment_function(zval*)’:
/usr/include/php/20170718/Zend/zend_operators.h:446:68: error: ‘__builtin_saddl_overflow’ was not declared in this scope
  if (UNEXPECTED(__builtin_saddl_overflow(Z_LVAL_P(op1), 1, &lresult))) {
                                                                    ^
/usr/include/php/20170718/Zend/zend_portability.h:312:52: note: in definition of macro ‘UNEXPECTED’
 # define UNEXPECTED(condition) __builtin_expect(!!(condition), 0)
                                                    ^
/usr/include/php/20170718/Zend/zend_operators.h: In function ‘void fast_long_decrement_function(zval*)’:
/usr/include/php/20170718/Zend/zend_operators.h:500:68: error: ‘__builtin_ssubl_overflow’ was not declared in this scope
  if (UNEXPECTED(__builtin_ssubl_overflow(Z_LVAL_P(op1), 1, &lresult))) {
                                                                    ^
/usr/include/php/20170718/Zend/zend_portability.h:312:52: note: in definition of macro ‘UNEXPECTED’
 # define UNEXPECTED(condition) __builtin_expect(!!(condition), 0)
                                                    ^
/usr/include/php/20170718/Zend/zend_operators.h: In function ‘void fast_long_add_function(zval*, zval*, zval*)’:
/usr/include/php/20170718/Zend/zend_operators.h:554:80: error: ‘__builtin_saddl_overflow’ was not declared in this scope
  if (UNEXPECTED(__builtin_saddl_overflow(Z_LVAL_P(op1), Z_LVAL_P(op2), &lresult))) {
                                                                                ^
/usr/include/php/20170718/Zend/zend_portability.h:312:52: note: in definition of macro ‘UNEXPECTED’
 # define UNEXPECTED(condition) __builtin_expect(!!(condition), 0)
                                                    ^
/usr/include/php/20170718/Zend/zend_operators.h: In function ‘void fast_long_sub_function(zval*, zval*, zval*)’:
/usr/include/php/20170718/Zend/zend_operators.h:657:80: error: ‘__builtin_ssubl_overflow’ was not declared in this scope
  if (UNEXPECTED(__builtin_ssubl_overflow(Z_LVAL_P(op1), Z_LVAL_P(op2), &lresult))) {
                                                                                ^
/usr/include/php/20170718/Zend/zend_portability.h:312:52: note: in definition of macro ‘UNEXPECTED’
 # define UNEXPECTED(condition) __builtin_expect(!!(condition), 0)
                                                    ^
Makefile:350: recipe for target 'swoole_async.lo' failed
make: *** [swoole_async.lo] Error 1
 
### 解决方案
 
你的gcc或者g++版本太低升级一下版本即可
 
```bash
apt-get upgrade gcc
apt-get upgrade g++
```

唱吧歌词解密,php/python/java/golang解密唱吧歌词

网站管理员 Published the article • 0 comments • 358 views • 2018-11-21 16:32 • 来自相关话题

如何用php语言解密唱吧歌词?
特定的算法需要要找秘钥,找到了秘钥问题就解决了一半,这个算法类似于凯撒加密,有一串秘钥,轮询秘钥按位取反即可

```php 查看全部

如何用php语言解密唱吧歌词?
特定的算法需要要找秘钥,找到了秘钥问题就解决了一半,这个算法类似于凯撒加密,有一串秘钥,轮询秘钥按位取反即可

```php

$content = file_get_contents('a89f8523a6724a915c6b2038c928b342.zrce');

$decryptCode = [-50, -45, 110, 105, 64, 90, 97, 119, 94, 50, 116, 71, 81, 54, -91, -68, ];
$data = '';
for ($i = 0; $i < strlen($content); $i++) {
$data .= chr(ord($content[$i]) ^ $decryptCode[$i % 16]);
}

print_r($data);
```

```
[refrain:44203-73402]
[ar:]
[ti:]
[total:175177]
[17090,4180]<0,228,0>在<228,228,0>没<456,456,0>风<912,228,0>的<1140,380,0>地<1520,532,0>方<2052,228,0>找<2280,456,0>太<2736,1444,0>阳
[24456,5243]<0,228,0>在<228,228,0>你<456,456,0>冷<912,228,0>的<1140,456,0>地<1596,456,0>方<2052,456,0>做<2508,456,0>暖<2964,2279,0>阳
[31832,1824]<0,228,0>人<228,228,0>事<456,228,0>纷<684,1140,0>纷
[34602,2622]<0,228,0>你<228,570,0>总<798,456,0>太<1254,342,0>天<1596,1026,0>真
[38924,1595]<0,228,0>往<228,228,0>后<456,228,0>的<684,228,0>余<925,670,0>生
```

如何安装laravel项目

网站管理员 Published the article • 0 comments • 194 views • 2018-10-29 16:45 • 来自相关话题

### 如何安装laravel项目

#### 环境要求

php7.2 + nginx + mysql

#### 准备工作
ssh连接登录服务器,工具xshell或者putty
```bash
ssh root@ip
```
xshell使用方法
https://jingyan.baidu.com/arti ... .html


#### nginx配置

```
location / {
try_files $uri $uri/ /index.php?$query_string;
}
```

#### 目录权限

```bash
cd # 进入代码的目录
chmod 777 -R .
```

#### 修改数据库配置
打开代码目录下的```.env```文件,修改如下配置,修改成对应的数据库配置
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=test
DB_USERNAME=root
DB_PASSWORD=test
DB_PREFIX=t_

#### 初始化数据库配置
```bash
php artisan migrate # 初始化数据库配置

php artisan db:seed # 分配后台管理员的权限

```

#### 后台登录地址
http://xxxx.xxx.cc/admin
http://xxxx.xxx.cc/admin/article

账号密码```admin```:```admin``` 查看全部

### 如何安装laravel项目

#### 环境要求

php7.2 + nginx + mysql

#### 准备工作
ssh连接登录服务器,工具xshell或者putty
```bash
ssh root@ip
```
xshell使用方法
https://jingyan.baidu.com/arti ... .html


#### nginx配置

```
location / {
try_files $uri $uri/ /index.php?$query_string;
}
```

#### 目录权限

```bash
cd # 进入代码的目录
chmod 777 -R .
```

#### 修改数据库配置
打开代码目录下的```.env```文件,修改如下配置,修改成对应的数据库配置
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=test
DB_USERNAME=root
DB_PASSWORD=test
DB_PREFIX=t_

#### 初始化数据库配置
```bash
php artisan migrate # 初始化数据库配置

php artisan db:seed # 分配后台管理员的权限

```

#### 后台登录地址
http://xxxx.xxx.cc/admin
http://xxxx.xxx.cc/admin/article

账号密码```admin```:```admin```