Got error 134 from storage engine

今天将原网站数据导入新系统的时候,发现用户表是空的,程序前几天很正常的,并没有做任何修改,于是将程序的高度模式打开,发现得到错误提示:”Got error 134 from storage engine”,进到mysql里执行select * from tbl_member limit 100,我没有发现错误的,不过将语句若修改为select * from tbl_member limit 100,10时,又出现了这个错误提示信息,怀疑是mysql表损坏,由于备份的时候,mysql处于运行使用状态,并没有停止服务的,所以才产生了这个错误的
于是用 repair table tablename命令修复了次用户表,再次执行上述命令,ok,显示执行成功

FreeBSD7.1-RELEAES提前发布了

官网还没有正式发布新闻,不过在其主FTP站点上已经可以下载光盘映像了,ftp://ftp.freebsd.org/pub/FreeBSD/ISO-IMAGES-amd64/7.1/算是新年的礼物啊。

详细改进及声明: http://www.freebsd.org/releases/7.1R/relnotes.html官方下载同样是3CD或1DVD.当然对于做服务器来说第一张盘就足够了。
这里还有附图啊!喜不喜欢这样的红色小魔鬼呢?

FreeBSD 7.0 安装Nginx

来源:http://bbs.chinaunix.net/viewthread.php?tid=1039563&extra=&page=1

#/usr/ports/www/nginx
#make config
lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk
x                     Options for nginx 0.5.34                       x
x lqqqqq^(-)qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x
x x [X] HTTP_ADDITION_MODULE  Enable http_addition module          x x
x x [X] HTTP_DAV_MODULE       Enable http_webdav module            x x
x x [X] HTTP_FLV_MODULE       Enable http_flv module               x x
x x [X] HTTP_PERL_MODULE      Enable http_perl module              x x
x x [X] HTTP_REALIP_MODULE    Enable http_realip module            x x
x x [X] HTTP_REWRITE_MODULE   Enable http_rewrite module           x x
x x [X] HTTP_SSL_MODULE       Enable http_ssl module               x x
x x [X] HTTP_STATUS_MODULE    Enable http_stub_status module       x x
x x [X] HTTP_SUB_MODULE       Enable http_sub module               x x
x x [ ] MAIL_MODULE           Enable IMAP4/POP3/SMTP proxy module  x x
x x [ ] MAIL_IMAP_MODULE      Enable IMAP4 proxy module            x x
x x [ ] MAIL_POP3_MODULE      Enable POP3 proxy module             x x
x x [ ] MAIL_SMTP_MODULE      Enable SMTP proxy module             x x
x x [ ] MAIL_SSL_MODULE       Enable mail_ssl module               x x
x x [X] WWW                   Enable html sample files             x x
tqmqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqjqu
x                       [  OK  ]       Cancel                        x
mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj

#make install clean

freebsd中查看文件夹/目录大小的方法/命令

du、df,freebsd/linux du,df(磁盘空间信息)命令详解

df和du命令详解df命令详细用法

a:显示全部的档案系统和各分割区的磁盘使用情形

i:显示i -nodes的使用量

k:大小用k来表示 (默认值)

t:显示某一个档案系统的所有分割区磁盘使用量

x:显示不是某一个档案系统的所有分割区磁盘使用量

T:显示每个分割区所属的档案系统名称

常用命令:df -hi

du:查询档案或目录的磁盘使用空间

a:显示全部目录和其次目录下的每个档案所占的磁盘空间

b:大小用bytes来表示 (默认值为k bytes)

c:最后再加上总计 (默认值)

s:只显示各档案大小的总合

x:只计算同属同一个档案系统的档案

L:计算所有的档案大小

常用命令:du -a

[教程]FreeBSD下nginx+fast-cgi+mysql+zend的实现(php-fpm和spawn-fcgi)

另一篇文章是用php-fpm方式安装的,用的人也比较的多,推荐使用,这里介绍的是用fastcgi方式安装的.

首先在安装所有软件之前新系统ports,然后 再进行下面的工作

1)安装mysql
#cd /usr/ports/databases/mysql51-server

#make WITH_CHARSET=gbk WITH_XCHARSET=all  WITH_PROC_SCOPE_PTH=yes SKIP_DNS_CHECK=yes BUILD_OPTIMIZED=yes install clean //(utf8我选择了这个,情况自己定)

