紫悦博客

不进则退,退一步万丈悬崖!

0%

/**
 * 使用socket通过POST的方式来请求页面
 * $Author: liulipeng $
 * $Id: activity.php 17063 2012-07-12 15:45:46Z liulipeng $
 */
function virtualPost($url, $data) {
    $url = parse_url($url);
    if (!isset($url['port']))  $url['port'] = "";
    if (!isset($url['query'])) $url['query'] = "";
    $encoded = "";
    while (list($k,$v) = each($data)) {
        $encoded .= ($encoded ? "&" : "");
        $encoded .= rawurlencode($k)."=".rawurlencode($v);
    }
    $fp = fsockopen($url['host'], $url['port'] ? $url['port'] : 80);
    //发送
    fputs($fp, sprintf("POST %s%s%s HTTP/1.0\n", $url['path'], $url['query'] ? "?" : "", $url['query']));
    fputs($fp, "Host: $url[host]\n");
    fputs($fp, "Content-type: application/x-www-form-urlencoded\n");
    fputs($fp, "Content-length: " . strlen($encoded) . "\n");
    fputs($fp, "Connection: close\n\n");
    fputs($fp, "$encoded\n");
    //接受
    $line = fgets($fp,1024);
    //滤掉空行
    $results = "";
    $inheader = 1;
    while(!feof($fp)) {
        $line = fgets($fp,1024);
        //把剩余的头信息过滤掉
        if ($inheader && ($line == "\n" || $line == "\r\n")) {
        $inheader = 0;
        }elseif (!$inheader) {
        $results .= $line;
        }
    }
    fclose($fp);
    return $results;
}

Delete a line like eclipse CTRL+D (tested on Xcode 4.5.1) :

First of all, change these rights :

<span class="pln">sudo chmod </span><span class="lit">666</span> <span class="pun">/</span><span class="typ">Applications</span><span class="pun">/</span><span class="typ">Xcode</span><span class="pun">.</span><span class="pln">app</span><span class="pun">/</span><span class="typ">Contents</span><span class="pun">/</span><span class="typ">Frameworks</span><span class="pun">/</span><span class="typ">IDEKit</span><span class="pun">.</span><span class="pln">framework</span><span class="pun">/</span><span class="typ">Resources</span><span class="pun">/</span><span class="typ">IDETextKeyBindingSet</span><span class="pun">.</span><span class="pln">plist

sudo chmod </span><span class="lit">777</span> <span class="pun">/</span><span class="typ">Applications</span><span class="pun">/</span><span class="typ">Xcode</span><span class="pun">.</span><span class="pln">app</span><span class="pun">/</span><span class="typ">Contents</span><span class="pun">/</span><span class="typ">Frameworks</span><span class="pun">/</span><span class="typ">IDEKit</span><span class="pun">.</span><span class="pln">framework</span><span class="pun">/</span><span class="typ">Resources</span><span class="pun">/</span>`</pre>
Open `/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist` with Xcode himself and add this new entry :
<pre class="default prettyprint prettyprinted">`<span class="pln">deleteToBeginningOfLine</span><span class="pun">:,</span><span class="pln"> moveToEndOfLine</span><span class="pun">:,</span><span class="pln"> deleteToBeginningOfLine</span><span class="pun">:,</span><span class="pln"> deleteBackward</span><span class="pun">:,</span><span class="pln"> moveDown</span><span class="pun">:,</span><span class="pln"> moveToBeginningOfLine</span><span class="pun">:</span>

IDvrZ

Restart Xcode and open Xcode > Preferences > KeyBindings. Find your macro and define a shortkey :

7pR03

从 MySQL 5.5.3 开始,MySQL 支持一种 utf8mb4 的字符集,这个字符集能够支持 4 字节的 UTF8 编码的字符。

utf8mb4 字符集能够完美地向下兼容 utf8 字符串。在数据存储方面,当一个普通中文字符存入数据库时仍然占用 3 个字节,在存入一个 Unified Emoji 表情的时候,它会自动占用 4 个字节。所以在输入输出时都不会存在乱码的问题了。

由于 utf8mb4 是 utf8 的超集,从 utf8 升级到 utf8mb4 不会有任何问题,直接升级即可;如果从别的字符集如 gb2312 或者 gbk 转化而来,一定要先备份数据库。然后,修改 MySQL 的配置文件 /etc/my.cnf,修改连接默认字符集为 utf8mb4 ,然后在连接数据库以后首先执行一句 SQL: SET NAMES utf8mb4;。

  1. 修改my.cnf  或 my.ini
1
2
3
4
5
[mysqld]
character-set-server=utf8mb4

[mysql]
default-character-set=utf8mb4

修改后重启Mysql
登陆MYSQL, show variables like ‘character%’; 可以查看编码是否已经修改成功。

 
2. 修改数据库和数据表为相应的 utf8mb4 格式。

1
alter table TABLE_NAME convert to character set utf8mb4 collate utf8mb4_bin;

 
3. 在代码中,连接数据库成功后,执行

1
set names utf8mb4

56f51396744949

1、取得root权限

意义相当与windows中的超级管理员权限,甚至还要超出。root权限可以修改系统中的任何文件,不过对普通用户的意义不大,了解即可,不建议经常使用。

命令:sudo –s

然后屏幕显示“password:”,输入你的密码即可。

 

2、清除系统垃圾

