Tokinx 发布的文章

<pre> 元素可定义预格式化的文本。被包围在 pre 元素中的文本通常会保留空格和换行符。而文本也会呈现为等宽字体。

<pre> 标签的一个常见应用就是用来显示源码。

而经常遇到的问题是:如果一句代码很长的情况,结果会造成页面撑开或者代码超出边界,非常难受。

overflow:hidden 那么会将原来的代码隐藏掉导致显示不全

而如果用 overflow:auto 则经常出现两个滚动条(右部和底部),阅读不方便还不美观。

如图:

今天折腾了一个好久,才搞出解决 <pre> 的代码块自动换行的办法:

先尝试我们经常会使用的强制换行:word-wrap: break-word;

好像很完美,谨慎的我换着浏览器看了下,结果发现:IE,OP,Chrome,Safari都可以,Firefox就悲剧了。

纳尼,这是什么情况,同样是现代浏览器,FF竟然这么不争气。

仔细查了一下关于换行的css,原来还有 white-space ,丢到浏览器里试一试,填几个 参数 看看效果

加上了 white-space:pre-wrap; 发现Firefox可以神奇的换行了,大功告成!、

最后代码如下:

pre {
    white-space: pre-wrap;
    word-wrap: break-word;
}

效果如下:

这样就没有了底部的那个左右滚动条了,看代码的时候就可以心无旁骛的乡下滚动啦

因为网上较多教程是Apache+Tomcat的配置方案,但是我经常要处理php项目,所以简单根据原教程加了PHP支持,使其可以同时支持PHP和JSP程序

Apache、Tomcat和PHP就不过多介绍了,直接进入正文

安装包下载

Apache 2.4:http://httpd.apache.org/download.cgi

Tomcat 8.0:http://tomcat.apache.org/download-80.cgi#8.0.38

JDK 8 :http://www.oracle.com/technetwork/java/javase/downloads/index.html

PHP :http://windows.php.net/qa

mod_jk.mo 连接包:http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/windows/

Apache、Tomcat、JDK、PHP的版本的版本自行选择搭配,配置的时候注意一下路径即可,重点是mod_jk.mo要根据Apache选择对版本。

我的搭配方案是:Win7 x64 + Apache2.4 + Tomcat8.0 + JDK8 U5 + PHP5.5beta

mod_jk.mo我选择的是:tomcat-connectors-1.2.36-windows-x86_64-httpd-2.4.x

安装JDK

下载好jdk后,双击安装即可,注意安装目录,如果C盘足够,就丢C盘省事儿吧

安装完成JDK之后,需要设置环境变量。

打开 “我的电脑(右击) --> 属性 --> 高级系统设置 --> 环境变量”,增加以下配置 :

JAVA_HOME      F:\Program Files\Java\jdk1.8.0_05  ##写入JDK安装的路径
PATH           ;%JAVA_HOME%\bin  ##在Path原有值上加入此值
CLASSPATH      ;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar  ##在classpath的原有值上加入此值

安装Apache

安装过程自行百度吧,建议下载的时候下载压缩包,不要 下载exe安装包

安装之后,打开apache安装目录/conf,编辑httpd.conf

Listen 80  ##端口,建议修改,参考:8000
...
DocumentRoot "F:\webapp"  ##网站目录
...
Directory "F:\webapp"  ##网站目录
...
DirectoryIndex index.html index.jsp index.php index.htm  ##入口文件

完成配置后,启动Apache,在 "F:\webapp" 添加静态页面 index.html。

最后打开 http://127.0.0.1:端口/index.html 测试 Apache能否正常运行。

安装Tomcat

运行Tomcat安装包,安装完成后,添加环境变量

打开 “我的电脑(右击) --> 属性 --> 高级系统设置 --> 环境变量”,增加以下配置 :

TOMCAT_HOME      F:\Program Files\Apache Software Foundation\Tomcat 8.0
PATH             ;%TOMCAT_HOME%\lib;%TOMCAT_HOME%\lib\servlet-api.jar;%TOMCAT_HOME%\lib\jsp-api.jar
一定要注意PATH的添加,是使用英文分号隔开不同的变量的。

Tomcat 默认使用8080端口处理HTTP请求。

完成设置后,输入地址http://127.0.0.1:8080 就可看到 Tomcat 的管理页面。

整合 Apache+Tomcat

在 Apache、Tomcat 都能正常运行的情况下,把 mod_jk.mo 拷贝到 "/Apache安装目录/modules"

在 “/Tomcat安装目录/conf ” 文件夹下增加 workers.properties 文件,输入以下内容:

workers.tomcat_home="F:\Program Files\Apache Software Foundation\Tomcat 8.0\"

#workers.java_home="F:\Program Files\Java\jdk1.8.0_05\"
#让mod_jk模块知道jdk路径

workers.java_home="C:\Program Files\Java\jre1.8.0_101\"
#让mod_jk模块知道jre路径