#cp /usr/local/share/mysql/my-medium.cnf /etc/my.cnf
#rehash

!!!—–WITH_CHARSET=utf8(我选择了这个,情况自己定,可以使用gbk)
# mysql_install_db ##初始化mysql,如果在命令行后面添加上 –user=mysql 的话,会失败,不清楚什么原因

#chown -R mysql:mysql /var/db/mysql ##目录权限修改
#/usr/local/bin/mysqld_safe & ##启动mysql
#/usr/local/bin/mysqladmin -u root password ‘newpass’ ##修改root密码,newpass是你需要改的密码

最后:在/etc/rc.conf 添加一行命令:
mysql_enable = “YES”
或者直接在命令行中输入命令:
echo ‘ mysql_enable = “YES” ‘ >> /etc/rc.conf
使mysql成为一项服务,随机启动,省去手动启动mysql服务了.

注意如果安装的是mysql5.5的话,可能会在初始化表的时候提示"ATAL ERROR: Could not find ./bin/my_print_defaults",解决办法是

/usr/local/bin/mysql_install_db –user=mysql –basedir=/usr/local/ –datadir=/var/db/mysql &

2)安装php
# cd /usr/ports/lang/php5
# make config

[X] CLI        Build CLI version
[X] CGI        Build CGI version
[ ] APACHE     Build Apache module   //不安装这个
[ ] DEBUG      Enable debug
[X]] SUHOSIN Enable Suhosin protection system
[X] MULTIBYTE Enable zend multibyte support
[ ] IPV6       Enable ipv6 support
[ ] REDIRECT   Enable force-cgi-redirect support (CGI only)
[ ] DISCARD    Enable discard-path support (CGI only)
[X] FASTCGI    Enable fastcgi support (CGI only)
[X] FPM        Enable fastcgi process manager (CGI only)
[X] PATHINFO   Enable path-info-check support (CGI only)
# make install clean
#cp /usr/local/etc/php.ini-dist /usr/local/etc/php.ini
注意:上面“[X]FPM …” 这一项在以php-fpm方式运行nginx运行php脚本的时候才选择的。

如果没有php.ini-dist,也可以直接复制php.ini-production,对于php5.3.6用的是这个文件.

3)安装php5-extensions
# cd /usr/ports/lang/php5-extensions/
# make config

Options for php5-extensions 1.0
————————————————-
[X] FTP        FTP support
[X] GD
[X] GETTEXT
[X] MBSTRING
[X] MYSQL
[ ] POSIX //去掉.
[ ] SQLITE //去掉.
[X] ZLIB

# make install clean

#rehash
4)安装Zend Optimizer(PHP5.3好像不支持的)

对于php5.3,可以用安装eaccelerator.参考:http://blog.haohtml.com/archives/9718

#cd /usr/ports/devel/ZendOptimizer/

 

方法一:
#make install clean
然后在php.ini文件最后加上下面的代码:
[Zend]
zend_optimizer.optimization_level=15
zend_extension_manager.optimizer=”/usr/local/lib/php/20060613/Optimizer”
zend_extension_manager.optimizer_ts=”/usr/local/lib/php/20060613/Optimizer_TS”
zend_extension=”/usr/local/lib/php/20060613/ZendExtensionManager.so”
zend_extension_ts=”/usr/local/lib/php/20060613/ZendExtensionManager_TS.so”
方法二:

#make #不要安装,只需要下载解包
#cd /usr/ports/devel/ZendOptimizer/work/ZendOptimizer-*
#./install-tty
##会出现一个文字的安装界面,只是最后一步,不要选择apache就可以了
#vi /usr/local/etc/php.ini #插入zend的路径,一般来说,上面的安装会自动加入下面的文字。

[Zend]
zend_extension_manager.optimizer=/usr/local/Zend/lib/Optimizer-3.3.0
zend_extension_manager.optimizer_ts=/usr/local/Zend/lib/Optimizer_TS-3.3.0
zend_optimizer.version=3.3.0a
zend_extension=/usr/local/Zend/lib/ZendExtensionManager.so
zend_extension_ts=/usr/local/Zend/lib/ZendExtensionManager_TS.so

5)安装nginx

#cd /usr/ports/www/nginx/
#make install clean
#rehash

6)安装lighttpd(只针对spawn-fcgi方式,fpm直接跳过)
#cd /usr/ports/www/lighttpd/
#make install clean
#rehash

