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

随想录网站管理员 发表了文章 • 0 个评论 • 128 次浏览 • 2019-03-06 09:11 • 来自相关话题

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

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

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

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

Nginx网站管理员 发表了文章 • 0 个评论 • 162 次浏览 • 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网站管理员 发表了文章 • 0 个评论 • 420 次浏览 • 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网站管理员 发表了文章 • 0 个评论 • 218 次浏览 • 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 '{}' \\;",
]
},
}
```

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

后端开发网站管理员 发表了文章 • 0 个评论 • 136 次浏览 • 2019-02-21 21:25 • 来自相关话题

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

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

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

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

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

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

git的文件模式曾困扰了我

Linux网站管理员 发表了文章 • 0 个评论 • 133 次浏览 • 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) 有效 (虽然也有其他模式用于目录和子模块)。

2019坚信自己,努力做一个成功的人

随想录网站管理员 发表了文章 • 0 个评论 • 98 次浏览 • 2019-02-16 21:52 • 来自相关话题

### 积极拥抱现实,做一个现实的人。

### 有非常明确的目标和梦想

> 梦想+实力+坚持=成功

### 像机器一样执行你的目标

### 及时发现问题,并迅速解决问题

### 快速接受新鲜事物,并愿意学习

### 始终建立高水准的优质圈子

### 依旧相信真理,依旧相信光 查看全部
### 积极拥抱现实,做一个现实的人。

### 有非常明确的目标和梦想

> 梦想+实力+坚持=成功

### 像机器一样执行你的目标

### 及时发现问题,并迅速解决问题

### 快速接受新鲜事物,并愿意学习

### 始终建立高水准的优质圈子

### 依旧相信真理,依旧相信光

how to solve the command mv warning directory not empty, when target is directory?

Linux网站管理员 发表了文章 • 0 个评论 • 133 次浏览 • 2019-02-14 12:57 • 来自相关话题

I get error ```mv: cannot move '/vendor/bin' to 'vendor/bin': Directory not empty```, when i used command ```mv``` on linux.
This problem is the direcotry is not empty, if your want overwrite it, you must add param ```-f``` or ```--force```.

### How to view the help of command ```mv```?

```bash
man mv
# or
mv --help
``` 查看全部

I get error ```mv: cannot move '/vendor/bin' to 'vendor/bin': Directory not empty```, when i used command ```mv``` on linux.
This problem is the direcotry is not empty, if your want overwrite it, you must add param ```-f``` or ```--force```.

### How to view the help of command ```mv```?

```bash
man mv
# or
mv --help
```

Golang source code complie, missing _Gidle redeclared in this block

golang网站管理员 发表了文章 • 0 个评论 • 225 次浏览 • 2019-01-31 14:57 • 来自相关话题

_Gidle redeclared in this block

When compile the golang source code, having an error message, which is _Gidle redeclared in this block

```bash
git clean -df // clean your local change
```

if you find some warning, romove it, or ```git clone``` source code again.

and then

```bash
cd src
./all.bash
```

Maybe the problem is having the same source code in your directory 查看全部
_Gidle redeclared in this block

When compile the golang source code, having an error message, which is _Gidle redeclared in this block

```bash
git clean -df // clean your local change
```

if you find some warning, romove it, or ```git clone``` source code again.

and then

```bash
cd src
./all.bash
```

Maybe the problem is having the same source code in your directory


How to deal with the CryptographyDeprecationWarning in python fabric?

Python网站管理员 发表了文章 • 0 个评论 • 3208 次浏览 • 2019-01-28 15:57 • 来自相关话题

```text
c:\users\administrator\.virtualenvs\spiderworker-dgts38t8\lib\site-packages\paramiko\kex_ecdh_nist.py:39: CryptographyDeprecationWarning: encode_point has been deprecated on EllipticCurvePublicNumbers and will be removed in a fut
ure version. Please use EllipticCurvePublicKey.public_bytes to obtain both compressed and uncompressed point encoding.
m.add_string(self.Q_C.public_numbers().encode_point())
c:\users\administrator\.virtualenvs\spiderworker-dgts38t8\lib\site-packages\paramiko\kex_ecdh_nist.py:96: CryptographyDeprecationWarning: Support for unsafe construction of public numbers from encoded data will be removed in a fu
ture version. Please use EllipticCurvePublicKey.from_encoded_point
self.curve, Q_S_bytes
c:\users\administrator\.virtualenvs\spiderworker-dgts38t8\lib\site-packages\paramiko\kex_ecdh_nist.py:111: CryptographyDeprecationWarning: encode_point has been deprecated on EllipticCurvePublicNumbers and will be removed in a fu
ture version. Please use EllipticCurvePublicKey.public_bytes to obtain both compressed and uncompressed point encoding.
hm.add_string(self.Q_C.public_numbers().encode_point())
```

finding the keywork in the source code, you will see class CryptographyDeprecationWarning. invoked by function ```_verify_openssl_version```.

```
"OpenSSL version 1.0.1 is no longer supported by the OpenSSL "
"project, please upgrade. A future version of cryptography will "
"drop support for it.",
``` 查看全部
```text
c:\users\administrator\.virtualenvs\spiderworker-dgts38t8\lib\site-packages\paramiko\kex_ecdh_nist.py:39: CryptographyDeprecationWarning: encode_point has been deprecated on EllipticCurvePublicNumbers and will be removed in a fut
ure version. Please use EllipticCurvePublicKey.public_bytes to obtain both compressed and uncompressed point encoding.
m.add_string(self.Q_C.public_numbers().encode_point())
c:\users\administrator\.virtualenvs\spiderworker-dgts38t8\lib\site-packages\paramiko\kex_ecdh_nist.py:96: CryptographyDeprecationWarning: Support for unsafe construction of public numbers from encoded data will be removed in a fu
ture version. Please use EllipticCurvePublicKey.from_encoded_point
self.curve, Q_S_bytes
c:\users\administrator\.virtualenvs\spiderworker-dgts38t8\lib\site-packages\paramiko\kex_ecdh_nist.py:111: CryptographyDeprecationWarning: encode_point has been deprecated on EllipticCurvePublicNumbers and will be removed in a fu
ture version. Please use EllipticCurvePublicKey.public_bytes to obtain both compressed and uncompressed point encoding.
hm.add_string(self.Q_C.public_numbers().encode_point())
```

finding the keywork in the source code, you will see class CryptographyDeprecationWarning. invoked by function ```_verify_openssl_version```.

```
"OpenSSL version 1.0.1 is no longer supported by the OpenSSL "
"project, please upgrade. A future version of cryptography will "
"drop support for it.",
```