新的篇章

  • 首页
  • 分类
  • 归档
  • 标签
  • 关于

java生成pdf文件·pdfbox

发表于 2021-02-04   |  

PDF生成方案比较

开源框架支持

  • iText:生成PDF文档,还支持将XML、Html文件转化为PDF文件

  • Apache PDFBox:生成、合成PDF文档

  • docx4j:生成docx、pptx、xlsx文档,支持转换为PDF格式

比较

  • iText开源协议为AGPL,而其他两个框架协议均为Apache License V2.0
  • 使用PDFBox生成PDF就像画图似的,文字和图像根据页面坐标画上去的,需要根据字数手动换行
  • docx4j用来生成docx文档,提供了将WORD文档转换为PDF文档的功能,并不能直接生成PDF文档
应用 格式复杂 格式简单
数据量大 docx4j+freemarker docx4j或PDFBox
数据量小 docx4j PDFBox

鉴于iText的协议为AGPL具有极强的传染性,本文以Apache PDFBox为例来讲解

pdfbox通过pdf模板生成PDF文件

本人在项目中遇到的是基于pdf的form表单模板来生成pdf文件

  • Apache PDFBox Github:https://github.com/apache/pdfbox

通过Maven引入依赖

1
2
3
4
5
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox-app</artifactId>
<version>2.0.22</version>
</dependency>

使用示例

  1. 准备好表单数据
  2. 加载pdf模板文件
  3. 加载自定义字体
  4. 遍历表单属性并填充值
  5. 导出PDF文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