nginx+mysql开机后自动运行
#cat>>/etc/rc.conf
mysql_enable=”YES”
nginx_enable=”YES”

#
7)配置nginx
编辑nginx配置文件/usr/local/etc/nginx/nginx.conf
#user   nobody
删除前面的注释#,改成 user   www

location / {
root    /usr/local/www/nginx;
index    index.html index.htm;
}
在index.html前面添加一个index.php
location / {
root    /usr/local/www/nginx;
index    index.php index.html index.htm;
}

#location ~ \.php$ {
#    fastcgi_pass    127.0.0.1:9000;
#           fastcgi_index   index.php;
#           fastcgi_param     SCRIPT_FILENAME     /scripts$fastcgi_script.name;
#    include      fastcgi_params;
#}
将前面的#去掉,修改为
location ~ \.php$ {
fastcgi_pass    127.0.0.1:9000;
fastcgi_index   index.php;
fastcgi_param     SCRIPT_FILENAME     /usr/local/www/nginx$fastcgi_script.name;
include      fastcgi_params;
}

#为了使SCRIPT_FILENAME 有效,更改php.ini里面的cgi.fix_pathinfo=1;

这个地方非常重要,如果红色部分/usr/local/www/nginx不配置的话,如果执行php文件,就会出现No input file specified 错误提示。这个在网上查了半天才找到解决办法。切记切记!!

注意,到此只是安装了nginx,但还不支持php脚本,下面的两种办法可以实现此功能。

8.配置fastcgi,支持PHP

这里有两种选择,一种是spawn-fcgi,另一个种php-fpm.对于spawn-fcgi,目前FreeBSD新版本系统中已经有了spawn-fcgi包,不再依赖lighttpd软件.

如果您的系统里提示没有这个命令,很可能是lightttpd的版本高于ighttpd-1.4.15这个,最新版本已经将spawn-fcgi单独作为一个项目使用.目前FreeBSD已经有了自己的spawn-fcgi了,安装方式如下:

#cd /usr/ports/www/spawn-fcgi
#make install clean

8.1)配置spawn-fcgi支持PHP(方式一)

/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www -f /usr/local/bin/php-cgi
参数说明:
-f 指定调用FastCGI的进程的执行程序位置,根据系统上所装的PHP的情况具体设置
-a 绑定到地址addr
-p 绑定到端口port
-s 绑定到unix socket的路径path
-C 指定产生的FastCGI的进程数,默认为5(仅用于PHP)
-P 指定产生的进程的PID文件路径
-u和-g FastCGI使用什么身份(-u 用户 -g 用户组)运行,Ubuntu下可以使用www-data,其他的根据情况配置,如nobody、apache等

/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www -f /usr/local/bin/php-cgi
或直接让它设置成开机服务启动:
#vi/etc/rc.local
/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www -g www -C 25(进程数) -f /usr/local/bin/php-cgi

或者修改/etc/rc.conf配置文件.添加这行
spawn_fcgi_enable=”YES”

这样spawn-fcgi就能开机自启动了.

8.2、使用php-fpm支持php(方式二)

在安装php的时候只要选中php-fpm这个模块即可。
安装完以后执行以下操作也可以,,安装完以后需要在/etc/rc.conf中加入php_fpm_enable=”YES”

#echo ‘php_fpm_enable=”YES”‘ >> /etc/rc.conf
#/usr/local/etc/rc.d/php-fpm start

见:http://blog.haohtml.com/index.php/archives/5530

9)启动Nginx服务

#nginx

完成了,测试了phpinfo() ,前面由于No input file specified 错误弄了很久啊

现在搞定了,上个图吧

还有一个啊

第一次安装 ,也是在网上找了很多教程,也参考了他们的成果,多谢了:)

如果有多台虚拟主机的话,可以参考这里的配置,点击查看

如果要配置nginx启用SSI支持的话,打开nginx 的配置文件nginx.conf,在里面的http里添加下面几行配置

ssi on;
ssi_silent_errors on;
ssi_types text/shtml;

如果需要安装Memcached的话,请参考这篇文章:http://blog.haohtml.com/index.php/archives/435,只要执行一下

#/usr/local/etc/rc.d/php-fpm reload

命令即可,不用重启nginx的。

安全:

解决Nginx文件类型错误解析漏洞的方法

Nginx禁止通过IP,未绑定域名访问服务器