ps=\
#当前目录

worker.list=ajp13
#这里是关键,名字要和httpd.conf的一致。如果这里改了httpd.conf也要改。

worker.ajp13.port=8009
#工作端口,tomcat的jk监听端口,可以查看Server.xml中有port="8009"

worker.ajp13.host=localhost
#Tomcat所在机器,如果安装在与apache不同的机器则需要设置IP

worker.ajp13.type=ajp13
#协议类型,不能改变,会出问题

worker.ajp13.lbfactor=1
#负载平衡因子

注意修改路径,一定要注意worker.list的值,可以自定义,但是修改的话httpd.conf里也要修改

然后来修改Apache的配置文件httpd.conf

在结尾添加下面代码,注意根据你的路径修改一下:

#加载JK模块
LoadModule jk_module "F:/www/Apache24/modules/mod_jk.so"

#指定先前配置的worker文件
JkWorkersFile "F:/Program Files/Apache Software Foundation/Tomcat 8.0/conf/workers.properties"

#日志文件
JkLogFile "F:/www/Apache24/logs/mod_jk.log"

#添加java支持
JkMount /*WEB-INF ajp13
JkMount /*.jsp ajp13
JkMount /servlet/* ajp13
JkMount /*.do ajp13
JkMount /*.action ajp13
JkMount /Javenmy/* ajp13

重启Apache,把Tomcat目录下\webapps\ROOT里的文件全部复制一份放到 F:\webapp 目录里

访问你的apache地址(我的apache端口是8000):http://127.0.0.1:8000

基本上时大功告成了,但是我们还没有PHP支持呢

安装PHP并整合到Apache+Tomcat环境内

版本号可以自行选择,安装成功后,修改Apache的httpd.conf

在结尾增加php支持,代码如下(注意修改目录):

# php5 support
LoadModule php5_module "F:/www/php-5.5.0beta2/php5apache2_4.dll"
AddHandler application/x-httpd-php .php
# configure the path to php.ini
PHPIniDir "F:/www/php-5.5.0beta2"

保存配置文件,重启Apache,放一个php文件到 F:\webapp 目录

访问你的apache地址(我的apache端口是8000)

同时访问:http://127.0.0.1:8000/index.phphttp://127.0.0.1:8000/index.jsp

注意地址栏的访问文件,如上图就代表成功了。

参考文章:http://www.cnblogs.com/leslies2/archive/2012/07/23/2603617.html

首先推荐安装 lamp.sh 的LAMP一键包,简单方便,安装也很快。

单个站点配置SSL可以 参考这里

其实多站点SSL跟单个站点SSL差不多。

1、安装openssl,命令如下:

yum install -y openssl openssl-devel   #CentOS 下

apt-get install -y openssl   #Debian 或 Ubuntu 下

2、申请SSL证书

市面上免费的SSL还是比较多的,但是不建议wosign和startssl,我使用的是腾讯云的免费SSL,申请后会获得一个csr文件和一个key文件

付费的则五花八门了,这里就不再赘述。

申请过程省略。

3、部署证书

在 /usr/local/apache/conf 路径下新建一个 “ssl” 目录,把你的证书全部上传到这个ssl目录下。

进入 /usr/local/apache/conf/vhost 找到你网站的配置文件,比如 fiyfile.com.conf

编辑成如下格式:

<VirtualHost *:80>
ServerName fiyfile.com
ServerAlias fiyfile.com www.fiyfile.com
DocumentRoot /data/www/fiyfile.com
DirectoryIndex index.php index.html index.htm
<Directory /data/www/fiyfile.com>
Options +Includes -Indexes
AllowOverride All
Order Deny,Allow
Require all granted
php_admin_value open_basedir /data/www/fiyfile.com:/tmp:/proc
</Directory>
ErrorLog  /data/wwwlog/fiyfile.com/error.log
TransferLog  /data/wwwlog/fiyfile.com/access.log
</VirtualHost>

Listen 443
SSLPassPhraseDialog  builtin
SSLSessionCache  "shmcb:/usr/local/apache/logs/ssl_scache(512000)"
SSLSessionCacheTimeout  300

<VirtualHost *:443>
DocumentRoot /data/www/fiyfile.com
ServerName fiyfile.com
ServerAlias www.fiyfile.com

SSLEngine on
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite ALL:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

SSLCertificateFile /usr/local/apache/conf/ssl/fiyfile.com.crt
SSLCertificateKeyFile /usr/local/apache/conf/ssl/fiyfile.com.key


BrowserMatch "MSIE [2-5]" \
    nokeepalive ssl-unclean-shutdown \
    downgrade-1.0 force-response-1.0

<Directory /data/www/fiyfile.com>
    Options -Indexes +FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>
</VirtualHost>

保存后,重启 Apache

多个站点的 SSL 都按照此方法配置即可,请确保证书路径正确。

一直没有很好的备份习惯,每次写一些东西丢掉了都会很傻逼的去重新写一份,真是劳神伤力,想着有没有什么东西可以自动备份,随时可以找回历史数据?我第一个想到了GIT,因为可以方便的校对改了哪里,但是对git却并不熟悉,基友推荐我用DropBox,我才如梦方醒,想起我竟然还有这么一个神器,一直放着却不使用。

说干就干,在mac里的AppStore里搜,竟然没有搜到,想必是中国区屏蔽了吧,去官网看看。

https://www.dropbox.com/install

因为一直开着shadowsocks的缘故,所以 下载->安装->运行 一气呵成,不过不知怎么的,死活就是显示“无法连接”然后没多会儿提示“网络有问题,请重试”,可是我后台开启着shadowsocks哇,浏览器也能访问官网,为什么就是无法使用客户端呢?

一番google,多数文章都说是dns污染问题,我换了几个dns,依然无果,看了下mac的网络,有“代理”一项

自动代理竟然不是空的,是不是客户端我也要设置一下呢?

继续干:

按照系统里的代理,端口号我设置成了8090,不过好像并无卵用,难道是我猜错了?我都有想放弃的念头了,不过无意间编辑本地PAC文件的时候,我有了一个新发现

纳尼,真正的端口号是1080嘛?试一试!

登录、同步,成功了!

心血来潮想做一个网站,具体干什么暂时还是不透露了,因为我也不确定能不能搞出来,这不,刚开始就踩到坑了。

这算是第一次近距离接触SQLite吧,算是脱离文本数据库的一小步(虽然SQLite也有类似文本数据库的味道),第一次用php+sql,操作起来有点小激动,按照教程来做,感觉无比顺利,成功完成了增删改查,于是打算开始着手写点什么,比如一个简单的记事本。

Runoob给的创建表的代码如下:

$sql =<<<EOF
            CREATE TABLE COMPANY (
                ID                 INT             PRIMARY KEY            NOT NULL,
                NAME          TEXT           NOT NULL,
                AGE              INT             NOT NULL,
                ADDRESS     CHAR(50),
                SALARY        REAL
            );
EOF;

然后数据是这么插入的:

$sql =<<<EOF
            INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
            VALUES (1, 'Paul', 32, 'California', 20000.00 );

            INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
            VALUES (2, 'Mark', 25, 'Rich-Mond ', 65000.00 );
EOF;

按照这种方式创建的表,再执行插入,我发现ID字段并不能自动增加,难道要每次都手动给一个ID?那岂不太坑了,于是想着当初学MSSQL的时候有自增ID这一说,上网搜了一下,发现了 INTEGER PRIMARY KEY AUTOINCREMENT 但是实际应用中,我怎么都没有正确插入值,疯狂郁闷。

事情真是莫名其妙,刚试了一下,竟然神奇的可以自增了,好吧,不管那么多了,能正常用就可以,下面列出我的代码,仅供参考:

<?php
//配置(创建)数据库
class MyDB extends SQLite3
{
     function __construct()
     {
            $this->open('test.db');
     }
}
$db = new MyDB();
if(!$db){
     echo $db->lastErrorMsg().'<br>';
} else {
     echo "卧槽,竟然打开了<br>";
}
/*
下面就要创建一个叫 COMPANY 的表,如果存在则插入,不存在则创建
-- 创建ID列,int类型,主键,自增
-- 昵称,text类型,不允许为空
-- 年龄
-- 地址,最多50字
-- 薪水
*/
$sql =<<<EOF
        CREATE TABLE COMPANY (
        ID              INTEGER             PRIMARY KEY          AUTOINCREMENT,
        NAME            TEXT            NOT NULL,
        AGE             INT             NOT NULL,
        ADDRESS         CHAR(50),
        SALARY          REAL
        );
EOF;

$ret = $db->exec($sql);
if(!$ret){
        echo $db->lastErrorMsg().'<br>';
} else {
        echo "不错,表(zi)创建成功了<br>";
}

     $sql =<<<EOF
            INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)
            VALUES ('Paulsada', 32, 'Calfornia', 200.00 );
EOF;

     $ret = $db->exec($sql);
     if(!$ret){
            echo $db->lastErrorMsg().'<br>';
     } else {
            echo "666,这条数据也插入成功了<br><br>";
     }


$sql =<<<EOF
        SELECT * from COMPANY;
EOF;

     $ret = $db->query($sql);
     while($row = $ret->fetchArray(SQLITE3_ASSOC) ){
            echo "ID = ". $row['ID'] . "<br>";
            echo "NAME = ". $row['NAME'] ."<br>";
            echo "ADDRESS = ". $row['ADDRESS'] ."<br>";
            echo "SALARY =  ".$row['SALARY'] ."<br><br>";
     }
     echo "简直没谁了,竟然从库里读出来了数据<br>";

     $db->close();
?>