类似与清除系统在运行中所产生的一些碎片文件,用于系统的维护,一个十分有用处的命令,只要有这个命令,就可以不使用任何系统垃圾清除软件了。

命令:sudo periodic daily weekly monthly

然后屏幕显示“password:”,输入你的密码即可。

 

3、文件权限变更

顾名思义,将一个文件的使用权限进行变更。

命令:chown   new owner   file_mame

这里的new owner指的是新拥有这个文件权限的使用者的名字,file_name指的是文件名。

例如: chown  root  LALA

就是指文件LALA只有超级管理员可以使用(当然超级管理员可以拥有任何文件的权限,只不过在这里举一个例子)。

 

4、进入目录(列出文件)命令

类似与dos下的cd命令。可以显示出某目录下的文件名。这个命令还可以加上不同的参数,用以显示出某目录下文件的特性。

命令:ls -参数 目录名

例子:ls -l Dsektop

这个例子就是显示出“Desktop”这个目录下所有的文件及其权限的命令。“-l”就是上面说到的参数。

“ls -l” 这个搭配比较有实用性,在下面我们会说到如何看懂用户对一个文件的权限,而首先就要靠“ls -l”命令来列出这些文件的权限属性。

 

5、如何阅读文件的权限

当你学会使用ls –l命令后,就可以各个目录下文件的读写权限,让我们先看看下面这个例子:

首先用ls –l命令

图1:

[![ad281396744846](http://www.zyue.top/wp-content/uploads/2015/04/ad281396744846.jpg)](http://www.zyue.top/wp-content/uploads/2015/04/ad281396744846.jpg)
 

 

然后会显示出Downloads下所有的文件,我们在这里只选取2个文件进行说明,如下图2所示:

[![6597559049331405782](http://www.zyue.top/wp-content/uploads/2015/04/6597559049331405782.jpg)](http://www.zyue.top/wp-content/uploads/2015/04/6597559049331405782.jpg)
 

 

文件的权限就从@前的10个字母来进行辨别,第一个字母d不用管,从第二个字母算起,从第2个字母到第4个字母的位置属于当前用户,然后记住表示当前用户字母u(在这里暂时沒有用,但我们在后面会讲到),第5至7个字母的位置属于组用户,组用户的字母是g,第8至10个字母的位置属于任何用户,用字母o表示。

在了解完不同用户拥有的位置后,我们再来看,这些字母代表什么。

字母r代表读,字母w代表写,字母x代表执行。

知道了这些后,我们回到图2

[![6597559049331405782](http://www.zyue.top/wp-content/uploads/2015/04/65975590493314057821.jpg)](http://www.zyue.top/wp-content/uploads/2015/04/65975590493314057821.jpg)
 

 

文件Dic在第2、3、4的字母是r、w、x,代表当前用户对此文件拥有读、写、执行的权限。而在第4到第10字母的为止都是“-”,代表组用户和其他用户对此文件没有任何权限。

那么我们也就很容易可以刊出文件Alumi by Joy Vincent的权限是:当前用户拥有读、写、执行的权限;组用户拥有读和运行的权限,没有写的权限,因为在第6个字母位置为“-”;其他用户也只拥有读和运行的权限。

6、程序的身份证号——PID

在Unix系统下,系统会给每一个运行的程序分配一个运行的“身份证号”,就是PID。它相当与windows系统下的进程。

有两个方法可以看到你的mac中所运行程序的PID,

第一个命令就是:top命令

输入top后,你就可以看见你的mac现在运行的所有程序的PID,如下图:

[![6598114302703221128](http://www.zyue.top/wp-content/uploads/2015/04/6598114302703221128.jpg)](http://www.zyue.top/wp-content/uploads/2015/04/6598114302703221128.jpg)
 

 

我们可以看到现在mac上运行所有程序的PID,比如终端程序(Terminal)的PID是227;word的PID是226。

按Q键就可以退出当前屏幕。

下面我们要讲的第二个命令严格的说是一个命令组合,因为Unix的命令有很多,功能也相当的强大,作为一个入门级的帮助文档,我尽量的讲述一些我个人认为对新人很有帮助的命令,这样可以直接使用。在这里并不做太多深入的探讨。

这个命令可以让使用者可以单独查到某个程序的PID,而不用像top命令那样调出所有程序的PID。

首先我们先看这个命令的一个具体形式:

ps x | grep  Word

这个命令得到的结果是这样的,如下图:

[![6597191812449043565-2](http://www.zyue.top/wp-content/uploads/2015/04/6597191812449043565-2.jpg)](http://www.zyue.top/wp-content/uploads/2015/04/6597191812449043565-2.jpg)
 

从这个例子就可以看出,上面的命令显示出了Microsoft  Word 这个程序的PID,不过请大家主意命令返回的结果中有2个PID一个是217,另一个是258。217后面有一个路径的显示,指出了word程序的路径,所以217是真正word的PID,而258是“ps x | grep  Word”PID,这里大家要区分开。

好了,现在让我没重新回到这条命令来,进行分析。

ps x | grep  Word

中的ps x是查询运行程序的PID,其中的x是参数,好比ls -l命令一样。ps命令的参数有很多,这里不再一一举例。

grep是一条指定命令,grep的后面跟你想要找的程序名称即可。

而“|”是一个逻辑运算符,作用就是要告诉计算机,要查询运行程序的PID,同时还要满足这个程序是word的这个先决条件。

 

7、kill

当我们学会了如何查找一个运行程序的PID,我们就可以通过终端来终结任何一个程序的运行,而不用去找到这个程序去点击退出某某程序。

当然你可能会说我可以用快捷键comnand+Q来退出程序,这样不是更为简单。但你有时可能遇到这样的问题,当退出一些程序时,特别是一些大型的程序或者BT程序时,如果你的mac配制稍微低一些,并且当时你可能正在上网或者看电影,你会发现你的风火轮在不停的转,而那个想要退出的程序却仍然没有推出。这个进入终端用kill来结束程序就是一个不错的选择。

kill命令的格式很简单,就是kill  某个程序的PID就可以。

比如我想要结束上面例子中的word程序,就可以输入:kill  217  即可。

 

8、快速截图的故事

在mac上如何截图呢,很简单,下面是mac上截图的快捷键:

截当前界面(全屏)  shift+command+3;

选取一个区域截图     shift+command+4;

这两个操作基本上可以满足日常的截图需要,但是mac所截下来的图片格式并不是我们日常熟悉的jpg或者bmp,而是不太熟悉的png格式,同时默认的保存路径也很让新人们挠头。下面的2条命令可以帮助新人们解决这个难题。

改变截图格式命令:

defaults write com.apple.screencapture type jpg(也可以改为你习惯的图片格式)

改变保存路径命令:(下面的命令是将路径改为桌面)

defaults write com.apple.screencapture location  /Users/用户名/Desktop

Mac OS X 内置Apache 和 PHP,使用起来非常方便。本文以Mac OS X 10.6.3和 10.8.1为例。主要内容包括:
1.启动Apache
2.运行PHP
3.安装MySQL
4.使用phpMyAdmin
5.配置PHP的MCrypt扩展库
6.设置虚拟主机

启动Apache
有两种方法:
1.打开“系统设置偏好(System Preferences)” -> “共享(Sharing)” -> “Web共享(Web Sharing)”。注意,从Mac OS X从10.8开始取消了 “Web共享(Web Sharing)”。
2.打开“终端(terminal)”,然后(注意,sudo需要的密码就是系统的root帐号密码)
运行“sudo apachectl start”,再输入帐号密码,这样Apache就运行了。
运行“sudo apachectl -v”,你会看到Mac OS X的Apache版本信息,如10.8.1中:
Server version: Apache/2.2.22 (Unix)
Server built:   Jun 20 2012 13:57:09
如此在浏览器中输入“http://localhost”,就可以看到一个内容为“It works!”的页面,其位于“/Library(资源库)/WebServer/Documents/”下,这就是Apache的默认根目录。
注意:开启了Apache就是开启了“Web共享”,这时联网用户就会通过“http://[本地IP]/”来访问“/Library(资源库)/WebServer/Documents/”目录,通过“http://[本地IP]/[用户名]”来访问“/Users/[用户名]/Sites/”目录。值得注意的是,Mac OS X在10.8中取消”Web共享(Web Sharing)”时,也移除了“/Users/[用户名]/Sites/”目录,所以10.8中访问“http://[本地IP]/[用户名]”会显示“403 Forbidden”,但http://[本地IP]/依旧可以访问。可以到“系统偏好设置” -> “安全(Security)” -> “防火墙(Firewall)”,开启防火墙,然后在“防火墙选项(Firewall Options)”中勾上“组织所有进入连接(block all incoming connections)”即可。也可以通过设置httpd.conf来只允许localhost和127.0.0.1访问“/Library(资源库)/WebServer/Documents/”。
<Directory “/Library/WebServer/Documents”>
……
#

Controls who can get stuff from this server.

#
Order allow,deny
#Allow from all
Allow from 127.0.0.1
Allow from localhost

</Directory>

运行PHP

在终端中运行“sudo vi /etc/apache2/httpd.conf”,打开Apache的配置文件。(如果不习惯操作终端和vi,可以设置在Finder中显示所有系统隐藏文件,记得设置完毕后需要重启Finder,然后就可以找到对应文件,随心所欲编辑了,需要注意的是某些文件的修改还是需要开启root帐号,但整体上还是在终端上使用sudo来临时获取root权限比较安全。)
找到“#LoadModule php5_module libexec/apache2/libphp5.so”,把前面的#号去掉,保存(在命令行输入:w)并退出vi(在命令行输入:q)。
运行“sudo cp /etc/php.ini.default /etc/php.ini”,这样就可以运行sudo vi /etc/php.ini来编辑php.ini配置各种功能了。比如:
;通过下面两项来调整PHP提交文件的最大值,如phpMyAdmin中导入数据的最大值
upload_max_filesize = 2M
post_max_size = 8M
;通过display_errors来控制是否显示PHP程序的报错信息,这在调试PHP程序时非常有用
display_errors = Off
运行“sudo apachectl restart”,重启Apache,这样PHP就可以用了。
运行“sudo cp /Library/WebServer/Documents/index.html.en /Library/WebServer/Documents/info.php”,即在Apache的根目录下复制index.html.en文件并重命名为info.php。

在终端中运行“sudo vi /Library/WebServer/Document/info.php”,这样就可以在vi中编辑info.php文件了。在“It’s works!”后面加上“<?php phpinfo(); ?>”,然后保存之。如此就可以在http://localhost/info.php中看到有关PHP的信息,比如10.8中内置PHP版本号是5.3.13。

安装MySQL

Mac OS X没有内置MySQL,所以需要自己手动安装,目前MySQL的最稳定版本是5.5。MySQL提供了Mac OS X下的安装说明。
下载MySQL 5.5。选择合适版本,如这里选择了mysql-5.5.27-osx10.6-x86_64.dmg。
运行dmg,会发现里面有4个文件。首先点击安装mysql-5.5.27-osx10.6-x86_64.pkg,这是MySQL主安装包。一般情况下,安装文件会自动把MySQL安装到/usr/local下的同名文件夹下。如运行“mysql-5.5.27-osx10.6-x86_64.dmg”会把MySQL安装到“/usr/local/mysql-5.5.27-osx10.6-x86_64”中,一路默认安装完毕。(注意,从10.8开始Mac OS X的权限更加严格,直接点击会提示“mysql-5.5.27-osx10.6-x86_64.pkg can’t be opened because it is from an unidentified developer. Your security preferences allow installation of only apps from the Mac App Store and identified developers.”阻止了安装,你可以使用双指单击该安装文件,在弹出菜单中选择“用…打开(open with)”,再选择“安装(Installer)”就可以接着安装了。)
安装第2个文件MySQLStartupItem.pkg,MySQL就会自动在开机时启动了。(注意,10.8的安装方法同上。)
安装第3个文件MySQL.prefPane,就会在“系统设置偏好”中看到“MySQL”的ICON,通过它就可以控制MySQL是否开启,以及开机时是否自动运行。到这里MySQL就基本安装完毕了。(注意,10.8中用双指单击该安装文件,在弹出的菜单中选择“用…打开(open with)”,然后选择“系统偏好(System Perference)”就可以接着安装了。)
通过运行“sudo vi /etc/bashrc”,在bash配置文件中加入mysqlstart、mysql和mysqladmin的别名(注意:修改完毕之后需要退出“终端(Terminal)”之后重新进入,这些命令才会生效):
#mysql
alias mysqlstart=’sudo /Library/StartupItems/MySQLCOM/MySQLCOM restart’
alias mysql=’/usr/local/mysql/bin/mysql’
alias mysqladmin=’/usr/local/mysql/bin/mysqladmin’
这样就可以在终端中比较简单地通过命令进行相应的操作。由于开始安装MySQLStartupItem.pkg到“/Library/StartupItems/MySQLCOM/”来控制MySQL的运行、自动运行、停止、关闭之类。在MySQL没有启动时,直接运行mysql或mysqladmin命令会提示“Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)”,所以我们可以通过控制面板或者直接运行mysqlstart命令来启动MySQL,之后再运行mysql或mysqladmin命令就正常了。比如安装完毕后MySQL的root默认密码为空,如果要设置密码可以在终端运行“mysqladmin -u root password “mysqlpassword””来设置,其中mysqlpassword即root的密码。更多相关内容可以参考B.5.4.1. How to Reset the Root Password。
注意:Mac OS X的升级或其他原因可能会导致MySQL启动或开机自动运行时,在MySQL操作面板上会提示“Warning:The /usr/local/mysql/data directory is not owned by the ‘mysql’ or ‘_mysql’”,这应该是某种情况下导致/usr/local/mysql/data的宿主发生了改变,只需要运行“sudo chown -R mysql /usr/local/mysql/data”即可。
另外,使用PHP连接MySQL可能会报错“Can’t connect to local MySQL server through socket ‘/var/mysql/mysql.sock’”,或使用localhost无法连接MySQL而需要127.0.0.1,原因是连接时php默认去找/var/mysql/mysql.sock了,但MAC版的MYSQL改动了文件位置,放在/tmp下了。处理办法是按如下修改php.ini:

mysql.default_socket = /tmp/mysql.sock

使用phpMyAdmin

phpMyAdmin是用PHP开发的管理MySQL的程序,非常的流行和实用。能够使用phpMyAdmin管理MySQL是检验前面几步效果的非常有效方式。
下载phpMyAdmin。选择合适的版本,比如这里选择phpMyAdmin-3.5.22-all-languages.tar.bz2这个版本。
把“下载(downloads)”中phpMyAdmin-3.5.22-all-languages.tar.bz2文件解压到“/Library/WebServer/Documents/”中,并改名为phpmyadmin。
sudo tar -xf ~/Downloads/phpMyAdmin-3.5.2.2-all-languages.tar.bz2 -C
/Library/WebServer/Documents/
sudo mv /Library/WebServer/Documents/phpMyAdmin-3.5.2.2-all-languages
/Library/WebServer/Documents/phpmyadmin

复制“/Library/WebServer/Documents/phpmyadmin/”中的config.sample.inc.php,并命名为config.inc.php
编辑config.inc.php,修改如下:
用于Cookie加密,随意的长字符串
$cfg[‘blowfish_secret’] = ‘a8b7c6d’;

当phpMyAdmin中出现“#2002 无法登录 MySQL 服务器(#2002 Cannot log in to the MySQL server)”时,
请把localhost改成127.0.0.1就ok了,
这是因为MySQL守护程序做了IP绑定(bind-address =127.0.0.1)造成的
$cfg[‘Servers’][$i][‘host’] = ‘localhost’;

把false改成true,这样就可以访问无密码的MySQL了,
即使MySQL设置了密码也可以这样设置,然后登录phpMyAdmin时输入密码
$cfg[‘Servers’][$i][‘AllowNoPassword’] = false;

这样就可以通过http://localhost/phpmyadmin访问phpMyAdmin了。此时会看到一个提示“无法加载 mcrypt 扩展,请检查您的 PHP 配置。(The mcrypt extension is missing. Please check your PHP configuration.)”,这会涉及到下一节安装MCrypt扩展了。

配置PHP的MCrypt扩展

MCrypt是一个功能强大的加密算法扩展库,它包括有22种算法,phpMyAdmin依赖这个PHP扩展库。但在Mac OS X下的安装却不那么友善,具体如下:
下载libmcrypt-2.5.8.tar.gz。
在终端执行如下命令(注意如下命令需要安装Xcode支持,可直接去Mac App Store下载,安装完毕后可能会发现在终端运行./configure –disable-posix-threads –enable-static会报错,运行make会提示命令不存在,此时还需要打开Xcode,然后在Xcode的软件“配置(Preference…)”)-> “下载(Downloads)” 中安装 “命令行工具(Command Line Tools)”:
cd ~/Downloads
tar -zxvf libmcrypt-2.5.8.tar.bz2
cd libmcrypt-2.5.8
./configure –disable-posix-threads –enable-static
make
sudo make install
下载PHP源码文件php-5.3.13.tar.bz2,记得选择中国镜像会比较快。Mac OS X 10.6.3中预装的PHP版本是5.3.1,10.8的版本是5.3.13,而现在最新的PHP版本是5.4.6,所以需要依据自己的实际情况选择对应的版本,本文以10.8的PHP版本为例。
在终端执行如下命令,把php-5.3.13.tar.bz2,并配置autoconf(在新的Mac OS X的Xcode中需要自己配置),然后才能运行phpize命令:
cd ~/Downloads
tar -zxvf php-5.3.13.tar.bz2

cd php-5.3.13/ext/mcrypt
curl -O http://ftp.gnu.org/gnu/autoconf/autoconf-latest.tar.gz
tar -zxvf autoconf-latest.tar.gz
cd autoconf-2.69
./configure
make
sudo make install

cd ..
phpize
./configure
make
sudo make install
打开php.ini
sudo vi /etc/php.ini
在php.ini中加入如下代码,并保存后退出,然后重启Apache
extension=mcrypt.so
当你再访问http://localhost/phpmyadmin时,会发现“无法加载 mcrypt 扩展,请检查您的 PHP 配置。”提示没有了,这就表示MCrypt扩展库安装成功了。如果还不能加载,尝试把php.ini中的加入的extension修改为:
extension=/usr/lib/php/extensions/no-debug-non-zts-20090626/mcrypt.so

Mac OS X下安装MCrypt扩展的确比较复杂,而且稍微不小心会有各种小问题出现,大家还可以参考How to Install mcrypt for php on Mac OSX Lion 10.8 & 10.7 Development Server和Adding MCRYPT to your OSX Lion PHP install

设置虚拟主机

在终端运行“sudo vi /etc/apache2/httpd.conf”,打开Apche的配置文件
在httpd.conf中找到“#Include /private/etc/apache2/extra/httpd-vhosts.conf”,去掉前面的“#”,保存并退出。
运行“sudo apachectl restart”,重启Apache后就开启了虚拟主机配置功能。
运行“sudo vi /etc/apache2/extra/httpd-vhosts.conf”,就打开了配置虚拟主机文件httpd-vhost.conf,配置虚拟主机了。需要注意的是该文件默认开启了两个作为例子的虚拟主机:
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot “/usr/docs/dummy-host.example.com”
ServerName dummy-host.example.com
ErrorLog “/private/var/log/apache2/dummy-host.example.com-error_log”
CustomLog “/private/var/log/apache2/dummy-host.example.com-access_log” common
</VirtualHost>

<VirtualHost *:80>
ServerAdmin webmaster@dummy-host2.example.com
DocumentRoot “/usr/docs/dummy-host2.example.com”
ServerName dummy-host2.example.com
ErrorLog “/private/var/log/apache2/dummy-host2.example.com-error_log”
CustomLog “/private/var/log/apache2/dummy-host2.example.com-access_log” common
</VirtualHost>
而实际上,这两个虚拟主机是不存在的,在没有配置任何其他虚拟主机时,可能会导致访问localhost时出现如下提示:
Forbidden
You don’t have permission to access /index.php on this server
最简单的办法就是在它们每行前面加上#,注释掉就好了,这样既能参考又不导致其他问题。
增加如下配置
<VirtualHost *:80>
DocumentRoot “/Library/WebServer/Documents”
ServerName localhost
ErrorLog “/private/var/log/apache2/localhost-error_log”
CustomLog “/private/var/log/apache2/localhost-access_log” common
</VirtualHost>

<VirtualHost *:80>
DocumentRoot “/Users/[用户名]/Sites”
ServerName sites
ErrorLog “/private/var/log/apache2/sites-error_log”
CustomLog “/private/var/log/apache2/sites-access_log” common
<Directory />
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
保存退出,并重启Apache。
运行“sudo vi /etc/hosts”,打开hosts配置文件,加入”127.0.0.1 sites”,这样就可以配置完成sites虚拟主机了,可以访问“http://sites”了,在10.8之前Mac OS X版本其内容和“http://localhost/~[用户名]”完全一致。
注意,记录log的“ErrorLog “/private/var/log/apache2/sites-error_log””也可以删掉,但记录日志其实是一个好习惯,在出现问题时可以帮助我们判断。如果保留这些log代码,一定log文件路径都是存在的,如果随便修改一个不存在的,会导致Apache无法服务而没有错误提示,这个比较恶心。
这里利用Mac OS X 10.6.3和10.8.1中原生支持的方式来实现的配置,也可以参考“Mac OS X Leopard: 配置Apache, PHP, SQLite, MySQL, and phpMyAdmin(一) ”和“Mac OS X Leopard: 配置Apache, PHP, SQLite, MySQL, and phpMyAdmin(二) ”。实际上,还可以使用XAMPP或MacPorts这种第三方提供的集成方案来实现简单的安装和使用。

mac 通过 终端 ssh 远程连接 centos 服务器
在终端下输入
ssh -l root 204.74..      就可以连接了,这是端口没变的情况,还是原来的22
ssh -p 448(你改变的端口) -l root(连接用户名) 204.74..      这个是端口改变后的连接

ssh 连接的时候 Host key verification failed. ssh

ssh 连接的时候 Host key verification failed.
解决方法:
vi ~/.ssh/known_hosts
进入此目录,删除192.168.1.90的相关rsa的信息即可.

或者删除这个文件
cd ~/.ssh/
rm known_hosts

 

我们要把现实世界中的各种信息转换成计算机能理解的东西,这些转换后 的信息就形成了数据。例 如,某人的出生日期是“1987年5月23日”,他的身高是170厘米,等等。数据不仅包括数字、字母、文字和其他特殊字符组成的文本形式的数据,而且还 包括图形、图像、动画、影像、声音等多媒体数据。但使用最多、最基本的仍然是文本数据。

1. MySQL的数据类型

在MySQL中有如下几种数据类型:

(1)数值型

数值是诸如32 或153.4 这样的值。MySQL 支持科学表示法,科学表示法由整数或浮点数后跟“e”或“E”、一个符号(“+”或“-”)和一个整数指数来表示。1.24E+12 和23.47e-1 都是合法的科学表示法表示的数。而1.24E12 不是合法的,因为指数前的符号未给出。

浮点数由整数部分、一个小数点和小数部分组成。整数部分和小数部分可以分别为空,但不能同时为空。

数值前可放一个负号“-”以表示负值。

(2)字符(串)型

字符型(也叫字符串型,简称串)是诸如“Hello, world!”或“一个馒头引起的血案”这样的值,或者是电话号码87398413这样的值。既可用单引号也可用双引号将串值括起来。

初学者往往分不清数值87398143和字符串87398143的区 别。都是数字啊,怎么一 个要用数值型,一个要用字符型呢?关键就在于:数值型的87398143是要参与计算的,比如它是金融中的一个货款总额;而字符型的87398143是不 参与计算的,只是表示电话号码,这样的还有街道号码、门牌号码等等,它们都不参与计算。

(3)日期和时间型

日期和时间是一些诸如“2006-07-12”或“12:30:43”这样的值。MySQL还支持日期/时间的组合,如“2006-07-12 12:30:43”。

(4)NULL值

NULL表示未知值。比如填写表格中通讯地址不清楚留空不填写,这就是NULL值。

我们用Create Table语句创建一个表(参看前面的章节),这个表中包含列的定义。例如我们在前面创建了一个joke表,这个表中有content和writer两个列:

定义一个列的语法如下:

其中列名由col_name 给出。列名可最多包含64个字符,字符包括字母、数字、下划线及美元符号。列名可以名字中合法的任何符号(包括数字)开头。但列名不能完全由数字组成,因 为那样可能使其与数据分不开。MySQL保留诸如SELECT、DELETE和CREATE这样的词,这些词不能用做列名,但是函数名(如POS 和MIN)是可以使用的。

列类型col_type表示列可存储的特定值。列类型说明符还能表示 存放在列中的值的最大长 度。对于某些类型,可用一个数值明确地说明其长度。而另外一些值,其长度由类型名蕴含。例如,CHAR(10) 明确指定了10个字符的长度,而TINYBLOB值隐含最大长度为255个字符。有的类型说明符允许指定最大的显示宽度(即显示值时使用多少个字符)。浮 点类型允许指定小数位数,所以能控制浮点数的精度值为多少。

可以在列类型之后指定可选的类型说明属性,以及指定更多的常见属性。属性起修饰类型的作用,并更改其处理列值的方式,属性有以下类型:

(1)专用属性用于指定列。例如,UNSIGNED 属性只针对整型,而BINARY属性只用于CHAR 和VARCHAR。

(2)通用属性除少数列之外可用于任意列。可以指定NULL 或NOT NULL 以表示某个列是否能够存放NULL。还可以用DEFAULT,def_value 来表示在创建一个新行但未明确给出该列的值时,该列可赋予值def_value。def_value 必须为一个常量;它不能是表达式,也不能引用其他列。不能对BLOB 或TEXT 列指定缺省值。

如果想给出多个列的专用属性,可按任意顺序指定它们,只要它们跟在列类型之后、通用属性之前即可。类似地,如果需要给出多个通用属性,也可按任意顺序给出它们,只要将它们放在列类型和可能给出的列专用属性之后即可。

2. MySQL的列(字段)类型

数据库中的每个表都是由一个或多个列(字段)构成的。在用CREATE TABLE语句创建一个表时,要为每列(字段)指定一个类型。列(字段)的类型比数据类型更为细化,它精确地描述了给定表列(字段)可能包含的值的种类,如是否带小数、是否文字很多。

MySQL有整数和浮点数值的列类型,如表1所示。整数列类型可以有符号也可无符号。有一种特殊的属性允许整数列值自动生成,这对需要唯一序列或标识号的应用系统来说是非常有用的。

类型

说明

TINYINT 非常小的整数
SMALLINT 较小整数
MEDIUMINT 中等大小整数
INT 标准整数
BIGINT 较大整数
FLOAT 单精度浮点数
DOUBLE 双精度浮点数
DECIMAL 一个串的浮点数
表1:数值列类型
每种数值类型的名称和取值范围如表2所示。

类型说明

取值范围

TINYINT[(M)] 有符号值:-128 到127(- 27 到27 - 1) 无符号值:0到255(0 到28 - 1)
SMALLINT[(M)] 有符号值:-32768 到32767(- 215 到215 - 1) 无符号值:0到65535(0 到21 6 - 1)
MEDIUMINT[(M)] 有符号值:-8388608 到8388607(- 22 3 到22 3 - 1 ) 无符号值:0到16777215(0 到22 4 - 1)
INT[(M)] 有符号值:-2147683648 到2147683647(- 231 到231- 1) 无符号值:0到4294967295(0 到232 - 1)
BIGINT[(M)] 有符号值:-9223372036854775808 到9223373036854775807(- 263到263-1) 无符号值:0到18446744073709551615(0到264 – 1)
FLOAT[(M, D)] 最小非零值:±1.175494351E - 38
DOUBLE[(M,D)] 最小非零值:±2.2250738585072014E - 308
DECIMAL (M, D) 可变;其值的范围依赖于M 和D
表2:数值列类型的取值范围

类型说明

存储需求

TINYINT[(M)] 1字节
SMALLINT[(M)] 2字节
MEDIUMINT[(M)] 3字节
INT[(M)] 4字节
BIGINT[(M)] 8字节
FLOAT[(M, D)] 4字节
DOUBLE[(M, D)] 8字节
DECIMAL (M, D) M字节(MySQL < 3.23),M+2字节(MySQL > 3.23 )
表3:数值列类型的存储需求
MySQL提供了五种整型: TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT。INT为INTEGER的缩写。这些类型在可表示的取值范围上是不同的。 整数列可定义为UNSIGNED从而禁用负值;这使列的取值范围为0以上。各种类型的存储量需求也是不同的。取值范围较大的类型所需的存储量较大。

MySQL 提供三种浮点类型: FLOAT、DOUBLE和DECIMAL。与整型不同,浮点类型不能是UNSIGNED的,其取值范围也与整型不同,这种不同不仅在于这些类型有最大 值,而且还有最小非零值。最小值提供了相应类型精度的一种度量,这对于记录科学数据来说是非常重要的(当然,也有负的最大和最小值)。

在选择了某种数值类型时,应该考虑所要表示的值的范围,只需选择能覆 盖要取值的范围的最小类 型即可。选择较大类型会对空间造成浪费,使表不必要地增大,处理起来没有选择较小类型那样有效。对于整型值,如果数据取值范围较小,如人员年龄或兄弟姐妹 数,则TINYINT最合适。MEDIUMINT能够表示数百万的值并且可用于更多类型的值,但存储代价较大。BIGINT在全部整型中取值范围最大,而 且需要的存储空间是表示范围次大的整型INT类型的两倍,因此只在确实需要时才用。对于浮点值,DOUBLE占用FLOAT的两倍空间。除非特别需要高精 度或范围极大的值,一般应使用只用一半存储代价的FLOAT型来表示数据。

在定义整型列时,可以指定可选的显示尺寸M。如果这样,M应该是一个 1 到255的整数。它表示用来显示列中值的字符数。例如,MEDIUMINT(4)指定了一个具有4个字符显示宽度的MEDIUMINT列。如果定义了一个 没有明确宽度的整数列,将会自动分配给它一个缺省的宽度。缺省值为每种类型的“最长”值的长度。如果某个特定值的可打印表示需要不止M个字符,则显示完全 的值;不会将值截断以适合M个字符。

对每种浮点类型,可指定一个最大的显示尺寸M 和小数位数D。M 的值应该取1 到255。D的值可为0 到3 0,但是不应大于M - 2(如果熟悉ODBC 术语,就会知道M 和D 对应于ODBC 概念的“精度”和“小数点位数”)。M和D对FLOAT和DOUBLE 都是可选的,但对于DECIMAL是必须的。在选项M 和D时,如果省略了它们,则使用缺省值。

2.2字符串列类型

MySQL提供了几种存放字符数据的串类型,其类型如下:

类型名

说明

CHAR 定长字符串
VARCHAR 可变长字符串
TINYBLOB 非常小的BLOB(二进制大对象)
BLOB 小BLOB
MEDIUMBLOB 中等的BLOB
LONGBLOB 大BLOB
TINYTEXT 非常小的文本串
TEXT 小文本串
MEDIUMTEXT 中等文本串
LONGTEXT 大文本串
ENUM 枚举;列可赋予某个枚举成员
SET 集合;列可赋予多个集合成员
表4:字符串列类型

下表给出了MySQL 定义串值列的类型,以及每种类型的最大尺寸和存储需求。对于可变长的列类型,各行的值所占的存储量是不同的,这撒于实际存放在列中的值的长度。这个长度在表中用L 表示。

类型说明

最大尺寸

存储需求

CHAR( M) M 字节 M 字节
VARCHAR(M) M 字节 L + 1字节
TINYBLOB, TINYTEXT 28- 1字节 L + 1字节
BLOB, TEXT 216 - 1 字节 L + 2字节
MEDIUMBLOB, MEDIUMTEXT 224- 1字节 L + 3字节
LONGBLOB, LONGTEXT 232- 1字节 L + 4字节
ENUM(“value1”, “value2”, ...) 65535 个成员 1 或2字节
SET (“value1”, “value2”, ...) 64个成员 1、2、3、4 或8字节
表5:串列类型最大尺寸及存储需求

L 以外所需的额外字节为存放该值的长度所需的字节数。MySQL 通过存储值的内容及其长度来处理可变长度的值。这些额外的字节是无符号整数。请注意,可变长类型的最大长度、此类型所需的额外字节数以及占用相同字节数的 无符号整数之间的对应关系。例如,MEDIUMBLOB 值可能最多224 - 1字节长并需要3 个字节记录其结果。3 个字节的整数类型MEDIUMINT 的最大无符号值为224 - 1。这并非偶然。

2.3日期时间列类型

MySQL 提供了几种时间值的列类型,它们分别是: DATE、DATETIME、TIME、TIMESTAMP和YEAR。下表给出了MySQL 为定义存储日期和时间值所提供的这些类型,并给出了每种类型的合法取值范围。

类型名

说明

DATE “YYYY-MM-DD”格式表示的日期值
TIME “hh:mm:ss”格式表示的时间值
DATETIME “YYYY-MM-DD hh:mm:ss”格式
TIMESTAMP “YYYYMMDDhhmmss”格式表示的时间戳值
YEAR “YYYY”格式的年份值
表6:日期时间列类型

类型名

取值范围

存储需求

DATE “1000-01-01”到“9999-12-31” 3字节
TIME “-838:59:59”到“838:59:59” 3字节
DATETIME “1000-01-01 00:00:00” 到“9999-12-31 23:59:59” 8字节
TIMESTAMP 19700101000000 到2037 年的某个时刻 4字节
YEAR 1901 到2155 1字节
表7: 日前时间列类型的取值范围和存储需求
下面举个例子:

这个例子创建一个student表,这个表中有name字段,字符类型列,不允许NULL(空值)。有Chinese、Maths和English三个整数类型列。还有个Birthday日期类型列。

CREATE TABLE student
(
Name varchar(20) NOT NULL,
Chinese TINYINT(3),
Maths TINYINT(3),
English TINYINT(3),
Birthday DATE
)
 

导出数据库用mysqldump命令(注意mysql的安装路径,即此命令的路径)

导出数据和表结构

1
mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql
1
/usr/local/mysql/bin/ mysqldump -uroot -p abc > abc.sql

敲回车后会提示输入密码

只导出表结构

1
mysqldump -u用户名 -p密码 -d 数据库名 > 数据库名.sql
1
/usr/local/mysql/bin/ mysqldump -uroot -p -d abc > abc.sql

注:/usr/local/mysql/bin/ —> mysql的data目录

在执行mysql命令的过程中,有时候会碰到如下的错误:

1
2
shell> mysqldump -uroot -p123456 -d jact > jact.sql
mysqldump: Got error: 2002: Can't connect to local MySQL server through socket '/usr/local/mysql/var/mysql.sock' (2) when trying to connect

说明我们使用的连接mysql的unix套接字错误。

要找出套接字的地点,应:

1
2
shell> netstat -ln | grep mysql
unix  2      [ ACC ]     STREAM     LISTENING     7414  /var/lib/mysql/mysql.sock

然后敲入如下命令:

1
shell> mysqldump --socket=/var/lib/mysql/mysql.sock -uroot -p123456 -d jact > jact.sql

乱码问题:

1
mysqldump -uroot -p --default-character-set=utf8 dbname tablename > bak.sql
1
mysql -uroot -p --default-character-set=utf8 dbname < bak.sql

导入数据库

首先建空数据库

1
mysql>create database abc;

导入数据库

方法一

(1)选择数据库

1
mysql>use abc;

(2)设置数据库编码

1
mysql>set names utf8;

(3)导入数据(注意sql文件的路径)

1
mysql>source /home/abc/abc.sql;

方法二

1
mysql -u用户名 -p密码 数据库名 < 数据库名.sql
1
mysql -uabc_f -p abc < abc.sql

建议使用第二种方法导入。

注意:有命令行模式,有sql命令

INSERT INTO SELECT语句

     语句形式为:Insert into Table2(field1,field2,…) select value1,value2,… from Table1

     要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量。示例如下:

–1.创建测试表

create TABLE Table1
(
    a varchar(10),
    b varchar(10),
    c varchar(10)
 );

create TABLE Table2
(
    a varchar(10),
    c varchar(10),
    d int
);

–2.创建测试数据

Insert into Table1 values('赵','asds','90');
Insert into Table1 values('钱','asds','100');
Insert into Table1 values('孙','asds','80');
Insert into Table1 values('李','asds',null);
select * from Table2

–3.INSERT INTO SELECT语句复制表数据

Insert into Table2(a, c, d) select a,c,5 from Table1

–4.显示更新后的结果

select * from Table2

–5.删除测试表

drop TABLE Table1
drop TABLE Table2