PHP安全配置

PHP安全配置详解

技巧:

用include指令实现nginx多虚拟主机配置

nginx上如何支持.htaccess伪静态转向

优化:

nginx下对域名进行301重定向-优化篇(haohtml.com => www.haohtml.com)

MySQL EXPLAIN句法

Explain虽然是大家常用的分析mysql优化的办法,但对于系统级别内容的消耗资源信息就无能为力了.这时需要用到Mysql中的Profiling(程序剖析) 功能.参考:http://blog.haohtml.com/archives/4624

EXPLAIN tbl_name or EXPLAIN SELECT select_options

EXPLAIN tbl_name是DESC[RIBE] tbl_name或SHOW COLUMNS FROM tbl_name的一个同义词。

当你在一条SELECT语句前放上关键词EXPLAIN,MySQL解释它将如何处理SELECT,提供有关表如何联结和以什么次序联结的信息。

借助于EXPLAIN,你可以知道
1)你什么时候必须为表加入索引以得到一个使用索引找到记录的更快的SELECT。
2)你也能知道优化器是否以一个最佳次序联结表。为了强制优化器对一个SELECT语句使用一个特定联结次序,增加一个STRAIGHT_JOIN子句。

对于非简单的联结,EXPLAIN为用于SELECT语句中的每个表返回一行信息。表以他们将被读入的顺序被列出。
MySQL用一边扫描多次联结的方式解决所有联结,这意味着MySQL 1)从第一个表中读一行,2)然后找到在第二个表中的一个匹配行,3)然后在第3个表中等等。=>当所有的表被处理完,它输出选择的列并且回溯表列表直到找到一个表有更多的匹配行,从该表读入下一行并继续处理下一个表。

从EXPLAIN的输出包括下面列:

table输出的行所引用的表。

type
联结类型。各种类型的信息在下面给出。

possible_keys
possible_keys列指出MySQL能使用哪个索引在该表中找到行。
注意,该列完全独立于表的次序。这意味着在possible_keys中的某些键实际上不能以生成的表次序使用。
如果该列是空的,没有相关的索引。在这种情况下,你也许能通过检验WHERE子句看是否它引用某些列或列不是适合索引来提高你的查询性能。如果是这样,创造一个适当的索引并且在用EXPLAIN检查查询。见7.8 ALTER TABLE句法。为了看清一张表有什么索引,使用SHOW INDEX FROM tbl_name。 (可以查出,哪些索引基本上未用,或用的少)

key
key列显示MySQL实际决定使用的键。如果没有索引被选择,键是NULL。

key_len
key_len列显示MySQL决定使用的键长度。如果键是NULL,长度是NULL。注意这告诉我们MySQL将实际使用一个多部键值的几个部分。

ref
ref列显示哪个列或常数与key一起用于从表中选择行。

rows
rows列显示MySQL相信它必须检验以执行查询的行数。

Extra
如果是Only index,这意味着信息只用索引树中的信息检索出的。通常,这比扫描整个表要快。
如果是where used,它意味着一个WHERE子句将被用来限制哪些行与下一个表匹配或发向客户。
如果是impossible where 表示用不着where

Type的取值常会有下面这些:

system
表仅有一行(=系统表)。这是const联结类型的一个特例。

const
表有最多一个匹配行,它将在查询开始时被读取。因为仅有一行,在这行的列值可被剩下的优化器认为是常数。 const表很快,因为它们只读取一次!

eq_ref
对于每个来自于先前的表的行组合,从该表中读取一行。这可能是最好的联结类型,除了const类型。它用在一个索引的所有部分被联结使用并且索引是UNIQUE或PRIMARY KEY。

ref
对于每个来自于先前的表的行组合,所有有匹配索引值的行将从这张表中读取。
如果联结只使用键的最左面前缀,不或如果键不是UNIQUE或PRIMARY KEY(换句话说,如果联结能基于键值选择单个行的话),使用ref。如果被使用的键仅仅匹配一些行,该联结类型是不错的。

range
只有在一个给定范围的行将被检索,使用一个索引选择行。ref列显示哪个索引被使用。

index
这与ALL相同,除了只有索引树被扫描。这通常比ALL快,因为索引文件通常比数据文件小。

ALL
对于每个来自于先前的表的行组合,将要做一个完整的表扫描。
如果表格是第一个没标记const的表,这通常不好,并且通常在所有的其他情况下很差。你通常可以通过增加更多的索引来避免ALL,使得行能从早先的表中基于常数值或列值被检索出。

