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

PHP网站管理员 Published the article • 0 comments • 216 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

PHP网站管理员 Published the article • 2 comments • 428 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
```

### 思考

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


How to write a file, which named CMakeLists.txt,and build c-lang program with libevent

Linux网站管理员 Published the article • 0 comments • 125 views • 2019-04-02 08:57 • 来自相关话题

I want to write a libevent c-lang program on the IDE clion, so I need to write a file, which named CMakeLists.txt to build this program.

### My program source code
```c

#include
#include
#include
#include
#include

#include
#include
#include

struct event ev;
struct timeval tv;

void time_cb(int fd, short event, void *argc) {
printf("timer wakeup\n");
event_add(&ev, &tv);
}

int main(int argc, char* argv[]) {
struct event_base *base = event_base_new();
tv.tv_sec = 10;
tv.tv_usec = 0;
event_assign(&ev, base, -1, 0, time_cb, NULL);
event_add(&ev, &tv);
event_base_dispatch(base);
}
```

### The CMakeLists.txt content
```
cmake_minimum_required(VERSION 3.12)
project(test)

set(CMAKE_CXX_STANDARD 98)

include_directories(/usr/local/Cellar/libevent/2.1.8/include/)
link_directories(/usr/local/Cellar/libevent/2.1.8/lib/)
add_executable(test a.c)
target_link_libraries(test event)
```
> used the function link_directions load the libraries, and use function target_link_libraries to link levent 查看全部

I want to write a libevent c-lang program on the IDE clion, so I need to write a file, which named CMakeLists.txt to build this program.

### My program source code
```c

#include
#include
#include
#include
#include

#include
#include
#include

struct event ev;
struct timeval tv;

void time_cb(int fd, short event, void *argc) {
printf("timer wakeup\n");
event_add(&ev, &tv);
}

int main(int argc, char* argv[]) {
struct event_base *base = event_base_new();
tv.tv_sec = 10;
tv.tv_usec = 0;
event_assign(&ev, base, -1, 0, time_cb, NULL);
event_add(&ev, &tv);
event_base_dispatch(base);
}
```

### The CMakeLists.txt content
```
cmake_minimum_required(VERSION 3.12)
project(test)

set(CMAKE_CXX_STANDARD 98)

include_directories(/usr/local/Cellar/libevent/2.1.8/include/)
link_directories(/usr/local/Cellar/libevent/2.1.8/lib/)
add_executable(test a.c)
target_link_libraries(test event)
```
> used the function link_directions load the libraries, and use function target_link_libraries to link levent

What the structure format about cookie file?

PHP网站管理员 Published the article • 0 comments • 134 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/
```


未来的一个月我的TODO List,努力成为最好的自己

随想录网站管理员 Published the article • 0 comments • 149 views • 2019-03-06 09:11 • 来自相关话题

#### 人不可能一辈子苟活着,即使不能改变世界,也要改变自己,让自己成为自己的英雄,有所作为,不是自己眼中庸庸碌碌的一生。
=============

#### 未来一个月自己想做的事情
1.学习如何写作,提升自己写作的水平,多读书,增强收集和整理资料的能力
2.了解编程底层的一些知识,整理成文档,时刻翻阅优化
3.出门在外,多给家人打电话,多聊天,增加通话时间 查看全部
#### 人不可能一辈子苟活着,即使不能改变世界,也要改变自己,让自己成为自己的英雄,有所作为,不是自己眼中庸庸碌碌的一生。
=============

#### 未来一个月自己想做的事情
1.学习如何写作,提升自己写作的水平,多读书,增强收集和整理资料的能力
2.了解编程底层的一些知识,整理成文档,时刻翻阅优化
3.出门在外,多给家人打电话,多聊天,增加通话时间

如何隐藏header中的X-Powered-By和Server的版本号

Nginx网站管理员 Published the article • 0 comments • 201 views • 2019-02-28 20:05 • 来自相关话题

### 为什么要隐藏header的X-Powered-By和Server的版本号呢?任何软件都可能存在漏洞,甚至有些漏洞可以提权拿到服务器的最高权限,每天都会有很多扫描器扫描你的服务器,更具服务器的版本和cgi软件及版本找对应的漏洞,从而自动化的注入漏洞,甚至自动化的控制你的服务器,想想是不是很可怕。

### 隐藏X-Powered-By

针对php,我们可以将```php.ini```中的```expose_php = Off```置于```Off```,即隐藏。然后重启```php-fpm```
```bash
php --ini
vim /etc/php.ini +359
service php-fpm restart
```