package com.panda.copyright;
import org.apache.fontbox.ttf.OTFParser;
import org.apache.fontbox.ttf.OpenTypeFont;
import org.apache.pdfbox.cos.COSArray;
import org.apache.pdfbox.cos.COSDictionary;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.pdmodel.*;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.font.PDType0Font;
import org.apache.pdfbox.pdmodel.graphics.image.CCITTFactory;
import org.apache.pdfbox.pdmodel.graphics.image.JPEGFactory;
import org.apache.pdfbox.pdmodel.graphics.image.LosslessFactory;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget;
import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceDictionary;
import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceStream;
import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm;
import org.apache.pdfbox.pdmodel.interactive.form.PDField;
import org.apache.pdfbox.pdmodel.interactive.form.PDPushButton;
import org.apache.pdfbox.pdmodel.interactive.form.PDTextField;
import org.apache.pdfbox.util.filetypedetector.FileType;
import org.apache.pdfbox.util.filetypedetector.FileTypeDetector;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.URL;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class PdfGenerate {
public static void main(String[] args) throws Exception{
//1. 准备表单数据
Map<String,String> mappers = new ConcurrentHashMap<>();
mappers.put("name", "幸福美少女");
mappers.put("authors","新的篇章");
mappers.put("publish_time","2021-02-04");
mappers.put("qr_code","/temp/pdfbox/images/3a7b285459e.png");
mappers.put("pro_file1","/temp/pdfbox/images/file1.jpg");
//2. 加载pdf模板文件
InputStream in = null;
try{
String outPath = "/temp/pdfbox/copyright_20210204.pdf";
in = PdfGenerate.class.getResourceAsStream("/template/copyright.pdf");
PDDocument document = PDDocument.load(in);
//3. 加载自定义字体
PDAcroForm form = document.getDocumentCatalog().getAcroForm();
//ttf字体,实际上还有PDType1Font,PDType3Font,一般ttf就用PDType0Font足以
PDFont ttfFont= PDType0Font.load(document, new File("/temp/fonts/Dengl.ttf"));
//otf字体
OTFParser otfParser = new OTFParser();
OpenTypeFont otf = otfParser.parse(PdfGenerate.class.getResourceAsStream("/template/copyright.otf"));
PDType0Font otfFont = PDType0Font.load(document,otf, false);
/* 设置全局默认字体 或某个页面设置字体:实例化字体对象了之后,将它添加到PDPage的Resource中。
PDPage page= new PDPage(PDRectangle.A4);
page.getResources().add(ttfFont);*/
PDResources resources = new PDResources();
//字体名称跟模板中设置的有关
resources.put(COSName.getPDFName("AdobeSongStd-Light"), otfFont);
resources.put(COSName.getPDFName("F4"), otfFont);
form.setDefaultResources(resources);
//可设置单个表单属性的字体及格式
String otffont_name = form.getDefaultResources().add(otfFont).getName();
//4. 遍历表单属性并填充值
List<PDField> fields = document.getDocumentCatalog().getAcroForm().getFields();
for (PDField field : fields) {
if ("qr_code".equals(field.getFullyQualifiedName())){
setImgField(document, field, certImg.get("qr_code"),1);
}else if ("pro_file1".equals(field.getFullyQualifiedName())){
setImgField(document, field, certImg.get("pro_file1"),1);
}else{
PDTextField textField = (PDTextField) field;
if("name".equals(field.getFullyQualifiedName()){
//设置字体 字号
textField.setDefaultAppearance(String.format("/%s 16 Tf 0 g", font_name));
}
if("authors".equals(field.getFullyQualifiedName()){
//修改位置
PDAnnotationWidget widget = textField.getWidgets().get(0);
PDRectangle rect = new PDRectangle(name.getLowerLeftX(),368.15F,name.getWidth(),name.getHeight());
widget.setRectangle(rect);
//设置字体 字号
textField.setDefaultAppearance(String.format("/%s 12 Tf 0 g", font_name));
}
//publish_time使用全局默认设置的字体
//设置值
if(mappers.containsKey(field.getFullyQualifiedName())){
field.setValue(mappers.get(field.getFullyQualifiedName()));
}
//设置只读,表单内容不可编辑
field.setReadOnly(true);
}
}
//5. 保持pdf文件
document.save(outPath);
//最后需要关闭它
document.close();
}catch(IOException){
e.printStackTrace();
}finally{
if(in!=null){
in.close();
}
}
}
/**
* 处理图片
*/
private static void setImgField(PDDocument document, PDField field, String filePath, int pageIndex) throws IOException{
File imageFile = new File(filePath);
if (imageFile.exists()){
/*
* BufferedImage bufferedImage = ImageIO.read(imageFile);
* PDImageXObject pdImageXObject = LosslessFactory.createFromImage(document, bufferedImage);
*/
PDImageXObject image = PDImageXObject.createFromFile(filePath, document);
PDRectangle rectangle = getFieldArea(field);
//float size = rectangle.getHeight();
float x = rectangle.getLowerLeftX();
float y = rectangle.getLowerLeftY();
float imageHeight = image.getHeight();
float imageWidth = image.getWidth();
float signRectHeight = rectangle.getHeight(), sighRectWidth = rectangle.getWidth();
PDPageContentStream contentStream = new PDPageContentStream(document, document.getPage(pageIndex), PDPageContentStream.AppendMode.APPEND, true);
float imgBi = imageWidth/imageHeight;
float signBi = sighRectWidth/signRectHeight;
float margin = 0;
if (imgBi > signBi){
float recHeight = sighRectWidth*imageHeight/imageWidth;
margin = (signRectHeight-recHeight)/2;
contentStream.drawImage(image, x, y + margin, sighRectWidth, recHeight);
}else{
float recWidth = signRectHeight*imageWidth/imageHeight;
margin = (sighRectWidth - recWidth)/2;
contentStream.drawImage(image, x + margin, y,recWidth, signRectHeight);
}
contentStream.close();
field.setReadOnly(true);
} else {
System.err.println("File " + filePath + " not found");
}
}
/**
* 获取文字坐标
*/
private static PDRectangle getFieldArea(PDField field) {
COSDictionary fieldDict = field.getCOSObject();
COSArray fieldAreaArray = (COSArray) fieldDict.getDictionaryObject(COSName.RECT);
return new PDRectangle(fieldAreaArray);
}
}

Hello World

发表于 2019-12-26   |  

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run serv

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment

《财务管理基础·第8版》

发表于 2019-01-16   |  

前言

本书重点关注:

  • 公司如何投资实物资产
  • 如何为这些投资项目筹集资金
  • 这些资产最终如何影响公司的价值

讨论:

  1. 金融市场的主要参与者、金融机构在整个经济体中所扮演的角色
  2. 证券如何交易
  3. 投资者如何评估证券的价值
  4. 公司与个人可能遇到的多数重要财务问题提供框架

1、 资本性投资决策可能决定了公司未来一二十年甚至更长时间的经营方向

2、 公司的成败在相当大程度上取决于公司筹集资本的能力

3、 财务决策没有固定模式,而公司经营活动面临的金融市场瞬息万变

4、 形成自己的财务框架,不能仅凭经验,必须理解为什么公司和金融市场会那样运作,以及普遍的做法在什么情形下可能并非最佳实践

5、 好的财务经理可以处理一些日常问题,只有最优秀的经理才能应对变化的环境

6、 如何在获利时间不同或风险等级不同的投资项目之间做出选择

第1篇:导论

第1章 企业的组织形式、财务经理的角色、经理面临的金融市场

(1)股东如何要求经理采取能够增加其投资项目价值的措施

(2)资本机会成本

(3)公司在评估投资项目时需要权衡的问题

(4)协调经理与股东之间利益冲突的某些机制

(5)经理可能面临的某些道德问题

第2章 金融市场与金融机构的职能

回顾2007-2009年的金融危机,说明两者的重要性

公司编制财务报表帮助利益相关者监控公司的发展状况

第3章 (财务报表中)两个关键的区别

市场价值与账面价值之间的区别

现金流量与利润之间的区别

会计实践的某些缺陷

  • 2001-2002年的会计丑闻来说明

第4章 财务报表分析概览

基于对估值的考虑

财务比率如何管理增加公司价值的洞察

第2篇:价值(关注估值的问题)

强调:资本机会成本取决于投资项目的风险

第5章 货币的时间价值

讨论某些个人财务决策

如何评估长期现金流量序列的价值,进而评估永续年金和年金的价值

对通货膨胀以及实际报酬率与名义报酬率之间差异的总结

第6章 债券与股票的基本特征

用第5章的理念评估证券的价值

如何计算收益率已经确定的债券的价值

债券的价值如何随着利率的变动而变动

股票价格的决定因素

如何运用股票股价公司推断投资者的期望报酬率

股票价格如何反映投资机会

分析师为什么关注市盈率倍数

第7章 市场效率

市场效率不仅是解释股票股价的一个重要概念,而且为后续处理公司发行证券、做出股利分配或资本结构决策所引发的问题提供一个框架

公司的投资决策

第8章 净现值

如何计算一个简单投资项目的净现值

复杂投资项目

  • 不同投资项目的选择
  • 机器设备更新决策
  • 何时应该投资的决策
  • 评估投资项目吸引力的其它指标:
    • 内含报酬率
    • 回收期
    • 盈利能力指数
  • 如何规避内含报酬率法的某些缺陷

计算净现值的第一步是确定折现的对象

第9章 资本预算分析

  • 经理应该如何识别营运资本投资
  • 所得税和折旧如何影响现金流量

第10章

考察公司如何管理投资流程并确保每个人都朝着一个共同目标努力工作

有助于经理识别其估计值隐含的关键假设的各种方法

  • 敏感性分析
  • 情景分析
  • 盈亏临界点分析

会计盈亏临界点分析与净现值盈亏临界点分析的区别

第10章 如何将未来柔性嵌入投资项目

从而充分利用有利计划获利并防止不利机会造成不良后果

第3篇:风险(主要关注资本成本)

第11章 个别股票的个别风险与市场风险的差异

第12章 如何计量市场风险,并讨论了风险与预期报酬率之间的关系

第13章 加权平均资本成本

提供了一个计算加权平均资本成本的实例

第4篇:筹资

第14章 一个公司所发行的各种证券及其作为财务来源的相对重要性概览

第15章 公司如何发行证券

  • 逐步讨论公司最初对风险资本的需求
  • 公司首次公开发行
  • 公司通过举债或发行股票满足持续的资金需求

第5篇:债务与分配政策(关注两类传统的长期筹资决策)

第16章 公司应该借多少钱并总结了公司无法偿还其债务可能引发的破产程序

第17章 公司如何确定鼓励及其支付政策

第6篇:财务分析与财务计划

第18章 长期财务计划

  • 如何考虑投资决策与筹资决策对整个公司的综合影响
  • 增长率和可持续增长率指标如何帮助经理验证公司预期增长率是否与其筹资计划协调一致

第19章 短期财务计划

  • 经理如何确保公司有足够的现金支付以后年度的各种款项
  • 短期借款的主要来源

第20章 营运资本管理

  • 信用管理的基本步骤
  • 存货管理的原理
  • 公司如何有效处理各种款项的收支并尽快将现金投入营运

第7篇:专题

第21章 兼并

第22章 国际财务管理

  • 公司面对不同货币所产生的各种特殊问题

第23章 期权

第24章 风险管理

读书笔记

发表于 2018-11-30   |  

国富论·名词解释


[TOC]

正文

国民每年劳动(本国劳动的直接产物或用这类产物从外国购进来的物品)

定义

供给他们每年消费的一切生活必需品和便利品的源泉。(或是本国劳动的直接产物,或是用这类产物从外国购进来的物品)

价值

  • 价值一词有二个不同的意义。

它有时表示特定物品的效用,有时又表示由于占有某物而取得的对他种货物的购买力。前者可叫做使用价值,后者可叫做交 换价值。

使用价值很大的东西,往往具有极小的交 换价值,甚或没有;反之,交 换价值很大的东西,往往具有极小的使用价值,甚或没有。

  • 物品的真实价格:即要取得这物品实际上所付出的代价,乃是获得它的辛苦和麻烦
  • 劳动是第一性价格,是最初用以购买一切货物的代价。

世间一切财富,原来都是用劳动购买而不是用金银购买的

  • 劳动真实价格,就是报酬劳动的一定数量的生活必需品和便利品。

  • 劳动名义价格,就是报酬劳动的一定数量的货币。

  • 劳动的自然价格的价格出售

一种商品价格,如果不多不少恰恰等于生产、制造这商品乃至运送这商品到市场所使用的按自然率支付的地租、工资和利润。

出卖的价格,恰恰相当于其价值,或者说,恰恰相当于出售这商品的人实际上所花的费用。

  • 商品的市场价格:商品通常出卖的实际价格

  • 有效需求者:愿支付商品的自然价格的人

  • 劳动工资:都普遍理解为,在劳动者为一人而雇用他的资本所有者另为一人的一般情况下,劳动获得的工资

读书笔记

发表于 2018-11-30   |  

国富论·摘录


[TOC]

正文

本书摘要

1
2
1. 前四篇的目的:说明广大人民的收入是怎样构成的,并说明供应各时代各国民每年消费的资源,究竟有什么性质.
2. 第五篇即最后一篇所讨论的,是君主或国家的收入.

序列及全书设计

1
2
3
第一,什么是君主或国家的必要费用,其中,哪些部分应该出自由全社会负担的赋税,哪些部分应该出自社会某特殊阶级或成员负担的特殊赋税。
第二,来自全社会所有纳税人的经费是怎样募集的,而各种募集方法大抵有什么利弊。
第三,什么使几乎所有近代各国政府都把收入的一部分,作为担保来举债,而这种债务,对于真实财富(换言之,对于社会的土地和劳动的年产物),有什么影响。

国民所需的一切必需品和便利品供给情况的好坏,受国民每年劳动:消费者人数的比例大小而定.

这一比例都要受下述两种情况的支配:

  • 第一,一般地说,这一国国民运用劳动,是怎样熟练,怎样技巧,怎样有判断力;
  • 第二,从事有用劳动的人数和不从事有用劳动的人数,究成什么比例。

第一篇

第一章 论分工

分工能提高效果。

一个国家的产业与劳动生产力的增进程度如果是极高的,则其各种行业的分工一般也都达到极高的程度。

  • 劳动生产力的增进上,农业总跟不上制造业上劳动生产力的增进的主要原因,也许就是农业不能采用完全的分工制度。

  • 在农业方面,富国劳动生产力未必都比贫国劳动生产力大得多,至少不象制造业方面一般情况那样大得多。

有了分工,同数劳动者就能完成比过去多得多的工作量

其原因有三:

  • 第一,劳动者的技巧因业专而日进;

  • 第二,由一种工作转到另一种工作,通常须损失不少时间,有了分工,就可以免除这种损失;

  • 第三,许多简化劳动和缩减劳动的机械的发明,使一个人能够做许多人的工作。

1
2
3
4
人类把注意力集中在单一事物上,比把注意力分散在许多种事物上,
更能发现达到目标的更简易更便利的方法。分工的结果,各个人的全部注意力自然会倾注在一种简单事物上。
所以只要工作性质上还有改良的余地,各个劳动部门所雇的劳动者中,
不久自会有人发现一些比较容易而便利的方法,来完成他们各自的工作。

第二章 论分工的原由

由于我们所需要的相互帮忙,大部分是通过契约、交换和买卖取得的,所以当初产生分工的也正是人类要求互相交换这个倾向。

它们因为没有交 换交 易的能力和倾向,所以,不能把这种种不同的资质才能,结成一个共同的资源,因而,对于同种的幸福和便利,不能有所增进。

第三章 论分工受市场范围的限制

分工起因于交 换能力,分工的程度,因此总要受交 换能力大小的限制,换言之,要受市场广狭的限制。市场要是过小,那就不能鼓励人们终生专务一业。

有些业务,那怕是最普通的业务,也只能在大都市经营。例如搬运工人,就只能在大都市生活。

水运开拓了比陆运所开拓的广大得多的市场,所以从来各种产业的分工改良,自然而然地都开始于沿海沿河一带。

根据最可靠的历史记载,开化最早的乃是地中海沿岸各国。地中海是今日世界上最大的内海,没有潮汐,因而除风起浪涌外,也没有可怕的波涛。地中海,由于海面平滑,岛屿棋布,离岸很近,在罗盘针向未发明,造船术尚不完全,人都不愿远离海岸,而视狂澜怒涛为畏途的时候,对于初期航海最为适宜。

令人奇怪的是,古代埃及人、印度人和中国人,都不奖励外国贸易。他们的财富似乎全然得自内陆的航行。

此外,一国境内,纵有大河流贯其间,但若毫无支流,其下游又须流经他国国境始注于海,这国也就仍然不能有大规模的商业,因为上游国能否与海洋交 通,随时都要受下游国的支配。

第四章 论货币的起源及其效用

1
2
3
分工一经完全确立,一个人自己劳动的生产物,便只能满足自己欲望 的极小部分。
他的大部分欲望 ,须用自己消费不了的剩余劳动生产物,交 换自己所需要的别人劳动生产物的剩余部分来满足。
于是,一切人都要依赖交 换而生活,或者说,在一定程度上,一切人都成为商人,而社会本身,严格地说,也成为商业社会。

但在刚开始分工的时候,这种交 换力的作用,往往极不灵敏。

然而,自分工确立以来,各时代各社会中,有思虑的人,为了避免这种不便,除自己劳动生产物外,随时身边带有一定数量的某种物品,这种物品,在他想来,拿去和任何人的生产物交 换,都不会见拒绝。

金属不易磨损,而且,它不仅具有很大的耐久性,它还能任意分割,而全无损失,分割了也可再熔成原形。这性质却为一切其他有耐久性商品所没有。金属的这一特性,使金属成为商业流通上适宜的媒介。

验金属的工作,却更为困难,更为烦琐,除非通过这种又困难又烦琐的检验,否则就很容易受到极大的欺骗。

要称量金属而毫无差误,是很麻烦和很困难的。这便引出了铸币制度。铸币的刻印,不但要确定金属的纯度,还要确定它的重量。自是以后,铸币就象现在那样,全以个数授受,没有称重量的麻烦了。

我相信,世界各国的君主,都是贪婪不公的。他们欺骗臣民,把货币最初所含金属的真实分量,次第削减。

通过采用这些办法,君王和国家就能以较小量的银,表面上偿还债务,并履行各种契约。实际上,政府的债权人因此被剥夺了一部分应得的权利。政府允许国内一切其他债务人,都有和君王相等的特权,他们同样能以新的贬值币,偿还货币改铸前借来的金额。所以,这种措施,常有利于债务人,而有损于债权人;有的时候,这种措施产生了比公共大灾祸所能产生的大得多、普遍得多的个人财产上的革命。

为要探讨支配商品交 换价值的原则,我将努力阐明以下三点:

  • 第一,什么是交换价值的真实尺度,换言之,构成一切商品真实价格的,究竟是什么,
  • 第二,构成真实价格的各部分,究竟是什么,
  • 第三,什么情况使上述价格的某些部分或全部,有时高于其自然价格或普通价格,有时又低于其自然价格或普通价格?换言之,使商品市场价格或实际价格,有时不能与共自然价格恰相一致的原因何在?

第五章 论商品的真实价格与名义价格或其劳动价格与货币

劳动是衡量一切商品交换价值的真实尺度。

任何一个物品的真实价格,即要取得这物品实际上所付出的代价,乃是获得它的辛苦和麻烦

世间一切财富,原来都是用劳动购买而不是用金银购买的。所以,对于占有财富并愿用以交 换一些新产品的人来说,它的价值,恰恰等于它使他们能够购买或支配的劳动量。

霍布斯说:财富就是权力。但获得或承继大宗财产的人,未必就获得或承继了民政上或军政上的政治权力

劳动虽是一切商品交 换价值的真实尺度,但一切商品的价值,通常不是按劳动估定的。

  • 不同工作所花费的时间
  • 不同苦难程度
  • 精巧程度
1
2
诚然,在交 换不同劳动的不同生产物时,通常都在一定程度上,考虑到上述困难程度和精巧程度,
但在进行这种交 换时,不是按任何准确尺度来作调整,而是通过市场上议价来作大体上两不相亏的调整

象一切其他商品一样,金银的价值时有变动,时有高低,其购买也时有难易。一定金银量所能购买或所能支配的劳动量或他种商品量,往往取决于当时已发现的著名金银矿山出产量的大小。

1
2
3
本身数量会不断变动的尺度,决不是测定他物数量的正确尺度
自身价值会不断变动的商品,也决不是计量他种商品价值的准确尺度,
但是,劳动却当别论。等量劳动,无论在什么时候和什么地方,对于劳动者都可以说有同等的价值。

劳动是商品的真实价格,货币只是商品的名义价格。

1
2
凡是难于购得或在取得时需花多量劳动的货物,价必昂贵;凡是易于购得或在取得时只需少量劳动的货物,价必低廉。
所以,只有本身价值绝不变动的劳动,才是随时随地可用以估量和比较各种商品价值的最后和真实标准。

等量劳动,对于劳动者,虽常有等量价值,但在雇用劳动者的人看来,它的价值却时高时低

劳动者是贫是富,其劳动报酬是坏是好,不与其劳动的名义价格成比例,而与其劳动的真实价格成比例。

商品与劳动的真实价格与名义价格的区别:

同一真实价格的价值,往往相等;但同一名义价格的价值,却往往因金银价值变动而产生极大的差异

如果他真要使地租的价值永久不变,那就不可把地租定为一定数额的货币。
一定数额的货币的价值难免有两种变动:

  • 第一,由于同一名称铸币各时代所含不同金银分量而产生的变动;
  • 第二,由于同一分量金银价值各时代各不相同而产生的变动。

谷物地租,即使在铸币名实一致的时候,也比货币地租更能保持原有价值

1
2
伊丽莎白第十八年规定,国内各学院地租,三分之二纳货币,其余三分之一要纳谷物,或按照当时最近市场上的谷价折合货币。
由谷物折合货币的部分,原不过占全部地租的三分之一,但现在据布勒克斯顿博士说,却已二倍于其他三分之二了。

谷物地租,只受一定分量谷物所能购买的劳动量上的变动的影响。但以其他任何物品计算的地租,不但要受一定分量谷物所能购买的劳动量上的变动的影响,同时还要受一定分量这物品所能购换的谷物量上的变动的影响

只有劳动才是价值的普遍尺度和正确尺度,换言之,只有用劳动作标准,才能在一切时代和一切地方比较各种商品的价值。

真实价格与名义价格的区分,对订定永久地租或缔结长期租地契约,可能还有用处,但对日常生活中比较普通的买卖,却没有用处。

在同一时间和同一地方,一切物品的真实价格与名义价格都成正比例。

所以,在同一时间和同一地方,货币乃是一切商品的真实交 换价值的正确尺度。但只在同一时间和同一地方才是这样。

在相隔很远的两个地方,商品的真实价格与货币价格不成正比例,而往来贩运货物的商人只考虑商品的货币价格

换言之,他所考虑的,只是购买商品所用的银数和出卖商品可换得的银数之间的差额

金币和银币价值的比例,不由法律或公告规定,而纯然取决于市场。所以,债务人如果以金偿债,债权人可以拒绝,不然,就须按照双方同意的金价计算

第六章 论商品价格的组成部分

  • 劳动量
  • 劳动的艰苦程度
  • 劳动是否需要非凡的技巧和智能
  • 在社会初期,劳动的全部生产物都属于劳动者自己。一种物品通常应可购换或支配的劳动量,只由取得或生产这物品一般所需要的劳动量来决定。

  • 资本一经在个别人手中积聚起来,劳动者对原材料增加的价值,在这种情况下,就分为两个部分,其中一部分支付劳动者的工资,另一部分支付雇主的利润,来报酬他垫付原材料和工资的那全部资本。

资本的利润与工资的关系

也许有人说,资本的利润只是特种劳动工资的别名,换言之,不外是监督指挥这种劳动的工资。但利润与工资截然不同,它们受着两个完全不同的原则的支配,而且资本的利润同所谓监督指挥这种劳动的数量、强度与技巧不成比例。

商品的价格的直接或最后由地租、劳动及利润这三部分组成。

  • 商品价格中,受劳动价值的支配

  • 商品价格中,受资本价值的支配

利润完全受所投资本的价值的支配,利润的多少与资本的大小恰成比例。

  • 商品价格中,包含地租

在土地共有时代,只须出些力去采集的,现今除出力外,却须付给代价。劳动者要采集这些自然产物,就必须付出代价,取得准许采集的权利;他必须把他所生产或所采集的产物的一部分交 给地主。

利润对资本总保持着一定的比例。

1
物品制造,越接近于完成,其价格中工资利润部分,和地租部分比较,便越大。随着制造的进展,不仅利润的项目增加,而且后一阶段制造者,比前一阶段制造者得到更多利润。因为,后者比前者需要更多资本。

然而,即使在最进步社会,也有少数商品的价格只能分为劳动工资及资本利润两个部分,且有更少数商品的价格,单由劳动工资构成。

例如,海产鱼类的价格,通常只有两个组成部分:

  • 其一支付渔夫的劳动,
  • 其二支付渔业资本的利润

雕石业者付给他们的价格,只是他们的劳动工资,其中没有地租部分,也没有利润部分。

工资、利润和地租,是一切收入和一切可交换价值的三个根本源泉。一切其他收入归根到底都是来自这三种收入中的一个。

不论是谁,只要自己的收入来自自己的资源,他的收入就一定来自他的劳动、资本或土地。

  • 来自劳动的收入称为工资
  • 来自运用资本的收入称为利润
  • 有资本不自用,而转借他人,借以取得收入,这种收入,称为货币的利息或利益
  • 出借人既给借用人以获取利润的机会,借用人就付给利息作为报酬

这三种不同的收入,当它们属于各别的个人时,容易区别;但在属于同一个人时,往往互相混淆,至少按通常说法是如此

  • 例如:农业家,很少雇佣监工来指导,自己耕种,他们把最终的收回资本叫利润(农业资本+普通利润+自己作为劳动者和监工所应得的工资)

一国年产物的普通或平均价值是逐年增加,是逐年减少,还是不增不减,要取决于这一国家的年产物每年是按照什么比例分配给这两个阶级(勤劳阶级、游惰阶级)的人民。

1
由于在文明国家内,交 换价值单由劳动构成的商品极不常见,大部分商品的交 换价值,都含有大量的利润和地租,所以,社会全部劳动年产物所能购买或支配的劳动量,远远超过这年产物生产制造乃至运输所需要的劳动量。假若社会每年所能购买的全劳动量,每年都被社会雇用,那末,因为劳动量将年年大大增加的缘故,后一年度的生产物将比前一年度的生产物具有更大的价值。可是,无论那一个国家,都不是用全部年产物来维持勤劳阶级。无论那一个国家,每年都有大部分生产物归游惰阶级消费。

第七章 论商品的自然价格与市场价格

地租的普通率或平均率,也是部分受土地所在地的社会及其邻近地区的一般情况的支配,部分受土地的天然肥沃与人工改良的支配。

这些普通率或平均率,可称为那地方那时候通行的工资自然率、利润自然率或地祖自然率

亏本:

  • 商品的销售价格 < 当地一般利润率的价格(原始价格+利润+再贩卖费用)

能有利润的价格,虽然未必是一般商人出卖货物的最低价格,但却是他在相当长的时期内肯出卖的最低价格,至少在有绝对自由 即各人能随意变更职业的地方,情形是如此。

  • 商品的市场价格,都受支配于它的实际供售量,和愿支付它的自然价格(或者说愿支付它出售前所必须支付的地租、劳动工资和利润的全部价值)的人的需要量,这二者的比例

有效需求与绝对需求不同

愿支付商品的自然价格的人,可称为有效需求者,而他们的需求,可称为有效需求。因为,这种需求也许使商品的出售得以实现。此种需求与绝对需求不同。

1
一个贫民在某种意义上也许可以说有一辆六马拉大马车的需求,他这种需求并不是有效需求,因为那马车绝不是为要满足他的这种需要而送往市场出售的。

价格上升程度的大小,要看货品的缺乏程度及竞事者富有程度和浪费程度所引起的竞争热烈程度的大小。但在同样富有和同样奢侈的竞争者间,缺乏程度所能引起的竞争程度的大小,却要看这商品对求购者的重要性的大小。

在有些业务上,同量劳动逐年所产出的商品量可大不相同,在有些业务上,却往往相等,或几乎相等。

  • 农业劳动者的谷物、葡萄等,每一年都不一样:商品的市场价格易受供需波动大
  • 同数纺织工所产出的麻布和呢绒量,却年年相等,或几乎相等:商品的市场价格受需波动小

商品市价偶然和一时的变动,主要对价格中工资部分和利润部分发生影响,而对其中地租部分则影响不大(用什么来支付地租则影响较大)

要看当时市场上既成作业或待成作业是过多还是不足,而对工资或利润的价值和比率发生影响

  • 例如:国丧,增加了商人的利润,织布工人的工资却毫不受影响,但却会抬高缝工们的工资

  • 当需求高、市场价格比自然价格高很多,供给方一般会隐瞒这种变化.

不过,必须承认,这种秘密很少能长久保守,而那非常的利润只能在这秘密未给人知道以前独享

  • 制造业方面的秘密,比商业方面的秘密,能保守得长久些

  • 垄断价格,在各个时期,都是可能得到的最高价格。

  • 自然价格或自由竞争的价格,却是卖者一般能接受的最低价格,也就是他能够继续营业的最低价格

自然价格本身随其组成部分即工资、利润和地租的自然率的变动而变动。但无论在什么社会,这种自然率都随着社会的贫富、进步退步或停滞而变动
  • 第一,我要努力说明,什么情况自然而然地决定工资率,而这些情况,又怎样受社会的贫富、进步退步或停滞的影响。
  • 第二,我要努力说明,什么情况自然而然地决定利润率,而这些情况,又怎样受上述社会状况的变动的影响。

  • 第三,我要努力说明,什么情况支配下面要说的比例。

货币工资与货币利润虽因劳动及资本的用途不同而大不相同,但各种劳动用途的货币工资和各种资本用途的货币利润似乎都有一定的比例。如后章所要说明的那样,这种比例部分取决于各种用途的性质,部分取决于所在社会的不同法律和政策。不过,这种比例,虽在许多方面受法律和政策的支配,但似乎不受所在社会贫富、进步退步或停滞等状况的影响,而在所有这些不同状况中保持不变,或几乎不变。

  • 第四,我要努力说明,什么情况支配土地地租,并使一切土地生产物的真实价格或是上升或是下降。

第八章 论劳动工资

劳动生产物构成劳动的自然报酬或自然工资。

用在土地上的劳动生产物扣除项:

  • 地主的地租
  • 利润

劳动者的普通工资,到处都取决于劳资两方所订的契约

就长时期说,雇主需要劳动者的程度,也许和劳动者需要雇主的程度相同,但雇主的需要没有劳动者那样迫切。

工人很少能从那些愤激的结合的暴动中得到利益。那些结合,部分因为官厅干涉,部分因为雇主较能持久,部分因为大多数劳动者为了目前生计不得不屈服,往往以为首者受到惩罚或一败涂地而告终。

对工资劳动者的需求,自随国民财富的增加而增加。国民财富不增加,对工资劳动者的需求决不会增加。

最高的劳动工资不在最富的国家出现,而却在最繁荣,即最快变得富裕的国家出现

使劳动工资增高的,不是庞大的现有国民财富,而是不断增加的国民财富

一国繁荣最明确的标识,就是居民人数的增加。

要分析居民人数增加的来源:外来人口、人口的迅速繁殖

*一国尽管非常富有,如若长久陷于停滞状态,我们就不能希望在那里找到极高的工资
  • 劳动者不缺少,雇主就不会相互竞争:用来支付工资的资金(居民的收入和资本),如果数世纪不变,那么每年锁雇佣的劳动者人数很容易不变、甚或还有剩余
  • 劳动者增加,就业机会不足,劳动者之间,不得不相互竞争

如果一个国家土地肥沃,人口又经大大减少,因而生活资料并不十分困难,可是年年仍不免有三四十万人因饥饿而濒于死亡,我们就可以断言,那是因为该国指定用来维持贫困劳动者的资金正在迅速减少

劳动报酬优厚,是国民财富增进的必然结果,同时又是国民财富增进的自然征候。
反之,贫穷劳动者生活维持费不足,是社会停滞不进的征候,而劳动者处于饥饿状态,乃是社会急速退步的征候。
  • 劳动工资不受最低生活所需要的数额的支配,而受工作的数量及其假定价值的支配

  • 劳动价格的变动,无论就时间说或就地方说,不但不与食品价格的变动一致,而且往往正相反

任何地方的劳动价格,都不能极正确地确定

  • 贫困虽不能阻止生育,但极不利于子女的抚养

  • 各种动物的增殖,自和其生活资料成比例。

然而,在文明社会,只有在下等人中间,生活资料不够才能限制人类进一步繁殖,因此,象对其他商品的需求必然支配其他商品的生产一样,对人口的需求也必然支配人口的生产。生产过于迟缓,则加以促进;生产过于迅速,则加以抑制。

充足的劳动报酬,既是财富增加的结果,又是人口增加的原因。
也许值得指出:

不是在社会达到绝顶富裕的时候,而是在社会处于进步状态并日益富裕的时候,贫穷劳动者,即大多数人民,似乎最幸福、最安乐。在社会静止状态下,境遇是艰难的;在退步状态下,是困苦的。进步状态实是社会各阶级快乐旺盛的状态。静止状态是呆滞的状态,而退步状态则是悲惨的状态。

丰富的生活资料,使劳动者体力增进,而生活改善和晚景优裕的愉快希望,使他们益加努力。所只,高工资地方的劳动者,总是比低工资地方的劳动者活泼、勤勉和敏捷

在工资按件计算时,许多劳动者往往没几年就把身体搞垮了

大多数人在连续数天紧张的脑力或体力劳动之后,自然会强烈地想要休息。这欲望 ,除非受到暴力或某种强烈需要的抑制,否则是几乎压制不住的。天性要求,在紧张劳动之后,有一定程度的纵情 快乐,有时只是悠闲自在一会,有时却是闲游浪荡和消遣娱乐。如不依从这要求,其结果常是很危险的,有时是致命的,不然,迟早亦会产生职业上的阵殊疾病。如果雇主听从理性及人道主义的主宰,就不应常常鼓励劳动者勤勉,应当要他们适度地工作。

我相信,在各个行业,一个能工作适度的人,能够继续不断工作,不仅长期保持健康,而且在一年中做出比其他人更多的工作。

雇主们认为,物价高昂的年度,对他们的事业更为有利

各种居主,在物价高昂的年度,和劳动者订结契约,比在物价低廉的年度更为有利,而且觉得,劳动者在前一场合,比在后一场合,更为恭顺,更愿依靠他们

劳动的货币价格,必然受两种情况的支配:
  • 其一,是对劳动的需求;
  • 其二,是生活必需品和便利品的价格。
机械的参与,降低了获取物资的成本

第九章 论资本利润

资本利润的增减,与劳动工资的增减,同样取决于社会财富的增减。但财富状态对两者的影响却大不相同。

利润极易变动,经营某特定行业的人,未必都能够说出他的每年平均利润是多少。

  • 所经营的那些商品价格的变动的影响
  • 受他的竞争者和顾客运气的好坏
  • 商品在海陆运输上甚或在堆栈内所可能遭遇的许许多多意外事故的影响
  • 一国内资本的一般利润,必定随着其市场的一般利息率的变动而变动。
  • 利息率下落,利润必随着下落
  • 利息率上升,利润必随着上升
  • 在大都市经营一种行业,往往比乡村需墓更多的资本
  • 各种行业上所使用的资本的庞大和富裕的竟争者人数的众多

  • 都市的劳动工资,一般都比农村高

  • 在没有充分资本来雇用全体劳动者的偏僻地方,一般人民为获得职业而相互竞争,于是劳动工资降落,而资本利润增高。

  • 强行抑制法定利息率的目的,在于为减低公债利息率做准备

  • 可是利润减少,乃是商业繁盛的自然结果,或是所投资本比以前更多的自然结果。

  • 繁荣地区的资本已增加到投在本国适当生产上不能得相当利润的程度,但不表示商业衰退

勤劳的国家和勤劳的个人都一样。大资本利润虽低,但比高利润的小资本,一般增加得更为迅速。俗语说,货币产生货币。已经取得了少许,不愁不能取得更多。最困难的是这少许的取得

  • 法律如果不强制人们履行契约,出借人收回借款的不确定性,就使他索取破产者在借款时通常需要付出很高的利息

最低的普通利息率,和最低的普通利润率一样,除了补偿贷借容易遇到的意外损失外,还须有剩余。如果无此剩余,那未出借资金的动机,就只能是慈善心或友情了。

  • 在财富已达到极度,几乎一切人都得成为实业家,都有从事某种产业的必要。

在财富已达到极度、而且用在各种行业上的资本都已达到最大限度的国家,普通纯利润率便很低,因而这种利润所能负担的普通市场利息率也很低

  • 利润率低得多时,也许不能以一半作为利息;
  • 利润率高得多时,就可以一半以上作为利息。
  • 高利润抬高生产物价格的倾向,比高工资大得多

  • 商品价格中归于工资的那一部分,在一切制造阶段,按算术级数递次增加

工资每日提高2便士,工资增长:生产一单位产品的工作人数 X 工作日数 X 2便士

  • 商品价格中归于利润的那一部分,在一切制造阶段,就按几何级数递次增加

若雇佣所有工种工人的所有雇主利润都太高百分之五,

梳麻工x(100%+5%) 、纺工x(100%+5%)等等

  • 我国商人和制造者,对于高工资提高物价、从而减少国内外销路的恶果,大发牢騷;
  • 但对于高利润的恶果,他们却只字不谈。

第十章 论工资与利润随劳动与资本用途的不同而不同

不同的劳动和资本用途的利害,总的说来,在同一地方内,必然完全相等,或不断趋于相等

  • 各地的货币工资及货币利润,都随劳动和资本用途的不同而大不相同的原因:
第一节,起因于职业本身性质的不均等
  • 第一,职业本身有愉快的有不愉快的
    • 劳动工资因业务有难易、有污洁、有尊卑而不相同
    • 在进步社会内,把别人消遣的事当作职业的人,都是极贫苦的
    • 就金钱得利说,考虑到各方面,从事轻松职业的报酬一般都很有限。反之。在卑贱的职业上,情形正相反
    • 不愉快和不名誉对资本利润的影响,和它们对劳动工资的影响相同
  • 第二,职业学习 有难有易,学费有多有少

    • 精巧艺术和自由 职业的学习 需要更长时间和更大费用
    • 但资本利润,却不大受使用资本的那一行业学习 难易的影响
      1
      大都市通常所用的各种投资方法,就学习 难易的程度说,似乎完全相等
  • 第三,工作有安定的有不安定的

    • 泥水匠和砖匠所得却大抵有普通劳动工资的一倍半乃至两倍。
    • 如果除补偿职业上一切不适意情况外还有剩余,那末在一个没有垄断特权的职业里,不久必有许许多多竞争者出现,很快就使其工资率降落下来
    • 资本是否固定地使用,不取决于行业,而取决于经营行业的人。
  • 第四,职业所须担负的责任有重有轻

    一个人仅仅使用自己资本经营生意,他就没受到什么委托。至于他能否由他人取得信用,不取决于他所经营的行业的性质,而取决于他人对他的财产、正直和智虑的意见是怎样

  • 第五,成功的可能性有大有小

    例如,送子学作鞋匠,无疑他能学会制鞋的技术;但若送子学法律,那末精通法律并能靠法律吃饭的可能性至少是二十对一

  • 就大部分机械职业说,成功几乎都是有把握的,但就自由职业说,却是很没有把握的

正因为我们鄙视他们的人格,所以要厚酬他们的才能

  • 身体精神相当健旺的人,对自己的幸运,总不免抱有几分自信。
  • 每一个人,对得利的机会,都或多或少地作了过高的评价,
  • 而大多数人,对损失的机会,作了过低的评价。
  • 身体精神相当健旺的人,对于损失的机会,很少作过高的评价。
  • 轻视危险和奢望成功的心理,一生中只选择职业的青年时期最为活跃
  • 冒险生活的危险和九死一生,并不使青年人的勇气受挫折,有时似乎反鼓励他们去选择这类职业

使劳动工资各不相同的五种情况,只有两种影响到资本利润,那就是工作是愉快还是不愉快,是安全还是危险

资本的普通利润,虽随危险程度增高而增高,但增高程度未必和危险程度都成比例

零售商及批发商的资本利润,虽在都市一般比小市镇和农村小,但以小资本开始经营而发大财的人,在都市常可看到,而在小市镇和农村却几无一人

  • 使不同用途所有厉害均等的必备条件:

要使不同用途所有利害能有这样的均等,那末即在最自由 的地方,亦须具备三个条件:

  • 第一,那些用途,必须在那地方及其附近,为人所周知,而且确立很久。

    • 在其他情况都相同的地方,新行业的工资大都高于旧行业
      • 新商业在不为人知时,利润高,众所周知时,利润降低

    新的制造业、商业或农业经营,总是一种投机,而计划者期望由此获得非常的利润。这种利润,有时是很大的,但有时,也许是很小的;

  • 第二,那些用途必须处在普通状态,即所谓自然状态。

    • 需求紧张时价高、需求少时价低
  • 第三,那些用途,必须是使用者唯一用途或主要用途。

当某一个人依某一种职业谋生,而那职业并不占有他的大部分时间时,他往往就愿意在间暇期间从事另一种职业,而他由此所得的工资,虽低于按照那工作性质所应当有的工资,他也愿意接受。

欧洲政策主要是依以下三种方式促成这样的不均等的:

  • 第一,限制某些职业中的竞争人数,使共少于原来愿意加入这些职业的人数;
  • 第二,增加另一些职业上的竞争,使超越自然的限度;
  • 第三,不让劳动和资本自由 活动,使它们不能由一职业转移到其他职业,不能由一地方转移到其他地方

有人说,为着更好地管理行业,同业组合是必要的。这是全无根据的话。
对职工的有效和真正的监督,不是他们所属的组合的监督,而是他们的顾客的监督。使职工不敢欺诈懈怠的,乃是对失业的恐惧。排外的组合,必然削弱这种监督力量。有了排外的组合,一批工人,不论好坏,都得雇用

  • 无论什么时候,要是法律企图规定工资,其结果总是使工资减低,而不使它增高。

全无常俸的律师和医师这些职业说,如果也有那么多的人由公费教育,那末这些职业上的竞争,不久就变得非常激烈,大大削减他们金钱上的报酬。这样一来,以自费教育子弟,从事这些职业,就不值得。

这些职业,将完全由公共慈善团 体所培养的人士充当。他们人数众多而且贫穷,一般都满足于极微薄的报酬。结果,律师和医师这些职业,就不能象现在那样受尊重。

细想

发表于 2018-05-12   |  

睡后收入就是不需要花费多少时间和精力,也不需要照看,就可以自动获得的收入。

要真正快速积累财富,不要总想着靠那点死工资去赚钱,而是要努力增加自己的睡后收入。

我们总习惯于走进一个误区,只想着单靠自己赚钱,而从来没有想过让别人帮自己赚钱。

自己一个人赚钱,赚起来非常难,而雇佣一帮人帮你赚钱,你睡觉的时候依然有收入,这就是从量变到质变的区别了。

老板和员工最本质的区别是什么?

一个是用钱去买员工的时间,一个是牺牲时间去赚老板的钱。

想要真正获得财务自由的人,一定要在被动收入上多花心思,靠自己主动收入实现财务自由的过程实在太漫长了。

一个人的思维方式决定了他的格局,他的格局多大,他的成就就有多大。

我现在体力、知识结构可能不如你们;但是心态会比大家好,你可能十枪才打中两枪,我可能十枪只拔出来一次就会打中。

Windows10

发表于 2018-03-26   |  

80端口被占用

步骤如下:

  1. 以管理员身份运行cmd
  2. 输入:net stop http
  3. 完成后输入:sc config http start=disabled

其它方法:(若80端口不能被解除占用,可使用以下解决方案)

方案一:

  1. Ctrl + x ,然后选择 “计算机管理” ,展开 “服务和应用程序” ,找到 “服务”;
  2. 找到“World Wide Web Publishing Service” ,双击打开后,将启动类型改为手动,更改服务状态为 “停止”;
  3. 如果80端口仍然被占用,则还需要停止以下几个服务:

    “SSDP Discovery”

    “Print Spooler”

    “HomeGroup Provider”

    “Function Discovery Resource Publication”

    “Function Discovery Provider Host”

方案二:

  1. 以管理员身份运行regedit;
  2. 打开键值:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP;
  3. 在右边找到Start这一项,将其改为0;
  4. 重启系统,System进程不会占用80端口.

设计注意事项

发表于 2018-03-22   |  
  1. 留意数据量大时,对用户的影响
  • 例如:日常工作里对部门、人员有个默认的排序,而涉及到某一个具体业务时想查看哪些反馈、哪些未反馈,不方便对比

Redis从入门到精通

发表于 2017-12-19   |  
1
2
3
4
5
6
7
8
9
Redis
├─初识redis
│ ├─Redis概念
│ ├─Redis安装
│ └─Redis的数据类型
│
└─操作redis
├─PHP的redis拓展安装
└─PHP操作redis的五种类型

什么是Redis

  • Redis是远程的
  • Redis是基于内存的
  • Redis是非关系型数据库

Redis的应用场景

  • 缓存
  • 队列:List的push、pop
  • 数据存储

Redis的安装

安装环境

  1. 服务器环境:Linux / CentOS release 6.8

    cat /etc/redhat-release#查看系统版本

  2. 下载源码安装,Redis版本(2.8.13 http://download.redis.io/release)

  3. 预装软件(gcc,tcl)

服务端安装使用

  1. tar -xf redis-2.8.13.tar.gz
  2. cd redis-2.8.13 后 make
  3. make install (/usr/local/redis-server)
  4. redis-server启动

客户端的安装

Redis的五种数据类型

数据类型 存储的值 读写能力
String 可以是字符串、整数或浮点,统称为元素 对字符串操作对整数类型加减
List 一个序列集合且每个节点都包好了一个元素 序列两端推入、或弹出元素修剪、查找或移除元素
Set 各不相同的元素 从集合中插入或者删除元素
Hash 有key-value的散列组,其中key是字符串,value是元素 按照key进行增加删除
Sort Set 带分数的score-value有序集合,其中score为浮点,value为元素 集合插入,按照分数范围查找

PHP的Redis拓展安装

PHP操作Redis

文档地址

Redis类的命名空间是根

phpredis的命令和参数基本和redis.io中的实际命令对应

连接redis

$redis = new \Redis();
$redis->connect('127.0.0.1', 6379);

String操作

$redis = new \Redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete("string1");
$redis->set("sting1","val1");
$val = $redis->get("string1");
var_dump($val);

$redis->set("string1",4);
$redis->incr("string1",2);
$val = $redis->get("string1");
var_dump($val);

list类型操作

$redis = new \Redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete("list1");

$redis->lPush("list1","A");
$redis->lPush("list1","B");
$redis->lPush("list1","C");

$val = $redis->rPop("list1");
var_dump($val);

set类型操作

$redis = new \Redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete("set1");

$redis->sAdd("set1","A");
$redis->sAdd("set1","B");
$redis->sAdd("set1","C");
$redis->sAdd("set1","C");

$val = $redis->sCard("set1");
var_dump($val);//3

$val = $redis->sMembers("set1");
var_dump($val);//array

hash类型操作

$redis = new \Redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete("driver1");

$redis->hSet("driver1","name","mingming");
$redis->hSet("driver1","age",25);
$redis->hSet("driver1","sex",1);

$val = $redis->hGet("driver1",'name');
var_dump($val);

$val = $redis->hMGet("driver1",array("name","age"));
var_dump($val);

sort set类型操作

$redis = new \Redis();
$redis->connect('127.0.0.1', 6379);
$redis->delete("zset1");

$redis->zAdd("zset1",100,"xiangming");
$redis->zAdd("zset1",90,"xianghong");
$redis->zAdd("zset1",93,"xiangwang");

$val = $redis->zRange("zset1",0,-1);//低到高
var_dump($val);

$val = $redis->zRevRange("zset1",0,-1);//从高到低
var_dump($val);

Linux 命令

发表于 2017-12-05   |  
  1. 查看系统是64位还是32位:getconf LONG_BIT
  2. 列出所有的版本信息:lsb_release -a
  3. CentOs(安装好默认只打开了22端口)防火墙端口开放
  4. 查看磁盘大小: df -h

短信测试

  • ?LCMSPID=x7hndqIVKxThbAvHyXt8OHC36r47IZxjQ8fmwhI26MJZpGZyV–779-WQiAp5zLukCZfog

domain=1

  • ?LCMSPID=eUVczNY-D1xRjGN6VclfgfmUaTzjORgwsXlJsabd3B7dv8-Sx_uvXJFGtzsLn4Tr91PLs2kDEHC3HHUx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
try {
$hostname='192.168.1.15';
$port=1433;//端口
$dbname="dbname";//库名
$username="sa";//用户
$pw="sa";//密码
$dbh= new PDO("dblib:host=$hostname:$port;dbname=$dbname","$username","$pw");
} catch (PDOException $e) {
echo"Failed to get DB handle: ".$e->getMessage() ."n";
exit;
}
echo'connent MSSQL succeed';
$stmt = $dbh->prepare("insert into dbo.sms(createtime,username,CustomerName,CustomerPhone,smstext,FType,GroupID) values('2017-12-11 11:45:00','sw_hyxt','曾权','18586912652','联通号码测试',2,'20171211071213')");
$stmt->execute();
while ($row = $stmt->fetch()) {
print_r($row);
}
unset($dbh);
unset($stmt);

linux的rpm包下载地址

1
2
3
4
5
6
7
//15286117396
insert into sms(createtime,username,CustomerName,CustomerPhone,smstext,FType,GroupID) values('2017-12-11 11:18:00','sw_hyxt','曾权','15285117396','移动号码测试',2,'20171211071213')
insert into dbo.sms(createtime,username,CustomerName,CustomerPhone,smstext,FType,GroupID) values('','sw_hyxt','曾权','15285117396','移动号码测试',2,'20171211071213')
//18586912652
insert into sms(createtime,username,CustomerName,CustomerPhone,smstext,FType,GroupID) values('2017-12-11 11:18:00','sw_hyxt','曾权','18586912652','联通号码测试',2,'20171211071213')
insert into dbo.sms(createtime,username,CustomerName,CustomerPhone,smstext,FType,GroupID) values('2017-12-11 11:45:00','sw_hyxt','曾权','18586912652','联通号码测试',2,'20171211071213')
  1. 按拓展名搜索

http://rpmfind.net/linux/rpm2html/search.php?query=mysql&submit=Search+...&system=&arch=

  1. 按系统来下载:

http://rpmfind.net/linux/RPM/centos/

重启linux

1
shutdown -r now #重启系统

文件操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
/* 一.通过文件名查找法: */
#假设你忘记了httpd.conf这个文件在系统的哪个目录 下,甚至在系统的某个地方也不知道
find / -name httpd.conf
#在/etc目录下找
find /etc -name httpd.conf
/* 二.无错误查找技巧: */
#普通用户没有某些目录的权限,会提示"Permissiondenied."(禁止访问),系统将无法查找到需要的文件,
#为了避免这样的错误,我们可是使用转移错误提示的方法尝试着查找文件,例如输入:find / -name access_log 2>/dev/null
#系统执行这个命令后,遇到错误的信息就直接输送到stderrstream2 中,access_log2就是表明系统将把错误信息输送到stderrstream2中,
#/dev/null是一个特殊的文件,表明空的或者错误的信 息,这样查询到的错误信息将被转移了,不会再显示了。
find / -name access_log 2>/dev/null
/* 三.根据部分文件名查找方法: */
#知道某个文件包含有srm这3个字母,那么要找到系统中所有包含有这3个字母的文件是可以实现
find /etc -name '*srm*'
/* 四.根据文件的特征查询方法: */
#只知道某个文件的大小,修改日期等特征
find /-size 1500c #c表示以bytes为单位
find /-size+1500c #大于1500字节的文件都显示出来
find / -amin -10 # 查找在系统中最后10分钟访问的文件
find / -atime -2 # 查找在系统中最后48小时访问的文件
find / -empty # 查找在系统中为空的文件或者文件夹
find / -group cat # 查找在系统中属于groupcat的文件
find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件
find / -mtime -1 #查找在系统中最后24小时里修改过的文件
find / -nouser #查找在系统中属于作废用户的文件
find / -user fred #查找在系统中属于FRED这个用户的文件
关书籍可以知道所有find命令的查找函数。
  -amin n
  查找系统中最后N分钟访问的文件
  -atime n
  查找系统中最后n*24小时访问的文件
  -cmin n
  查找系统中最后N分钟被改变状态的文件
  -ctime n
  查找系统中最后n*24小时被改变状态的文件
  -empty
  查找系统中空白的文件,或空白的文件目录,或目录中没有子目录的文件夹
  -false
  查找系统中总是错误的文件
  -fstype type
  查找系统中存在于指定文件系统的文件,例如:ext2 .
  -gid n
  查找系统中文件数字组 ID 为 n的文件
  -group gname
  查找系统中文件属于gnam文件组,并且指定组和ID的文件。

列出所有端口

1
netstat -ntlp

检测端口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/* 一、通过nc命令 */
nc -v -w 10 -z 172.16.0.1 8080
// 扫码172.16.0.1的8080端口
/*
-v 显示指令执行过程
-w <超时秒数> 设置等待连线的时间
-z 使用0输入/输出模式,只在扫码通信端口时使用
*/
/* 二、通过其他方式 */
http://www.jb51.net/article/78082.htm
/* 三、windows下的检测方式 */
telnet ip port
http://blog.csdn.net/u013991521/article/details/54020301

ping 59.215.192.162
ping 59.215.244.10
ping 59.215.223.193

traceroute -n 59.215.192.162
traceroute -n 59.215.244.10
traceroute -n 59.215.223.193

防火墙基本操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#关闭防火墙
/etc/init.d/iptables stop
#停止服务
service iptables stop
#查看防火墙信息
/etc/init.d/iptables status
#重启防火墙以便生效(或者直接重启系统)
/etc/init.d/iptables restart
#将更改进行保存
/etc/rc.d/init.d/iptables save

Centos 7 防火墙操作:

http://blog.csdn.net/qq_32606647/article/details/70332386

双网卡双网关配置

http://blog.csdn.net/yuanchao99/article/details/18992567

开启端口(以80端口为例)

方法一:

1
2
3
4
5
6
7
8
#写入修改
/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
#保存修改
/etc/init.d/iptables save
#重启防火墙,修改生效
service iptables restart

方法二:

1
2
3
4
5
6
7
8
#打开配置文件
vi /etc/sysconfig/iptables
#加入如下语句
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
#重启防火墙,修改完成
service iptables restart

关闭端口

方法一:

1
2
3
4
5
6
7
8
#写入修改
/sbin/iptables -I INPUT -p tcp --dport 80 -j DROP
#保存修改
/etc/init.d/iptables save
#重启防火墙,修改生效
service iptables restart

方法二:

1
2
3
4
5
6
7
8
#打开配置文件
vi /etc/sysconfig/iptables
#加入如下语句
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j DROP
#重启防火墙,修改生效
service iptables restart

关闭防火墙

1
2
#此方法源自网络,未实验,安全考虑拒绝使用此方法
chkconfig –level 35 iptables off

OpenSSH普通用户无法登陆的几种情况

  • OpenSSH普通用户无法登录的几种情况的解决方法:
    http://blog.csdn.net/huzhenwei/article/details/7486737

http://www.linuxidc.com/Linux/2012-05/59457.htm

  • connection refused的解决办法:
    http://blog.csdn.net/jayxujia123/article/details/34125791

  • ssh遇到port 22:No route to host问题的解决方法
    http://www.landui.com/help/show-2822.html

觉得甚是差异,估计是虚拟机装了有问题,就把虚拟机中的防火墙给清了一下,发现可行。

Linux如何加载(优)U盘

1,以root用户登陆
先加载USB模块 modprobe usb-storage
用fdisk -l 看看U盘的设备
假如U盘是sda1

2,确定在 目录 /mnt 下建立了 文件夹 /usb,如果未建立可键入一下命令:mkdir /mnt/usb_disk,成功后进行下一步。

3,载入 u 盘,需键入以下命令:mount /dev/sda /mnt/usb_disk
成功后,即可使用 u 盘了, 文件就在目录 /mnt/usb 下。

4,卸载u盘:在使用完u盘后,在拔出前需要先键入卸载U盘命令
命令如下:umount /mnt/usb

//nginx安装步骤
http://blog.csdn.net/huaishuming/article/details/54345826

nginx配置proxy_pass代理转发

在nginx中配置proxy_pass代理转发时,如果在proxy_pass后面的url加/,表示绝对根路径;如果没有/,表示相对路径,把匹配的路径部分也给代理走。

假设下面四种情况分别用 http://192.168.1.1/proxy/test.html 进行访问。

第一种:
location /proxy/ {
proxy_pass http://127.0.0.1/;
}
代理到URL:http://127.0.0.1/test.html

第二种(相对于第一种,最后少一个 / )
location /proxy/ {
proxy_pass http://127.0.0.1;
}
代理到URL:http://127.0.0.1/proxy/test.html

第三种:
location /proxy/ {
proxy_pass http://127.0.0.1/aaa/;
}
代理到URL:http://127.0.0.1/aaa/test.html

第四种(相对于第三种,最后少一个 / )
location /proxy/ {
proxy_pass http://127.0.0.1/aaa;
}
代理到URL:http://127.0.0.1/aaatest.html

123
北辰

北辰

29 日志
15 标签
© 2021 北辰
由 Hexo 强力驱动
主题 - NexT.Mist