通过相乘EXPLAIN输出的rows行的所有值,你能得到一个关于一个联结要多好的提示。这应该粗略地告诉你MySQL必须检验多少行以执行查询。当你使用max_join_size变量限制查询时,也用这个数字。见10.2.3 调节服务器参数。

下列例子显示出一个JOIN如何能使用EXPLAIN提供的信息逐步被优化。

假定你有显示在下面的SELECT语句,你使用EXPLAIN检验:

EXPLAIN SELECT tt.TicketNumber, tt.TimeIn,
tt.ProjectReference, tt.EstimatedShipDate,
tt.ActualShipDate, tt.ClientID,
tt.ServiceCodes, tt.RepetitiveID,
tt.CurrentProcess, tt.CurrentDPPerson,
tt.RecordVolume, tt.DPPrinted, et.COUNTRY,
et_1.COUNTRY, do.CUSTNAME
FROM tt, et, et AS et_1, do
WHERE tt.SubmitTime IS NULL
AND tt.ActualPC = et.EMPLOYID
AND tt.AssignedPC = et_1.EMPLOYID
AND tt.ClientID = do.CUSTNMBR;

对于这个例子,假定:

被比较的列被声明如下: 表 列 列类型
tt ActualPC CHAR(10)
tt AssignedPC CHAR(10)
tt ClientID CHAR(10)
et EMPLOYID CHAR(15)
do CUSTNMBR CHAR(15)

表有显示在下面的索引: 表 索引
tt ActualPC
tt AssignedPC
tt ClientID
et EMPLOYID(主键)
do CUSTNMBR(主键)

tt.ActualPC值不是均匀分布的。
开始,在任何优化被施行前,EXPLAIN语句产生下列信息:

table type possible_keys key key_len ref rows Extra
et ALL PRIMARY NULL NULL NULL 74
do ALL PRIMARY NULL NULL NULL 2135
et_1 ALL PRIMARY NULL NULL NULL 74
tt ALL AssignedPC,ClientID,ActualPC NULL NULL NULL 3872
range checked for each record (key map: 35)

因为type对每张表是ALL,这个输出显示MySQL正在对所有表进行一个完整联结!这将花相当长的时间,因为必须检验每张表的行数的乘积次数!对于一个实例,这是74 * 2135 * 74 * 3872 = 45,268,558,720行。如果表更大,你只能想象它将花多长时间……

如果列声明不同,这里的一个问题是MySQL(还)不能高效地在列上使用索引。在本文中,VARCHAR和CHAR是相同的,除非他们声明为不同的长度。因为tt.ActualPC被声明为CHAR(10)并且et.EMPLOYID被声明为CHAR(15),有一个长度失配。

为了修正在列长度上的不同,使用ALTER TABLE将ActualPC的长度从10个字符变为15个字符:

mysql> ALTER TABLE tt MODIFY ActualPC VARCHAR(15);

现在tt.ActualPC和et.EMPLOYID都是VARCHAR(15),再执行EXPLAIN语句产生这个结果:

table type possible_keys key key_len ref rows Extra
tt ALL AssignedPC,ClientID,ActualPC NULL NULL NULL 3872 where used
do ALL PRIMARY NULL NULL NULL 2135
range checked for each record (key map: 1)
et_1 ALL PRIMARY NULL NULL NULL 74
range checked for each record (key map: 1)
et eq_ref PRIMARY PRIMARY 15 tt.ActualPC 1

这不是完美的,但是是好一些了(rows值的乘积少了一个74一个因子),这个版本在几秒内执行。

第2种改变能消除tt.AssignedPC = et_1.EMPLOYID和tt.ClientID = do.CUSTNMBR比较的列的长度失配:

mysql> ALTER TABLE tt MODIFY AssignedPC VARCHAR(15),
MODIFY ClientID VARCHAR(15);

现在EXPLAIN产生的输出显示在下面:

table type possible_keys key key_len ref rows Extra
et ALL PRIMARY NULL NULL NULL 74
tt ref AssignedPC,ClientID,ActualPC ActualPC 15 et.EMPLOYID 52 where used
et_1 eq_ref PRIMARY PRIMARY 15 tt.AssignedPC 1
do eq_ref PRIMARY PRIMARY 15 tt.ClientID 1