###隐藏Server的版本号
在```nginx.conf```的```http```中加一行```server_tokens off;```即可。
```
http {
server_tokens off;
}
```

```
vim /etc/nginx.conf
``` 查看全部
### 为什么要隐藏header的X-Powered-By和Server的版本号呢?任何软件都可能存在漏洞,甚至有些漏洞可以提权拿到服务器的最高权限,每天都会有很多扫描器扫描你的服务器,更具服务器的版本和cgi软件及版本找对应的漏洞,从而自动化的注入漏洞,甚至自动化的控制你的服务器,想想是不是很可怕。

### 隐藏X-Powered-By

针对php,我们可以将```php.ini```中的```expose_php = Off```置于```Off```,即隐藏。然后重启```php-fpm```
```bash
php --ini
vim /etc/php.ini +359
service php-fpm restart
```

###隐藏Server的版本号
在```nginx.conf```的```http```中加一行```server_tokens off;```即可。
```
http {
server_tokens off;
}
```

```
vim /etc/nginx.conf
```

PHP Fatal error: Uncaught TypeError: Return value of PackageVersions

PHP网站管理员 Published the article • 0 comments • 496 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子模块

PHP网站管理员 Published the article • 0 comments • 268 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 '{}' \\;",
]
},
}
```

福利来了,阿里云一站式企业协同研发云,需求编码测试发布反馈一条龙

后端开发网站管理员 Published the article • 0 comments • 154 views • 2019-02-21 21:25 • 来自相关话题

##### 最近上阿里云,看到了他们推广的一款产品叫```一站式企业协同研发云```,顾名思义就是我们以后web流水线都可以基于这款产品来开发完,对与个人和小型工作室团队来讲,这就是福音。但是目前部署发布的流程只支持```Java```和```NodeJs```,相信后面会支持更多的语言。

##### 该网站有的特色就是协同开发,产品在网站提需求,程序员可以在改平台创建```git```仓库,pull、push、merge代码,测试人员或团队可以提交bug到上面,最后运维的同学可以自动化发布代码,整个流程可以节省大量的时间,我们不需要到处去找文档,不需要手动部署或者花费大量的时间搭建环境,整套流程都是现成的,开箱即用。

##### 虽然不太喜欢阿里云吧,但是这个功能还是挺好的,希望能支持更多的语言发布就好了。 查看全部

##### 最近上阿里云,看到了他们推广的一款产品叫```一站式企业协同研发云```,顾名思义就是我们以后web流水线都可以基于这款产品来开发完,对与个人和小型工作室团队来讲,这就是福音。但是目前部署发布的流程只支持```Java```和```NodeJs```,相信后面会支持更多的语言。

##### 该网站有的特色就是协同开发,产品在网站提需求,程序员可以在改平台创建```git```仓库,pull、push、merge代码,测试人员或团队可以提交bug到上面,最后运维的同学可以自动化发布代码,整个流程可以节省大量的时间,我们不需要到处去找文档,不需要手动部署或者花费大量的时间搭建环境,整套流程都是现成的,开箱即用。

##### 虽然不太喜欢阿里云吧,但是这个功能还是挺好的,希望能支持更多的语言发布就好了。

git的文件模式曾困扰了我

Linux网站管理员 Published the article • 0 comments • 164 views • 2019-02-21 15:29 • 来自相关话题

当我为git里的某个文件建立软链的时候,文件模式从100644变成了120000,我起初以为是我的权限问题,导致文件的权限也发生了变化,

翻阅git的资料得知:
文件模式为 100644,表明这是一个普通文件,
其他可用的模式有:100755 表示可执行文件,
120000 表示符号链接。

文件模式是从常规的 UNIX 文件模式中参考来的,但是没有那么灵活 ── 上述三种模式仅对 Git 中的文件 (blobs) 有效 (虽然也有其他模式用于目录和子模块)。 查看全部

当我为git里的某个文件建立软链的时候,文件模式从100644变成了120000,我起初以为是我的权限问题,导致文件的权限也发生了变化,

翻阅git的资料得知:
文件模式为 100644,表明这是一个普通文件,
其他可用的模式有:100755 表示可执行文件,
120000 表示符号链接。

文件模式是从常规的 UNIX 文件模式中参考来的,但是没有那么灵活 ── 上述三种模式仅对 Git 中的文件 (blobs) 有效 (虽然也有其他模式用于目录和子模块)。