这“几乎”象它能得到的一样好。

剩下的问题是,缺省地,MySQL假设在tt.ActualPC列的值是均匀分布的,并且对tt表不是这样。幸好,很容易告诉MySQL关于这些:

shell> myisamchk –analyze PATH_TO_MYSQL_DATABASE/tt
shell> mysqladmin refresh

现在联结是“完美”的了,而且EXPLAIN产生这个结果:

table type possible_keys key key_len ref rows Extra
tt ALL AssignedPC,ClientID,ActualPC NULL NULL NULL 3872 where used
et eq_ref PRIMARY PRIMARY 15 tt.ActualPC 1
et_1 eq_ref PRIMARY PRIMARY 15 tt.AssignedPC 1
do eq_ref PRIMARY PRIMARY 15 tt.ClientID 1

注意在从EXPLAIN输出的rows列是一个来自MySQL联结优化器的“教育猜测”;为了优化查询,你应该检查数字是否接近事实。如果不是,你可以通过在你的SELECT语句里面使用STRAIGHT_JOIN并且试着在在FROM子句以不同的次序列出表,可能得到更好的性能。

使用js检测图片合法性

用js检测图片合法性

<script type=”text/javascript”>
function validate() {
var OK = new Array (‘jpg’, ‘gif’, ‘jpeg’, ‘png’, ‘jpe’, ‘bmp’, ‘tif’);
var filename = document.getElementById(“ELEMENT_ID”).value;
var ext = getExt(filename);
var fileOK = 0;

for (i = 0; i < OK.length; i++) {
if (OK[i] == ext) {
fileOK = 1; // one of the file extensions found
}
}

if (fileOK == 0) {
alert (“The file is not an image file”);
return false;
}
}

function getExt(filename) {
var dot_pos = filename.lastIndexOf(“.”);
if(dot_pos == -1)
return “”;
return filename.substr(dot_pos+1).toLowerCase();
}
</script>
<form action=”ACTION” onsubmit=”return validate()” enctype=”multipart/form-data” method=”post”>
<table class=”forms”>
<tr>
<th><label>Image</label></th>
<td><input id=”ELEMENT_ID” name=”poster[image]” size=”30″ type=”file” />
<input id=”event_poster_image_temp” name=”poster[image_temp]”
type=”hidden” value=”” />
</td>
</tr>
<tr>

<th class=”last”></th>
<td class=”last”>
<input class=”button” name=”commit” type=”submit” value=”Upload image” />
</td>
</tr>
</table>
</form>

freebsd+mysql+nginx+php组合安装

安装mysql
#cd/usr/ports/databases/mysql51-server
#make WITH_CHARSET=gbk WITH_XCHARSET=all WITH_PROC_SCOPE_PTH=yes BUILD_OPTIMIZED=yes BUILD_STATIC=yes SKIP_DNS_CHECK=yes WITHOUT_INNODB=yes install clean
#cp /usr/local/share/mysql/my-small.cnf /etc/my.cnf
#rehash

初始化表
#/usr/local/bin/mysql_install_db –user=mysql#一定要运行此步,否将下面设定权限将会出现错误,因为这句命令会将生在/usr/local/mysql下面将生var及以下目录,是下面的前提条件.

安装php
# cd /usr/ports/lang/php5
# make config
[X] CLI Build CLI version
[X] CGI Build CGI version
[ ] APACHE Build Apache module //不要安装这个
[ ] DEBUG Enable debug
[X]] SUHOSIN Enable Suhosin protection system
[X] MULTIBYTE Enable zend multibyte support
[ ] IPV6 Enable ipv6 support
[ ] REDIRECT Enable force-cgi-redirect support (CGI only)
[ ] DISCARD Enable discard-path support (CGI only)
[X] FASTCGI Enable fastcgi support (CGI only)
[X] PATHINFO Enable path-info-check support (CGI only)
# make install clean
#cp /usr/local/etc/php.ini-dist /usr/local/etc/php.ini

安装php5-extensions
# cd /usr/ports/lang/php5-extensions/
# make config
Options for php5-extensions 1.0
————————————————-
[X] FTP FTP support
[X] GD
[X] GETTEXT
[X] MBSTRING
[X] MYSQL
[ ] POSIX //去掉.
[ ] SQLITE //去掉.
[X] ZLIB
# make install clean

安装Zend Optimizer
# cd /usr/ports/devel/ZendOptimizer/
#make install clean
//直接就可以安装.不用去fetch好几M的包..知道diskfiles好处了吧.
//你会看到以下提示:
//You have installed the ZendOptimizer package.
//Edit /usr/local/etc/php.ini and add:
//[Zend]
//zend_optimizer.optimization_level=15
//zend_extension_manager.optimizer=”/usr/local/lib/php/20060613/Optimizer”
//zend_extension_manager.optimizer_ts=”/usr/local/lib/php/20060613/Optimizer_TS”
//zend_extension=”/usr/local/lib/php/20060613/ZendExtensionManager.so”
//zend_extension_ts=”/usr/local/lib/php/20060613/ZendExtensionManager_TS.so”
//********************************************************************************
//ok根据提示我们继续.
# ee /usr/local/etc/php.ini
//如果你打开是空白.那一定是忘了
# cp /usr/local/etc/php.ini-dist /usr/local/etc/php.ini//
//然后再
# ee /usr/local/etc/php.ini
//在最下边加上.
[Zend]
zend_optimizer.optimization_level=15
zend_extension_manager.optimizer=”/usr/local/lib/php/20060613/Optimizer”
zend_extension_manager.optimizer_ts=”/usr/local/lib/php/20060613/Optimizer_TS”
zend_extension=”/usr/local/lib/php/20060613/ZendExtensionManager.so”
zend_extension_ts=”/usr/local/lib/php/20060613/ZendExtensionManager_TS.so”

安装nginx
#cd /usr/ports/www/nginx/
#make install clean

安装lighttpd
#cd /usr/ports/www/lighttpd/
#make install clean

nginx+mysql开机后自动运行
#ee /etc/rc.conf
mysql_enable=”YES”
nginx_enable=”YES”

配置nginx
#user nobody
删除前面的注释#,改成 user www

location / {
root /usr/local/www/nginx;
index index.html index.htm;
}
在index.html前面添加一个index.php
location / {
root /usr/local/www/nginx;
index index.phpindex.html index.htm;
}

#location ~ \.php$ {
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script.name;
# include fastcgi_params;
#}
将前面的#去掉,修改为
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/www/nginx$fastcgi_script.name;
include fastcgi_params;
}

配置spawn-fcgi
#ee /etc/rc.local
/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www -g www -C 4 -f /usr/local/bin/php-cgi
这样spawn-fcgi就能开机自启动了

phpMyAdmin
下载phpMyAdmin
lynx ftp.freebsdchina.org/pub/FreeBSD/ports/i386
在database里边找到phpMyAdmin,D 下载,然后save到硬盘
#tar -zvf phpMyAdmin*
然后把解压出来的phpMyAdmin文件mv到/usr/local/www/nginx/

#mv phpMyAdmin /usr/local/www/nginx/phpMyAdmin
#cd /usr/local/www/nginx/phpMyAdmin
#cp config.sample.inc.php config.inc.php
#ee config.inc.php
//找到
$cfg[‘blowfish_secret’] = ”; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
//改成
//如果这儿不添的话.他会提示你”配置文件现在需要绝密的短语密码(blowfish_secret)。”
$cfg[‘blowfish_secret’] = ‘iambillgates‘; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

//继续找
$cfg[‘Servers’][$i][‘controluser’] = ‘pmausr’;
$cfg[‘Servers’][$i][‘controlpass’] = ‘pmapass’;
//找到这句改成
$cfg[‘Servers’][$i][‘controluser’] = ‘root‘;
$cfg[‘Servers’][$i][‘controlpass’] = ”;

//打开http://ip/phpMyAdmin
//您直接输入root回车就可以.
//点权限
//root localhost 否 ALL PRIVILEGES 是 编辑权限
//更改密码 执行
//刷新phpMyAdmin页面
//使用新密码登录

重启机器
#reboot

这些很粗略,不是很详细,因为安装的时候并没有记录,很多都是靠记忆写的,如果有差错……那就是我的错,这段时间考试,有时间再重新修改。

FreeBSD+Nginx+Mysql+PHP安装记

折腾了一个晚上,基本上都是用packages安装,php用ports安装,由于PHP只用了FastCGI模式,所以phpmyadmin提示缺少模块而无法安装,最后下载的源码安装。整个过程中,竟然发现最耗费时间的PHP的那些模块!
其实安装完成后再回过头来看,步骤熟练后,加上编译时间,半个小时足够! 

先做个规划,操作步骤分三块,分别用三个帖子来写,分别是:软件的安装,软件的设置,启动调试及遇到错误说明。

主要思路:用php-fpm来管理FastCGI。在网上的大多数资料都是用lighttp来安装管理,但是据说php-fpm比那个要强,所以就赶了一回时髦,用了一下php-fpm。

先列一下安装的东西,其实由安装的软件列表,就可以看出用做的过程,今天晚了,明天写步骤:
QUOTE:
autoconf-2.62       Automatically configure source code on many Un*x platforms
autoconf-wrapper-20071109 Wrapper script for GNU autoconf
e2fsprogs-libuuid-1.41.3_1 UUID library from e2fsprogs package
freetype2-2.3.7     A free and portable TrueType font rendering engine
gettext-0.17_1      GNU gettext package
gmake-3.81_3        GNU version of ‘make’ utility
jpeg-6b_7           IJG’s jpeg compression utilities
kbproto-1.0.3       KB extension headers
libICE-1.0.4_1,1    Inter Client Exchange library for X11
libSM-1.1.0,1       Session Management library for X11
libX11-1.1.99.2,1   X11 library
libXau-1.0.4        Authentication Protocol library for X11
libXaw-1.0.5_1,1    X Athena Widgets library
libXdmcp-1.0.2_1    X Display Manager Control Protocol library
libXext-1.0.4,1     X11 Extension library
libXmu-1.0.4,1      X Miscellaneous Utilities libraries
libXp-1.0.0,1       X print library
libXpm-3.5.7        X Pixmap library
libXt-1.0.5_1       X Toolkit library
libiconv-1.11_1     A character set conversion library
libltdl-1.5.26      System independent dlopen wrapper
libmcrypt-2.5.8     Multi-cipher cryptographic library (used in PHP)
libpthread-stubs-0.1 This library provides weak aliases for pthread functions
libxcb-1.1.93       The X protocol C-language Binding (XCB) library
libxml2-2.7.2_1     XML parser library for GNOME
m4-1.4.11,1         GNU m4
mysql-client-5.0.75 Multithreaded SQL database (client)
mysql-server-5.0.75 Multithreaded SQL database (server)
nginx-0.6.35        Robust and small WWW server
pcre-7.8            Perl Compatible Regular Expressions library
perl-5.8.9          Practical Extraction and Report Language
php5-5.2.8          PHP Scripting Language
php5-bz2-5.2.8      The bz2 shared extension for php
php5-ctype-5.2.8    The ctype shared extension for php
php5-dom-5.2.8      The dom shared extension for php
php5-exif-5.2.8     The exif shared extension for php
php5-fpm-5.2.8      PHP Scripting Language with FastCGI Process Manager
php5-gd-5.2.8       The gd shared extension for php
php5-mbstring-5.2.8 The mbstring shared extension for php
php5-mcrypt-5.2.8   The mcrypt shared extension for php
php5-mysql-5.2.8    The mysql shared extension for php
php5-openssl-5.2.8  The openssl shared extension for php
php5-session-5.2.8  The session shared extension for php
php5-simplexml-5.2.8 The simplexml shared extension for php

php5-spl-5.2.8      The spl shared extension for php
php5-xml-5.2.8      The xml shared extension for php
php5-xmlreader-5.2.8 The xmlreader shared extension for php
php5-zlib-5.2.8     The zlib shared extension for php
phpMyAdmin-3.1.2    A set of PHP-scripts to manage MySQL over the web
pkg-config-0.23_1   A utility to retrieve information about installed libraries
png-1.2.34          Library for manipulating PNG images
printproto-1.0.4    Print extension headers
python25-2.5.2_3    An interpreted object-oriented programming language
t1lib-5.1.2_1,1     A Type 1 Rasterizer Library for UNIX/X11
xcb-proto-1.3       The X protocol C-language Binding (XCB) protocol
xextproto-7.0.4     XExt extension headers
xproto-7.0.14       X11 protocol headers
后来找到phpMyAdmin的安装,老提示少一个pdflib,后来加上-f参数强行跳过去了。

来源:http://bbs2.chinaunix.net/thread-1370635-1-1.html 本

原文地址:http://www.haohtml.com/server/unix/FreeBSD-nginx-mysql-php.html?1237214756